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

Unified Diff: webkit/glue/devtools/js/dom_agent.js

Issue 99184: DevTools: Implement styles toggle:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 8 months 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
« no previous file with comments | « webkit/glue/devtools/js/devtools_host_stub.js ('k') | webkit/glue/devtools/js/inject.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/glue/devtools/js/dom_agent.js
===================================================================
--- webkit/glue/devtools/js/dom_agent.js (revision 14719)
+++ webkit/glue/devtools/js/dom_agent.js (working copy)
@@ -56,7 +56,6 @@
this.firstChild = null;
this.parentNode = null;
- this.styles_ = null;
this.disabledStyleProperties_ = {};
if (payload.length > devtools.PayloadIndex.CHILD_NODES) {
@@ -64,6 +63,10 @@
this.setChildrenPayload_(
payload[devtools.PayloadIndex.CHILD_NODES]);
}
+
+ this.computedStyle_ = null;
+ this.style = null;
+ this.matchedCSSRules_ = [];
};
@@ -222,13 +225,9 @@
*/
devtools.DomNode.prototype.addAttribute_ = function(name, value) {
var attr = {
- 'name': name,
- 'value': value,
- node_: this,
- /* Must be called after node.setStyles_. */
- get style() {
- return this.node_.styles_.attributes[this.name];
- }
+ 'name': name,
+ 'value': value,
+ node_: this
};
this.attributesMap_[name] = attr;
@@ -255,15 +254,6 @@
/**
- * Returns inline style (if styles has loaded). Must be called after
- * node.setStyles_.
- */
-devtools.DomNode.prototype.__defineGetter__('style', function() {
- return this.styles_.inlineStyle;
-});
-
-
-/**
* Makes available the following methods and properties:
* - node.style property
* - node.document.defaultView.getComputedStyles(node)
@@ -281,40 +271,37 @@
*/
devtools.DomNode.prototype.setStyles = function(computedStyle, inlineStyle,
styleAttributes, matchedCSSRules) {
- var styles = {};
- styles.computedStyle = this.makeStyle_(computedStyle);
- styles.inlineStyle = this.makeStyle_(inlineStyle);
+ this.computedStyle_ = this.makeStyle_(computedStyle);
+ this.style = this.makeStyle_(inlineStyle);
- styles.attributes = {};
for (var name in styleAttributes) {
- var style = this.makeStyle_(styleAttributes[name]);
- styles.attributes[name] = style;
+ if (this.attributesMap_[name]) {
+ this.attributesMap_[name].style =
+ this.makeStyle_(styleAttributes[name]);
+ }
}
- styles.matchedCSSRules = [];
+ this.matchedCSSRules_ = [];
for (var i = 0; i < matchedCSSRules.length; i++) {
var descr = matchedCSSRules[i];
- var selector = descr.selector;
- var style = this.makeStyle_(descr.style);
- var parentStyleSheet = undefined;
- if (descr.parentStyleSheetHref) {
- parentStyleSheet = {href: descr.parentStyleSheetHref};
+ var rule = {};
+ rule.selectorText = descr['selector'];
+ rule.style = this.makeStyle_(descr['style']);
- if (descr.parentStyleSheetOwnerNodeName) {
- parentStyleSheet.ownerNode =
- {nodeName: descr.parentStyleSheetOwnerNodeName};
+ if (descr['parentStyleSheet']) {
+ var parentStyleMock = {};
+ parentStyleMock.href = descr['parentStyleSheet']['href'];
+ var nodeName = descr['parentStyleSheet']['ownerNodeName'];
+ if (nodeName) {
+ parentStyleMock.ownerNode = {
+ 'nodeName': nodeName
+ };
}
+ rule.parentStyleSheet = parentStyleMock;
}
-
- styles.matchedCSSRules.push({
- 'selectorText': selector,
- 'style': style,
- 'parentStyleSheet': parentStyleSheet
- });
+ this.matchedCSSRules_.push(rule);
}
-
- this.styles_ = styles;
};
@@ -325,17 +312,24 @@
* @see devtools.CSSStyleDeclaration
*/
devtools.DomNode.prototype.makeStyle_ = function(payload) {
- return payload && new devtools.CSSStyleDeclaration(payload);
+ var style = new devtools.CSSStyleDeclaration(payload);
+ style.nodeId_ = this.id_;
+ return style;
};
/**
* Remove references to the style information to release
* resources when styles are not going to be used.
- * @see setStyles_.
+ * @see setStyles.
*/
devtools.DomNode.prototype.clearStyles = function() {
- this.styles_ = null;
+ this.computedStyle = null;
+ this.style = null;
+ for (var name in this.attributesMap_) {
+ this.attributesMap_[name].style = null;
+ }
+ this.matchedCSSRules_ = null;
};
@@ -450,19 +444,17 @@
/**
- * Simulates the DOM interface for styles. Must be called after
- * node.setStyles_.
+ * Simulates the DOM interface for styles.
* @param {devtools.DomNode} node
* @return {CSSStyleDescription}
*/
devtools.DomWindow.prototype.getComputedStyle = function(node) {
- return node.styles_.computedStyle;
+ return node.computedStyle_;
};
/**
- * Simulates the DOM interface for styles. Must be called after
- * node.setStyles_.
+ * Simulates the DOM interface for styles.
* @param {devtools.DomNode} nodeStyles
* @param {string} pseudoElement assumed to be empty string.
* @param {boolean} authorOnly assumed to be equal to authorOnly argument of
@@ -471,7 +463,7 @@
*/
devtools.DomWindow.prototype.getMatchedCSSRules = function(node,
pseudoElement, authorOnly) {
- return node.styles_.matchedCSSRules;
+ return node.matchedCSSRules_;
};
@@ -837,9 +829,11 @@
*/
devtools.DomAgent.prototype.getNodePropertiesAsync = function(nodeId,
path, protoDepth, callback) {
- var callbackId = devtools.Callback.wrap(callback);
+ var mycallback =
+ goog.bind(this.utilityFunctionCallbackWrapper_, this, callback);
+ var callbackId = devtools.Callback.wrap(mycallback);
RemoteToolsAgent.ExecuteUtilityFunction(callbackId,
- 'devtools$$getProperties', nodeId,
+ 'getProperties', nodeId,
goog.json.serialize([path, protoDepth]));
};
@@ -851,9 +845,11 @@
*/
devtools.DomAgent.prototype.getNodePrototypesAsync = function(nodeId,
callback) {
- var callbackId = devtools.Callback.wrap(callback);
+ var mycallback =
+ goog.bind(this.utilityFunctionCallbackWrapper_, this, callback);
+ var callbackId = devtools.Callback.wrap(mycallback);
RemoteToolsAgent.ExecuteUtilityFunction(callbackId,
- 'devtools$$getPrototypes', nodeId, '');
+ 'getPrototypes', nodeId, '[]');
};
@@ -865,37 +861,76 @@
*/
devtools.DomAgent.prototype.getNodeStylesAsync = function(node,
authorOnly, callback) {
- var callbackId = devtools.Callback.wrap(callback);
+ var mycallback =
+ goog.bind(this.utilityFunctionCallbackWrapper_, this, callback);
+ var callbackId = devtools.Callback.wrap(mycallback);
RemoteToolsAgent.ExecuteUtilityFunction(callbackId,
- 'devtools$$getStyles',
+ 'getStyles',
node.id_,
- goog.json.serialize(authorOnly));
+ goog.json.serialize([authorOnly]));
};
/**
+ * Toggles style with given id on/off.
+ * @param {devtools.CSSStyleDeclaration} style Style to toggle.
+ * @param {boolean} enabled True if style should be enabled.
+ * @param {string} name Style name.
+ * @param {Function} callback.
+ */
+devtools.DomAgent.prototype.toggleNodeStyleAsync = function(
+ style, enabled, name, callback) {
+ var mycallback =
+ goog.bind(this.utilityFunctionCallbackWrapper_, this, callback);
+ var callbackId = devtools.Callback.wrap(mycallback);
+ RemoteToolsAgent.ExecuteUtilityFunction(callbackId,
+ 'toggleNodeStyle',
+ style.nodeId_,
+ goog.json.serialize([style.id_, enabled, name]));
+};
+
+
+/**
+ * Dumps exception if something went wrong in ExecuteUtilityFunction.
+ */
+devtools.DomAgent.prototype.utilityFunctionCallbackWrapper_ =
+ function(callback, result, exception) {
+ if (exception && exception.length) {
+ debugPrint('Exception in ExecuteUtilityFunction styles:' + exception);
+ return;
+ }
+ callback(result);
+};
+
+
+/**
* Represents remote CSSStyleDeclaration for using in StyleSidebarPane.
- * @param {Array<Object>} payload built by devtools$$getStyle from the injected
- * js.
- * @consctuctor
+ * @param {id, Array<Object>} payload built by inject's getStyle from the
+ * injected js.
+ * @constructor
*/
devtools.CSSStyleDeclaration = function(payload) {
- this.length = payload.length;
+ this.id_ = payload[0];
+ this.__disabledProperties = payload[1];
+ this.__disabledPropertyValues = payload[2];
+ this.__disabledPropertyPriorities = payload[3];
+
+ this.length = payload.length - 4;
this.priority_ = {};
this.implicit_ = {};
this.shorthand_ = {};
this.value_ = {};
- for (var i = 0; i < payload.length; ++i) {
+ for (var i = 4; i < payload.length; ++i) {
var p = payload[i];
var name = p[0];
-
+
this.priority_[name] = p[1];
this.implicit_[name] = p[2];
this.shorthand_[name] = p[3];
this.value_[name] = p[4];
- this[i] = name;
+ this[i - 4] = name;
}
};
« no previous file with comments | « webkit/glue/devtools/js/devtools_host_stub.js ('k') | webkit/glue/devtools/js/inject.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698