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

Unified Diff: third_party/WebKit/Source/devtools/front_end/sdk/CSSModel.js

Issue 2466123002: DevTools: reformat front-end code to match chromium style. (Closed)
Patch Set: all done Created 4 years, 1 month 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
Index: third_party/WebKit/Source/devtools/front_end/sdk/CSSModel.js
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/CSSModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/CSSModel.js
index 8bf16e95d718ed3ca0ff9c3f373314673acd2ff7..c821e3832fb5f9e934e6198b5399c755bb7c01a8 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/CSSModel.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/CSSModel.js
@@ -27,20 +27,21 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
/**
- * @constructor
- * @extends {WebInspector.SDKModel}
- * @param {!WebInspector.Target} target
- * @param {!WebInspector.DOMModel} domModel
+ * @unrestricted
*/
-WebInspector.CSSModel = function(target, domModel)
-{
- WebInspector.SDKModel.call(this, WebInspector.CSSModel, target);
+WebInspector.CSSModel = class extends WebInspector.SDKModel {
+ /**
+ * @param {!WebInspector.Target} target
+ * @param {!WebInspector.DOMModel} domModel
+ */
+ constructor(target, domModel) {
+ super(WebInspector.CSSModel, target);
this._domModel = domModel;
this._agent = target.cssAgent();
this._styleLoader = new WebInspector.CSSModel.ComputedStyleLoader(this);
- WebInspector.targetManager.addEventListener(WebInspector.TargetManager.Events.MainFrameNavigated, this._mainFrameNavigated, this);
+ WebInspector.targetManager.addEventListener(
+ WebInspector.TargetManager.Events.MainFrameNavigated, this._mainFrameNavigated, this);
target.registerCSSDispatcher(new WebInspector.CSSDispatcher(this));
this._agent.enable().then(this._wasEnabled.bind(this));
/** @type {!Map.<string, !WebInspector.CSSStyleSheetHeader>} */
@@ -58,1201 +59,1130 @@ WebInspector.CSSModel = function(target, domModel)
this._sourceMapByURL = new Map();
/** @type {!Multimap<string, !WebInspector.CSSStyleSheetHeader>} */
this._sourceMapURLToHeaders = new Multimap();
- WebInspector.moduleSetting("cssSourceMapsEnabled").addChangeListener(this._toggleSourceMapSupport, this);
-};
-
-/** @enum {symbol} */
-WebInspector.CSSModel.Events = {
- LayoutEditorChange: Symbol("LayoutEditorChange"),
- FontsUpdated: Symbol("FontsUpdated"),
- MediaQueryResultChanged: Symbol("MediaQueryResultChanged"),
- ModelWasEnabled: Symbol("ModelWasEnabled"),
- PseudoStateForced: Symbol("PseudoStateForced"),
- StyleSheetAdded: Symbol("StyleSheetAdded"),
- StyleSheetChanged: Symbol("StyleSheetChanged"),
- StyleSheetRemoved: Symbol("StyleSheetRemoved"),
- SourceMapAttached: Symbol("SourceMapAttached"),
- SourceMapDetached: Symbol("SourceMapDetached"),
- SourceMapChanged: Symbol("SourceMapChanged")
-};
-
-WebInspector.CSSModel.MediaTypes = ["all", "braille", "embossed", "handheld", "print", "projection", "screen", "speech", "tty", "tv"];
-
-WebInspector.CSSModel.PseudoStateMarker = "pseudo-state-marker";
-
-/**
- * @constructor
- * @param {!CSSAgent.StyleSheetId} styleSheetId
- * @param {!WebInspector.TextRange} oldRange
- * @param {string} newText
- * @param {?Object} payload
- */
-WebInspector.CSSModel.Edit = function(styleSheetId, oldRange, newText, payload)
-{
- this.styleSheetId = styleSheetId;
- this.oldRange = oldRange;
- this.newRange = WebInspector.TextRange.fromEdit(oldRange, newText);
- this.payload = payload;
-};
-
-WebInspector.CSSModel.prototype = {
- /**
- * @param {!WebInspector.Event} event
- */
- _toggleSourceMapSupport: function(event)
- {
- var enabled = /** @type {boolean} */ (event.data);
- var headers = this.styleSheetHeaders();
- for (var header of headers) {
- if (enabled)
- this._attachSourceMap(header);
- else
- this._detachSourceMap(header);
- }
- },
-
- /**
- * @param {!WebInspector.CSSStyleSheetHeader} header
- * @return {?WebInspector.SourceMap}
- */
- sourceMapForHeader: function(header)
- {
- return this._sourceMapByURL.get(header.sourceMapURL) || null;
- },
+ WebInspector.moduleSetting('cssSourceMapsEnabled').addChangeListener(this._toggleSourceMapSupport, this);
+ }
+
+ /**
+ * @param {string} text
+ * @return {string}
+ */
+ static trimSourceURL(text) {
+ var sourceURLIndex = text.lastIndexOf('/*# sourceURL=');
+ if (sourceURLIndex === -1) {
+ sourceURLIndex = text.lastIndexOf('/*@ sourceURL=');
+ if (sourceURLIndex === -1)
+ return text;
+ }
+ var sourceURLLineIndex = text.lastIndexOf('\n', sourceURLIndex);
+ if (sourceURLLineIndex === -1)
+ return text;
+ var sourceURLLine = text.substr(sourceURLLineIndex + 1).split('\n', 1)[0];
+ var sourceURLRegex = /[\040\t]*\/\*[#@] sourceURL=[\040\t]*([^\s]*)[\040\t]*\*\/[\040\t]*$/;
+ if (sourceURLLine.search(sourceURLRegex) === -1)
+ return text;
+ return text.substr(0, sourceURLLineIndex) + text.substr(sourceURLLineIndex + sourceURLLine.length + 1);
+ }
- _sourceMapLoadedForTest: function() { },
+ /**
+ * @param {!WebInspector.Target} target
+ * @return {?WebInspector.CSSModel}
+ */
+ static fromTarget(target) {
+ return /** @type {?WebInspector.CSSModel} */ (target.model(WebInspector.CSSModel));
+ }
- /**
- * @param {!WebInspector.SourceMap} sourceMap
- * @return {!Array<!WebInspector.CSSStyleSheetHeader>}
- */
- headersForSourceMap: function(sourceMap)
- {
- return this._sourceMapURLToHeaders.get(sourceMap.url()).valuesArray();
- },
+ /**
+ * @param {!WebInspector.DOMNode} node
+ * @return {!WebInspector.CSSModel}
+ */
+ static fromNode(node) {
+ return /** @type {!WebInspector.CSSModel} */ (WebInspector.CSSModel.fromTarget(node.target()));
+ }
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _toggleSourceMapSupport(event) {
+ var enabled = /** @type {boolean} */ (event.data);
+ var headers = this.styleSheetHeaders();
+ for (var header of headers) {
+ if (enabled)
+ this._attachSourceMap(header);
+ else
+ this._detachSourceMap(header);
+ }
+ }
+
+ /**
+ * @param {!WebInspector.CSSStyleSheetHeader} header
+ * @return {?WebInspector.SourceMap}
+ */
+ sourceMapForHeader(header) {
+ return this._sourceMapByURL.get(header.sourceMapURL) || null;
+ }
+
+ _sourceMapLoadedForTest() {
+ }
+
+ /**
+ * @param {!WebInspector.SourceMap} sourceMap
+ * @return {!Array<!WebInspector.CSSStyleSheetHeader>}
+ */
+ headersForSourceMap(sourceMap) {
+ return this._sourceMapURLToHeaders.get(sourceMap.url()).valuesArray();
+ }
+
+ /**
+ * @param {!WebInspector.CSSStyleSheetHeader} header
+ */
+ _attachSourceMap(header) {
+ var sourceMapURL = header.sourceMapURL;
+ if (!sourceMapURL || !WebInspector.moduleSetting('cssSourceMapsEnabled').get())
+ return;
+ if (this._sourceMapByURL.has(sourceMapURL)) {
+ attach.call(this, sourceMapURL, header);
+ return;
+ }
+ if (!this._sourceMapLoadingStyleSheetsIds.has(sourceMapURL)) {
+ WebInspector.TextSourceMap.load(sourceMapURL, header.sourceURL)
+ .then(onTextSourceMapLoaded.bind(this, sourceMapURL))
+ .then(onSourceMap.bind(this, sourceMapURL));
+ }
+ this._sourceMapLoadingStyleSheetsIds.set(sourceMapURL, header.id);
/**
- * @param {!WebInspector.CSSStyleSheetHeader} header
+ * @param {string} sourceMapURL
+ * @param {?WebInspector.TextSourceMap} sourceMap
+ * @return {!Promise<?WebInspector.SourceMap>}
+ * @this {WebInspector.CSSModel}
*/
- _attachSourceMap: function(header)
- {
- var sourceMapURL = header.sourceMapURL;
- if (!sourceMapURL || !WebInspector.moduleSetting("cssSourceMapsEnabled").get())
- return;
- if (this._sourceMapByURL.has(sourceMapURL)) {
- attach.call(this, sourceMapURL, header);
- return;
- }
- if (!this._sourceMapLoadingStyleSheetsIds.has(sourceMapURL)) {
- WebInspector.TextSourceMap.load(sourceMapURL, header.sourceURL)
- .then(onTextSourceMapLoaded.bind(this, sourceMapURL))
- .then(onSourceMap.bind(this, sourceMapURL));
- }
- this._sourceMapLoadingStyleSheetsIds.set(sourceMapURL, header.id);
-
- /**
- * @param {string} sourceMapURL
- * @param {?WebInspector.TextSourceMap} sourceMap
- * @return {!Promise<?WebInspector.SourceMap>}
- * @this {WebInspector.CSSModel}
- */
- function onTextSourceMapLoaded(sourceMapURL, sourceMap)
- {
- if (!sourceMap)
- return Promise.resolve(/** @type {?WebInspector.SourceMap} */(null));
- var factoryExtension = this._factoryForSourceMap(sourceMap);
- if (!factoryExtension)
- return Promise.resolve(/** @type {?WebInspector.SourceMap} */(sourceMap));
- return factoryExtension.instance()
- .then(factory => factory.editableSourceMap(this.target(), sourceMap))
- .then(map => map || sourceMap)
- .catchException(/** @type {?WebInspector.SourceMap} */(null));
- }
-
- /**
- * @param {string} sourceMapURL
- * @param {?WebInspector.SourceMap} sourceMap
- * @this {WebInspector.CSSModel}
- */
- function onSourceMap(sourceMapURL, sourceMap)
- {
- this._sourceMapLoadedForTest();
- var styleSheetIds = this._sourceMapLoadingStyleSheetsIds.get(sourceMapURL);
- this._sourceMapLoadingStyleSheetsIds.removeAll(sourceMapURL);
- if (!sourceMap)
- return;
- var headers = new Set();
- for (var styleSheetId of styleSheetIds) {
- var header = this.styleSheetHeaderForId(styleSheetId);
- if (header)
- headers.add(header);
- }
- if (!headers.size)
- return;
- this._sourceMapByURL.set(sourceMapURL, sourceMap);
- for (var header of headers)
- attach.call(this, sourceMapURL, header);
- }
-
- /**
- * @param {string} sourceMapURL
- * @param {!WebInspector.CSSStyleSheetHeader} header
- * @this {WebInspector.CSSModel}
- */
- function attach(sourceMapURL, header)
- {
- this._sourceMapURLToHeaders.set(sourceMapURL, header);
- this.dispatchEventToListeners(WebInspector.CSSModel.Events.SourceMapAttached, header);
- }
- },
+ function onTextSourceMapLoaded(sourceMapURL, sourceMap) {
+ if (!sourceMap)
+ return Promise.resolve(/** @type {?WebInspector.SourceMap} */ (null));
+ var factoryExtension = this._factoryForSourceMap(sourceMap);
+ if (!factoryExtension)
+ return Promise.resolve(/** @type {?WebInspector.SourceMap} */ (sourceMap));
+ return factoryExtension.instance()
+ .then(factory => factory.editableSourceMap(this.target(), sourceMap))
+ .then(map => map || sourceMap)
+ .catchException(/** @type {?WebInspector.SourceMap} */ (null));
+ }
/**
- * @param {!WebInspector.SourceMap} sourceMap
- * @return {?Runtime.Extension}
+ * @param {string} sourceMapURL
+ * @param {?WebInspector.SourceMap} sourceMap
+ * @this {WebInspector.CSSModel}
*/
- _factoryForSourceMap: function(sourceMap)
- {
- var sourceExtensions = new Set();
- for (var url of sourceMap.sourceURLs())
- sourceExtensions.add(WebInspector.ParsedURL.extractExtension(url));
- for (var runtimeExtension of self.runtime.extensions(WebInspector.SourceMapFactory)) {
- var supportedExtensions = new Set(runtimeExtension.descriptor()["extensions"]);
- if (supportedExtensions.containsAll(sourceExtensions))
- return runtimeExtension;
- }
- return null;
- },
+ function onSourceMap(sourceMapURL, sourceMap) {
+ this._sourceMapLoadedForTest();
+ var styleSheetIds = this._sourceMapLoadingStyleSheetsIds.get(sourceMapURL);
+ this._sourceMapLoadingStyleSheetsIds.removeAll(sourceMapURL);
+ if (!sourceMap)
+ return;
+ var headers = new Set();
+ for (var styleSheetId of styleSheetIds) {
+ var header = this.styleSheetHeaderForId(styleSheetId);
+ if (header)
+ headers.add(header);
+ }
+ if (!headers.size)
+ return;
+ this._sourceMapByURL.set(sourceMapURL, sourceMap);
+ for (var header of headers)
+ attach.call(this, sourceMapURL, header);
+ }
/**
+ * @param {string} sourceMapURL
* @param {!WebInspector.CSSStyleSheetHeader} header
+ * @this {WebInspector.CSSModel}
*/
- _detachSourceMap: function(header)
- {
- if (!header.sourceMapURL || !this._sourceMapURLToHeaders.hasValue(header.sourceMapURL, header))
- return;
- this._sourceMapURLToHeaders.remove(header.sourceMapURL, header);
- if (!this._sourceMapURLToHeaders.has(header.sourceMapURL))
- this._sourceMapByURL.delete(header.sourceMapURL);
- this.dispatchEventToListeners(WebInspector.CSSModel.Events.SourceMapDetached, header);
- },
-
- /**
- * @return {!WebInspector.DOMModel}
- */
- domModel: function()
- {
- return this._domModel;
- },
+ function attach(sourceMapURL, header) {
+ this._sourceMapURLToHeaders.set(sourceMapURL, header);
+ this.dispatchEventToListeners(WebInspector.CSSModel.Events.SourceMapAttached, header);
+ }
+ }
+
+ /**
+ * @param {!WebInspector.SourceMap} sourceMap
+ * @return {?Runtime.Extension}
+ */
+ _factoryForSourceMap(sourceMap) {
+ var sourceExtensions = new Set();
+ for (var url of sourceMap.sourceURLs())
+ sourceExtensions.add(WebInspector.ParsedURL.extractExtension(url));
+ for (var runtimeExtension of self.runtime.extensions(WebInspector.SourceMapFactory)) {
+ var supportedExtensions = new Set(runtimeExtension.descriptor()['extensions']);
+ if (supportedExtensions.containsAll(sourceExtensions))
+ return runtimeExtension;
+ }
+ return null;
+ }
+
+ /**
+ * @param {!WebInspector.CSSStyleSheetHeader} header
+ */
+ _detachSourceMap(header) {
+ if (!header.sourceMapURL || !this._sourceMapURLToHeaders.hasValue(header.sourceMapURL, header))
+ return;
+ this._sourceMapURLToHeaders.remove(header.sourceMapURL, header);
+ if (!this._sourceMapURLToHeaders.has(header.sourceMapURL))
+ this._sourceMapByURL.delete(header.sourceMapURL);
+ this.dispatchEventToListeners(WebInspector.CSSModel.Events.SourceMapDetached, header);
+ }
+
+ /**
+ * @return {!WebInspector.DOMModel}
+ */
+ domModel() {
+ return this._domModel;
+ }
+
+ /**
+ * @param {!CSSAgent.StyleSheetId} styleSheetId
+ * @param {!WebInspector.TextRange} range
+ * @param {string} text
+ * @param {boolean} majorChange
+ * @return {!Promise<boolean>}
+ */
+ setStyleText(styleSheetId, range, text, majorChange) {
+ var original = this._innerSetStyleTexts.bind(this, [styleSheetId], [range], [text], majorChange);
+ var header = this.styleSheetHeaderForId(styleSheetId);
+ if (!header)
+ return original();
+
+ var sourceMap = this.sourceMapForHeader(header);
+ if (!sourceMap)
+ return original();
+
+ var originalAndDetach = originalAndDetachIfSuccess.bind(this, header);
+
+ if (!sourceMap.editable())
+ return original();
+
+ return /** @type {!Promise<boolean>} */ (
+ sourceMap.editCompiled([range], [text]).then(onEditingDone.bind(this)).catch(onError.bind(this, header)));
/**
- * @param {!CSSAgent.StyleSheetId} styleSheetId
- * @param {!WebInspector.TextRange} range
- * @param {string} text
- * @param {boolean} majorChange
+ * @param {?WebInspector.SourceMap.EditResult} editResult
* @return {!Promise<boolean>}
+ * @this {WebInspector.CSSModel}
*/
- setStyleText: function(styleSheetId, range, text, majorChange)
- {
- var original = this._innerSetStyleTexts.bind(this, [styleSheetId], [range], [text], majorChange);
- var header = this.styleSheetHeaderForId(styleSheetId);
- if (!header)
- return original();
-
- var sourceMap = this.sourceMapForHeader(header);
- if (!sourceMap)
- return original();
-
- var originalAndDetach = originalAndDetachIfSuccess.bind(this, header);
-
- if (!sourceMap.editable())
- return original();
-
- return /** @type {!Promise<boolean>} */(sourceMap.editCompiled([range], [text])
- .then(onEditingDone.bind(this))
- .catch(onError.bind(this, header)));
-
- /**
- * @param {?WebInspector.SourceMap.EditResult} editResult
- * @return {!Promise<boolean>}
- * @this {WebInspector.CSSModel}
- */
- function onEditingDone(editResult)
- {
- if (!editResult)
- return Promise.resolve(false);
-
- var edits = editResult.compiledEdits;
- if (!edits.length)
- return onCSSPatched.call(this, editResult, true);
-
- edits.sort(WebInspector.SourceEdit.comparator);
- edits = edits.reverse();
-
- var styleSheetIds = [];
- var ranges = [];
- var texts = [];
- for (var edit of edits) {
- styleSheetIds.push(header.id);
- ranges.push(edit.oldRange);
- texts.push(edit.newText);
- }
- return this._innerSetStyleTexts(styleSheetIds, ranges, texts, majorChange)
- .then(onCSSPatched.bind(this, editResult));
- }
-
- /**
- * @param {!WebInspector.SourceMap.EditResult} editResult
- * @param {boolean} success
- * @return {!Promise<boolean>}
- * @this {WebInspector.CSSModel}
- */
- function onCSSPatched(editResult, success)
- {
- if (!success)
- return originalAndDetach();
-
- this._sourceMapByURL.set(header.sourceMapURL, editResult.map);
- this.dispatchEventToListeners(WebInspector.CSSModel.Events.SourceMapChanged, {
- sourceMap: editResult.map,
- newSources: editResult.newSources
- });
- return Promise.resolve(true);
- }
-
- /**
- * @param {!WebInspector.CSSStyleSheetHeader} header
- * @param {*} error
- * @return {!Promise<boolean>}
- * @this {WebInspector.CSSModel}
- */
- function onError(header, error)
- {
- WebInspector.console.error(WebInspector.UIString("LiveSASS failed: %s", sourceMap.compiledURL()));
- console.error(error);
- this._detachSourceMap(header);
- return original();
- }
-
- /**
- * @param {!WebInspector.CSSStyleSheetHeader} header
- * @return {!Promise<boolean>}
- * @this {WebInspector.CSSModel}
- */
- function originalAndDetachIfSuccess(header)
- {
- return this._innerSetStyleTexts([styleSheetId], [range], [text], majorChange)
- .then(detachIfSuccess.bind(this));
-
- /**
- * @param {boolean} success
- * @return {boolean}
- * @this {WebInspector.CSSModel}
- */
- function detachIfSuccess(success)
- {
- if (success)
- this._detachSourceMap(header);
- return success;
- }
- }
- },
+ function onEditingDone(editResult) {
+ if (!editResult)
+ return Promise.resolve(false);
+
+ var edits = editResult.compiledEdits;
+ if (!edits.length)
+ return onCSSPatched.call(this, editResult, true);
+
+ edits.sort(WebInspector.SourceEdit.comparator);
+ edits = edits.reverse();
+
+ var styleSheetIds = [];
+ var ranges = [];
+ var texts = [];
+ for (var edit of edits) {
+ styleSheetIds.push(header.id);
+ ranges.push(edit.oldRange);
+ texts.push(edit.newText);
+ }
+ return this._innerSetStyleTexts(styleSheetIds, ranges, texts, majorChange)
+ .then(onCSSPatched.bind(this, editResult));
+ }
/**
- * @param {!Array<!CSSAgent.StyleSheetId>} styleSheetIds
- * @param {!Array<!WebInspector.TextRange>} ranges
- * @param {!Array<string>} texts
- * @param {boolean} majorChange
+ * @param {!WebInspector.SourceMap.EditResult} editResult
+ * @param {boolean} success
* @return {!Promise<boolean>}
+ * @this {WebInspector.CSSModel}
*/
- _innerSetStyleTexts: function(styleSheetIds, ranges, texts, majorChange)
- {
- /**
- * @param {?Protocol.Error} error
- * @param {?Array<!CSSAgent.CSSStyle>} stylePayloads
- * @return {boolean}
- * @this {WebInspector.CSSModel}
- */
- function parsePayload(error, stylePayloads)
- {
- if (error || !stylePayloads || stylePayloads.length !== ranges.length)
- return false;
-
- if (majorChange)
- this._domModel.markUndoableState();
- for (var i = 0; i < ranges.length; ++i) {
- var edit = new WebInspector.CSSModel.Edit(styleSheetIds[i], ranges[i], texts[i], stylePayloads[i]);
- this._fireStyleSheetChanged(styleSheetIds[i], edit);
- }
- return true;
- }
-
- console.assert(styleSheetIds.length === ranges.length && ranges.length === texts.length, "Array lengths must be equal");
- var edits = [];
- var ensureContentPromises = [];
- for (var i = 0; i < styleSheetIds.length; ++i) {
- edits.push({
- styleSheetId: styleSheetIds[i],
- range: ranges[i].serializeToObject(),
- text: texts[i]
- });
- ensureContentPromises.push(this._ensureOriginalStyleSheetText(styleSheetIds[i]));
- }
-
- return Promise.all(ensureContentPromises)
- .then(() => this._agent.setStyleTexts(edits, parsePayload.bind(this)))
- .catchException(false);
- },
+ function onCSSPatched(editResult, success) {
+ if (!success)
+ return originalAndDetach();
+
+ this._sourceMapByURL.set(header.sourceMapURL, editResult.map);
+ this.dispatchEventToListeners(
+ WebInspector.CSSModel.Events.SourceMapChanged,
+ {sourceMap: editResult.map, newSources: editResult.newSources});
+ return Promise.resolve(true);
+ }
/**
- * @param {!CSSAgent.StyleSheetId} styleSheetId
- * @param {!WebInspector.TextRange} range
- * @param {string} text
+ * @param {!WebInspector.CSSStyleSheetHeader} header
+ * @param {*} error
* @return {!Promise<boolean>}
+ * @this {WebInspector.CSSModel}
*/
- setSelectorText: function(styleSheetId, range, text)
- {
- /**
- * @param {?Protocol.Error} error
- * @param {?CSSAgent.SelectorList} selectorPayload
- * @return {boolean}
- * @this {WebInspector.CSSModel}
- */
- function callback(error, selectorPayload)
- {
- if (error || !selectorPayload)
- return false;
- this._domModel.markUndoableState();
- var edit = new WebInspector.CSSModel.Edit(styleSheetId, range, text, selectorPayload);
- this._fireStyleSheetChanged(styleSheetId, edit);
- return true;
- }
-
- WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.StyleRuleEdited);
- return this._ensureOriginalStyleSheetText(styleSheetId)
- .then(() => this._agent.setRuleSelector(styleSheetId, range, text, callback.bind(this)))
- .catchException(false);
- },
+ function onError(header, error) {
+ WebInspector.console.error(WebInspector.UIString('LiveSASS failed: %s', sourceMap.compiledURL()));
+ console.error(error);
+ this._detachSourceMap(header);
+ return original();
+ }
/**
- * @param {!CSSAgent.StyleSheetId} styleSheetId
- * @param {!WebInspector.TextRange} range
- * @param {string} text
+ * @param {!WebInspector.CSSStyleSheetHeader} header
* @return {!Promise<boolean>}
+ * @this {WebInspector.CSSModel}
*/
- setKeyframeKey: function(styleSheetId, range, text)
- {
- /**
- * @param {?Protocol.Error} error
- * @param {!CSSAgent.Value} payload
- * @return {boolean}
- * @this {WebInspector.CSSModel}
- */
- function callback(error, payload)
- {
- if (error || !payload)
- return false;
- this._domModel.markUndoableState();
- var edit = new WebInspector.CSSModel.Edit(styleSheetId, range, text, payload);
- this._fireStyleSheetChanged(styleSheetId, edit);
- return true;
- }
-
- WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.StyleRuleEdited);
- return this._ensureOriginalStyleSheetText(styleSheetId)
- .then(() => this._agent.setKeyframeKey(styleSheetId, range, text, callback.bind(this)))
- .catchException(false);
- },
-
- /**
- * @return {!Promise.<!Array.<!WebInspector.CSSMedia>>}
- */
- mediaQueriesPromise: function()
- {
- /**
- * @param {?Protocol.Error} error
- * @param {?Array.<!CSSAgent.CSSMedia>} payload
- * @return {!Array.<!WebInspector.CSSMedia>}
- * @this {!WebInspector.CSSModel}
- */
- function parsePayload(error, payload)
- {
- return !error && payload ? WebInspector.CSSMedia.parseMediaArrayPayload(this, payload) : [];
- }
-
- return this._agent.getMediaQueries(parsePayload.bind(this));
- },
-
- /**
- * @return {boolean}
- */
- isEnabled: function()
- {
- return this._isEnabled;
- },
-
+ function originalAndDetachIfSuccess(header) {
+ return this._innerSetStyleTexts([styleSheetId], [range], [text], majorChange).then(detachIfSuccess.bind(this));
+
+ /**
+ * @param {boolean} success
+ * @return {boolean}
+ * @this {WebInspector.CSSModel}
+ */
+ function detachIfSuccess(success) {
+ if (success)
+ this._detachSourceMap(header);
+ return success;
+ }
+ }
+ }
+
+ /**
+ * @param {!Array<!CSSAgent.StyleSheetId>} styleSheetIds
+ * @param {!Array<!WebInspector.TextRange>} ranges
+ * @param {!Array<string>} texts
+ * @param {boolean} majorChange
+ * @return {!Promise<boolean>}
+ */
+ _innerSetStyleTexts(styleSheetIds, ranges, texts, majorChange) {
/**
* @param {?Protocol.Error} error
+ * @param {?Array<!CSSAgent.CSSStyle>} stylePayloads
+ * @return {boolean}
+ * @this {WebInspector.CSSModel}
*/
- _wasEnabled: function(error)
- {
- if (error) {
- console.error("Failed to enabled CSS agent: " + error);
- return;
- }
- this._isEnabled = true;
- this.dispatchEventToListeners(WebInspector.CSSModel.Events.ModelWasEnabled);
- },
+ function parsePayload(error, stylePayloads) {
+ if (error || !stylePayloads || stylePayloads.length !== ranges.length)
+ return false;
+
+ if (majorChange)
+ this._domModel.markUndoableState();
+ for (var i = 0; i < ranges.length; ++i) {
+ var edit = new WebInspector.CSSModel.Edit(styleSheetIds[i], ranges[i], texts[i], stylePayloads[i]);
+ this._fireStyleSheetChanged(styleSheetIds[i], edit);
+ }
+ return true;
+ }
- /**
- * @param {!DOMAgent.NodeId} nodeId
- * @return {!Promise.<?WebInspector.CSSMatchedStyles>}
- */
- matchedStylesPromise: function(nodeId)
- {
- /**
- * @param {?Protocol.Error} error
- * @param {?CSSAgent.CSSStyle=} inlinePayload
- * @param {?CSSAgent.CSSStyle=} attributesPayload
- * @param {!Array.<!CSSAgent.RuleMatch>=} matchedPayload
- * @param {!Array.<!CSSAgent.PseudoElementMatches>=} pseudoPayload
- * @param {!Array.<!CSSAgent.InheritedStyleEntry>=} inheritedPayload
- * @param {!Array.<!CSSAgent.CSSKeyframesRule>=} animationsPayload
- * @return {?WebInspector.CSSMatchedStyles}
- * @this {WebInspector.CSSModel}
- */
- function callback(error, inlinePayload, attributesPayload, matchedPayload, pseudoPayload, inheritedPayload, animationsPayload)
- {
- if (error)
- return null;
-
- var node = this._domModel.nodeForId(nodeId);
- if (!node)
- return null;
-
- return new WebInspector.CSSMatchedStyles(this, node, inlinePayload || null, attributesPayload || null, matchedPayload || [], pseudoPayload || [], inheritedPayload || [], animationsPayload || []);
- }
-
- return this._agent.getMatchedStylesForNode(nodeId, callback.bind(this));
- },
+ console.assert(
+ styleSheetIds.length === ranges.length && ranges.length === texts.length, 'Array lengths must be equal');
+ var edits = [];
+ var ensureContentPromises = [];
+ for (var i = 0; i < styleSheetIds.length; ++i) {
+ edits.push({styleSheetId: styleSheetIds[i], range: ranges[i].serializeToObject(), text: texts[i]});
+ ensureContentPromises.push(this._ensureOriginalStyleSheetText(styleSheetIds[i]));
+ }
+ return Promise.all(ensureContentPromises)
+ .then(() => this._agent.setStyleTexts(edits, parsePayload.bind(this)))
+ .catchException(false);
+ }
+
+ /**
+ * @param {!CSSAgent.StyleSheetId} styleSheetId
+ * @param {!WebInspector.TextRange} range
+ * @param {string} text
+ * @return {!Promise<boolean>}
+ */
+ setSelectorText(styleSheetId, range, text) {
/**
- * @param {!CSSAgent.StyleSheetId} styleSheetId
- * @return {!Promise<!Array<string>>}
+ * @param {?Protocol.Error} error
+ * @param {?CSSAgent.SelectorList} selectorPayload
+ * @return {boolean}
+ * @this {WebInspector.CSSModel}
*/
- classNamesPromise: function(styleSheetId)
- {
- /**
- * @param {?string} error
- * @param {?Array<string>} classNames
- * @return {!Array<string>}
- */
- function classNamesCallback(error, classNames)
- {
- return !error && classNames ? classNames : [];
- }
- return this._agent.collectClassNames(styleSheetId, classNamesCallback);
- },
+ function callback(error, selectorPayload) {
+ if (error || !selectorPayload)
+ return false;
+ this._domModel.markUndoableState();
+ var edit = new WebInspector.CSSModel.Edit(styleSheetId, range, text, selectorPayload);
+ this._fireStyleSheetChanged(styleSheetId, edit);
+ return true;
+ }
+ WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.StyleRuleEdited);
+ return this._ensureOriginalStyleSheetText(styleSheetId)
+ .then(() => this._agent.setRuleSelector(styleSheetId, range, text, callback.bind(this)))
+ .catchException(false);
+ }
+
+ /**
+ * @param {!CSSAgent.StyleSheetId} styleSheetId
+ * @param {!WebInspector.TextRange} range
+ * @param {string} text
+ * @return {!Promise<boolean>}
+ */
+ setKeyframeKey(styleSheetId, range, text) {
/**
- * @param {!DOMAgent.NodeId} nodeId
- * @return {!Promise.<?Map.<string, string>>}
+ * @param {?Protocol.Error} error
+ * @param {!CSSAgent.Value} payload
+ * @return {boolean}
+ * @this {WebInspector.CSSModel}
*/
- computedStylePromise: function(nodeId)
- {
- return this._styleLoader.computedStylePromise(nodeId);
- },
+ function callback(error, payload) {
+ if (error || !payload)
+ return false;
+ this._domModel.markUndoableState();
+ var edit = new WebInspector.CSSModel.Edit(styleSheetId, range, text, payload);
+ this._fireStyleSheetChanged(styleSheetId, edit);
+ return true;
+ }
- /**
- * @param {number} nodeId
- * @return {!Promise<?Array<string>>}
- */
- backgroundColorsPromise: function(nodeId)
- {
- /**
- * @param {?string} error
- * @param {!Array<string>=} backgroundColors
- * @return {?Array<string>}
- */
- function backgroundColorsCallback(error, backgroundColors) {
- return !error && backgroundColors ? backgroundColors : null;
- }
- return this._agent.getBackgroundColors(nodeId, backgroundColorsCallback);
- },
+ WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.StyleRuleEdited);
+ return this._ensureOriginalStyleSheetText(styleSheetId)
+ .then(() => this._agent.setKeyframeKey(styleSheetId, range, text, callback.bind(this)))
+ .catchException(false);
+ }
+ /**
+ * @return {!Promise.<!Array.<!WebInspector.CSSMedia>>}
+ */
+ mediaQueriesPromise() {
/**
- * @param {number} nodeId
- * @return {!Promise.<?Array.<!CSSAgent.PlatformFontUsage>>}
- */
- platformFontsPromise: function(nodeId)
- {
- /**
- * @param {?Protocol.Error} error
- * @param {?Array.<!CSSAgent.PlatformFontUsage>} fonts
- * @return {?Array.<!CSSAgent.PlatformFontUsage>}
- */
- function platformFontsCallback(error, fonts)
- {
- return !error && fonts ? fonts : null;
- }
-
- return this._agent.getPlatformFontsForNode(nodeId, platformFontsCallback);
- },
-
- /**
- * @return {!Array.<!WebInspector.CSSStyleSheetHeader>}
+ * @param {?Protocol.Error} error
+ * @param {?Array.<!CSSAgent.CSSMedia>} payload
+ * @return {!Array.<!WebInspector.CSSMedia>}
+ * @this {!WebInspector.CSSModel}
*/
- allStyleSheets: function()
- {
- var values = this._styleSheetIdToHeader.valuesArray();
- /**
- * @param {!WebInspector.CSSStyleSheetHeader} a
- * @param {!WebInspector.CSSStyleSheetHeader} b
- * @return {number}
- */
- function styleSheetComparator(a, b)
- {
- if (a.sourceURL < b.sourceURL)
- return -1;
- else if (a.sourceURL > b.sourceURL)
- return 1;
- return a.startLine - b.startLine || a.startColumn - b.startColumn;
- }
- values.sort(styleSheetComparator);
-
- return values;
- },
+ function parsePayload(error, payload) {
+ return !error && payload ? WebInspector.CSSMedia.parseMediaArrayPayload(this, payload) : [];
+ }
+ return this._agent.getMediaQueries(parsePayload.bind(this));
+ }
+
+ /**
+ * @return {boolean}
+ */
+ isEnabled() {
+ return this._isEnabled;
+ }
+
+ /**
+ * @param {?Protocol.Error} error
+ */
+ _wasEnabled(error) {
+ if (error) {
+ console.error('Failed to enabled CSS agent: ' + error);
+ return;
+ }
+ this._isEnabled = true;
+ this.dispatchEventToListeners(WebInspector.CSSModel.Events.ModelWasEnabled);
+ }
+
+ /**
+ * @param {!DOMAgent.NodeId} nodeId
+ * @return {!Promise.<?WebInspector.CSSMatchedStyles>}
+ */
+ matchedStylesPromise(nodeId) {
/**
- * @param {!DOMAgent.NodeId} nodeId
- * @return {!Promise.<?WebInspector.CSSModel.InlineStyleResult>}
+ * @param {?Protocol.Error} error
+ * @param {?CSSAgent.CSSStyle=} inlinePayload
+ * @param {?CSSAgent.CSSStyle=} attributesPayload
+ * @param {!Array.<!CSSAgent.RuleMatch>=} matchedPayload
+ * @param {!Array.<!CSSAgent.PseudoElementMatches>=} pseudoPayload
+ * @param {!Array.<!CSSAgent.InheritedStyleEntry>=} inheritedPayload
+ * @param {!Array.<!CSSAgent.CSSKeyframesRule>=} animationsPayload
+ * @return {?WebInspector.CSSMatchedStyles}
+ * @this {WebInspector.CSSModel}
*/
- inlineStylesPromise: function(nodeId)
- {
- /**
- * @param {?Protocol.Error} error
- * @param {?CSSAgent.CSSStyle=} inlinePayload
- * @param {?CSSAgent.CSSStyle=} attributesStylePayload
- * @return {?WebInspector.CSSModel.InlineStyleResult}
- * @this {WebInspector.CSSModel}
- */
- function callback(error, inlinePayload, attributesStylePayload)
- {
- if (error || !inlinePayload)
- return null;
- var inlineStyle = inlinePayload ? new WebInspector.CSSStyleDeclaration(this, null, inlinePayload, WebInspector.CSSStyleDeclaration.Type.Inline) : null;
- var attributesStyle = attributesStylePayload ? new WebInspector.CSSStyleDeclaration(this, null, attributesStylePayload, WebInspector.CSSStyleDeclaration.Type.Attributes) : null;
- return new WebInspector.CSSModel.InlineStyleResult(inlineStyle, attributesStyle);
- }
-
- return this._agent.getInlineStylesForNode(nodeId, callback.bind(this));
- },
+ function callback(
+ error, inlinePayload, attributesPayload, matchedPayload, pseudoPayload, inheritedPayload, animationsPayload) {
+ if (error)
+ return null;
- /**
- * @param {!WebInspector.DOMNode} node
- * @param {string} pseudoClass
- * @param {boolean} enable
- * @return {boolean}
- */
- forcePseudoState: function(node, pseudoClass, enable)
- {
- var pseudoClasses = node.marker(WebInspector.CSSModel.PseudoStateMarker) || [];
- if (enable) {
- if (pseudoClasses.indexOf(pseudoClass) >= 0)
- return false;
- pseudoClasses.push(pseudoClass);
- node.setMarker(WebInspector.CSSModel.PseudoStateMarker, pseudoClasses);
- } else {
- if (pseudoClasses.indexOf(pseudoClass) < 0)
- return false;
- pseudoClasses.remove(pseudoClass);
- if (pseudoClasses.length)
- node.setMarker(WebInspector.CSSModel.PseudoStateMarker, pseudoClasses);
- else
- node.setMarker(WebInspector.CSSModel.PseudoStateMarker, null);
- }
-
- this._agent.forcePseudoState(node.id, pseudoClasses);
- this.dispatchEventToListeners(WebInspector.CSSModel.Events.PseudoStateForced, { node: node, pseudoClass: pseudoClass, enable: enable });
- return true;
- },
+ var node = this._domModel.nodeForId(nodeId);
+ if (!node)
+ return null;
- /**
- * @param {!WebInspector.DOMNode} node
- * @return {?Array<string>} state
- */
- pseudoState: function(node)
- {
- return node.marker(WebInspector.CSSModel.PseudoStateMarker) || [];
- },
+ return new WebInspector.CSSMatchedStyles(
+ this, node, inlinePayload || null, attributesPayload || null, matchedPayload || [], pseudoPayload || [],
+ inheritedPayload || [], animationsPayload || []);
+ }
- /**
- * @param {!CSSAgent.StyleSheetId} styleSheetId
- * @param {!WebInspector.TextRange} range
- * @param {string} newMediaText
- * @return {!Promise<boolean>}
- */
- setMediaText: function(styleSheetId, range, newMediaText)
- {
- /**
- * @param {?Protocol.Error} error
- * @param {!CSSAgent.CSSMedia} mediaPayload
- * @return {boolean}
- * @this {WebInspector.CSSModel}
- */
- function parsePayload(error, mediaPayload)
- {
- if (!mediaPayload)
- return false;
- this._domModel.markUndoableState();
- var edit = new WebInspector.CSSModel.Edit(styleSheetId, range, newMediaText, mediaPayload);
- this._fireStyleSheetChanged(styleSheetId, edit);
- return true;
- }
-
- WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.StyleRuleEdited);
- return this._ensureOriginalStyleSheetText(styleSheetId)
- .then(() => this._agent.setMediaText(styleSheetId, range, newMediaText, parsePayload.bind(this)))
- .catchException(false);
- },
+ return this._agent.getMatchedStylesForNode(nodeId, callback.bind(this));
+ }
+ /**
+ * @param {!CSSAgent.StyleSheetId} styleSheetId
+ * @return {!Promise<!Array<string>>}
+ */
+ classNamesPromise(styleSheetId) {
/**
- * @param {!CSSAgent.StyleSheetId} styleSheetId
- * @param {string} ruleText
- * @param {!WebInspector.TextRange} ruleLocation
- * @return {!Promise<?WebInspector.CSSStyleRule>}
+ * @param {?string} error
+ * @param {?Array<string>} classNames
+ * @return {!Array<string>}
*/
- addRule: function(styleSheetId, ruleText, ruleLocation)
- {
- return this._ensureOriginalStyleSheetText(styleSheetId)
- .then(() => this._agent.addRule(styleSheetId, ruleText, ruleLocation, parsePayload.bind(this)))
- .catchException(/** @type {?WebInspector.CSSStyleRule} */(null));
-
- /**
- * @param {?Protocol.Error} error
- * @param {?CSSAgent.CSSRule} rulePayload
- * @return {?WebInspector.CSSStyleRule}
- * @this {WebInspector.CSSModel}
- */
- function parsePayload(error, rulePayload)
- {
- if (error || !rulePayload)
- return null;
- this._domModel.markUndoableState();
- var edit = new WebInspector.CSSModel.Edit(styleSheetId, ruleLocation, ruleText, rulePayload);
- this._fireStyleSheetChanged(styleSheetId, edit);
- return new WebInspector.CSSStyleRule(this, rulePayload);
- }
- },
-
+ function classNamesCallback(error, classNames) {
+ return !error && classNames ? classNames : [];
+ }
+ return this._agent.collectClassNames(styleSheetId, classNamesCallback);
+ }
+
+ /**
+ * @param {!DOMAgent.NodeId} nodeId
+ * @return {!Promise.<?Map.<string, string>>}
+ */
+ computedStylePromise(nodeId) {
+ return this._styleLoader.computedStylePromise(nodeId);
+ }
+
+ /**
+ * @param {number} nodeId
+ * @return {!Promise<?Array<string>>}
+ */
+ backgroundColorsPromise(nodeId) {
/**
- * @param {!WebInspector.DOMNode} node
- * @param {function(?WebInspector.CSSStyleSheetHeader)} userCallback
+ * @param {?string} error
+ * @param {!Array<string>=} backgroundColors
+ * @return {?Array<string>}
*/
- requestViaInspectorStylesheet: function(node, userCallback)
- {
- var frameId = node.frameId() || WebInspector.ResourceTreeModel.fromTarget(this.target()).mainFrame.id;
- var headers = this._styleSheetIdToHeader.valuesArray();
- for (var i = 0; i < headers.length; ++i) {
- var styleSheetHeader = headers[i];
- if (styleSheetHeader.frameId === frameId && styleSheetHeader.isViaInspector()) {
- userCallback(styleSheetHeader);
- return;
- }
- }
-
- /**
- * @param {?Protocol.Error} error
- * @param {?CSSAgent.StyleSheetId} styleSheetId
- * @return {?WebInspector.CSSStyleSheetHeader}
- * @this {WebInspector.CSSModel}
- */
- function innerCallback(error, styleSheetId)
- {
- return !error && styleSheetId ? this._styleSheetIdToHeader.get(styleSheetId) || null : null;
- }
-
- this._agent.createStyleSheet(frameId, innerCallback.bind(this))
- .catchException(null)
- .then(userCallback);
- },
-
- mediaQueryResultChanged: function()
- {
- this.dispatchEventToListeners(WebInspector.CSSModel.Events.MediaQueryResultChanged);
- },
-
- fontsUpdated: function()
- {
- this.dispatchEventToListeners(WebInspector.CSSModel.Events.FontsUpdated);
- },
-
+ function backgroundColorsCallback(error, backgroundColors) {
+ return !error && backgroundColors ? backgroundColors : null;
+ }
+ return this._agent.getBackgroundColors(nodeId, backgroundColorsCallback);
+ }
+
+ /**
+ * @param {number} nodeId
+ * @return {!Promise.<?Array.<!CSSAgent.PlatformFontUsage>>}
+ */
+ platformFontsPromise(nodeId) {
/**
- * @param {!CSSAgent.StyleSheetId} id
- * @return {?WebInspector.CSSStyleSheetHeader}
+ * @param {?Protocol.Error} error
+ * @param {?Array.<!CSSAgent.PlatformFontUsage>} fonts
+ * @return {?Array.<!CSSAgent.PlatformFontUsage>}
*/
- styleSheetHeaderForId: function(id)
- {
- return this._styleSheetIdToHeader.get(id) || null;
- },
+ function platformFontsCallback(error, fonts) {
+ return !error && fonts ? fonts : null;
+ }
- /**
- * @return {!Array.<!WebInspector.CSSStyleSheetHeader>}
- */
- styleSheetHeaders: function()
- {
- return this._styleSheetIdToHeader.valuesArray();
- },
+ return this._agent.getPlatformFontsForNode(nodeId, platformFontsCallback);
+ }
+ /**
+ * @return {!Array.<!WebInspector.CSSStyleSheetHeader>}
+ */
+ allStyleSheets() {
+ var values = this._styleSheetIdToHeader.valuesArray();
/**
- * @param {!CSSAgent.StyleSheetId} styleSheetId
- * @param {!WebInspector.CSSModel.Edit=} edit
+ * @param {!WebInspector.CSSStyleSheetHeader} a
+ * @param {!WebInspector.CSSStyleSheetHeader} b
+ * @return {number}
*/
- _fireStyleSheetChanged: function(styleSheetId, edit)
- {
- this.dispatchEventToListeners(WebInspector.CSSModel.Events.StyleSheetChanged, { styleSheetId: styleSheetId, edit: edit });
- },
+ function styleSheetComparator(a, b) {
+ if (a.sourceURL < b.sourceURL)
+ return -1;
+ else if (a.sourceURL > b.sourceURL)
+ return 1;
+ return a.startLine - b.startLine || a.startColumn - b.startColumn;
+ }
+ values.sort(styleSheetComparator);
- /**
- * @param {!CSSAgent.StyleSheetId} styleSheetId
- * @return {!Promise<string>}
- */
- _ensureOriginalStyleSheetText: function(styleSheetId)
- {
- var header = this.styleSheetHeaderForId(styleSheetId);
- if (!header)
- return Promise.resolve("");
- var promise = this._originalStyleSheetText.get(header);
- if (!promise) {
- promise = this.getStyleSheetText(header.id);
- this._originalStyleSheetText.set(header, promise);
- this._originalContentRequestedForTest(header);
- }
- return promise;
- },
+ return values;
+ }
+ /**
+ * @param {!DOMAgent.NodeId} nodeId
+ * @return {!Promise.<?WebInspector.CSSModel.InlineStyleResult>}
+ */
+ inlineStylesPromise(nodeId) {
/**
- * @param {!WebInspector.CSSStyleSheetHeader} header
+ * @param {?Protocol.Error} error
+ * @param {?CSSAgent.CSSStyle=} inlinePayload
+ * @param {?CSSAgent.CSSStyle=} attributesStylePayload
+ * @return {?WebInspector.CSSModel.InlineStyleResult}
+ * @this {WebInspector.CSSModel}
*/
- _originalContentRequestedForTest: function(header) { },
+ function callback(error, inlinePayload, attributesStylePayload) {
+ if (error || !inlinePayload)
+ return null;
+ var inlineStyle = inlinePayload ?
+ new WebInspector.CSSStyleDeclaration(
+ this, null, inlinePayload, WebInspector.CSSStyleDeclaration.Type.Inline) :
+ null;
+ var attributesStyle = attributesStylePayload ?
+ new WebInspector.CSSStyleDeclaration(
+ this, null, attributesStylePayload, WebInspector.CSSStyleDeclaration.Type.Attributes) :
+ null;
+ return new WebInspector.CSSModel.InlineStyleResult(inlineStyle, attributesStyle);
+ }
- /**
- * @param {!WebInspector.CSSStyleSheetHeader} header
- * @return {!Promise<string>}
- */
- originalStyleSheetText: function(header)
- {
- return this._ensureOriginalStyleSheetText(header.id);
- },
+ return this._agent.getInlineStylesForNode(nodeId, callback.bind(this));
+ }
+
+ /**
+ * @param {!WebInspector.DOMNode} node
+ * @param {string} pseudoClass
+ * @param {boolean} enable
+ * @return {boolean}
+ */
+ forcePseudoState(node, pseudoClass, enable) {
+ var pseudoClasses = node.marker(WebInspector.CSSModel.PseudoStateMarker) || [];
+ if (enable) {
+ if (pseudoClasses.indexOf(pseudoClass) >= 0)
+ return false;
+ pseudoClasses.push(pseudoClass);
+ node.setMarker(WebInspector.CSSModel.PseudoStateMarker, pseudoClasses);
+ } else {
+ if (pseudoClasses.indexOf(pseudoClass) < 0)
+ return false;
+ pseudoClasses.remove(pseudoClass);
+ if (pseudoClasses.length)
+ node.setMarker(WebInspector.CSSModel.PseudoStateMarker, pseudoClasses);
+ else
+ node.setMarker(WebInspector.CSSModel.PseudoStateMarker, null);
+ }
+ this._agent.forcePseudoState(node.id, pseudoClasses);
+ this.dispatchEventToListeners(
+ WebInspector.CSSModel.Events.PseudoStateForced, {node: node, pseudoClass: pseudoClass, enable: enable});
+ return true;
+ }
+
+ /**
+ * @param {!WebInspector.DOMNode} node
+ * @return {?Array<string>} state
+ */
+ pseudoState(node) {
+ return node.marker(WebInspector.CSSModel.PseudoStateMarker) || [];
+ }
+
+ /**
+ * @param {!CSSAgent.StyleSheetId} styleSheetId
+ * @param {!WebInspector.TextRange} range
+ * @param {string} newMediaText
+ * @return {!Promise<boolean>}
+ */
+ setMediaText(styleSheetId, range, newMediaText) {
/**
- * @param {!CSSAgent.CSSStyleSheetHeader} header
+ * @param {?Protocol.Error} error
+ * @param {!CSSAgent.CSSMedia} mediaPayload
+ * @return {boolean}
+ * @this {WebInspector.CSSModel}
*/
- _styleSheetAdded: function(header)
- {
- console.assert(!this._styleSheetIdToHeader.get(header.styleSheetId));
- var styleSheetHeader = new WebInspector.CSSStyleSheetHeader(this, header);
- this._styleSheetIdToHeader.set(header.styleSheetId, styleSheetHeader);
- var url = styleSheetHeader.resourceURL();
- if (!this._styleSheetIdsForURL.get(url))
- this._styleSheetIdsForURL.set(url, {});
- var frameIdToStyleSheetIds = this._styleSheetIdsForURL.get(url);
- var styleSheetIds = frameIdToStyleSheetIds[styleSheetHeader.frameId];
- if (!styleSheetIds) {
- styleSheetIds = [];
- frameIdToStyleSheetIds[styleSheetHeader.frameId] = styleSheetIds;
- }
- styleSheetIds.push(styleSheetHeader.id);
- this._attachSourceMap(styleSheetHeader);
- this.dispatchEventToListeners(WebInspector.CSSModel.Events.StyleSheetAdded, styleSheetHeader);
- },
+ function parsePayload(error, mediaPayload) {
+ if (!mediaPayload)
+ return false;
+ this._domModel.markUndoableState();
+ var edit = new WebInspector.CSSModel.Edit(styleSheetId, range, newMediaText, mediaPayload);
+ this._fireStyleSheetChanged(styleSheetId, edit);
+ return true;
+ }
- /**
- * @param {!CSSAgent.StyleSheetId} id
- */
- _styleSheetRemoved: function(id)
- {
- var header = this._styleSheetIdToHeader.get(id);
- console.assert(header);
- if (!header)
- return;
- this._styleSheetIdToHeader.remove(id);
- var url = header.resourceURL();
- var frameIdToStyleSheetIds = /** @type {!Object.<!PageAgent.FrameId, !Array.<!CSSAgent.StyleSheetId>>} */ (this._styleSheetIdsForURL.get(url));
- console.assert(frameIdToStyleSheetIds, "No frameId to styleSheetId map is available for given style sheet URL.");
- frameIdToStyleSheetIds[header.frameId].remove(id);
- if (!frameIdToStyleSheetIds[header.frameId].length) {
- delete frameIdToStyleSheetIds[header.frameId];
- if (!Object.keys(frameIdToStyleSheetIds).length)
- this._styleSheetIdsForURL.remove(url);
- }
- this._originalStyleSheetText.remove(header);
- this._detachSourceMap(header);
- this.dispatchEventToListeners(WebInspector.CSSModel.Events.StyleSheetRemoved, header);
- },
+ WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.StyleRuleEdited);
+ return this._ensureOriginalStyleSheetText(styleSheetId)
+ .then(() => this._agent.setMediaText(styleSheetId, range, newMediaText, parsePayload.bind(this)))
+ .catchException(false);
+ }
+
+ /**
+ * @param {!CSSAgent.StyleSheetId} styleSheetId
+ * @param {string} ruleText
+ * @param {!WebInspector.TextRange} ruleLocation
+ * @return {!Promise<?WebInspector.CSSStyleRule>}
+ */
+ addRule(styleSheetId, ruleText, ruleLocation) {
+ return this._ensureOriginalStyleSheetText(styleSheetId)
+ .then(() => this._agent.addRule(styleSheetId, ruleText, ruleLocation, parsePayload.bind(this)))
+ .catchException(/** @type {?WebInspector.CSSStyleRule} */ (null));
/**
- * @param {string} url
- * @return {!Array.<!CSSAgent.StyleSheetId>}
+ * @param {?Protocol.Error} error
+ * @param {?CSSAgent.CSSRule} rulePayload
+ * @return {?WebInspector.CSSStyleRule}
+ * @this {WebInspector.CSSModel}
*/
- styleSheetIdsForURL: function(url)
- {
- var frameIdToStyleSheetIds = this._styleSheetIdsForURL.get(url);
- if (!frameIdToStyleSheetIds)
- return [];
-
- var result = [];
- for (var frameId in frameIdToStyleSheetIds)
- result = result.concat(frameIdToStyleSheetIds[frameId]);
- return result;
- },
+ function parsePayload(error, rulePayload) {
+ if (error || !rulePayload)
+ return null;
+ this._domModel.markUndoableState();
+ var edit = new WebInspector.CSSModel.Edit(styleSheetId, ruleLocation, ruleText, rulePayload);
+ this._fireStyleSheetChanged(styleSheetId, edit);
+ return new WebInspector.CSSStyleRule(this, rulePayload);
+ }
+ }
+
+ /**
+ * @param {!WebInspector.DOMNode} node
+ * @param {function(?WebInspector.CSSStyleSheetHeader)} userCallback
+ */
+ requestViaInspectorStylesheet(node, userCallback) {
+ var frameId = node.frameId() || WebInspector.ResourceTreeModel.fromTarget(this.target()).mainFrame.id;
+ var headers = this._styleSheetIdToHeader.valuesArray();
+ for (var i = 0; i < headers.length; ++i) {
+ var styleSheetHeader = headers[i];
+ if (styleSheetHeader.frameId === frameId && styleSheetHeader.isViaInspector()) {
+ userCallback(styleSheetHeader);
+ return;
+ }
+ }
/**
- * @param {!CSSAgent.StyleSheetId} styleSheetId
- * @param {string} newText
- * @param {boolean} majorChange
- * @return {!Promise.<?Protocol.Error>}
+ * @param {?Protocol.Error} error
+ * @param {?CSSAgent.StyleSheetId} styleSheetId
+ * @return {?WebInspector.CSSStyleSheetHeader}
+ * @this {WebInspector.CSSModel}
*/
- setStyleSheetText: function(styleSheetId, newText, majorChange)
- {
- var header = /** @type {!WebInspector.CSSStyleSheetHeader} */(this._styleSheetIdToHeader.get(styleSheetId));
- console.assert(header);
- newText = WebInspector.CSSModel.trimSourceURL(newText);
- if (header.hasSourceURL)
- newText += "\n/*# sourceURL=" + header.sourceURL + " */";
- return this._ensureOriginalStyleSheetText(styleSheetId)
- .then(() => this._agent.setStyleSheetText(header.id, newText, callback.bind(this)));
-
- /**
- * @param {?Protocol.Error} error
- * @param {string=} sourceMapURL
- * @return {?Protocol.Error}
- * @this {WebInspector.CSSModel}
- */
- function callback(error, sourceMapURL)
- {
- this._detachSourceMap(header);
- header.setSourceMapURL(sourceMapURL);
- this._attachSourceMap(header);
- if (error)
- return error;
- if (majorChange)
- this._domModel.markUndoableState();
- this._fireStyleSheetChanged(styleSheetId);
- return null;
- }
- },
+ function innerCallback(error, styleSheetId) {
+ return !error && styleSheetId ? this._styleSheetIdToHeader.get(styleSheetId) || null : null;
+ }
- /**
- * @param {!CSSAgent.StyleSheetId} styleSheetId
- * @return {!Promise<string>}
- */
- getStyleSheetText: function(styleSheetId)
- {
- /**
- * @param {?Protocol.Error} error
- * @param {?string} text
- * @return {string}
- */
- function textCallback(error, text)
- {
- if (error || text === null) {
- console.error("Failed to get text for stylesheet " + styleSheetId + ": " + error);
- text = "";
- // Fall through.
- }
- return WebInspector.CSSModel.trimSourceURL(text);
- }
-
- return this._agent.getStyleSheetText(styleSheetId, textCallback)
- .catchException(/** @type {string} */(""));
- },
+ this._agent.createStyleSheet(frameId, innerCallback.bind(this)).catchException(null).then(userCallback);
+ }
+
+ mediaQueryResultChanged() {
+ this.dispatchEventToListeners(WebInspector.CSSModel.Events.MediaQueryResultChanged);
+ }
+
+ fontsUpdated() {
+ this.dispatchEventToListeners(WebInspector.CSSModel.Events.FontsUpdated);
+ }
+
+ /**
+ * @param {!CSSAgent.StyleSheetId} id
+ * @return {?WebInspector.CSSStyleSheetHeader}
+ */
+ styleSheetHeaderForId(id) {
+ return this._styleSheetIdToHeader.get(id) || null;
+ }
+
+ /**
+ * @return {!Array.<!WebInspector.CSSStyleSheetHeader>}
+ */
+ styleSheetHeaders() {
+ return this._styleSheetIdToHeader.valuesArray();
+ }
+
+ /**
+ * @param {!CSSAgent.StyleSheetId} styleSheetId
+ * @param {!WebInspector.CSSModel.Edit=} edit
+ */
+ _fireStyleSheetChanged(styleSheetId, edit) {
+ this.dispatchEventToListeners(
+ WebInspector.CSSModel.Events.StyleSheetChanged, {styleSheetId: styleSheetId, edit: edit});
+ }
+
+ /**
+ * @param {!CSSAgent.StyleSheetId} styleSheetId
+ * @return {!Promise<string>}
+ */
+ _ensureOriginalStyleSheetText(styleSheetId) {
+ var header = this.styleSheetHeaderForId(styleSheetId);
+ if (!header)
+ return Promise.resolve('');
+ var promise = this._originalStyleSheetText.get(header);
+ if (!promise) {
+ promise = this.getStyleSheetText(header.id);
+ this._originalStyleSheetText.set(header, promise);
+ this._originalContentRequestedForTest(header);
+ }
+ return promise;
+ }
+
+ /**
+ * @param {!WebInspector.CSSStyleSheetHeader} header
+ */
+ _originalContentRequestedForTest(header) {
+ }
+
+ /**
+ * @param {!WebInspector.CSSStyleSheetHeader} header
+ * @return {!Promise<string>}
+ */
+ originalStyleSheetText(header) {
+ return this._ensureOriginalStyleSheetText(header.id);
+ }
+
+ /**
+ * @param {!CSSAgent.CSSStyleSheetHeader} header
+ */
+ _styleSheetAdded(header) {
+ console.assert(!this._styleSheetIdToHeader.get(header.styleSheetId));
+ var styleSheetHeader = new WebInspector.CSSStyleSheetHeader(this, header);
+ this._styleSheetIdToHeader.set(header.styleSheetId, styleSheetHeader);
+ var url = styleSheetHeader.resourceURL();
+ if (!this._styleSheetIdsForURL.get(url))
+ this._styleSheetIdsForURL.set(url, {});
+ var frameIdToStyleSheetIds = this._styleSheetIdsForURL.get(url);
+ var styleSheetIds = frameIdToStyleSheetIds[styleSheetHeader.frameId];
+ if (!styleSheetIds) {
+ styleSheetIds = [];
+ frameIdToStyleSheetIds[styleSheetHeader.frameId] = styleSheetIds;
+ }
+ styleSheetIds.push(styleSheetHeader.id);
+ this._attachSourceMap(styleSheetHeader);
+ this.dispatchEventToListeners(WebInspector.CSSModel.Events.StyleSheetAdded, styleSheetHeader);
+ }
+
+ /**
+ * @param {!CSSAgent.StyleSheetId} id
+ */
+ _styleSheetRemoved(id) {
+ var header = this._styleSheetIdToHeader.get(id);
+ console.assert(header);
+ if (!header)
+ return;
+ this._styleSheetIdToHeader.remove(id);
+ var url = header.resourceURL();
+ var frameIdToStyleSheetIds = /** @type {!Object.<!PageAgent.FrameId, !Array.<!CSSAgent.StyleSheetId>>} */ (
+ this._styleSheetIdsForURL.get(url));
+ console.assert(frameIdToStyleSheetIds, 'No frameId to styleSheetId map is available for given style sheet URL.');
+ frameIdToStyleSheetIds[header.frameId].remove(id);
+ if (!frameIdToStyleSheetIds[header.frameId].length) {
+ delete frameIdToStyleSheetIds[header.frameId];
+ if (!Object.keys(frameIdToStyleSheetIds).length)
+ this._styleSheetIdsForURL.remove(url);
+ }
+ this._originalStyleSheetText.remove(header);
+ this._detachSourceMap(header);
+ this.dispatchEventToListeners(WebInspector.CSSModel.Events.StyleSheetRemoved, header);
+ }
+
+ /**
+ * @param {string} url
+ * @return {!Array.<!CSSAgent.StyleSheetId>}
+ */
+ styleSheetIdsForURL(url) {
+ var frameIdToStyleSheetIds = this._styleSheetIdsForURL.get(url);
+ if (!frameIdToStyleSheetIds)
+ return [];
+
+ var result = [];
+ for (var frameId in frameIdToStyleSheetIds)
+ result = result.concat(frameIdToStyleSheetIds[frameId]);
+ return result;
+ }
+
+ /**
+ * @param {!CSSAgent.StyleSheetId} styleSheetId
+ * @param {string} newText
+ * @param {boolean} majorChange
+ * @return {!Promise.<?Protocol.Error>}
+ */
+ setStyleSheetText(styleSheetId, newText, majorChange) {
+ var header = /** @type {!WebInspector.CSSStyleSheetHeader} */ (this._styleSheetIdToHeader.get(styleSheetId));
+ console.assert(header);
+ newText = WebInspector.CSSModel.trimSourceURL(newText);
+ if (header.hasSourceURL)
+ newText += '\n/*# sourceURL=' + header.sourceURL + ' */';
+ return this._ensureOriginalStyleSheetText(styleSheetId)
+ .then(() => this._agent.setStyleSheetText(header.id, newText, callback.bind(this)));
/**
- * @param {!WebInspector.Event} event
+ * @param {?Protocol.Error} error
+ * @param {string=} sourceMapURL
+ * @return {?Protocol.Error}
+ * @this {WebInspector.CSSModel}
*/
- _mainFrameNavigated: function(event)
- {
- if (event.data.target() !== this.target())
- return;
- this._resetStyleSheets();
- },
-
- _resetStyleSheets: function()
- {
- var headers = this._styleSheetIdToHeader.valuesArray();
- this._styleSheetIdsForURL.clear();
- this._styleSheetIdToHeader.clear();
- for (var i = 0; i < headers.length; ++i) {
- this._detachSourceMap(headers[i]);
- this.dispatchEventToListeners(WebInspector.CSSModel.Events.StyleSheetRemoved, headers[i]);
- }
- this._sourceMapByURL.clear();
- this._sourceMapURLToHeaders.clear();
- this._sourceMapLoadingStyleSheetsIds.clear();
- },
+ function callback(error, sourceMapURL) {
+ this._detachSourceMap(header);
+ header.setSourceMapURL(sourceMapURL);
+ this._attachSourceMap(header);
+ if (error)
+ return error;
+ if (majorChange)
+ this._domModel.markUndoableState();
+ this._fireStyleSheetChanged(styleSheetId);
+ return null;
+ }
+ }
+ /**
+ * @param {!CSSAgent.StyleSheetId} styleSheetId
+ * @return {!Promise<string>}
+ */
+ getStyleSheetText(styleSheetId) {
/**
- * @override
- * @return {!Promise}
+ * @param {?Protocol.Error} error
+ * @param {?string} text
+ * @return {string}
*/
- suspendModel: function()
- {
- this._isEnabled = false;
- return this._agent.disable().then(this._resetStyleSheets.bind(this));
- },
+ function textCallback(error, text) {
+ if (error || text === null) {
+ console.error('Failed to get text for stylesheet ' + styleSheetId + ': ' + error);
+ text = '';
+ // Fall through.
+ }
+ return WebInspector.CSSModel.trimSourceURL(text);
+ }
- /**
- * @override
- * @return {!Promise}
- */
- resumeModel: function()
- {
- return this._agent.enable().then(this._wasEnabled.bind(this));
- },
+ return this._agent.getStyleSheetText(styleSheetId, textCallback).catchException(/** @type {string} */ (''));
+ }
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _mainFrameNavigated(event) {
+ if (event.data.target() !== this.target())
+ return;
+ this._resetStyleSheets();
+ }
+
+ _resetStyleSheets() {
+ var headers = this._styleSheetIdToHeader.valuesArray();
+ this._styleSheetIdsForURL.clear();
+ this._styleSheetIdToHeader.clear();
+ for (var i = 0; i < headers.length; ++i) {
+ this._detachSourceMap(headers[i]);
+ this.dispatchEventToListeners(WebInspector.CSSModel.Events.StyleSheetRemoved, headers[i]);
+ }
+ this._sourceMapByURL.clear();
+ this._sourceMapURLToHeaders.clear();
+ this._sourceMapLoadingStyleSheetsIds.clear();
+ }
+
+ /**
+ * @override
+ * @return {!Promise}
+ */
+ suspendModel() {
+ this._isEnabled = false;
+ return this._agent.disable().then(this._resetStyleSheets.bind(this));
+ }
+
+ /**
+ * @override
+ * @return {!Promise}
+ */
+ resumeModel() {
+ return this._agent.enable().then(this._wasEnabled.bind(this));
+ }
+
+ /**
+ * @param {!CSSAgent.StyleSheetId} id
+ * @param {!CSSAgent.SourceRange} range
+ */
+ _layoutEditorChange(id, range) {
+ this.dispatchEventToListeners(WebInspector.CSSModel.Events.LayoutEditorChange, {id: id, range: range});
+ }
+
+ /**
+ * @param {number} nodeId
+ * @param {string} name
+ * @param {string} value
+ */
+ setEffectivePropertyValueForNode(nodeId, name, value) {
+ this._agent.setEffectivePropertyValueForNode(nodeId, name, value);
+ }
+
+ /**
+ * @param {!WebInspector.DOMNode} node
+ * @return {!Promise.<?WebInspector.CSSMatchedStyles>}
+ */
+ cachedMatchedCascadeForNode(node) {
+ if (this._cachedMatchedCascadeNode !== node)
+ this.discardCachedMatchedCascade();
+ this._cachedMatchedCascadeNode = node;
+ if (!this._cachedMatchedCascadePromise)
+ this._cachedMatchedCascadePromise = this.matchedStylesPromise(node.id);
+ return this._cachedMatchedCascadePromise;
+ }
+
+ discardCachedMatchedCascade() {
+ delete this._cachedMatchedCascadeNode;
+ delete this._cachedMatchedCascadePromise;
+ }
+};
- /**
- * @param {!CSSAgent.StyleSheetId} id
- * @param {!CSSAgent.SourceRange} range
- */
- _layoutEditorChange: function(id, range)
- {
- this.dispatchEventToListeners(WebInspector.CSSModel.Events.LayoutEditorChange, {id: id, range: range});
- },
+/** @enum {symbol} */
+WebInspector.CSSModel.Events = {
+ LayoutEditorChange: Symbol('LayoutEditorChange'),
+ FontsUpdated: Symbol('FontsUpdated'),
+ MediaQueryResultChanged: Symbol('MediaQueryResultChanged'),
+ ModelWasEnabled: Symbol('ModelWasEnabled'),
+ PseudoStateForced: Symbol('PseudoStateForced'),
+ StyleSheetAdded: Symbol('StyleSheetAdded'),
+ StyleSheetChanged: Symbol('StyleSheetChanged'),
+ StyleSheetRemoved: Symbol('StyleSheetRemoved'),
+ SourceMapAttached: Symbol('SourceMapAttached'),
+ SourceMapDetached: Symbol('SourceMapDetached'),
+ SourceMapChanged: Symbol('SourceMapChanged')
+};
- /**
- * @param {number} nodeId
- * @param {string} name
- * @param {string} value
- */
- setEffectivePropertyValueForNode: function(nodeId, name, value)
- {
- this._agent.setEffectivePropertyValueForNode(nodeId, name, value);
- },
+WebInspector.CSSModel.MediaTypes =
+ ['all', 'braille', 'embossed', 'handheld', 'print', 'projection', 'screen', 'speech', 'tty', 'tv'];
- /**
- * @param {!WebInspector.DOMNode} node
- * @return {!Promise.<?WebInspector.CSSMatchedStyles>}
- */
- cachedMatchedCascadeForNode: function(node)
- {
- if (this._cachedMatchedCascadeNode !== node)
- this.discardCachedMatchedCascade();
- this._cachedMatchedCascadeNode = node;
- if (!this._cachedMatchedCascadePromise)
- this._cachedMatchedCascadePromise = this.matchedStylesPromise(node.id);
- return this._cachedMatchedCascadePromise;
- },
-
- discardCachedMatchedCascade: function()
- {
- delete this._cachedMatchedCascadeNode;
- delete this._cachedMatchedCascadePromise;
- },
-
- __proto__: WebInspector.SDKModel.prototype
-};
+WebInspector.CSSModel.PseudoStateMarker = 'pseudo-state-marker';
/**
- * @param {string} text
- * @return {string}
+ * @unrestricted
*/
-WebInspector.CSSModel.trimSourceURL = function(text)
-{
- var sourceURLIndex = text.lastIndexOf("/*# sourceURL=");
- if (sourceURLIndex === -1) {
- sourceURLIndex = text.lastIndexOf("/*@ sourceURL=");
- if (sourceURLIndex === -1)
- return text;
- }
- var sourceURLLineIndex = text.lastIndexOf("\n", sourceURLIndex);
- if (sourceURLLineIndex === -1)
- return text;
- var sourceURLLine = text.substr(sourceURLLineIndex + 1).split("\n", 1)[0];
- var sourceURLRegex = /[\040\t]*\/\*[#@] sourceURL=[\040\t]*([^\s]*)[\040\t]*\*\/[\040\t]*$/;
- if (sourceURLLine.search(sourceURLRegex) === -1)
- return text;
- return text.substr(0, sourceURLLineIndex) + text.substr(sourceURLLineIndex + sourceURLLine.length + 1);
+WebInspector.CSSModel.Edit = class {
+ /**
+ * @param {!CSSAgent.StyleSheetId} styleSheetId
+ * @param {!WebInspector.TextRange} oldRange
+ * @param {string} newText
+ * @param {?Object} payload
+ */
+ constructor(styleSheetId, oldRange, newText, payload) {
+ this.styleSheetId = styleSheetId;
+ this.oldRange = oldRange;
+ this.newRange = WebInspector.TextRange.fromEdit(oldRange, newText);
+ this.payload = payload;
+ }
};
/**
- * @constructor
- * @extends {WebInspector.SDKObject}
- * @param {!WebInspector.CSSStyleSheetHeader} header
- * @param {number} lineNumber
- * @param {number=} columnNumber
+ * @unrestricted
*/
-WebInspector.CSSLocation = function(header, lineNumber, columnNumber)
-{
- WebInspector.SDKObject.call(this, header.target());
+WebInspector.CSSLocation = class extends WebInspector.SDKObject {
+ /**
+ * @param {!WebInspector.CSSStyleSheetHeader} header
+ * @param {number} lineNumber
+ * @param {number=} columnNumber
+ */
+ constructor(header, lineNumber, columnNumber) {
+ super(header.target());
this._header = header;
this.styleSheetId = header.id;
this.url = header.resourceURL();
this.lineNumber = lineNumber;
this.columnNumber = columnNumber || 0;
-};
-
-WebInspector.CSSLocation.prototype = {
- /**
- * @return {!WebInspector.CSSModel}
- */
- cssModel: function()
- {
- return this._header.cssModel();
- },
-
- /**
- * @return {!WebInspector.CSSStyleSheetHeader}
- */
- header: function()
- {
- return this._header;
- },
-
- __proto__: WebInspector.SDKObject.prototype
+ }
+
+ /**
+ * @return {!WebInspector.CSSModel}
+ */
+ cssModel() {
+ return this._header.cssModel();
+ }
+
+ /**
+ * @return {!WebInspector.CSSStyleSheetHeader}
+ */
+ header() {
+ return this._header;
+ }
};
/**
- * @constructor
* @implements {CSSAgent.Dispatcher}
- * @param {!WebInspector.CSSModel} cssModel
+ * @unrestricted
*/
-WebInspector.CSSDispatcher = function(cssModel)
-{
+WebInspector.CSSDispatcher = class {
+ /**
+ * @param {!WebInspector.CSSModel} cssModel
+ */
+ constructor(cssModel) {
this._cssModel = cssModel;
-};
-
-WebInspector.CSSDispatcher.prototype = {
- /**
- * @override
- */
- mediaQueryResultChanged: function()
- {
- this._cssModel.mediaQueryResultChanged();
- },
-
- /**
- * @override
- */
- fontsUpdated: function()
- {
- this._cssModel.fontsUpdated();
- },
-
- /**
- * @override
- * @param {!CSSAgent.StyleSheetId} styleSheetId
- */
- styleSheetChanged: function(styleSheetId)
- {
- this._cssModel._fireStyleSheetChanged(styleSheetId);
- },
-
- /**
- * @override
- * @param {!CSSAgent.CSSStyleSheetHeader} header
- */
- styleSheetAdded: function(header)
- {
- this._cssModel._styleSheetAdded(header);
- },
-
- /**
- * @override
- * @param {!CSSAgent.StyleSheetId} id
- */
- styleSheetRemoved: function(id)
- {
- this._cssModel._styleSheetRemoved(id);
- },
-
- /**
- * @override
- * @param {!CSSAgent.StyleSheetId} id
- * @param {!CSSAgent.SourceRange} range
- */
- layoutEditorChange: function(id, range)
- {
- this._cssModel._layoutEditorChange(id, range);
- },
+ }
+
+ /**
+ * @override
+ */
+ mediaQueryResultChanged() {
+ this._cssModel.mediaQueryResultChanged();
+ }
+
+ /**
+ * @override
+ */
+ fontsUpdated() {
+ this._cssModel.fontsUpdated();
+ }
+
+ /**
+ * @override
+ * @param {!CSSAgent.StyleSheetId} styleSheetId
+ */
+ styleSheetChanged(styleSheetId) {
+ this._cssModel._fireStyleSheetChanged(styleSheetId);
+ }
+
+ /**
+ * @override
+ * @param {!CSSAgent.CSSStyleSheetHeader} header
+ */
+ styleSheetAdded(header) {
+ this._cssModel._styleSheetAdded(header);
+ }
+
+ /**
+ * @override
+ * @param {!CSSAgent.StyleSheetId} id
+ */
+ styleSheetRemoved(id) {
+ this._cssModel._styleSheetRemoved(id);
+ }
+
+ /**
+ * @override
+ * @param {!CSSAgent.StyleSheetId} id
+ * @param {!CSSAgent.SourceRange} range
+ */
+ layoutEditorChange(id, range) {
+ this._cssModel._layoutEditorChange(id, range);
+ }
};
/**
- * @constructor
- * @param {!WebInspector.CSSModel} cssModel
+ * @unrestricted
*/
-WebInspector.CSSModel.ComputedStyleLoader = function(cssModel)
-{
+WebInspector.CSSModel.ComputedStyleLoader = class {
+ /**
+ * @param {!WebInspector.CSSModel} cssModel
+ */
+ constructor(cssModel) {
this._cssModel = cssModel;
/** @type {!Map<!DOMAgent.NodeId, !Promise<?Map<string, string>>>} */
this._nodeIdToPromise = new Map();
-};
+ }
+
+ /**
+ * @param {!DOMAgent.NodeId} nodeId
+ * @return {!Promise<?Map<string, string>>}
+ */
+ computedStylePromise(nodeId) {
+ if (!this._nodeIdToPromise.has(nodeId))
+ this._nodeIdToPromise.set(
+ nodeId, this._cssModel._agent.getComputedStyleForNode(nodeId, parsePayload).then(cleanUp.bind(this)));
+
+ return /** @type {!Promise.<?Map.<string, string>>} */ (this._nodeIdToPromise.get(nodeId));
-WebInspector.CSSModel.ComputedStyleLoader.prototype = {
/**
- * @param {!DOMAgent.NodeId} nodeId
- * @return {!Promise<?Map<string, string>>}
+ * @param {?Protocol.Error} error
+ * @param {!Array.<!CSSAgent.CSSComputedStyleProperty>} computedPayload
+ * @return {?Map.<string, string>}
*/
- computedStylePromise: function(nodeId)
- {
- if (!this._nodeIdToPromise.has(nodeId))
- this._nodeIdToPromise.set(nodeId, this._cssModel._agent.getComputedStyleForNode(nodeId, parsePayload).then(cleanUp.bind(this)));
-
- return /** @type {!Promise.<?Map.<string, string>>} */(this._nodeIdToPromise.get(nodeId));
-
- /**
- * @param {?Protocol.Error} error
- * @param {!Array.<!CSSAgent.CSSComputedStyleProperty>} computedPayload
- * @return {?Map.<string, string>}
- */
- function parsePayload(error, computedPayload)
- {
- if (error || !computedPayload || !computedPayload.length)
- return null;
- var result = new Map();
- for (var property of computedPayload)
- result.set(property.name, property.value);
- return result;
- }
-
- /**
- * @param {?Map.<string, string>} computedStyle
- * @return {?Map.<string, string>}
- * @this {WebInspector.CSSModel.ComputedStyleLoader}
- */
- function cleanUp(computedStyle)
- {
- this._nodeIdToPromise.delete(nodeId);
- return computedStyle;
- }
+ function parsePayload(error, computedPayload) {
+ if (error || !computedPayload || !computedPayload.length)
+ return null;
+ var result = new Map();
+ for (var property of computedPayload)
+ result.set(property.name, property.value);
+ return result;
}
-};
-/**
- * @param {!WebInspector.Target} target
- * @return {?WebInspector.CSSModel}
- */
-WebInspector.CSSModel.fromTarget = function(target)
-{
- return /** @type {?WebInspector.CSSModel} */ (target.model(WebInspector.CSSModel));
+ /**
+ * @param {?Map.<string, string>} computedStyle
+ * @return {?Map.<string, string>}
+ * @this {WebInspector.CSSModel.ComputedStyleLoader}
+ */
+ function cleanUp(computedStyle) {
+ this._nodeIdToPromise.delete(nodeId);
+ return computedStyle;
+ }
+ }
};
-/**
- * @param {!WebInspector.DOMNode} node
- * @return {!WebInspector.CSSModel}
- */
-WebInspector.CSSModel.fromNode = function(node)
-{
- return /** @type {!WebInspector.CSSModel} */ (WebInspector.CSSModel.fromTarget(node.target()));
-};
/**
- * @constructor
- * @param {?WebInspector.CSSStyleDeclaration} inlineStyle
- * @param {?WebInspector.CSSStyleDeclaration} attributesStyle
+ * @unrestricted
*/
-WebInspector.CSSModel.InlineStyleResult = function(inlineStyle, attributesStyle)
-{
+WebInspector.CSSModel.InlineStyleResult = class {
+ /**
+ * @param {?WebInspector.CSSStyleDeclaration} inlineStyle
+ * @param {?WebInspector.CSSStyleDeclaration} attributesStyle
+ */
+ constructor(inlineStyle, attributesStyle) {
this.inlineStyle = inlineStyle;
this.attributesStyle = attributesStyle;
+ }
};

Powered by Google App Engine
This is Rietveld 408576698