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..6c49db3c5ee621bd4664e584013ce8c95ca871c0 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,41 @@ |
WebInspector.SASSLiveSourceMap = {} |
/** |
+ * @param {!WebInspector.SourceMapTracker} tracker |
+ * @param {!WebInspector.CSSParser} cssParser |
+ * @param {!WebInspector.TokenizerFactory} tokenizer |
+ * @return {!Promise<?WebInspector.SASSLiveSourceMap.CSSToSASSMapping>} |
+ */ |
+WebInspector.SASSLiveSourceMap._loadMapping = function(tracker, cssParser, tokenizer) |
+{ |
+ var sassModels = new Map(); |
+ var cssAST = null; |
+ var promises = []; |
+ for (var url of tracker.sassURLs()) { |
+ var sassPromise = tracker.content(url) |
+ .then(text => WebInspector.SASSSupport.parseSCSS(url, text, tokenizer)) |
+ .then(ast => sassModels.set(url, ast)); |
+ promises.push(sassPromise); |
+ } |
+ var cssPromise = tracker.content(tracker.cssURL()) |
+ .then(text => WebInspector.SASSSupport.parseCSS(cssParser, tracker.cssURL(), text)) |
+ .then(ast => cssAST = ast); |
+ promises.push(cssPromise); |
+ |
+ return Promise.all(promises) |
+ .then(() => WebInspector.SASSLiveSourceMap.CSSToSASSMapping.fromSourceMap(tracker.sourceMap(), cssAST, sassModels)) |
+ .catchException(/** @type {?WebInspector.SASSLiveSourceMap.CSSToSASSMapping} */(null)); |
+} |
+ |
+/** |
* @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 +54,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 +80,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 +159,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 +177,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]; |