Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/sass/SASSLiveSourceMap.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/sass/SASSLiveSourceMap.js b/third_party/WebKit/Source/devtools/front_end/sass/SASSLiveSourceMap.js |
| index 9cf0c453fd1e3c2316a658e0ece7fb78565d50fc..ebc1eb11ac2b4abe4dfcaf92157a845dd24b208e 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/sass/SASSLiveSourceMap.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/sass/SASSLiveSourceMap.js |
| @@ -5,10 +5,42 @@ |
| WebInspector.SASSLiveSourceMap = {} |
| /** |
| + * @param {!WebInspector.SASSWorkspaceAdapter.Client} client |
| + * @param {!WebInspector.CSSParser} cssParser |
| + * @param {!WebInspector.TokenizerFactory} tokenizer |
| + * @param {!WebInspector.SourceMap} sourceMap |
| + * @return {!Promise<?WebInspector.SASSLiveSourceMap.CSSToSASSMapping>} |
| + */ |
| +WebInspector.SASSLiveSourceMap._loadMapping = function(client, cssParser, tokenizer, sourceMap) |
| +{ |
| + var sassModels = new Map(); |
| + var cssAST = null; |
| + var promises = []; |
| + for (var url of sourceMap.sources()) { |
|
dgozman
2016/01/27 23:14:04
client.sassURLs()
lushnikov
2016/01/28 00:04:29
Done.
|
| + var sassPromise = client.content(url) |
| + .then(text => WebInspector.SASSSupport.parseSCSS(url, text, tokenizer)) |
| + .then(ast => sassModels.set(url, ast)); |
| + promises.push(sassPromise); |
| + } |
| + var cssPromise = client.content(sourceMap.compiledURL()) |
|
dgozman
2016/01/27 23:14:04
client.cssURL()
lushnikov
2016/01/28 00:04:29
Done.
|
| + .then(text => WebInspector.SASSSupport.parseCSS(cssParser, sourceMap.compiledURL(), text)) |
| + .then(ast => cssAST = ast); |
| + promises.push(cssPromise); |
| + |
| + return Promise.all(promises) |
| + .then(() => WebInspector.SASSLiveSourceMap.CSSToSASSMapping.fromSourceMap(sourceMap, cssAST, sassModels)) |
|
dgozman
2016/01/27 23:14:04
Use client.sourceMap() and remove sourceMap parame
lushnikov
2016/01/28 00:04:29
Done.
|
| + .catchException(/** @type {?WebInspector.SASSLiveSourceMap.CSSToSASSMapping} */(null)) |
|
dgozman
2016/01/27 23:14:04
semicolon missing
lushnikov
2016/01/28 00:04:29
Done.
|
| +} |
| + |
| +/** |
| * @constructor |
| + * @param {!WebInspector.SASSSupport.AST} cssAST |
| + * @param {!Map<string, !WebInspector.SASSSupport.AST>} sassModels |
| */ |
| -WebInspector.SASSLiveSourceMap.CSSToSASSMapping = function() |
| +WebInspector.SASSLiveSourceMap.CSSToSASSMapping = function(cssAST, sassModels) |
| { |
| + this._cssAST = cssAST; |
| + this._sassModels = sassModels; |
| /** @type {!Map<!WebInspector.SASSSupport.TextNode, !WebInspector.SASSSupport.TextNode>} */ |
| this._cssToSass = new Map(); |
| /** @type {!Multimap<!WebInspector.SASSSupport.TextNode, !WebInspector.SASSSupport.TextNode>} */ |
| @@ -23,7 +55,7 @@ WebInspector.SASSLiveSourceMap.CSSToSASSMapping = function() |
| */ |
| WebInspector.SASSLiveSourceMap.CSSToSASSMapping.fromSourceMap = function(sourceMap, cssAST, sassModels) |
| { |
| - var mapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping(); |
| + var mapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping(cssAST, sassModels); |
| //FIXME: this works O(N^2). |
| cssAST.visit(map); |
| return mapping; |
| @@ -49,6 +81,22 @@ WebInspector.SASSLiveSourceMap.CSSToSASSMapping.fromSourceMap = function(sourceM |
| WebInspector.SASSLiveSourceMap.CSSToSASSMapping.prototype = { |
| /** |
| + * @return {!WebInspector.SASSSupport.AST} |
| + */ |
| + cssAST: function() |
| + { |
| + return this._cssAST; |
| + }, |
| + |
| + /** |
| + * @return {!Map<string, !WebInspector.SASSSupport.AST>} |
| + */ |
| + sassModels: function() |
| + { |
| + return this._sassModels; |
| + }, |
| + |
| + /** |
| * @param {!WebInspector.SASSSupport.TextNode} css |
| * @param {!WebInspector.SASSSupport.TextNode} sass |
| */ |
| @@ -112,7 +160,7 @@ WebInspector.SASSLiveSourceMap.CSSToSASSMapping.prototype = { |
| */ |
| rebaseForCSSDiff: function(cssDiff) |
| { |
| - var newMapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping(); |
| + var newMapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping(cssDiff.newAST, this._sassModels); |
| var cssNodes = this._cssToSass.keysArray(); |
| for (var i = 0; i < cssNodes.length; ++i) { |
| var cssNode = cssNodes[i]; |
| @@ -130,7 +178,9 @@ WebInspector.SASSLiveSourceMap.CSSToSASSMapping.prototype = { |
| */ |
| rebaseForSASSDiff: function(sassDiff) |
| { |
| - var newMapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping(); |
| + var sassModels = new Map(this._sassModels); |
| + sassModels.set(sassDiff.url, sassDiff.newAST); |
| + var newMapping = new WebInspector.SASSLiveSourceMap.CSSToSASSMapping(this._cssAST, sassModels); |
| var cssNodes = this._cssToSass.keysArray(); |
| for (var i = 0; i < cssNodes.length; ++i) { |
| var cssNode = cssNodes[i]; |
| @@ -159,5 +209,5 @@ WebInspector.SASSLiveSourceMap.CSSToSASSMapping.prototype = { |
| return false; |
| } |
| return true; |
| - } |
| + }, |
|
dgozman
2016/01/27 23:14:04
revert
lushnikov
2016/01/28 00:04:29
Done.
|
| } |