Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * @constructor | 6 * @constructor |
| 7 * @implements {WebInspector.SourceMapping} | 7 * @implements {WebInspector.SourceMapping} |
| 8 * @param {!WebInspector.Workspace} workspace | 8 * @param {!WebInspector.Target} target |
| 9 * @param {!WebInspector.DebuggerModel} debuggerModel | 9 * @param {!WebInspector.ScriptFormatterEditorAction} editorAction |
| 10 */ | 10 */ |
| 11 WebInspector.FormatterScriptMapping = function(workspace, debuggerModel) | 11 WebInspector.FormatterScriptMapping = function(target, editorAction) |
| 12 { | 12 { |
| 13 this._workspace = workspace; | 13 this._target = target; |
| 14 this._debuggerModel = debuggerModel; | 14 this._editorAction = editorAction; |
| 15 | |
| 16 this._init(); | |
| 17 | |
| 18 this._projectId = "formatter:"; | |
| 19 this._projectDelegate = new WebInspector.FormatterProjectDelegate(workspace, this._projectId); | |
| 20 this._debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.Globa lObjectCleared, this._debuggerReset, this); | |
| 21 } | 15 } |
| 22 | 16 |
| 23 WebInspector.FormatterScriptMapping.prototype = { | 17 WebInspector.FormatterScriptMapping.prototype = { |
| 24 /** | 18 /** |
| 25 * @param {!WebInspector.RawLocation} rawLocation | 19 * @param {!WebInspector.RawLocation} rawLocation |
| 26 * @return {?WebInspector.UILocation} | 20 * @return {?WebInspector.UILocation} |
| 27 */ | 21 */ |
| 28 rawLocationToUILocation: function(rawLocation) | 22 rawLocationToUILocation: function(rawLocation) |
| 29 { | 23 { |
| 30 var debuggerModelLocation = /** @type {!WebInspector.DebuggerModel.Locat ion} */ (rawLocation); | 24 var debuggerModelLocation = /** @type {!WebInspector.DebuggerModel.Locat ion} */ (rawLocation); |
| 31 var script = debuggerModelLocation.script(); | 25 var script = debuggerModelLocation.script(); |
| 32 var uiSourceCode = this._uiSourceCodes.get(script); | 26 var uiSourceCode = this._editorAction._uiSourceCodes.get(script); |
| 33 if (!uiSourceCode) | 27 if (!uiSourceCode) |
| 34 return null; | 28 return null; |
| 35 | 29 |
| 36 var formatData = this._formatData.get(uiSourceCode); | 30 var formatData = this._editorAction._formatData.get(uiSourceCode); |
| 37 if (!formatData) | 31 if (!formatData) |
| 38 return null; | 32 return null; |
| 39 var mapping = formatData.mapping; | 33 var mapping = formatData.mapping; |
| 40 var lineNumber = debuggerModelLocation.lineNumber; | 34 var lineNumber = debuggerModelLocation.lineNumber; |
| 41 var columnNumber = debuggerModelLocation.columnNumber || 0; | 35 var columnNumber = debuggerModelLocation.columnNumber || 0; |
| 42 var formattedLocation = mapping.originalToFormatted(lineNumber, columnNu mber); | 36 var formattedLocation = mapping.originalToFormatted(lineNumber, columnNu mber); |
| 43 return uiSourceCode.uiLocation(formattedLocation[0], formattedLocation[1 ]); | 37 return uiSourceCode.uiLocation(formattedLocation[0], formattedLocation[1 ]); |
| 44 }, | 38 }, |
| 45 | 39 |
| 46 /** | 40 /** |
| 47 * @param {!WebInspector.UISourceCode} uiSourceCode | 41 * @param {!WebInspector.UISourceCode} uiSourceCode |
| 48 * @param {number} lineNumber | 42 * @param {number} lineNumber |
| 49 * @param {number} columnNumber | 43 * @param {number} columnNumber |
| 50 * @return {?WebInspector.DebuggerModel.Location} | 44 * @return {?WebInspector.DebuggerModel.Location} |
| 51 */ | 45 */ |
| 52 uiLocationToRawLocation: function(uiSourceCode, lineNumber, columnNumber) | 46 uiLocationToRawLocation: function(uiSourceCode, lineNumber, columnNumber) |
| 53 { | 47 { |
| 54 var formatData = this._formatData.get(uiSourceCode); | 48 var formatData = this._editorAction._formatData.get(uiSourceCode); |
| 55 if (!formatData) | 49 if (!formatData) |
| 56 return null; | 50 return null; |
| 57 var originalLocation = formatData.mapping.formattedToOriginal(lineNumber , columnNumber) | 51 var originalLocation = formatData.mapping.formattedToOriginal(lineNumber , columnNumber); |
| 58 return this._debuggerModel.createRawLocation(formatData.scripts[0], orig inalLocation[0], originalLocation[1]); | 52 for (var i = 0; i < formatData.scripts.length; ++i) { |
| 53 if (formatData.scripts[i].target() === this._target) | |
| 54 return this._target.debuggerModel.createRawLocation(formatData.s cripts[i], originalLocation[0], originalLocation[1]) | |
| 55 } | |
| 56 return null; | |
| 59 }, | 57 }, |
| 60 | 58 |
| 61 /** | 59 /** |
| 62 * @return {boolean} | 60 * @return {boolean} |
| 63 */ | 61 */ |
| 64 isIdentity: function() | 62 isIdentity: function() |
| 65 { | 63 { |
| 66 return false; | 64 return false; |
| 67 }, | 65 }, |
| 68 | 66 |
| 69 /** | 67 /** |
| 70 * @param {!WebInspector.UISourceCode} uiSourceCode | 68 * @param {!WebInspector.UISourceCode} uiSourceCode |
| 71 * @param {number} lineNumber | 69 * @param {number} lineNumber |
| 72 * @return {boolean} | 70 * @return {boolean} |
| 73 */ | 71 */ |
| 74 uiLineHasMapping: function(uiSourceCode, lineNumber) | 72 uiLineHasMapping: function(uiSourceCode, lineNumber) |
| 75 { | 73 { |
| 76 return true; | 74 return true; |
| 77 }, | 75 } |
| 78 | 76 |
| 79 /** | |
| 80 * @param {!WebInspector.UISourceCode} uiSourceCode | |
| 81 * @return {!Array.<!WebInspector.Script>} | |
| 82 */ | |
| 83 _scriptsForUISourceCode: function(uiSourceCode) | |
| 84 { | |
| 85 /** | |
| 86 * @param {!WebInspector.Script} script | |
| 87 * @return {boolean} | |
| 88 */ | |
| 89 function isInlineScript(script) | |
| 90 { | |
| 91 return script.isInlineScript(); | |
| 92 } | |
| 93 | |
| 94 if (uiSourceCode.contentType() === WebInspector.resourceTypes.Document) | |
| 95 return this._debuggerModel.scriptsForSourceURL(uiSourceCode.url).fil ter(isInlineScript); | |
| 96 if (uiSourceCode.contentType() === WebInspector.resourceTypes.Script) { | |
| 97 var rawLocation = /** @type {!WebInspector.DebuggerModel.Location} */ (uiSourceCode.uiLocationToRawLocation(this._debuggerModel.target(), 0, 0)); | |
| 98 return rawLocation ? [rawLocation.script()] : []; | |
| 99 } | |
| 100 return []; | |
| 101 }, | |
| 102 | |
| 103 _init: function() | |
| 104 { | |
| 105 /** @type {!Map.<!WebInspector.Script, !WebInspector.UISourceCode>} */ | |
| 106 this._uiSourceCodes = new Map(); | |
| 107 /** @type {!StringMap.<string>} */ | |
| 108 this._formattedPaths = new StringMap(); | |
| 109 /** @type {!Map.<!WebInspector.UISourceCode, !WebInspector.FormatterScri ptMapping.FormatData>} */ | |
| 110 this._formatData = new Map(); | |
| 111 }, | |
| 112 | |
| 113 _debuggerReset: function() | |
| 114 { | |
| 115 var formattedPaths = this._formattedPaths.values(); | |
| 116 for (var i = 0; i < formattedPaths.length; ++i) | |
| 117 this._projectDelegate._removeFormatted(formattedPaths[i]); | |
| 118 this._init(); | |
| 119 }, | |
| 120 | |
| 121 /** | |
| 122 * @param {!WebInspector.UISourceCode} uiSourceCode | |
| 123 * @param {function(?WebInspector.UISourceCode, !WebInspector.FormatterSourc eMapping=)} callback | |
| 124 */ | |
| 125 _performUISourceCodeScriptFormatting: function(uiSourceCode, callback) | |
| 126 { | |
| 127 var path = this._formattedPaths.get(uiSourceCode.project().id() + ":" + uiSourceCode.path()); | |
| 128 if (path) { | |
| 129 var uiSourceCodePath = path; | |
| 130 var formattedUISourceCode = this._workspace.uiSourceCode(this._proje ctId, uiSourceCodePath); | |
| 131 var formatData = formattedUISourceCode ? this._formatData.get(format tedUISourceCode) : null; | |
| 132 if (!formatData) | |
| 133 callback(null); | |
| 134 else | |
| 135 callback(formattedUISourceCode, formatData.mapping); | |
| 136 return; | |
| 137 } | |
| 138 | |
| 139 uiSourceCode.requestContent(contentLoaded.bind(this)); | |
| 140 | |
| 141 /** | |
| 142 * @this {WebInspector.FormatterScriptMapping} | |
| 143 * @param {?string} content | |
| 144 */ | |
| 145 function contentLoaded(content) | |
| 146 { | |
| 147 var formatter = WebInspector.Formatter.createFormatter(uiSourceCode. contentType()); | |
| 148 formatter.formatContent(uiSourceCode.highlighterType(), content || " ", innerCallback.bind(this)); | |
| 149 } | |
| 150 | |
| 151 /** | |
| 152 * @this {WebInspector.FormatterScriptMapping} | |
| 153 * @param {string} formattedContent | |
| 154 * @param {!WebInspector.FormatterSourceMapping} formatterMapping | |
| 155 */ | |
| 156 function innerCallback(formattedContent, formatterMapping) | |
| 157 { | |
| 158 var scripts = this._scriptsForUISourceCode(uiSourceCode); | |
| 159 if (!scripts.length) { | |
| 160 callback(null); | |
| 161 return; | |
| 162 } | |
| 163 var name; | |
| 164 if (uiSourceCode.contentType() === WebInspector.resourceTypes.Docume nt) | |
| 165 name = uiSourceCode.displayName(); | |
| 166 else | |
| 167 name = uiSourceCode.name() || scripts[0].scriptId; | |
| 168 path = this._projectDelegate._addFormatted(name, uiSourceCode.url, u iSourceCode.contentType(), formattedContent); | |
| 169 var formattedUISourceCode = /** @type {!WebInspector.UISourceCode} * / (this._workspace.uiSourceCode(this._projectId, path)); | |
| 170 | |
| 171 var formatData = new WebInspector.FormatterScriptMapping.FormatData( uiSourceCode.project().id(), uiSourceCode.path(), formatterMapping, scripts); | |
| 172 this._formatData.put(formattedUISourceCode, formatData); | |
| 173 this._formattedPaths.put(uiSourceCode.project().id() + ":" + uiSourc eCode.path(), path); | |
| 174 for (var i = 0; i < scripts.length; ++i) { | |
| 175 this._uiSourceCodes.put(scripts[i], formattedUISourceCode); | |
| 176 scripts[i].pushSourceMapping(this); | |
| 177 } | |
| 178 formattedUISourceCode.setSourceMappingForTarget(this._debuggerModel. target(), this); | |
| 179 callback(formattedUISourceCode, formatterMapping); | |
| 180 } | |
| 181 }, | |
| 182 | |
| 183 /** | |
| 184 * @param {!WebInspector.UISourceCode} formattedUISourceCode | |
| 185 * @return {?WebInspector.FormatterSourceMapping} | |
| 186 */ | |
| 187 _discardFormattedUISourceCodeScript: function(formattedUISourceCode) | |
| 188 { | |
| 189 var formatData = this._formatData.get(formattedUISourceCode); | |
| 190 if (!formatData) | |
| 191 return null; | |
| 192 | |
| 193 this._formatData.remove(formattedUISourceCode); | |
| 194 this._formattedPaths.remove(formatData.projectId + ":" + formatData.path ); | |
| 195 for (var i = 0; i < formatData.scripts.length; ++i) { | |
| 196 this._uiSourceCodes.remove(formatData.scripts[i]); | |
| 197 formatData.scripts[i].popSourceMapping(); | |
| 198 } | |
| 199 this._projectDelegate._removeFormatted(formattedUISourceCode.path()); | |
| 200 return formatData.mapping; | |
| 201 } | |
| 202 } | 77 } |
| 203 | 78 |
| 204 /** | 79 /** |
| 205 * @constructor | 80 * @constructor |
| 206 * @param {string} projectId | 81 * @param {string} projectId |
| 207 * @param {string} path | 82 * @param {string} path |
| 208 * @param {!WebInspector.FormatterSourceMapping} mapping | 83 * @param {!WebInspector.FormatterSourceMapping} mapping |
| 209 * @param {!Array.<!WebInspector.Script>} scripts | 84 * @param {!Array.<!WebInspector.Script>} scripts |
| 210 */ | 85 */ |
| 211 WebInspector.FormatterScriptMapping.FormatData = function(projectId, path, mappi ng, scripts) | 86 WebInspector.FormatterScriptMapping.FormatData = function(projectId, path, mappi ng, scripts) |
| 212 { | 87 { |
| 213 this.projectId = projectId; | 88 this.projectId = projectId; |
| 214 this.path = path; | 89 this.path = path; |
| 215 this.mapping = mapping; | 90 this.mapping = mapping; |
| 216 this.scripts = scripts; | 91 this.scripts= scripts; |
| 217 } | 92 } |
| 218 | 93 |
| 219 /** | 94 /** |
| 220 * @constructor | 95 * @constructor |
| 221 * @param {!WebInspector.Workspace} workspace | 96 * @param {!WebInspector.Workspace} workspace |
| 222 * @param {string} id | 97 * @param {string} id |
| 223 * @extends {WebInspector.ContentProviderBasedProjectDelegate} | 98 * @extends {WebInspector.ContentProviderBasedProjectDelegate} |
| 224 */ | 99 */ |
| 225 WebInspector.FormatterProjectDelegate = function(workspace, id) | 100 WebInspector.FormatterProjectDelegate = function(workspace, id) |
| 226 { | 101 { |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 256 { | 131 { |
| 257 this.removeFile(path); | 132 this.removeFile(path); |
| 258 }, | 133 }, |
| 259 | 134 |
| 260 __proto__: WebInspector.ContentProviderBasedProjectDelegate.prototype | 135 __proto__: WebInspector.ContentProviderBasedProjectDelegate.prototype |
| 261 } | 136 } |
| 262 | 137 |
| 263 /** | 138 /** |
| 264 * @constructor | 139 * @constructor |
| 265 * @implements {WebInspector.SourcesView.EditorAction} | 140 * @implements {WebInspector.SourcesView.EditorAction} |
| 141 * @implements {WebInspector.TargetManager.Observer} | |
| 266 */ | 142 */ |
| 267 WebInspector.ScriptFormatterEditorAction = function() | 143 WebInspector.ScriptFormatterEditorAction = function() |
| 268 { | 144 { |
| 269 this._scriptMapping = new WebInspector.FormatterScriptMapping(WebInspector.w orkspace, WebInspector.debuggerModel); | 145 this._projectId = "formatter:"; |
| 146 this._projectDelegate = new WebInspector.FormatterProjectDelegate(WebInspect or.workspace, this._projectId); | |
| 147 | |
| 148 /** @type {!Map.<!WebInspector.Script, !WebInspector.UISourceCode>} */ | |
| 149 this._uiSourceCodes = new Map(); | |
| 150 /** @type {!StringMap.<string>} */ | |
| 151 this._formattedPaths = new StringMap(); | |
| 152 /** @type {!Map.<!WebInspector.UISourceCode, !WebInspector.FormatterScriptMa pping.FormatData>} */ | |
| 153 this._formatData = new Map(); | |
| 154 | |
| 155 /** @type {!Map.<!WebInspector.Target, !WebInspector.FormatterScriptMapping> } */ | |
| 156 this._scriptMappingByTarget = new Map(); | |
| 157 this._workspace = WebInspector.workspace; | |
| 158 WebInspector.targetManager.observeTargets(this); | |
| 270 } | 159 } |
| 271 | 160 |
| 272 WebInspector.ScriptFormatterEditorAction.prototype = { | 161 WebInspector.ScriptFormatterEditorAction.prototype = { |
| 273 /** | 162 /** |
| 163 * @param {!WebInspector.Target} target | |
| 164 */ | |
| 165 targetAdded: function(target) | |
| 166 { | |
| 167 this._scriptMappingByTarget.put(target, new WebInspector.FormatterScript Mapping(target, this)); | |
| 168 target.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events. GlobalObjectCleared, this._debuggerReset, this); | |
| 169 }, | |
| 170 | |
| 171 /** | |
| 172 * @param {!WebInspector.Target} target | |
| 173 */ | |
| 174 targetRemoved: function(target) | |
| 175 { | |
| 176 this._scriptMappingByTarget.remove(target); | |
| 177 this._cleanForTarget(target); | |
| 178 target.debuggerModel.removeEventListener(WebInspector.DebuggerModel.Even ts.GlobalObjectCleared, this._debuggerReset, this); | |
| 179 }, | |
| 180 | |
| 181 /** | |
| 274 * @param {!WebInspector.Event} event | 182 * @param {!WebInspector.Event} event |
| 275 */ | 183 */ |
| 276 _editorSelected: function(event) | 184 _editorSelected: function(event) |
| 277 { | 185 { |
| 278 var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data ); | 186 var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data ); |
| 279 this._updateButton(uiSourceCode); | 187 this._updateButton(uiSourceCode); |
| 280 }, | 188 }, |
| 281 | 189 |
| 282 /** | 190 /** |
| 283 * @param {!WebInspector.Event} event | 191 * @param {!WebInspector.Event} event |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 345 | 253 |
| 346 WebInspector.notifications.dispatchEventToListeners(WebInspector.UserMet rics.UserAction, { | 254 WebInspector.notifications.dispatchEventToListeners(WebInspector.UserMet rics.UserAction, { |
| 347 action: WebInspector.UserMetrics.UserActionNames.TogglePrettyPrint, | 255 action: WebInspector.UserMetrics.UserActionNames.TogglePrettyPrint, |
| 348 enabled: true, | 256 enabled: true, |
| 349 url: uiSourceCode.originURL() | 257 url: uiSourceCode.originURL() |
| 350 }); | 258 }); |
| 351 }, | 259 }, |
| 352 | 260 |
| 353 /** | 261 /** |
| 354 * @param {!WebInspector.UISourceCode} uiSourceCode | 262 * @param {!WebInspector.UISourceCode} uiSourceCode |
| 263 * @param {!WebInspector.UISourceCode} formattedUISourceCode | |
| 264 * @param {!WebInspector.FormatterSourceMapping} mapping | |
| 265 * @private | |
| 266 */ | |
| 267 _showIfNeeded: function(uiSourceCode, formattedUISourceCode, mapping) | |
| 268 { | |
| 269 if (uiSourceCode !== this._sourcesView.currentUISourceCode()) | |
| 270 return; | |
| 271 var sourceFrame = this._sourcesView.viewForFile(uiSourceCode); | |
| 272 var start = [0, 0]; | |
| 273 if (sourceFrame) { | |
| 274 var selection = sourceFrame.selection(); | |
| 275 start = mapping.originalToFormatted(selection.startLine, selection.s tartColumn); | |
| 276 } | |
| 277 this._sourcesView.showSourceLocation(formattedUISourceCode, start[0], st art[1]); | |
| 278 this._updateButton(formattedUISourceCode); | |
| 279 }, | |
| 280 | |
| 281 /** | |
| 282 * @param {!WebInspector.UISourceCode} formattedUISourceCode | |
| 283 */ | |
| 284 _discardFormattedUISourceCodeScript: function(formattedUISourceCode) | |
| 285 { | |
| 286 var formatData = this._formatData.get(formattedUISourceCode); | |
| 287 if (!formatData) | |
| 288 return; | |
| 289 | |
| 290 this._formatData.remove(formattedUISourceCode); | |
| 291 this._formattedPaths.remove(formatData.projectId + ":" + formatData.path ); | |
| 292 for (var i = 0; i < formatData.scripts.length; ++i) { | |
| 293 this._uiSourceCodes.remove(formatData.scripts[i]); | |
| 294 formatData.scripts[i].popSourceMapping(); | |
| 295 } | |
| 296 this._projectDelegate._removeFormatted(formattedUISourceCode.path()); | |
| 297 }, | |
| 298 | |
| 299 /** | |
| 300 * @param {!WebInspector.Target} target | |
| 301 */ | |
| 302 _cleanForTarget: function(target) | |
| 303 { | |
| 304 var uiSourceCodes = this._formatData.keys(); | |
| 305 for (var i = 0; i < uiSourceCodes.length; ++i) { | |
| 306 uiSourceCodes[i].setSourceMappingForTarget(target, null); | |
| 307 var formatData = this._formatData.get(uiSourceCodes[i]); | |
| 308 var scripts = []; | |
| 309 for (var j = 0; j < formatData.scripts.length; ++j) { | |
| 310 if (formatData.scripts[j].target() === target) | |
| 311 this._uiSourceCodes.remove(formatData.scripts[j]); | |
| 312 else | |
| 313 scripts.push(formatData.scripts[j]); | |
| 314 } | |
| 315 | |
| 316 if (scripts.length) | |
| 317 formatData.scripts = scripts; | |
| 318 else { | |
| 319 this._formattedPaths.remove(formatData.projectId + ":" + formatD ata.path); | |
| 320 this._formatData.remove(uiSourceCodes[i]); | |
| 321 this._projectDelegate._removeFormatted(uiSourceCodes[i].path()); | |
| 322 } | |
| 323 } | |
| 324 }, | |
| 325 | |
| 326 /** | |
| 327 * @param {!WebInspector.Event} event | |
| 328 */ | |
| 329 _debuggerReset: function(event) | |
| 330 { | |
| 331 var debuggerModel = /** @type {!WebInspector.DebuggerModel} */ (event.ta rget); | |
| 332 this._cleanForTarget(debuggerModel.target()); | |
| 333 }, | |
| 334 | |
| 335 /** | |
| 336 * @param {!WebInspector.UISourceCode} uiSourceCode | |
| 337 * @return {!Array.<!WebInspector.Script>} | |
| 338 */ | |
| 339 _scriptsForUISourceCode: function(uiSourceCode) | |
| 340 { | |
| 341 /** | |
| 342 * @param {!WebInspector.Script} script | |
| 343 * @return {boolean} | |
| 344 */ | |
| 345 function isInlineScript(script) | |
| 346 { | |
| 347 return script.isInlineScript(); | |
| 348 } | |
| 349 | |
| 350 if (uiSourceCode.contentType() === WebInspector.resourceTypes.Document) { | |
| 351 var debuggerModels = WebInspector.targetManager.targets().select("de buggerModel"); | |
|
vsevik
2014/07/18 08:48:46
Please, no
sergeyv
2014/07/18 11:46:01
Done.
| |
| 352 var scriptLists = debuggerModels.map(function(debuggerModel) { retur n debuggerModel.scriptsForSourceURL(uiSourceCode.url)}); | |
| 353 var scripts = Array.prototype.concat.apply([], scriptLists); | |
| 354 return scripts.filter(isInlineScript); | |
| 355 } | |
| 356 if (uiSourceCode.contentType() === WebInspector.resourceTypes.Script) { | |
| 357 var rawLocations = (uiSourceCode.uiLocationToRawLocations(0, 0)); | |
| 358 return rawLocations.map(function(rawLocation) { return rawLocation.s cript()}); | |
| 359 } | |
| 360 return []; | |
| 361 }, | |
| 362 | |
| 363 /** | |
| 364 * @param {!WebInspector.UISourceCode} uiSourceCode | |
| 355 */ | 365 */ |
| 356 _formatUISourceCodeScript: function(uiSourceCode) | 366 _formatUISourceCodeScript: function(uiSourceCode) |
| 357 { | 367 { |
| 358 this._scriptMapping._performUISourceCodeScriptFormatting(uiSourceCode, i nnerCallback.bind(this)); | 368 var path = this._formattedPaths.get(uiSourceCode.project().id() + ":" + uiSourceCode.path()); |
| 369 if (path) { | |
| 370 var uiSourceCodePath = path; | |
| 371 var formattedUISourceCode = this._workspace.uiSourceCode(this._proje ctId, uiSourceCodePath); | |
| 372 var formatData = formattedUISourceCode ? this._formatData.get(format tedUISourceCode) : null; | |
| 373 if (formatData) | |
| 374 this._showIfNeeded(uiSourceCode, /** @type {!WebInspector.UISou rceCode} */ (formattedUISourceCode), formatData.mapping); | |
| 375 return; | |
| 376 } | |
| 377 | |
| 378 uiSourceCode.requestContent(contentLoaded.bind(this)); | |
| 359 | 379 |
| 360 /** | 380 /** |
| 361 * @this {WebInspector.ScriptFormatterEditorAction} | 381 * @this {WebInspector.ScriptFormatterEditorAction} |
| 362 * @param {?WebInspector.UISourceCode} formattedUISourceCode | 382 * @param {?string} content |
| 363 * @param {!WebInspector.FormatterSourceMapping=} mapping | |
| 364 */ | 383 */ |
| 365 function innerCallback(formattedUISourceCode, mapping) | 384 function contentLoaded(content) |
| 366 { | 385 { |
| 367 if (!formattedUISourceCode) | 386 var formatter = WebInspector.Formatter.createFormatter(uiSourceCode. contentType()); |
| 387 formatter.formatContent(uiSourceCode.highlighterType(), content || " ", innerCallback.bind(this)); | |
| 388 } | |
| 389 | |
| 390 /** | |
| 391 * @this {WebInspector.ScriptFormatterEditorAction} | |
| 392 * @param {string} formattedContent | |
| 393 * @param {!WebInspector.FormatterSourceMapping} formatterMapping | |
| 394 */ | |
| 395 function innerCallback(formattedContent, formatterMapping) | |
| 396 { | |
| 397 var scripts = this._scriptsForUISourceCode(uiSourceCode); | |
| 398 if (!scripts.length) | |
| 368 return; | 399 return; |
| 369 if (uiSourceCode !== this._sourcesView.currentUISourceCode()) | 400 |
| 370 return; | 401 var name; |
| 371 var sourceFrame = this._sourcesView.viewForFile(uiSourceCode); | 402 if (uiSourceCode.contentType() === WebInspector.resourceTypes.Docume nt) |
| 372 var start = [0, 0]; | 403 name = uiSourceCode.displayName(); |
| 373 if (sourceFrame) { | 404 else |
| 374 var selection = sourceFrame.selection(); | 405 name = uiSourceCode.name() || scripts[0].scriptId; |
| 375 start = mapping.originalToFormatted(selection.startLine, selecti on.startColumn); | 406 path = this._projectDelegate._addFormatted(name, uiSourceCode.url, u iSourceCode.contentType(), formattedContent); |
| 407 var formattedUISourceCode = /** @type {!WebInspector.UISourceCode} * / (this._workspace.uiSourceCode(this._projectId, path)); | |
| 408 var formatData = new WebInspector.FormatterScriptMapping.FormatData( uiSourceCode.project().id(), uiSourceCode.path(), formatterMapping, scripts); | |
| 409 this._formatData.put(formattedUISourceCode, formatData); | |
| 410 this._formattedPaths.put(uiSourceCode.project().id() + ":" + uiSourc eCode.path(), path); | |
| 411 for (var i = 0; i < scripts.length; ++i) { | |
| 412 this._uiSourceCodes.put(scripts[i], formattedUISourceCode); | |
| 413 var scriptMapping = /** @type {!WebInspector.FormatterScriptMapp ing} */(this._scriptMappingByTarget.get(scripts[i].target())); | |
| 414 scripts[i].pushSourceMapping(scriptMapping); | |
| 376 } | 415 } |
| 377 this._sourcesView.showSourceLocation(formattedUISourceCode, start[0] , start[1]); | 416 |
| 378 this._updateButton(formattedUISourceCode); | 417 var targets = WebInspector.targetManager.targets(); |
| 418 for (var i = 0; i < targets.length; ++i) { | |
| 419 var scriptMapping = /** @type {!WebInspector.FormatterScriptMapp ing} */(this._scriptMappingByTarget.get(targets[i])); | |
| 420 formattedUISourceCode.setSourceMappingForTarget(targets[i], scri ptMapping); | |
| 421 } | |
| 422 this._showIfNeeded(uiSourceCode, formattedUISourceCode, formatterMap ping); | |
| 379 } | 423 } |
| 380 }, | |
| 381 | |
| 382 /** | |
| 383 * @param {!WebInspector.UISourceCode} uiSourceCode | |
| 384 */ | |
| 385 _discardFormattedUISourceCodeScript: function(uiSourceCode) | |
| 386 { | |
| 387 this._scriptMapping._discardFormattedUISourceCodeScript(uiSourceCode); | |
| 388 } | 424 } |
| 389 } | 425 } |
| OLD | NEW |