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.
|
} |