Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1640)

Unified Diff: Source/devtools/front_end/sources/ScriptFormatterEditorAction.js

Issue 399643002: DevTools: Support multiple target in ScriptFormatterAction (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/sources/ScriptFormatterEditorAction.js
diff --git a/Source/devtools/front_end/sources/ScriptFormatterEditorAction.js b/Source/devtools/front_end/sources/ScriptFormatterEditorAction.js
index b15acca4e63dfad1e9ef9ed97c0e39229c5f61d2..8b9a8ad194d49c8fe857a446a632c426682e3f36 100644
--- a/Source/devtools/front_end/sources/ScriptFormatterEditorAction.js
+++ b/Source/devtools/front_end/sources/ScriptFormatterEditorAction.js
@@ -5,19 +5,13 @@
/**
* @constructor
* @implements {WebInspector.SourceMapping}
- * @param {!WebInspector.Workspace} workspace
- * @param {!WebInspector.DebuggerModel} debuggerModel
+ * @param {!WebInspector.Target} target
+ * @param {!WebInspector.ScriptFormatterEditorAction} editorAction
*/
-WebInspector.FormatterScriptMapping = function(workspace, debuggerModel)
+WebInspector.FormatterScriptMapping = function(target, editorAction)
{
- this._workspace = workspace;
- this._debuggerModel = debuggerModel;
-
- this._init();
-
- this._projectId = "formatter:";
- this._projectDelegate = new WebInspector.FormatterProjectDelegate(workspace, this._projectId);
- this._debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
+ this._target = target;
+ this._editorAction = editorAction;
}
WebInspector.FormatterScriptMapping.prototype = {
@@ -29,11 +23,11 @@ WebInspector.FormatterScriptMapping.prototype = {
{
var debuggerModelLocation = /** @type {!WebInspector.DebuggerModel.Location} */ (rawLocation);
var script = debuggerModelLocation.script();
- var uiSourceCode = this._uiSourceCodes.get(script);
+ var uiSourceCode = this._editorAction._uiSourceCodes.get(script);
if (!uiSourceCode)
return null;
- var formatData = this._formatData.get(uiSourceCode);
+ var formatData = this._editorAction._formatData.get(uiSourceCode);
if (!formatData)
return null;
var mapping = formatData.mapping;
@@ -51,11 +45,15 @@ WebInspector.FormatterScriptMapping.prototype = {
*/
uiLocationToRawLocation: function(uiSourceCode, lineNumber, columnNumber)
{
- var formatData = this._formatData.get(uiSourceCode);
+ var formatData = this._editorAction._formatData.get(uiSourceCode);
if (!formatData)
return null;
- var originalLocation = formatData.mapping.formattedToOriginal(lineNumber, columnNumber)
- return this._debuggerModel.createRawLocation(formatData.scripts[0], originalLocation[0], originalLocation[1]);
+ var originalLocation = formatData.mapping.formattedToOriginal(lineNumber, columnNumber);
+ for (var i = 0; i < formatData.scripts.length; ++i) {
+ if (formatData.scripts[i].target() === this._target)
+ return this._target.debuggerModel.createRawLocation(formatData.scripts[i], originalLocation[0], originalLocation[1])
+ }
+ return null;
},
/**
@@ -74,131 +72,8 @@ WebInspector.FormatterScriptMapping.prototype = {
uiLineHasMapping: function(uiSourceCode, lineNumber)
{
return true;
- },
-
- /**
- * @param {!WebInspector.UISourceCode} uiSourceCode
- * @return {!Array.<!WebInspector.Script>}
- */
- _scriptsForUISourceCode: function(uiSourceCode)
- {
- /**
- * @param {!WebInspector.Script} script
- * @return {boolean}
- */
- function isInlineScript(script)
- {
- return script.isInlineScript();
- }
-
- if (uiSourceCode.contentType() === WebInspector.resourceTypes.Document)
- return this._debuggerModel.scriptsForSourceURL(uiSourceCode.url).filter(isInlineScript);
- if (uiSourceCode.contentType() === WebInspector.resourceTypes.Script) {
- var rawLocation = /** @type {!WebInspector.DebuggerModel.Location} */ (uiSourceCode.uiLocationToRawLocation(this._debuggerModel.target(), 0, 0));
- return rawLocation ? [rawLocation.script()] : [];
- }
- return [];
- },
-
- _init: function()
- {
- /** @type {!Map.<!WebInspector.Script, !WebInspector.UISourceCode>} */
- this._uiSourceCodes = new Map();
- /** @type {!StringMap.<string>} */
- this._formattedPaths = new StringMap();
- /** @type {!Map.<!WebInspector.UISourceCode, !WebInspector.FormatterScriptMapping.FormatData>} */
- this._formatData = new Map();
- },
-
- _debuggerReset: function()
- {
- var formattedPaths = this._formattedPaths.values();
- for (var i = 0; i < formattedPaths.length; ++i)
- this._projectDelegate._removeFormatted(formattedPaths[i]);
- this._init();
- },
-
- /**
- * @param {!WebInspector.UISourceCode} uiSourceCode
- * @param {function(?WebInspector.UISourceCode, !WebInspector.FormatterSourceMapping=)} callback
- */
- _performUISourceCodeScriptFormatting: function(uiSourceCode, callback)
- {
- var path = this._formattedPaths.get(uiSourceCode.project().id() + ":" + uiSourceCode.path());
- if (path) {
- var uiSourceCodePath = path;
- var formattedUISourceCode = this._workspace.uiSourceCode(this._projectId, uiSourceCodePath);
- var formatData = formattedUISourceCode ? this._formatData.get(formattedUISourceCode) : null;
- if (!formatData)
- callback(null);
- else
- callback(formattedUISourceCode, formatData.mapping);
- return;
- }
-
- uiSourceCode.requestContent(contentLoaded.bind(this));
-
- /**
- * @this {WebInspector.FormatterScriptMapping}
- * @param {?string} content
- */
- function contentLoaded(content)
- {
- var formatter = WebInspector.Formatter.createFormatter(uiSourceCode.contentType());
- formatter.formatContent(uiSourceCode.highlighterType(), content || "", innerCallback.bind(this));
- }
-
- /**
- * @this {WebInspector.FormatterScriptMapping}
- * @param {string} formattedContent
- * @param {!WebInspector.FormatterSourceMapping} formatterMapping
- */
- function innerCallback(formattedContent, formatterMapping)
- {
- var scripts = this._scriptsForUISourceCode(uiSourceCode);
- if (!scripts.length) {
- callback(null);
- return;
- }
- var name;
- if (uiSourceCode.contentType() === WebInspector.resourceTypes.Document)
- name = uiSourceCode.displayName();
- else
- name = uiSourceCode.name() || scripts[0].scriptId;
- path = this._projectDelegate._addFormatted(name, uiSourceCode.url, uiSourceCode.contentType(), formattedContent);
- var formattedUISourceCode = /** @type {!WebInspector.UISourceCode} */ (this._workspace.uiSourceCode(this._projectId, path));
-
- var formatData = new WebInspector.FormatterScriptMapping.FormatData(uiSourceCode.project().id(), uiSourceCode.path(), formatterMapping, scripts);
- this._formatData.put(formattedUISourceCode, formatData);
- this._formattedPaths.put(uiSourceCode.project().id() + ":" + uiSourceCode.path(), path);
- for (var i = 0; i < scripts.length; ++i) {
- this._uiSourceCodes.put(scripts[i], formattedUISourceCode);
- scripts[i].pushSourceMapping(this);
- }
- formattedUISourceCode.setSourceMappingForTarget(this._debuggerModel.target(), this);
- callback(formattedUISourceCode, formatterMapping);
- }
- },
-
- /**
- * @param {!WebInspector.UISourceCode} formattedUISourceCode
- * @return {?WebInspector.FormatterSourceMapping}
- */
- _discardFormattedUISourceCodeScript: function(formattedUISourceCode)
- {
- var formatData = this._formatData.get(formattedUISourceCode);
- if (!formatData)
- return null;
-
- this._formatData.remove(formattedUISourceCode);
- this._formattedPaths.remove(formatData.projectId + ":" + formatData.path);
- for (var i = 0; i < formatData.scripts.length; ++i) {
- this._uiSourceCodes.remove(formatData.scripts[i]);
- formatData.scripts[i].popSourceMapping();
- }
- this._projectDelegate._removeFormatted(formattedUISourceCode.path());
- return formatData.mapping;
}
+
}
/**
@@ -213,7 +88,7 @@ WebInspector.FormatterScriptMapping.FormatData = function(projectId, path, mappi
this.projectId = projectId;
this.path = path;
this.mapping = mapping;
- this.scripts = scripts;
+ this.scripts= scripts;
}
/**
@@ -263,14 +138,47 @@ WebInspector.FormatterProjectDelegate.prototype = {
/**
* @constructor
* @implements {WebInspector.SourcesView.EditorAction}
+ * @implements {WebInspector.TargetManager.Observer}
*/
WebInspector.ScriptFormatterEditorAction = function()
{
- this._scriptMapping = new WebInspector.FormatterScriptMapping(WebInspector.workspace, WebInspector.debuggerModel);
+ this._projectId = "formatter:";
+ this._projectDelegate = new WebInspector.FormatterProjectDelegate(WebInspector.workspace, this._projectId);
+
+ /** @type {!Map.<!WebInspector.Script, !WebInspector.UISourceCode>} */
+ this._uiSourceCodes = new Map();
+ /** @type {!StringMap.<string>} */
+ this._formattedPaths = new StringMap();
+ /** @type {!Map.<!WebInspector.UISourceCode, !WebInspector.FormatterScriptMapping.FormatData>} */
+ this._formatData = new Map();
+
+ /** @type {!Map.<!WebInspector.Target, !WebInspector.FormatterScriptMapping>} */
+ this._scriptMappingByTarget = new Map();
+ this._workspace = WebInspector.workspace;
+ WebInspector.targetManager.observeTargets(this);
}
WebInspector.ScriptFormatterEditorAction.prototype = {
/**
+ * @param {!WebInspector.Target} target
+ */
+ targetAdded: function(target)
+ {
+ this._scriptMappingByTarget.put(target, new WebInspector.FormatterScriptMapping(target, this));
+ target.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
+ },
+
+ /**
+ * @param {!WebInspector.Target} target
+ */
+ targetRemoved: function(target)
+ {
+ this._scriptMappingByTarget.remove(target);
+ this._cleanForTarget(target);
+ target.debuggerModel.removeEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
+ },
+
+ /**
* @param {!WebInspector.Event} event
*/
_editorSelected: function(event)
@@ -352,38 +260,166 @@ WebInspector.ScriptFormatterEditorAction.prototype = {
/**
* @param {!WebInspector.UISourceCode} uiSourceCode
+ * @param {!WebInspector.UISourceCode} formattedUISourceCode
+ * @param {!WebInspector.FormatterSourceMapping} mapping
+ * @private
*/
- _formatUISourceCodeScript: function(uiSourceCode)
+ _showIfNeeded: function(uiSourceCode, formattedUISourceCode, mapping)
+ {
+ if (uiSourceCode !== this._sourcesView.currentUISourceCode())
+ return;
+ var sourceFrame = this._sourcesView.viewForFile(uiSourceCode);
+ var start = [0, 0];
+ if (sourceFrame) {
+ var selection = sourceFrame.selection();
+ start = mapping.originalToFormatted(selection.startLine, selection.startColumn);
+ }
+ this._sourcesView.showSourceLocation(formattedUISourceCode, start[0], start[1]);
+ this._updateButton(formattedUISourceCode);
+ },
+
+ /**
+ * @param {!WebInspector.UISourceCode} formattedUISourceCode
+ */
+ _discardFormattedUISourceCodeScript: function(formattedUISourceCode)
+ {
+ var formatData = this._formatData.get(formattedUISourceCode);
+ if (!formatData)
+ return;
+
+ this._formatData.remove(formattedUISourceCode);
+ this._formattedPaths.remove(formatData.projectId + ":" + formatData.path);
+ for (var i = 0; i < formatData.scripts.length; ++i) {
+ this._uiSourceCodes.remove(formatData.scripts[i]);
+ formatData.scripts[i].popSourceMapping();
+ }
+ this._projectDelegate._removeFormatted(formattedUISourceCode.path());
+ },
+
+ /**
+ * @param {!WebInspector.Target} target
+ */
+ _cleanForTarget: function(target)
{
- this._scriptMapping._performUISourceCodeScriptFormatting(uiSourceCode, innerCallback.bind(this));
+ var uiSourceCodes = this._formatData.keys();
+ for (var i = 0; i < uiSourceCodes.length; ++i) {
+ uiSourceCodes[i].setSourceMappingForTarget(target, null);
+ var formatData = this._formatData.get(uiSourceCodes[i]);
+ var scripts = [];
+ for (var j = 0; j < formatData.scripts.length; ++j) {
+ if (formatData.scripts[j].target() === target)
+ this._uiSourceCodes.remove(formatData.scripts[j]);
+ else
+ scripts.push(formatData.scripts[j]);
+ }
+
+ if (scripts.length)
+ formatData.scripts = scripts;
+ else {
+ this._formattedPaths.remove(formatData.projectId + ":" + formatData.path);
+ this._formatData.remove(uiSourceCodes[i]);
+ this._projectDelegate._removeFormatted(uiSourceCodes[i].path());
+ }
+ }
+ },
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _debuggerReset: function(event)
+ {
+ var debuggerModel = /** @type {!WebInspector.DebuggerModel} */ (event.target);
+ this._cleanForTarget(debuggerModel.target());
+ },
+
+ /**
+ * @param {!WebInspector.UISourceCode} uiSourceCode
+ * @return {!Array.<!WebInspector.Script>}
+ */
+ _scriptsForUISourceCode: function(uiSourceCode)
+ {
/**
- * @this {WebInspector.ScriptFormatterEditorAction}
- * @param {?WebInspector.UISourceCode} formattedUISourceCode
- * @param {!WebInspector.FormatterSourceMapping=} mapping
+ * @param {!WebInspector.Script} script
+ * @return {boolean}
*/
- function innerCallback(formattedUISourceCode, mapping)
+ function isInlineScript(script)
{
- if (!formattedUISourceCode)
- return;
- if (uiSourceCode !== this._sourcesView.currentUISourceCode())
- return;
- var sourceFrame = this._sourcesView.viewForFile(uiSourceCode);
- var start = [0, 0];
- if (sourceFrame) {
- var selection = sourceFrame.selection();
- start = mapping.originalToFormatted(selection.startLine, selection.startColumn);
- }
- this._sourcesView.showSourceLocation(formattedUISourceCode, start[0], start[1]);
- this._updateButton(formattedUISourceCode);
+ return script.isInlineScript();
+ }
+
+ if (uiSourceCode.contentType() === WebInspector.resourceTypes.Document) {
+ var debuggerModels = WebInspector.targetManager.targets().select("debuggerModel");
vsevik 2014/07/18 08:48:46 Please, no
sergeyv 2014/07/18 11:46:01 Done.
+ var scriptLists = debuggerModels.map(function(debuggerModel) { return debuggerModel.scriptsForSourceURL(uiSourceCode.url)});
+ var scripts = Array.prototype.concat.apply([], scriptLists);
+ return scripts.filter(isInlineScript);
}
+ if (uiSourceCode.contentType() === WebInspector.resourceTypes.Script) {
+ var rawLocations = (uiSourceCode.uiLocationToRawLocations(0, 0));
+ return rawLocations.map(function(rawLocation) { return rawLocation.script()});
+ }
+ return [];
},
/**
* @param {!WebInspector.UISourceCode} uiSourceCode
*/
- _discardFormattedUISourceCodeScript: function(uiSourceCode)
+ _formatUISourceCodeScript: function(uiSourceCode)
{
- this._scriptMapping._discardFormattedUISourceCodeScript(uiSourceCode);
+ var path = this._formattedPaths.get(uiSourceCode.project().id() + ":" + uiSourceCode.path());
+ if (path) {
+ var uiSourceCodePath = path;
+ var formattedUISourceCode = this._workspace.uiSourceCode(this._projectId, uiSourceCodePath);
+ var formatData = formattedUISourceCode ? this._formatData.get(formattedUISourceCode) : null;
+ if (formatData)
+ this._showIfNeeded(uiSourceCode, /** @type {!WebInspector.UISourceCode} */ (formattedUISourceCode), formatData.mapping);
+ return;
+ }
+
+ uiSourceCode.requestContent(contentLoaded.bind(this));
+
+ /**
+ * @this {WebInspector.ScriptFormatterEditorAction}
+ * @param {?string} content
+ */
+ function contentLoaded(content)
+ {
+ var formatter = WebInspector.Formatter.createFormatter(uiSourceCode.contentType());
+ formatter.formatContent(uiSourceCode.highlighterType(), content || "", innerCallback.bind(this));
+ }
+
+ /**
+ * @this {WebInspector.ScriptFormatterEditorAction}
+ * @param {string} formattedContent
+ * @param {!WebInspector.FormatterSourceMapping} formatterMapping
+ */
+ function innerCallback(formattedContent, formatterMapping)
+ {
+ var scripts = this._scriptsForUISourceCode(uiSourceCode);
+ if (!scripts.length)
+ return;
+
+ var name;
+ if (uiSourceCode.contentType() === WebInspector.resourceTypes.Document)
+ name = uiSourceCode.displayName();
+ else
+ name = uiSourceCode.name() || scripts[0].scriptId;
+ path = this._projectDelegate._addFormatted(name, uiSourceCode.url, uiSourceCode.contentType(), formattedContent);
+ var formattedUISourceCode = /** @type {!WebInspector.UISourceCode} */ (this._workspace.uiSourceCode(this._projectId, path));
+ var formatData = new WebInspector.FormatterScriptMapping.FormatData(uiSourceCode.project().id(), uiSourceCode.path(), formatterMapping, scripts);
+ this._formatData.put(formattedUISourceCode, formatData);
+ this._formattedPaths.put(uiSourceCode.project().id() + ":" + uiSourceCode.path(), path);
+ for (var i = 0; i < scripts.length; ++i) {
+ this._uiSourceCodes.put(scripts[i], formattedUISourceCode);
+ var scriptMapping = /** @type {!WebInspector.FormatterScriptMapping} */(this._scriptMappingByTarget.get(scripts[i].target()));
+ scripts[i].pushSourceMapping(scriptMapping);
+ }
+
+ var targets = WebInspector.targetManager.targets();
+ for (var i = 0; i < targets.length; ++i) {
+ var scriptMapping = /** @type {!WebInspector.FormatterScriptMapping} */(this._scriptMappingByTarget.get(targets[i]));
+ formattedUISourceCode.setSourceMappingForTarget(targets[i], scriptMapping);
+ }
+ this._showIfNeeded(uiSourceCode, formattedUISourceCode, formatterMapping);
+ }
}
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698