StylesSidebarPane.js revision 81bc750723a18f21cd17d1b173cd2a4dda9cea6e
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Apple Inc. All rights reserved. 30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Joseph Pecoraro 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * its contributors may be used to endorse or promote products derived 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * from this software without specific prior written permission. 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenWebInspector.StylesSidebarPane = function(computedStylePane) 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebInspector.SidebarPane.call(this, WebInspector.UIString("Styles")); 33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 34231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.settingsSelectElement = document.createElement("select"); 35231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var option = document.createElement("option"); 374576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang option.value = "original"; 384576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang option.action = this._changeColorFormat.bind(this); 394576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang option.label = WebInspector.UIString("As Authored"); 404576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this.settingsSelectElement.appendChild(option); 414576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 424576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang var option = document.createElement("option"); 43231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block option.value = "hex"; 44231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block option.action = this._changeColorFormat.bind(this); 45231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block option.label = WebInspector.UIString("Hex Colors"); 46231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.settingsSelectElement.appendChild(option); 47231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 48231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block option = document.createElement("option"); 49231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block option.value = "rgb"; 50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block option.action = this._changeColorFormat.bind(this); 51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block option.label = WebInspector.UIString("RGB Colors"); 52231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.settingsSelectElement.appendChild(option); 53231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 54231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block option = document.createElement("option"); 55231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block option.value = "hsl"; 56231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block option.action = this._changeColorFormat.bind(this); 57231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block option.label = WebInspector.UIString("HSL Colors"); 58231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.settingsSelectElement.appendChild(option); 59231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 60231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.settingsSelectElement.appendChild(document.createElement("hr")); 61231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 62231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block option = document.createElement("option"); 63231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block option.action = this._createNewRule.bind(this); 64231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block option.label = WebInspector.UIString("New Style Rule"); 65231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.settingsSelectElement.appendChild(option); 66231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 67231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.settingsSelectElement.addEventListener("click", function(event) { event.stopPropagation() }, false); 68231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.settingsSelectElement.addEventListener("change", this._changeSetting.bind(this), false); 6928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu var format = WebInspector.settings.colorFormat; 704576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (format === "original") 71e14391e94c850b8bd03680c23b38978db68687a8John Reck this.settingsSelectElement[0].selected = true; 724576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang else if (format === "hex") 73e14391e94c850b8bd03680c23b38978db68687a8John Reck this.settingsSelectElement[1].selected = true; 744576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang else if (format === "rgb") 75e14391e94c850b8bd03680c23b38978db68687a8John Reck this.settingsSelectElement[2].selected = true; 764576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang else if (format === "hsl") 774576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this.settingsSelectElement[3].selected = true; 788a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 79231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.titleElement.appendChild(this.settingsSelectElement); 806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this._computedStylePane = computedStylePane; 8168513a70bcd92384395513322f1b801e7bf9c729Steve Block this.element.addEventListener("contextmenu", this._contextMenuEventFired.bind(this), true); 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 84ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWebInspector.StylesSidebarPane.StyleValueDelimiters = " \t\n\"':;,/()"; 85ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 86dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block// Taken from http://www.w3.org/TR/CSS21/propidx.html. 87dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebInspector.StylesSidebarPane.InheritedProperties = [ 88dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "azimuth", "border-collapse", "border-spacing", "caption-side", "color", "cursor", "direction", "elevation", 89dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "empty-cells", "font-family", "font-size", "font-style", "font-variant", "font-weight", "font", "letter-spacing", 90dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "line-height", "list-style-image", "list-style-position", "list-style-type", "list-style", "orphans", "pitch-range", 91dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "pitch", "quotes", "richness", "speak-header", "speak-numeral", "speak-punctuation", "speak", "speech-rate", "stress", 926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen "text-align", "text-indent", "text-transform", "text-shadow", "visibility", "voice-family", "volume", "white-space", "widows", "word-spacing" 93dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block].keySet(); 94dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 95dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block// Keep in sync with RenderStyleConstants.h PseudoId enum. Array below contains pseudo id names for corresponding enum indexes. 96dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block// First item is empty due to its artificial NOPSEUDO nature in the enum. 97dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block// FIXME: find a way of generating this mapping or getting it from combination of RenderStyleConstants and CSSSelector.cpp at 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block// runtime. 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebInspector.StylesSidebarPane.PseudoIdNames = [ 100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "", "first-line", "first-letter", "before", "after", "selection", "", "-webkit-scrollbar", "-webkit-file-upload-button", 101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "-webkit-input-placeholder", "-webkit-slider-thumb", "-webkit-search-cancel-button", "-webkit-search-decoration", 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "-webkit-search-results-decoration", "-webkit-search-results-button", "-webkit-media-controls-panel", 103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "-webkit-media-controls-play-button", "-webkit-media-controls-mute-button", "-webkit-media-controls-timeline", 104dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "-webkit-media-controls-timeline-container", "-webkit-media-controls-volume-slider", 105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "-webkit-media-controls-volume-slider-container", "-webkit-media-controls-current-time-display", 106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "-webkit-media-controls-time-remaining-display", "-webkit-media-controls-seek-back-button", "-webkit-media-controls-seek-forward-button", 107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "-webkit-media-controls-fullscreen-button", "-webkit-media-controls-rewind-button", "-webkit-media-controls-return-to-realtime-button", 108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "-webkit-media-controls-toggle-closed-captions-button", "-webkit-media-controls-status-display", "-webkit-scrollbar-thumb", 109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "-webkit-scrollbar-button", "-webkit-scrollbar-track", "-webkit-scrollbar-track-piece", "-webkit-scrollbar-corner", 110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "-webkit-resizer", "-webkit-input-list-button", "-webkit-inner-spin-button", "-webkit-outer-spin-button" 111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block]; 112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.StylesSidebarPane.prototype = { 11468513a70bcd92384395513322f1b801e7bf9c729Steve Block _contextMenuEventFired: function(event) 11568513a70bcd92384395513322f1b801e7bf9c729Steve Block { 11668513a70bcd92384395513322f1b801e7bf9c729Steve Block var href = event.target.enclosingNodeOrSelfWithClass("webkit-html-resource-link") || event.target.enclosingNodeOrSelfWithClass("webkit-html-external-link"); 11768513a70bcd92384395513322f1b801e7bf9c729Steve Block if (href) { 11868513a70bcd92384395513322f1b801e7bf9c729Steve Block var contextMenu = new WebInspector.ContextMenu(); 11968513a70bcd92384395513322f1b801e7bf9c729Steve Block var filled = WebInspector.panels.elements.populateHrefContextMenu(contextMenu, event, href); 12068513a70bcd92384395513322f1b801e7bf9c729Steve Block if (filled) 12168513a70bcd92384395513322f1b801e7bf9c729Steve Block contextMenu.show(event); 12268513a70bcd92384395513322f1b801e7bf9c729Steve Block } 12368513a70bcd92384395513322f1b801e7bf9c729Steve Block }, 12468513a70bcd92384395513322f1b801e7bf9c729Steve Block 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project update: function(node, editedSection, forceUpdate) 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var refresh = false; 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (forceUpdate) 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete this.node; 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!forceUpdate && (!node || node === this.node)) 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project refresh = true; 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (node && node.nodeType === Node.TEXT_NODE && node.parentNode) 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project node = node.parentNode; 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (node && node.nodeType !== Node.ELEMENT_NODE) 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project node = null; 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (node) 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.node = node; 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project node = this.node; 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 146643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!node) { 1476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this.bodyElement.removeChildren(); 1486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this._computedStylePane.bodyElement.removeChildren(); 149dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.sections = {}; 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 151643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 153545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch function stylesCallback(styles) 154231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 155dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (styles) 156dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this._rebuildUpdate(node, styles); 157231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 158231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 159545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch function computedStyleCallback(computedStyle) 160dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 161dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (computedStyle) 162dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this._refreshUpdate(node, computedStyle, editedSection); 163e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 164dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 165dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (refresh) 166545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch WebInspector.cssModel.getComputedStyleAsync(node.id, computedStyleCallback.bind(this)); 167dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 168e14391e94c850b8bd03680c23b38978db68687a8John Reck WebInspector.cssModel.getStylesAsync(node.id, stylesCallback.bind(this)); 1690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 171dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _refreshUpdate: function(node, computedStyle, editedSection) 1720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 173dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (var pseudoId in this.sections) { 174dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var styleRules = this._refreshStyleRules(this.sections[pseudoId], computedStyle); 175dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var usedProperties = {}; 176dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var disabledComputedProperties = {}; 177dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this._markUsedProperties(styleRules, usedProperties, disabledComputedProperties); 178dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this._refreshSectionsForStyleRules(styleRules, usedProperties, disabledComputedProperties, editedSection); 1790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 180e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // Trace the computed style. 181e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.sections[0][0].rebuildComputedTrace(this.sections[0]); 182dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }, 1830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 184dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _rebuildUpdate: function(node, styles) 185dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 186dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.bodyElement.removeChildren(); 1876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this._computedStylePane.bodyElement.removeChildren(); 188e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 189dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var styleRules = this._rebuildStyleRules(node, styles); 190dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var usedProperties = {}; 191dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var disabledComputedProperties = {}; 192dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this._markUsedProperties(styleRules, usedProperties, disabledComputedProperties); 193dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.sections[0] = this._rebuildSectionsForStyleRules(styleRules, usedProperties, disabledComputedProperties, 0); 194e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var anchorElement = this.sections[0].inheritedPropertiesSeparatorElement; 195e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // Trace the computed style. 196e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.sections[0][0].rebuildComputedTrace(this.sections[0]); 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 198dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (var i = 0; i < styles.pseudoElements.length; ++i) { 199dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var pseudoElementCSSRules = styles.pseudoElements[i]; 200dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 201dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block styleRules = []; 202dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var pseudoId = pseudoElementCSSRules.pseudoId; 203dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 204dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var entry = { isStyleSeparator: true, pseudoId: pseudoId }; 205dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block styleRules.push(entry); 206dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 207dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Add rules in reverse order to match the cascade order. 208dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (var j = pseudoElementCSSRules.rules.length - 1; j >= 0; --j) { 209e14391e94c850b8bd03680c23b38978db68687a8John Reck var rule = pseudoElementCSSRules.rules[j]; 2104576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang styleRules.push({ style: rule.style, selectorText: rule.selectorText, sourceURL: rule.sourceURL, rule: rule, editable: !!(rule.style && rule.style.id) }); 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 212dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block usedProperties = {}; 213dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block disabledComputedProperties = {}; 214dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this._markUsedProperties(styleRules, usedProperties, disabledComputedProperties); 215e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.sections[pseudoId] = this._rebuildSectionsForStyleRules(styleRules, usedProperties, disabledComputedProperties, pseudoId, anchorElement); 216dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 217dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }, 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 219dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _refreshStyleRules: function(sections, computedStyle) 220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 221e14391e94c850b8bd03680c23b38978db68687a8John Reck var nodeComputedStyle = computedStyle; 222dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var styleRules = []; 223dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (var i = 0; sections && i < sections.length; ++i) { 224dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var section = sections[i]; 225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (section instanceof WebInspector.BlankStylePropertiesSection) 226dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block continue; 227dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (section.computedStyle) 228dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block section.styleRule.style = nodeComputedStyle; 2294576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang var styleRule = { section: section, style: section.styleRule.style, computedStyle: section.computedStyle, rule: section.rule, editable: !!(section.styleRule.style && section.styleRule.style.id) }; 230dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block styleRules.push(styleRule); 231dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 232dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return styleRules; 233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }, 234dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 235dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _rebuildStyleRules: function(node, styles) 236dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 237e14391e94c850b8bd03680c23b38978db68687a8John Reck var nodeComputedStyle = styles.computedStyle; 238dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.sections = {}; 239dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 240dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var styleRules = []; 241dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 2426c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen styleRules.push({ computedStyle: true, selectorText: "", style: nodeComputedStyle, editable: false }); 243dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 244dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var styleAttributes = {}; 245dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (var name in styles.styleAttributes) { 246e14391e94c850b8bd03680c23b38978db68687a8John Reck var attrStyle = { style: styles.styleAttributes[name], editable: false }; 247dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block attrStyle.selectorText = WebInspector.panels.elements.treeOutline.nodeNameToCorrectCase(node.nodeName) + "[" + name; 248dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (node.getAttribute(name)) 249dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block attrStyle.selectorText += "=" + node.getAttribute(name); 250dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block attrStyle.selectorText += "]"; 251dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block styleRules.push(attrStyle); 252dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 253dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 254dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Show element's Style Attributes 255dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (styles.inlineStyle && node.nodeType === Node.ELEMENT_NODE) { 256e14391e94c850b8bd03680c23b38978db68687a8John Reck var inlineStyle = { selectorText: "element.style", style: styles.inlineStyle, isAttribute: true }; 257dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block styleRules.push(inlineStyle); 258dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 259dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 260dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Add rules in reverse order to match the cascade order. 2616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (styles.matchedCSSRules.length) 2626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen styleRules.push({ isStyleSeparator: true, text: WebInspector.UIString("Matched CSS Rules") }); 263dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (var i = styles.matchedCSSRules.length - 1; i >= 0; --i) { 264e14391e94c850b8bd03680c23b38978db68687a8John Reck var rule = styles.matchedCSSRules[i]; 2654576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang styleRules.push({ style: rule.style, selectorText: rule.selectorText, sourceURL: rule.sourceURL, rule: rule, editable: !!(rule.style && rule.style.id) }); 266dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 267dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 268dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Walk the node structure and identify styles with inherited properties. 269dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var parentNode = node.parentNode; 270dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block function insertInheritedNodeSeparator(node) 271dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 272dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var entry = {}; 273dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block entry.isStyleSeparator = true; 274dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block entry.node = node; 275dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block styleRules.push(entry); 276dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 277dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 278e14391e94c850b8bd03680c23b38978db68687a8John Reck for (var parentOrdinal = 0; parentOrdinal < styles.inherited.length; ++parentOrdinal) { 279e14391e94c850b8bd03680c23b38978db68687a8John Reck var parentStyles = styles.inherited[parentOrdinal]; 280dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var separatorInserted = false; 281dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (parentStyles.inlineStyle) { 282dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (this._containsInherited(parentStyles.inlineStyle)) { 283e14391e94c850b8bd03680c23b38978db68687a8John Reck var inlineStyle = { selectorText: WebInspector.UIString("Style Attribute"), style: parentStyles.inlineStyle, isAttribute: true, isInherited: true }; 284dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!separatorInserted) { 285dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block insertInheritedNodeSeparator(parentNode); 286dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block separatorInserted = true; 287dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 288dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block styleRules.push(inlineStyle); 289dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 292dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (var i = parentStyles.matchedCSSRules.length - 1; i >= 0; --i) { 293dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var rulePayload = parentStyles.matchedCSSRules[i]; 294dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!this._containsInherited(rulePayload.style)) 295dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block continue; 296e14391e94c850b8bd03680c23b38978db68687a8John Reck var rule = rulePayload; 297dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!separatorInserted) { 298dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block insertInheritedNodeSeparator(parentNode); 299dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block separatorInserted = true; 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3014576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang styleRules.push({ style: rule.style, selectorText: rule.selectorText, sourceURL: rule.sourceURL, rule: rule, isInherited: true, editable: !!(rule.style && rule.style.id) }); 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 303dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block parentNode = parentNode.parentNode; 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 305dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return styleRules; 306dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }, 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _markUsedProperties: function(styleRules, usedProperties, disabledComputedProperties) 309dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var priorityUsed = false; 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Walk the style rules and make a list of all used and overloaded properties. 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var i = 0; i < styleRules.length; ++i) { 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var styleRule = styleRules[i]; 315dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (styleRule.computedStyle || styleRule.isStyleSeparator) 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project continue; 3170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (styleRule.section && styleRule.section.noAffect) 3180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch continue; 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleRule.usedProperties = {}; 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var style = styleRule.style; 323e14391e94c850b8bd03680c23b38978db68687a8John Reck var allProperties = style.allProperties; 324e14391e94c850b8bd03680c23b38978db68687a8John Reck for (var j = 0; j < allProperties.length; ++j) { 325e14391e94c850b8bd03680c23b38978db68687a8John Reck var property = allProperties[j]; 326e14391e94c850b8bd03680c23b38978db68687a8John Reck if (!property.isLive) 327e14391e94c850b8bd03680c23b38978db68687a8John Reck continue; 328e14391e94c850b8bd03680c23b38978db68687a8John Reck var name = property.name; 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 330e14391e94c850b8bd03680c23b38978db68687a8John Reck if (!priorityUsed && property.priority.length) 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project priorityUsed = true; 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If the property name is already used by another rule then this rule's 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // property is overloaded, so don't add it to the rule's usedProperties. 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!(name in usedProperties)) 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleRule.usedProperties[name] = true; 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (name === "font") { 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The font property is not reported as a shorthand. Report finding the individual 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // properties so they are visible in computed style. 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: remove this when http://bugs.webkit.org/show_bug.cgi?id=15598 is fixed. 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleRule.usedProperties["font-family"] = true; 3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleRule.usedProperties["font-size"] = true; 3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleRule.usedProperties["font-style"] = true; 3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleRule.usedProperties["font-variant"] = true; 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleRule.usedProperties["font-weight"] = true; 3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleRule.usedProperties["line-height"] = true; 3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Add all the properties found in this style to the used properties list. 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Do this here so only future rules are affect by properties used in this rule. 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var name in styleRules[i].usedProperties) 3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project usedProperties[name] = true; 3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (priorityUsed) { 3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Walk the properties again and account for !important. 3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var foundPriorityProperties = []; 3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Walk in reverse to match the order !important overrides. 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var i = (styleRules.length - 1); i >= 0; --i) { 363dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (styleRules[i].computedStyle || styleRules[i].isStyleSeparator) 3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project continue; 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var style = styleRules[i].style; 367e14391e94c850b8bd03680c23b38978db68687a8John Reck var allProperties = style.allProperties; 368e14391e94c850b8bd03680c23b38978db68687a8John Reck for (var j = 0; j < allProperties.length; ++j) { 369e14391e94c850b8bd03680c23b38978db68687a8John Reck var property = allProperties[j]; 370e14391e94c850b8bd03680c23b38978db68687a8John Reck if (!property.isLive) 371e14391e94c850b8bd03680c23b38978db68687a8John Reck continue; 372e14391e94c850b8bd03680c23b38978db68687a8John Reck var name = property.name; 373e14391e94c850b8bd03680c23b38978db68687a8John Reck if (property.priority.length) { 3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!(name in foundPriorityProperties)) 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleRules[i].usedProperties[name] = true; 3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete styleRules[i].usedProperties[name]; 3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project foundPriorityProperties[name] = true; 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (name in foundPriorityProperties) 3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete styleRules[i].usedProperties[name]; 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 384dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }, 385dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 386dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _refreshSectionsForStyleRules: function(styleRules, usedProperties, disabledComputedProperties, editedSection) 387dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 388dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Walk the style rules and update the sections with new overloaded and used properties. 389dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (var i = 0; i < styleRules.length; ++i) { 390dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var styleRule = styleRules[i]; 391dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var section = styleRule.section; 392e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (styleRule.computedStyle) { 393e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block section._disabledComputedProperties = disabledComputedProperties; 394e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block section._usedProperties = usedProperties; 395e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block section.update(); 396e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } else { 397e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block section._usedProperties = styleRule.usedProperties; 398e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block section.update(section === editedSection); 399e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 400dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 401dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }, 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 403e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block _rebuildSectionsForStyleRules: function(styleRules, usedProperties, disabledComputedProperties, pseudoId, anchorElement) 404dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 405dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Make a property section for each style rule. 406dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var sections = []; 4076c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen var lastWasSeparator = true; 408dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (var i = 0; i < styleRules.length; ++i) { 409dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var styleRule = styleRules[i]; 410dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (styleRule.isStyleSeparator) { 411dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var separatorElement = document.createElement("div"); 412dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block separatorElement.className = "styles-sidebar-separator"; 413dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (styleRule.node) { 41421939df44de1705786c545cd1bf519d47250322dBen Murdoch var link = WebInspector.panels.elements.linkifyNodeReference(styleRule.node); 415dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block separatorElement.appendChild(document.createTextNode(WebInspector.UIString("Inherited from") + " ")); 416dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block separatorElement.appendChild(link); 417e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (!sections.inheritedPropertiesSeparatorElement) 418e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block sections.inheritedPropertiesSeparatorElement = separatorElement; 419dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if ("pseudoId" in styleRule) { 420dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var pseudoName = WebInspector.StylesSidebarPane.PseudoIdNames[styleRule.pseudoId]; 421dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (pseudoName) 422dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block separatorElement.textContent = WebInspector.UIString("Pseudo ::%s element", pseudoName); 423dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 424dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block separatorElement.textContent = WebInspector.UIString("Pseudo element"); 4256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen } else 4266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen separatorElement.textContent = styleRule.text; 427e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.bodyElement.insertBefore(separatorElement, anchorElement); 4286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen lastWasSeparator = true; 429dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block continue; 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 431dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var computedStyle = styleRule.computedStyle; 432dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 433dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Default editable to true if it was omitted. 434dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var editable = styleRule.editable; 435dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (typeof editable === "undefined") 436dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block editable = true; 437dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 438dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (computedStyle) 439e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var section = new WebInspector.ComputedStylePropertiesSection(styleRule, usedProperties, disabledComputedProperties, styleRules); 440e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block else 44181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch var section = new WebInspector.StylePropertiesSection(this, styleRule, editable, styleRule.isInherited, lastWasSeparator); 442dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block section.pane = this; 4436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen section.expanded = true; 444dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 4456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (computedStyle) { 4466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this._computedStylePane.bodyElement.appendChild(section.element); 4476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen lastWasSeparator = true; 4486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen } else { 449e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.bodyElement.insertBefore(section.element, anchorElement); 4506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen lastWasSeparator = false; 4516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen } 452dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sections.push(section); 453dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 454dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sections; 455dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }, 456dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 457e14391e94c850b8bd03680c23b38978db68687a8John Reck _containsInherited: function(style) 4586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen { 459e14391e94c850b8bd03680c23b38978db68687a8John Reck var properties = style.allProperties; 4606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen for (var i = 0; i < properties.length; ++i) { 4616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen var property = properties[i]; 462545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // Does this style contain non-overridden inherited property? 463e14391e94c850b8bd03680c23b38978db68687a8John Reck if (property.isLive && property.name in WebInspector.StylesSidebarPane.InheritedProperties) 464dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return true; 465231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 466dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 467231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 4680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 469231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block _changeSetting: function(event) 470231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 471231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var options = this.settingsSelectElement.options; 472231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var selectedOption = options[this.settingsSelectElement.selectedIndex]; 473231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block selectedOption.action(event); 474231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 475231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Select the correct color format setting again, since it needs to be selected. 476231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var selectedIndex = 0; 477231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block for (var i = 0; i < options.length; ++i) { 47828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (options[i].value === WebInspector.settings.colorFormat) { 479231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block selectedIndex = i; 480231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block break; 481231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 483231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 484231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.settingsSelectElement.selectedIndex = selectedIndex; 4850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 4860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 487231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block _changeColorFormat: function(event) 4880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 489231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var selectedOption = this.settingsSelectElement[this.settingsSelectElement.selectedIndex]; 49028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu WebInspector.settings.colorFormat = selectedOption.value; 4910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 492dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (var pseudoId in this.sections) { 493dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var sections = this.sections[pseudoId]; 494dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (var i = 0; i < sections.length; ++i) 495dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sections[i].update(true); 496dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 4970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 4980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 499231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block _createNewRule: function(event) 5000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 501231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.addBlankSection().startEditingSelector(); 502231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 5030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 504231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block addBlankSection: function() 505231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 50681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch var blankSection = new WebInspector.BlankStylePropertiesSection(this, appropriateSelectorForNode(this.node, true)); 507231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block blankSection.pane = this; 5080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 509dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var elementStyleSection = this.sections[0][1]; 510231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.bodyElement.insertBefore(blankSection.element, elementStyleSection.element.nextSibling); 5110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 512dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.sections[0].splice(2, 0, blankSection); 5130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 514231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return blankSection; 515231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 516231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 517231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block removeSection: function(section) 518231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 519dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (var pseudoId in this.sections) { 520dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var sections = this.sections[pseudoId]; 521dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var index = sections.indexOf(section); 522dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (index === -1) 523dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block continue; 524dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sections.splice(index, 1); 525dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (section.element.parentNode) 526dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block section.element.parentNode.removeChild(section.element); 527dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 5286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen }, 5296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 5306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen registerShortcuts: function() 5316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen { 5326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen var section = WebInspector.shortcutsHelp.section(WebInspector.UIString("Styles Pane")); 5336c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen var shortcut = WebInspector.KeyboardShortcut; 5346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen var keys = [ 5356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.Tab), 5366c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.Tab, shortcut.Modifiers.Shift) 5376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ]; 5386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen section.addRelatedKeys(keys, WebInspector.UIString("Next/previous property")); 5396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen keys = [ 5406c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.Up), 5416c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.Down) 5426c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ]; 5436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen section.addRelatedKeys(keys, WebInspector.UIString("Increment/decrement value")); 5446c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen keys = [ 5456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.Up, shortcut.Modifiers.Shift), 5466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.Down, shortcut.Modifiers.Shift) 5476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ]; 5486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen section.addRelatedKeys(keys, WebInspector.UIString("Increment/decrement by %f", 10)); 5496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen keys = [ 5506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.PageUp), 5516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.PageDown) 5526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ]; 5536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen section.addRelatedKeys(keys, WebInspector.UIString("Increment/decrement by %f", 10)); 5546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen keys = [ 5556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.PageUp, shortcut.Modifiers.Shift), 5566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.PageDown, shortcut.Modifiers.Shift) 5576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ]; 5586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen section.addRelatedKeys(keys, WebInspector.UIString("Increment/decrement by %f", 100)); 5596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen keys = [ 5606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.PageUp, shortcut.Modifiers.Alt), 5616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.PageDown, shortcut.Modifiers.Alt) 5626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ]; 5636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen section.addRelatedKeys(keys, WebInspector.UIString("Increment/decrement by %f", 0.1)); 5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.StylesSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype; 5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenWebInspector.ComputedStyleSidebarPane = function() 5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen WebInspector.SidebarPane.call(this, WebInspector.UIString("Computed Style")); 5726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen var showInheritedCheckbox = new WebInspector.Checkbox(WebInspector.UIString("Show inherited"), "sidebar-pane-subtitle"); 5736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this.titleElement.appendChild(showInheritedCheckbox.element); 574231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 57528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (WebInspector.settings.showInheritedComputedStyleProperties) { 576e14391e94c850b8bd03680c23b38978db68687a8John Reck this.bodyElement.addStyleClass("show-inherited"); 577e14391e94c850b8bd03680c23b38978db68687a8John Reck showInheritedCheckbox.checked = true; 5786c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen } 5796c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 5806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen function showInheritedToggleFunction(event) 5816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen { 58228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu WebInspector.settings.showInheritedComputedStyleProperties = showInheritedCheckbox.checked; 58328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (WebInspector.settings.showInheritedComputedStyleProperties) 5846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this.bodyElement.addStyleClass("show-inherited"); 5856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen else 5866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this.bodyElement.removeStyleClass("show-inherited"); 5876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen } 5886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 5896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen showInheritedCheckbox.addEventListener(showInheritedToggleFunction.bind(this)); 5906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen} 591545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 5926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenWebInspector.ComputedStyleSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype; 5936c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 59481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochWebInspector.StylePropertiesSection = function(parentPane, styleRule, editable, isInherited, isFirstSection) 5956c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 5966c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen WebInspector.PropertiesSection.call(this, ""); 5976c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this.element.className = "styles-section monospace" + (isFirstSection ? " first-styles-section" : ""); 5986c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 5996c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this._selectorElement = document.createElement("span"); 6006c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this._selectorElement.textContent = styleRule.selectorText; 6016c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this.titleElement.appendChild(this._selectorElement); 6026b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (Preferences.debugMode) 6036b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this._selectorElement.addEventListener("click", this._debugShowStyle.bind(this), false); 6046c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 605e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var openBrace = document.createElement("span"); 606e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block openBrace.textContent = " {"; 607e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.titleElement.appendChild(openBrace); 6086c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 609e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var closeBrace = document.createElement("div"); 610e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block closeBrace.textContent = "}"; 611e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.element.appendChild(closeBrace); 6126c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 6136c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this._selectorElement.addEventListener("dblclick", this._handleSelectorDoubleClick.bind(this), false); 614dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.element.addEventListener("dblclick", this._handleEmptySpaceDoubleClick.bind(this), false); 6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 61681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch this._parentPane = parentPane; 6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.styleRule = styleRule; 6180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.rule = this.styleRule.rule; 619e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.editable = editable; 620dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.isInherited = isInherited; 6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Prevent editing the user agent and user rules. 623231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var isUserAgent = this.rule && this.rule.isUserAgent; 624231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var isUser = this.rule && this.rule.isUser; 625231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var isViaInspector = this.rule && this.rule.isViaInspector; 6260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isUserAgent || isUser) 6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.editable = false; 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 630e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._usedProperties = styleRule.usedProperties; 6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 632dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (this.rule) 633dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.titleElement.addStyleClass("styles-selector"); 634dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 635e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block function linkifyUncopyable(url, line) 636e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block { 637e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var link = WebInspector.linkifyResourceAsNode(url, "resources", line + 1); 638e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block link.setAttribute("data-uncopyable", link.textContent); 639e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block link.textContent = ""; 640e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return link; 6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 643e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var subtitle = ""; 644e14391e94c850b8bd03680c23b38978db68687a8John Reck if (this.styleRule.sourceURL) 645e14391e94c850b8bd03680c23b38978db68687a8John Reck this.subtitleElement.appendChild(linkifyUncopyable(this.styleRule.sourceURL, this.rule.sourceLine)); 646e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block else if (isUserAgent) 647e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block subtitle = WebInspector.UIString("user agent stylesheet"); 648e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block else if (isUser) 649e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block subtitle = WebInspector.UIString("user stylesheet"); 650e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block else if (isViaInspector) 651e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block subtitle = WebInspector.UIString("via inspector"); 652e14391e94c850b8bd03680c23b38978db68687a8John Reck else if (this.rule && this.rule.sourceURL) 653e14391e94c850b8bd03680c23b38978db68687a8John Reck this.subtitleElement.appendChild(linkifyUncopyable(this.rule.sourceURL, this.rule.sourceLine)); 654e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 655e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (isInherited) 656e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.element.addStyleClass("show-inherited"); // This one is related to inherited rules, not compted style. 657e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (subtitle) 658e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.subtitle = subtitle; 659e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.identifier = styleRule.selectorText; 6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.subtitle) 66206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen this.identifier += ":" + this.subtitle; 663e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 664e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (!this.editable) 665e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.element.addStyleClass("read-only"); 6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.StylePropertiesSection.prototype = { 6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project collapse: function(dontRememberState) 6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 6716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // Overriding with empty body. 6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 674e14391e94c850b8bd03680c23b38978db68687a8John Reck isPropertyInherited: function(propertyName) 6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 676dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (this.isInherited) { 677dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // While rendering inherited stylesheet, reverse meaning of this property. 678dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Render truly inherited properties with black, i.e. return them as non-inherited. 679e14391e94c850b8bd03680c23b38978db68687a8John Reck return !(propertyName in WebInspector.StylesSidebarPane.InheritedProperties); 680dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 681e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return false; 6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 684e14391e94c850b8bd03680c23b38978db68687a8John Reck isPropertyOverloaded: function(propertyName, shorthand) 6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 686e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (!this._usedProperties || this.noAffect) 6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 689e14391e94c850b8bd03680c23b38978db68687a8John Reck if (this.isInherited && !(propertyName in WebInspector.StylesSidebarPane.InheritedProperties)) { 690dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // In the inherited sections, only show overrides for the potentially inherited properties. 691dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 692dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 693dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 694e14391e94c850b8bd03680c23b38978db68687a8John Reck var used = (propertyName in this._usedProperties); 6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (used || !shorthand) 6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !used; 6978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Find out if any of the individual longhand properties of the shorthand 6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // are used, if none are then the shorthand is overloaded too. 700e14391e94c850b8bd03680c23b38978db68687a8John Reck var longhandProperties = this.styleRule.style.getLonghandProperties(propertyName); 7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var j = 0; j < longhandProperties.length; ++j) { 7028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var individualProperty = longhandProperties[j]; 703e14391e94c850b8bd03680c23b38978db68687a8John Reck if (individualProperty.name in this._usedProperties) 7048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 7058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 7088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 710f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch nextEditableSibling: function() 711f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 712f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var curSection = this; 713f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch do { 714f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch curSection = curSection.nextSibling; 715f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } while (curSection && !curSection.editable); 716f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 717f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return curSection; 718f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }, 719f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 720f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch previousEditableSibling: function() 721f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 722f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var curSection = this; 723f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch do { 724f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch curSection = curSection.previousSibling; 725f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } while (curSection && !curSection.editable); 726f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 727f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return curSection; 728f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }, 729f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project update: function(full) 7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 732e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (full) { 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.propertiesTreeOutline.removeChildren(); 7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.populated = false; 7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var child = this.propertiesTreeOutline.children[0]; 7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while (child) { 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project child.overloaded = this.isPropertyOverloaded(child.name, child.shorthand); 7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project child = child.traverseNextTreeElement(false, null, true); 7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.afterUpdate(); 7438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }, 7448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block afterUpdate: function() 7468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block { 7470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (this._afterUpdate) { 7480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this._afterUpdate(this); 7490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch delete this._afterUpdate; 7500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project onpopulate: function() 7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var style = this.styleRule.style; 7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 757e14391e94c850b8bd03680c23b38978db68687a8John Reck var handledProperties = {}; 758e14391e94c850b8bd03680c23b38978db68687a8John Reck var shorthandNames = {}; 7598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 760e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.uniqueProperties = []; 761e14391e94c850b8bd03680c23b38978db68687a8John Reck var allProperties = style.allProperties; 762e14391e94c850b8bd03680c23b38978db68687a8John Reck for (var i = 0; i < allProperties.length; ++i) 763e14391e94c850b8bd03680c23b38978db68687a8John Reck this.uniqueProperties.push(allProperties[i]); 764dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 765e14391e94c850b8bd03680c23b38978db68687a8John Reck // Collect all shorthand names. 766e14391e94c850b8bd03680c23b38978db68687a8John Reck for (var i = 0; i < this.uniqueProperties.length; ++i) { 767e14391e94c850b8bd03680c23b38978db68687a8John Reck var property = this.uniqueProperties[i]; 768e14391e94c850b8bd03680c23b38978db68687a8John Reck if (property.disabled) 769e14391e94c850b8bd03680c23b38978db68687a8John Reck continue; 770e14391e94c850b8bd03680c23b38978db68687a8John Reck if (property.shorthand) 771e14391e94c850b8bd03680c23b38978db68687a8John Reck shorthandNames[property.shorthand] = true; 772e14391e94c850b8bd03680c23b38978db68687a8John Reck } 7738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7746b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // Collect all shorthand names. 775e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block for (var i = 0; i < this.uniqueProperties.length; ++i) { 776e14391e94c850b8bd03680c23b38978db68687a8John Reck var property = this.uniqueProperties[i]; 777e14391e94c850b8bd03680c23b38978db68687a8John Reck var disabled = property.disabled; 778e14391e94c850b8bd03680c23b38978db68687a8John Reck if (!disabled && this.disabledComputedProperties && !(property.name in this.usedProperties) && property.name in this.disabledComputedProperties) 779e14391e94c850b8bd03680c23b38978db68687a8John Reck disabled = true; 7808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 781e14391e94c850b8bd03680c23b38978db68687a8John Reck var shorthand = !disabled ? property.shorthand : null; 782e14391e94c850b8bd03680c23b38978db68687a8John Reck 783e14391e94c850b8bd03680c23b38978db68687a8John Reck if (shorthand && shorthand in handledProperties) 7848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project continue; 7858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (shorthand) { 787e14391e94c850b8bd03680c23b38978db68687a8John Reck property = style.getLiveProperty(shorthand); 788e14391e94c850b8bd03680c23b38978db68687a8John Reck if (!property) 789e14391e94c850b8bd03680c23b38978db68687a8John Reck property = new WebInspector.CSSProperty(style, style.allProperties.length, shorthand, style.getShorthandValue(shorthand), style.getShorthandPriority(shorthand), "style", true, true, ""); 7908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 792e14391e94c850b8bd03680c23b38978db68687a8John Reck var isShorthand = !!(property.isLive && (shorthand || shorthandNames[property.name])); 793e14391e94c850b8bd03680c23b38978db68687a8John Reck var inherited = this.isPropertyInherited(property.name); 794e14391e94c850b8bd03680c23b38978db68687a8John Reck var overloaded = this.isPropertyOverloaded(property.name, isShorthand); 7958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 79681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch var item = new WebInspector.StylePropertyTreeElement(this._parentPane, this.styleRule, style, property, isShorthand, inherited, overloaded); 7978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.propertiesTreeOutline.appendChild(item); 798e14391e94c850b8bd03680c23b38978db68687a8John Reck handledProperties[property.name] = property; 7998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 8010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch findTreeElementWithName: function(name) 8030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 8040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var treeElement = this.propertiesTreeOutline.children[0]; 8050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch while (treeElement) { 8060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (treeElement.name === name) 8070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return treeElement; 8080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch treeElement = treeElement.traverseNextTreeElement(true, null, true); 8090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 8100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return null; 8110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 8120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8136b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner addNewBlankProperty: function(optionalIndex) 8140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 815e14391e94c850b8bd03680c23b38978db68687a8John Reck var style = this.styleRule.style; 8166b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var property = style.newBlankProperty(); 81781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch var item = new WebInspector.StylePropertyTreeElement(this._parentPane, this.styleRule, style, property, false, false, false); 8180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.propertiesTreeOutline.appendChild(item); 8190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch item.listItemElement.textContent = ""; 8200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch item._newProperty = true; 821f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch item.updateTitle(); 8220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return item; 8230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 8240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8256b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner _debugShowStyle: function(anchor) 8266b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { 8276b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var boundHandler; 8286b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner function removeStyleBox(element, event) 8296b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { 8306b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (event.target === element) { 8316b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner event.stopPropagation(); 8326b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return; 8336b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 8346b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner document.body.removeChild(element); 8356b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner document.getElementById("main").removeEventListener("mousedown", boundHandler, true); 8366b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 8376b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 8386b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!event.shiftKey) 8396b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return; 8406b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 8416b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var container = document.createElement("div"); 8426b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var element = document.createElement("span"); 8436b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner container.appendChild(element); 8446b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner element.style.background = "yellow"; 8456b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner element.style.display = "inline-block"; 8466b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner container.style.cssText = "z-index: 2000000; position: absolute; top: 50px; left: 50px; white-space: pre; overflow: auto; background: white; font-family: monospace; font-size: 12px; border: 1px solid black; opacity: 0.85; -webkit-user-select: text; padding: 2px;"; 8476b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner container.style.width = (document.body.offsetWidth - 100) + "px"; 8486b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner container.style.height = (document.body.offsetHeight - 100) + "px"; 8496b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner document.body.appendChild(container); 8506b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (this.rule) 8516b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner element.textContent = this.rule.selectorText + " {" + ((this.styleRule.style.cssText !== undefined) ? this.styleRule.style.cssText : "<no cssText>") + "}"; 8526b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner else 8536b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner element.textContent = this.styleRule.style.cssText; 8546b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner boundHandler = removeStyleBox.bind(null, container); 8556b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner document.getElementById("main").addEventListener("mousedown", boundHandler, true); 8566b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner }, 8576b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 858dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _handleEmptySpaceDoubleClick: function(event) 859cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block { 860dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (event.target.hasStyleClass("header")) { 861dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block event.stopPropagation(); 862cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 863dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 864dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.expand(); 865dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.addNewBlankProperty().startEditing(); 866dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }, 867cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 868dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _handleSelectorClick: function(event) 869dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 870dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block event.stopPropagation(); 871cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block }, 872cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 873dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _handleSelectorDoubleClick: function(event) 8740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 875dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this._startEditingOnMouseEvent(); 876dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block event.stopPropagation(); 8770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 8780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 879dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _startEditingOnMouseEvent: function() 8800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 8810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!this.editable) 8820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 8830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!this.rule && this.propertiesTreeOutline.children.length === 0) { 8850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.expand(); 8860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.addNewBlankProperty().startEditing(); 8870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 8880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 8890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!this.rule) 8910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 8920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.startEditingSelector(); 8940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 8950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch startEditingSelector: function() 8970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 8986c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen var element = this._selectorElement; 8990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (WebInspector.isBeingEdited(element)) 9000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 9010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 902f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebInspector.startEditing(this._selectorElement, { 903f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch context: null, 904f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch commitHandler: this.editingSelectorCommitted.bind(this), 905f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch cancelHandler: this.editingSelectorCancelled.bind(this) 906f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }); 9070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch window.getSelection().setBaseAndExtent(element, 0, element, 1); 9080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 9090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch editingSelectorCommitted: function(element, newContent, oldContent, context, moveDirection) 9110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 9120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch function moveToNextIfNeeded() { 913f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!moveDirection) 9140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 9150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 916f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (moveDirection === "forward") { 917f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this.expand(); 918f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (this.propertiesTreeOutline.children.length === 0) 919f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this.addNewBlankProperty().startEditing(); 920f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else { 921f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var item = this.propertiesTreeOutline.children[0] 922f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch item.startEditing(item.nameElement); 923f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 924f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } else { 925f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var previousSection = this.previousEditableSibling(); 926f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!previousSection) 927f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 928f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 929f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch previousSection.expand(); 930f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch previousSection.addNewBlankProperty().startEditing(); 9310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 9320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 9330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (newContent === oldContent) 9350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return moveToNextIfNeeded.call(this); 9360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var self = this; 9380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 939545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch function successCallback(newRule, doesAffectSelectedNode) 940545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch { 9410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!doesAffectSelectedNode) { 9420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.noAffect = true; 9430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.element.addStyleClass("no-affect"); 9440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else { 9450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch delete self.noAffect; 9460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.element.removeStyleClass("no-affect"); 9470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 9480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.rule = newRule; 950e14391e94c850b8bd03680c23b38978db68687a8John Reck self.styleRule = { section: self, style: newRule.style, selectorText: newRule.selectorText, sourceURL: newRule.sourceURL, rule: newRule }; 951231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 9520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var oldIdentifier = this.identifier; 9530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.identifier = newRule.selectorText + ":" + self.subtitleElement.textContent; 954231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 955231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block self.pane.update(); 956231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 9570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebInspector.panels.elements.renameSelector(oldIdentifier, this.identifier, oldContent, newContent); 9580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 959231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block moveToNextIfNeeded.call(self); 960231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 9610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9626b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var focusedNode = WebInspector.panels.elements.focusedDOMNode; 9636b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner WebInspector.cssModel.setRuleSelector(this.rule.id, focusedNode ? focusedNode.id : 0, newContent, successCallback, moveToNextIfNeeded.bind(this)); 964058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu }, 965058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu 966231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block editingSelectorCancelled: function() 967058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu { 968231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Do nothing, this is overridden by BlankStylePropertiesSection. 9698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.StylePropertiesSection.prototype.__proto__ = WebInspector.PropertiesSection.prototype; 9738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 974e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockWebInspector.ComputedStylePropertiesSection = function(styleRule, usedProperties, disabledComputedProperties) 9758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 976e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block WebInspector.PropertiesSection.call(this, ""); 977e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.headerElement.addStyleClass("hidden"); 978e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.element.className = "styles-section monospace first-styles-section read-only computed-style"; 979e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.styleRule = styleRule; 980e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._usedProperties = usedProperties; 981e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._disabledComputedProperties = disabledComputedProperties; 982e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._alwaysShowComputedProperties = { "display": true, "height": true, "width": true }; 983e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.computedStyle = true; 984e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._propertyTreeElements = {}; 985e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._expandedPropertyNames = {}; 986e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 9870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 988e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockWebInspector.ComputedStylePropertiesSection.prototype = { 989e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block collapse: function(dontRememberState) 990e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block { 991e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // Overriding with empty body. 992e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block }, 993e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 994e14391e94c850b8bd03680c23b38978db68687a8John Reck _isPropertyInherited: function(propertyName) 995e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block { 996e14391e94c850b8bd03680c23b38978db68687a8John Reck return !(propertyName in this._usedProperties) && !(propertyName in this._alwaysShowComputedProperties) && !(propertyName in this._disabledComputedProperties); 997e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block }, 998e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 999e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block update: function() 1000e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block { 1001e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._expandedPropertyNames = {}; 1002e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block for (var name in this._propertyTreeElements) { 1003e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (this._propertyTreeElements[name].expanded) 1004e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._expandedPropertyNames[name] = true; 1005e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 1006e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._propertyTreeElements = {}; 1007e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.propertiesTreeOutline.removeChildren(); 1008e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.populated = false; 1009e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block }, 1010e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1011e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block onpopulate: function() 1012e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block { 1013e14391e94c850b8bd03680c23b38978db68687a8John Reck function sorter(a, b) 1014e14391e94c850b8bd03680c23b38978db68687a8John Reck { 1015e14391e94c850b8bd03680c23b38978db68687a8John Reck return a.name.localeCompare(b.name); 1016e14391e94c850b8bd03680c23b38978db68687a8John Reck } 1017e14391e94c850b8bd03680c23b38978db68687a8John Reck 1018e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var style = this.styleRule.style; 1019e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var uniqueProperties = []; 1020e14391e94c850b8bd03680c23b38978db68687a8John Reck var allProperties = style.allProperties; 1021e14391e94c850b8bd03680c23b38978db68687a8John Reck for (var i = 0; i < allProperties.length; ++i) 1022e14391e94c850b8bd03680c23b38978db68687a8John Reck uniqueProperties.push(allProperties[i]); 1023e14391e94c850b8bd03680c23b38978db68687a8John Reck uniqueProperties.sort(sorter); 1024e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1025e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._propertyTreeElements = {}; 1026e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block for (var i = 0; i < uniqueProperties.length; ++i) { 1027e14391e94c850b8bd03680c23b38978db68687a8John Reck var property = uniqueProperties[i]; 1028e14391e94c850b8bd03680c23b38978db68687a8John Reck var inherited = this._isPropertyInherited(property.name); 102981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch var item = new WebInspector.StylePropertyTreeElement(this._parentPane, this.styleRule, style, property, false, inherited, false); 1030e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.propertiesTreeOutline.appendChild(item); 1031e14391e94c850b8bd03680c23b38978db68687a8John Reck this._propertyTreeElements[property.name] = item; 1032e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 1033e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block }, 1034e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1035e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block rebuildComputedTrace: function(sections) 1036e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block { 1037e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block for (var i = 0; i < sections.length; ++i) { 1038e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var section = sections[i]; 1039e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (section.computedStyle || section instanceof WebInspector.BlankStylePropertiesSection) 1040e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block continue; 1041e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1042e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block for (var j = 0; j < section.uniqueProperties.length; ++j) { 1043e14391e94c850b8bd03680c23b38978db68687a8John Reck var property = section.uniqueProperties[j]; 1044e14391e94c850b8bd03680c23b38978db68687a8John Reck if (property.disabled) 1045e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block continue; 1046e14391e94c850b8bd03680c23b38978db68687a8John Reck if (section.isInherited && !(property.name in WebInspector.StylesSidebarPane.InheritedProperties)) 1047e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block continue; 1048e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1049e14391e94c850b8bd03680c23b38978db68687a8John Reck var treeElement = this._propertyTreeElements[property.name]; 1050e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (treeElement) { 1051e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var selectorText = section.styleRule.selectorText; 1052e14391e94c850b8bd03680c23b38978db68687a8John Reck var value = property.value; 1053e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var title = "<span style='color: gray'>" + selectorText + "</span> - " + value; 1054e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var subtitle = " <span style='float:right'>" + section.subtitleElement.innerHTML + "</span>"; 10556b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var childElement = new TreeElement(null, null, false); 10566b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner childElement.titleHTML = title + subtitle; 1057e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block treeElement.appendChild(childElement); 1058e14391e94c850b8bd03680c23b38978db68687a8John Reck if (section.isPropertyOverloaded(property.name)) 1059e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block childElement.listItemElement.addStyleClass("overloaded"); 1060e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 1061e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 1062e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 1063e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1064e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // Restore expanded state after update. 1065e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block for (var name in this._expandedPropertyNames) { 1066e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (name in this._propertyTreeElements) 1067e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._propertyTreeElements[name].expand(); 1068e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 1069e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 1070e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 1071e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1072e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockWebInspector.ComputedStylePropertiesSection.prototype.__proto__ = WebInspector.PropertiesSection.prototype; 1073e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 107481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochWebInspector.BlankStylePropertiesSection = function(parentPane, defaultSelectorText) 1075e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 107681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch WebInspector.StylePropertiesSection.call(this, parentPane, {selectorText: defaultSelectorText, rule: {isViaInspector: true}}, true, false, false); 10770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.element.addStyleClass("blank-section"); 10780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 10790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochWebInspector.BlankStylePropertiesSection.prototype = { 1081231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block expand: function() 10820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 1083231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Do nothing, blank sections are not expandable. 10840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 10850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1086231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block editingSelectorCommitted: function(element, newContent, oldContent, context) 10870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 10880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var self = this; 108928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu function successCallback(newRule, doesSelectorAffectSelectedNode) 1090231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 109128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu var styleRule = { section: self, style: newRule.style, selectorText: newRule.selectorText, sourceURL: newRule.sourceURL, rule: newRule }; 1092231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block self.makeNormal(styleRule); 1093231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1094231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!doesSelectorAffectSelectedNode) { 10950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.noAffect = true; 10960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.element.addStyleClass("no-affect"); 10970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 10980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.subtitleElement.textContent = WebInspector.UIString("via inspector"); 11000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.expand(); 11010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.addNewBlankProperty().startEditing(); 1103231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 1104231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1105545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch WebInspector.cssModel.addRule(this.pane.node.id, newContent, successCallback, this.editingSelectorCancelled.bind(this)); 1106231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 1107231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1108231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block editingSelectorCancelled: function() 1109231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 1110231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.pane.removeSection(this); 11110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 11120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch makeNormal: function(styleRule) 11140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 11150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.element.removeStyleClass("blank-section"); 11160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.styleRule = styleRule; 11170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.rule = styleRule.rule; 1118231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.identifier = styleRule.selectorText + ":via inspector"; 1119231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.__proto__ = WebInspector.StylePropertiesSection.prototype; 11200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 11210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 11220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochWebInspector.BlankStylePropertiesSection.prototype.__proto__ = WebInspector.StylePropertiesSection.prototype; 11240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 112581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochWebInspector.StylePropertyTreeElement = function(parentPane, styleRule, style, property, shorthand, inherited, overloaded) 11260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 112781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch this._parentPane = parentPane; 11280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this._styleRule = styleRule; 11298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.style = style; 1130e14391e94c850b8bd03680c23b38978db68687a8John Reck this.property = property; 11318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.shorthand = shorthand; 11328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this._inherited = inherited; 11338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this._overloaded = overloaded; 11348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Pass an empty title, the title gets made later in onattach. 11368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project TreeElement.call(this, "", null, shorthand); 11378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.StylePropertyTreeElement.prototype = { 11408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project get inherited() 11418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 11428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return this._inherited; 11438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 11448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project set inherited(x) 11468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 11478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (x === this._inherited) 11488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 11498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this._inherited = x; 11508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.updateState(); 11518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 11528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project get overloaded() 11548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 11558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return this._overloaded; 11568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 11578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project set overloaded(x) 11598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 11608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (x === this._overloaded) 11618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 11628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this._overloaded = x; 11638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.updateState(); 11648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 11658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project get disabled() 11678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1168e14391e94c850b8bd03680c23b38978db68687a8John Reck return this.property.disabled; 11698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 11708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1171e14391e94c850b8bd03680c23b38978db68687a8John Reck get name() 11728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 11736b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!this.disabled || !this.property.text) 11746b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return this.property.name; 11756b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 11766b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var text = this.property.text; 11776b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var index = text.indexOf(":"); 11786b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (index < 1) 11796b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return this.property.name; 11806b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 11816b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return text.substring(0, index).trim(); 11828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 11838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project get priority() 11858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1186e14391e94c850b8bd03680c23b38978db68687a8John Reck if (this.disabled) 11876b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return ""; // rely upon raw text to render it in the value field 11886b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return this.property.priority; 11898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 11908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project get value() 11928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 11936b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!this.disabled || !this.property.text) 11946b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return this.property.value; 11956b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 11966b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var match = this.property.text.match(/(.*);\s*/); 11976b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!match || !match[1]) 11986b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return this.property.value; 11996b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 12006b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var text = match[1]; 12016b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var index = text.indexOf(":"); 12026b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (index < 1) 1203e14391e94c850b8bd03680c23b38978db68687a8John Reck return this.property.value; 12046b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 12056b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return text.substring(index + 1).trim(); 1206e14391e94c850b8bd03680c23b38978db68687a8John Reck }, 1207e14391e94c850b8bd03680c23b38978db68687a8John Reck 1208e14391e94c850b8bd03680c23b38978db68687a8John Reck get parsedOk() 1209e14391e94c850b8bd03680c23b38978db68687a8John Reck { 1210e14391e94c850b8bd03680c23b38978db68687a8John Reck return this.property.parsedOk; 12118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 12128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project onattach: function() 12148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 12158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.updateTitle(); 12168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 12178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project updateTitle: function() 12198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 12208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var value = this.value; 12218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.updateState(); 12238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1224e14391e94c850b8bd03680c23b38978db68687a8John Reck var enabledCheckboxElement; 1225e14391e94c850b8bd03680c23b38978db68687a8John Reck if (this.parsedOk) { 1226e14391e94c850b8bd03680c23b38978db68687a8John Reck enabledCheckboxElement = document.createElement("input"); 1227e14391e94c850b8bd03680c23b38978db68687a8John Reck enabledCheckboxElement.className = "enabled-button"; 1228e14391e94c850b8bd03680c23b38978db68687a8John Reck enabledCheckboxElement.type = "checkbox"; 1229e14391e94c850b8bd03680c23b38978db68687a8John Reck enabledCheckboxElement.checked = !this.disabled; 1230e14391e94c850b8bd03680c23b38978db68687a8John Reck enabledCheckboxElement.addEventListener("change", this.toggleEnabled.bind(this), false); 1231e14391e94c850b8bd03680c23b38978db68687a8John Reck } 12328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var nameElement = document.createElement("span"); 12346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen nameElement.className = "webkit-css-property"; 12358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nameElement.textContent = this.name; 12360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.nameElement = nameElement; 12378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var valueElement = document.createElement("span"); 12398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project valueElement.className = "value"; 12400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.valueElement = valueElement; 12418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1242231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (value) { 1243cad810f21b803229eb11403f9209855525a25d57Steve Block var self = this; 1244cad810f21b803229eb11403f9209855525a25d57Steve Block 1245231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block function processValue(regex, processor, nextProcessor, valueText) 1246231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 1247231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var container = document.createDocumentFragment(); 1248231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1249231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var items = valueText.replace(regex, "\0$1\0").split("\0"); 1250231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block for (var i = 0; i < items.length; ++i) { 1251231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if ((i % 2) === 0) { 1252231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (nextProcessor) 1253231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block container.appendChild(nextProcessor(items[i])); 1254231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block else 1255231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block container.appendChild(document.createTextNode(items[i])); 1256231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } else { 1257231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var processedNode = processor(items[i]); 1258231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (processedNode) 1259231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block container.appendChild(processedNode); 1260231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 1261231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 12628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1263231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return container; 1264231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 12658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1266231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block function linkifyURL(url) 1267231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 1268cad810f21b803229eb11403f9209855525a25d57Steve Block var hrefUrl = url; 1269cad810f21b803229eb11403f9209855525a25d57Steve Block var match = hrefUrl.match(/['"]?([^'"]+)/); 1270cad810f21b803229eb11403f9209855525a25d57Steve Block if (match) 1271cad810f21b803229eb11403f9209855525a25d57Steve Block hrefUrl = match[1]; 1272231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var container = document.createDocumentFragment(); 1273231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block container.appendChild(document.createTextNode("url(")); 1274cad810f21b803229eb11403f9209855525a25d57Steve Block if (self._styleRule.sourceURL) 1275cad810f21b803229eb11403f9209855525a25d57Steve Block hrefUrl = WebInspector.completeURL(self._styleRule.sourceURL, hrefUrl); 1276cad810f21b803229eb11403f9209855525a25d57Steve Block else if (WebInspector.panels.elements.focusedDOMNode) 1277cad810f21b803229eb11403f9209855525a25d57Steve Block hrefUrl = WebInspector.resourceURLForRelatedNode(WebInspector.panels.elements.focusedDOMNode, hrefUrl); 1278cad810f21b803229eb11403f9209855525a25d57Steve Block var hasResource = !!WebInspector.resourceForURL(hrefUrl); 1279cad810f21b803229eb11403f9209855525a25d57Steve Block // FIXME: WebInspector.linkifyURLAsNode() should really use baseURI. 1280cad810f21b803229eb11403f9209855525a25d57Steve Block container.appendChild(WebInspector.linkifyURLAsNode(hrefUrl, url, null, hasResource)); 1281231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block container.appendChild(document.createTextNode(")")); 1282231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return container; 1283231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 12848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1285231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block function processColor(text) 1286231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 1287231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block try { 1288231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var color = new WebInspector.Color(text); 1289231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } catch (e) { 1290231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return document.createTextNode(text); 12910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 12920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1293231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var swatchElement = document.createElement("span"); 1294231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block swatchElement.title = WebInspector.UIString("Click to change color format"); 1295231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block swatchElement.className = "swatch"; 1296231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block swatchElement.style.setProperty("background-color", text); 1297231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1298231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block swatchElement.addEventListener("click", changeColorDisplay, false); 1299231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block swatchElement.addEventListener("dblclick", function(event) { event.stopPropagation() }, false); 1300231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1301231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var format; 13024576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (WebInspector.settings.colorFormat === "original") 13034576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang format = "original"; 13044576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang else if (Preferences.showColorNicknames && color.nickname) 1305231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block format = "nickname"; 130628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu else if (WebInspector.settings.colorFormat === "rgb") 1307231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block format = (color.simple ? "rgb" : "rgba"); 130828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu else if (WebInspector.settings.colorFormat === "hsl") 1309231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block format = (color.simple ? "hsl" : "hsla"); 1310231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block else if (color.simple) 1311231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block format = (color.hasShortHex() ? "shorthex" : "hex"); 1312231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block else 1313231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block format = "rgba"; 13140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1315231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var colorValueElement = document.createElement("span"); 1316231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block colorValueElement.textContent = color.toString(format); 1317231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 13184576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang function nextFormat(curFormat) 1319231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 13204576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // The format loop is as follows: 13214576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // * original 13224576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // * rgb(a) 13234576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // * hsl(a) 13244576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // * nickname (if the color has a nickname) 13254576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // * if the color is simple: 13264576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // - shorthex (if has short hex) 13274576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // - hex 13284576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang switch (curFormat) { 13294576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang case "original": 13304576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return color.simple ? "rgb" : "rgba"; 13314576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 1332058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu case "rgb": 13334576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang case "rgba": 13344576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return color.simple ? "hsl" : "hsla"; 13354576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 13364576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang case "hsl": 13374576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang case "hsla": 13384576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (color.nickname) 13394576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return "nickname"; 13404576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (color.simple) 13414576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return color.hasShortHex() ? "shorthex" : "hex"; 13424576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang else 13434576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return "original"; 13440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1345058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu case "shorthex": 13464576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return "hex"; 13470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1348058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu case "hex": 13494576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return "original"; 13500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1351058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu case "nickname": 13524576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (color.simple) 13534576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return color.hasShortHex() ? "shorthex" : "hex"; 1354058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu else 13554576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return "original"; 1356058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu 13574576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang default: 13584576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return null; 13590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 13604576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } 13614576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 13624576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang function changeColorDisplay(event) 13634576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang { 13644576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang do { 13654576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang format = nextFormat(format); 13664576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang var currentValue = color.toString(format || ""); 13674576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } while (format && currentValue === color.value && format !== "original"); 1368231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 13694576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (format) 13704576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang colorValueElement.textContent = currentValue; 13718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1372231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1373231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var container = document.createDocumentFragment(); 1374231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block container.appendChild(swatchElement); 1375231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block container.appendChild(colorValueElement); 1376231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return container; 13778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1378231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1379dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var colorRegex = /((?:rgb|hsl)a?\([^)]+\)|#[0-9a-fA-F]{6}|#[0-9a-fA-F]{3}|\b\w+\b(?!-))/g; 1380231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var colorProcessor = processValue.bind(window, colorRegex, processColor, null); 1381231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1382cad810f21b803229eb11403f9209855525a25d57Steve Block valueElement.appendChild(processValue(/url\(\s*([^)\s]+)\s*\)/g, linkifyURL, colorProcessor, value)); 1383231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 1384231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1385231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.listItemElement.removeChildren(); 1386ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch nameElement.normalize(); 1387ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch valueElement.normalize(); 1388231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1389545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (!this.treeOutline) 1390545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return; 1391545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 1392231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Append the checkbox for root elements of an editable section. 1393e14391e94c850b8bd03680c23b38978db68687a8John Reck if (enabledCheckboxElement && this.treeOutline.section && this.treeOutline.section.editable && this.parent.root) 1394231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.listItemElement.appendChild(enabledCheckboxElement); 1395231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.listItemElement.appendChild(nameElement); 1396231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.listItemElement.appendChild(document.createTextNode(": ")); 1397231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.listItemElement.appendChild(valueElement); 1398231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.listItemElement.appendChild(document.createTextNode(";")); 1399231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1400f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!this.parsedOk) { 1401f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Avoid having longhands under an invalid shorthand. 1402f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this.hasChildren = false; 14036b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.listItemElement.addStyleClass("not-parsed-ok"); 1404f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 14056b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (this.property.inactive) 14066b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.listItemElement.addStyleClass("inactive"); 14076b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 1408e14391e94c850b8bd03680c23b38978db68687a8John Reck this.tooltip = this.property.propertyText; 14098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 14108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project updateAll: function(updateAllRules) 14128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 14136c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (!this.treeOutline) 14146c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen return; 14158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (updateAllRules && this.treeOutline.section && this.treeOutline.section.pane) 14168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.treeOutline.section.pane.update(null, this.treeOutline.section); 14178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (this.treeOutline.section) 14188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.treeOutline.section.update(true); 14198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 1420e14391e94c850b8bd03680c23b38978db68687a8John Reck this.updateTitle(); // FIXME: this will not show new properties. But we don't hit this case yet. 14218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 14228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project toggleEnabled: function(event) 14248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 14258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var disabled = !event.target.checked; 14268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1427545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch function callback(newStyle) 1428231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 1429545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (!newStyle) 14300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 14318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1432e14391e94c850b8bd03680c23b38978db68687a8John Reck this.style = newStyle; 1433e14391e94c850b8bd03680c23b38978db68687a8John Reck this._styleRule.style = newStyle; 14348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1435e14391e94c850b8bd03680c23b38978db68687a8John Reck if (this.treeOutline.section && this.treeOutline.section.pane) 1436e14391e94c850b8bd03680c23b38978db68687a8John Reck this.treeOutline.section.pane.dispatchEventToListeners("style property toggled"); 14378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1438e14391e94c850b8bd03680c23b38978db68687a8John Reck this.updateAll(true); 1439231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 1440231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1441e14391e94c850b8bd03680c23b38978db68687a8John Reck this.property.setDisabled(disabled, callback.bind(this)); 14428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 14438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project updateState: function() 14458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 14468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!this.listItemElement) 14478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 14488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.style.isPropertyImplicit(this.name) || this.value === "initial") 14508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.addStyleClass("implicit"); 14518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 14528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.removeStyleClass("implicit"); 14538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14546b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.selectable = !this.inherited; 14558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.inherited) 14568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.addStyleClass("inherited"); 14578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 14588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.removeStyleClass("inherited"); 14598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.overloaded) 14618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.addStyleClass("overloaded"); 14628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 14638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.removeStyleClass("overloaded"); 14648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.disabled) 14668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.addStyleClass("disabled"); 14678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 14688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.removeStyleClass("disabled"); 14698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 14708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project onpopulate: function() 14728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 14738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Only populate once and if this property is a shorthand. 14748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.children.length || !this.shorthand) 14758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 14768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var longhandProperties = this.style.getLonghandProperties(this.name); 14788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var i = 0; i < longhandProperties.length; ++i) { 1479e14391e94c850b8bd03680c23b38978db68687a8John Reck var name = longhandProperties[i].name; 1480e14391e94c850b8bd03680c23b38978db68687a8John Reck 14818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.treeOutline.section) { 14838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var inherited = this.treeOutline.section.isPropertyInherited(name); 14848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var overloaded = this.treeOutline.section.isPropertyOverloaded(name); 14858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 14868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1487e14391e94c850b8bd03680c23b38978db68687a8John Reck var liveProperty = this.style.getLiveProperty(name); 148881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch var item = new WebInspector.StylePropertyTreeElement(this._parentPane, this._styleRule, this.style, liveProperty, false, inherited, overloaded); 14898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.appendChild(item); 14908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 14918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 14928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1493643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ondblclick: function(event) 14948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 14958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.startEditing(event.target); 14960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch event.stopPropagation(); 14978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 14988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 149906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen restoreNameElement: function() 150006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen { 150106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // Restore <span class="webkit-css-property"> if it doesn't yet exist or was accidentally deleted. 150206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (this.nameElement === this.listItemElement.querySelector(".webkit-css-property")) 150306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return; 150406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 150506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen this.nameElement = document.createElement("span"); 150606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen this.nameElement.className = "webkit-css-property"; 150706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen this.nameElement.textContent = ""; 150806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen this.listItemElement.insertBefore(this.nameElement, this.listItemElement.firstChild); 150906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen }, 151006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 15118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project startEditing: function(selectElement) 15128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 15138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: we don't allow editing of longhand properties under a shorthand right now. 15148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.parent.shorthand) 15158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 15168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1517f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (this.treeOutline.section && !this.treeOutline.section.editable) 1518f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 1519f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1520f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!selectElement) 1521f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch selectElement = this.nameElement; // No arguments passed in - edit the name element by default. 1522f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else 1523f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch selectElement = selectElement.enclosingNodeOrSelfWithClass("webkit-css-property") || selectElement.enclosingNodeOrSelfWithClass("value"); 1524f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1525f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var isEditingName = selectElement === this.nameElement; 1526f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!isEditingName && selectElement !== this.valueElement) { 1527f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Double-click in the LI - start editing value. 1528f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch isEditingName = false; 1529f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch selectElement = this.valueElement; 1530f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 1531f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1532f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (WebInspector.isBeingEdited(selectElement)) 15338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 15348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 153506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen var context = { 153606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen expanded: this.expanded, 153706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen hasChildren: this.hasChildren, 1538ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch keyDownListener: isEditingName ? null : this.editingValueKeyDown.bind(this), 1539f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch isEditingName: isEditingName, 154006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen }; 15418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Lie about our children to prevent expanding on double click and to collapse shorthands. 15438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.hasChildren = false; 15448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1545ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (!isEditingName) 1546ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch selectElement.addEventListener("keydown", context.keyDownListener, false); 1547f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (selectElement.parentElement) 1548f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch selectElement.parentElement.addStyleClass("child-editing"); 1549f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch selectElement.textContent = selectElement.textContent; // remove color swatch and the like 1550f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1551f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch function shouldCommitValueSemicolon(text, cursorPosition) 1552f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 1553f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // FIXME: should this account for semicolons inside comments? 1554f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var openQuote = ""; 1555f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch for (var i = 0; i < cursorPosition; ++i) { 1556f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var ch = text[i]; 1557f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (ch === "\\" && openQuote !== "") 1558f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch ++i; // skip next character inside string 1559f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else if (!openQuote && (ch === "\"" || ch === "'")) 1560f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch openQuote = ch; 1561f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else if (openQuote === ch) 1562f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch openQuote = ""; 1563f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 1564f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return !openQuote; 1565f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 15668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1567f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch function nameValueFinishHandler(context, isEditingName, event) 1568f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 1569f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // FIXME: the ":"/";" detection does not work for non-US layouts due to the event being keydown rather than keypress. 1570f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var isFieldInputTerminated = (event.keyCode === WebInspector.KeyboardShortcut.Keys.Semicolon.code) && 1571f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch (isEditingName ? event.shiftKey : (!event.shiftKey && shouldCommitValueSemicolon(event.target.textContent, event.target.selectionLeftOffset))); 1572f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (isEnterKey(event) || isFieldInputTerminated) { 1573f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Enter or colon (for name)/semicolon outside of string (for value). 1574f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch event.preventDefault(); 1575f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return "move-forward"; 1576f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } else if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.code) 1577f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return "cancel"; 1578cad810f21b803229eb11403f9209855525a25d57Steve Block else if (!isEditingName && this._newProperty && event.keyCode === WebInspector.KeyboardShortcut.Keys.Backspace.code) { 1579cad810f21b803229eb11403f9209855525a25d57Steve Block // For a new property, when Backspace is pressed at the beginning of new property value, move back to the property name. 1580cad810f21b803229eb11403f9209855525a25d57Steve Block var selection = window.getSelection(); 1581cad810f21b803229eb11403f9209855525a25d57Steve Block if (selection.isCollapsed && !selection.focusOffset) { 1582cad810f21b803229eb11403f9209855525a25d57Steve Block event.preventDefault(); 1583cad810f21b803229eb11403f9209855525a25d57Steve Block return "move-backward"; 1584cad810f21b803229eb11403f9209855525a25d57Steve Block } 1585cad810f21b803229eb11403f9209855525a25d57Steve Block } else if (event.keyIdentifier === "U+0009") // Tab key. 1586f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return "move-" + (event.shiftKey ? "backward" : "forward"); 1587f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 15888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1589cad810f21b803229eb11403f9209855525a25d57Steve Block function pasteHandler(context, event) 1590cad810f21b803229eb11403f9209855525a25d57Steve Block { 1591cad810f21b803229eb11403f9209855525a25d57Steve Block var data = event.clipboardData.getData("Text"); 1592cad810f21b803229eb11403f9209855525a25d57Steve Block if (!data) 1593cad810f21b803229eb11403f9209855525a25d57Steve Block return; 1594cad810f21b803229eb11403f9209855525a25d57Steve Block var colonIdx = data.indexOf(":"); 1595cad810f21b803229eb11403f9209855525a25d57Steve Block if (colonIdx < 0) 1596cad810f21b803229eb11403f9209855525a25d57Steve Block return; 1597cad810f21b803229eb11403f9209855525a25d57Steve Block var name = data.substring(0, colonIdx).trim(); 1598cad810f21b803229eb11403f9209855525a25d57Steve Block var value = data.substring(colonIdx + 1).trim(); 1599cad810f21b803229eb11403f9209855525a25d57Steve Block 1600cad810f21b803229eb11403f9209855525a25d57Steve Block event.preventDefault(); 1601cad810f21b803229eb11403f9209855525a25d57Steve Block 1602cad810f21b803229eb11403f9209855525a25d57Steve Block if (!("originalName" in context)) { 1603cad810f21b803229eb11403f9209855525a25d57Steve Block context.originalName = this.nameElement.textContent; 1604cad810f21b803229eb11403f9209855525a25d57Steve Block context.originalValue = this.valueElement.textContent; 1605cad810f21b803229eb11403f9209855525a25d57Steve Block } 1606cad810f21b803229eb11403f9209855525a25d57Steve Block this.nameElement.textContent = name; 1607cad810f21b803229eb11403f9209855525a25d57Steve Block this.valueElement.textContent = value; 1608cad810f21b803229eb11403f9209855525a25d57Steve Block this.nameElement.normalize(); 1609cad810f21b803229eb11403f9209855525a25d57Steve Block this.valueElement.normalize(); 1610cad810f21b803229eb11403f9209855525a25d57Steve Block 1611cad810f21b803229eb11403f9209855525a25d57Steve Block return "move-forward"; 1612cad810f21b803229eb11403f9209855525a25d57Steve Block } 1613cad810f21b803229eb11403f9209855525a25d57Steve Block 161481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch this._parentPane.isModifyingStyle = true; 1615f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebInspector.startEditing(selectElement, { 1616f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch context: context, 1617f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch commitHandler: this.editingCommitted.bind(this), 1618f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch cancelHandler: this.editingCancelled.bind(this), 1619cad810f21b803229eb11403f9209855525a25d57Steve Block customFinishHandler: nameValueFinishHandler.bind(this, context, isEditingName), 1620cad810f21b803229eb11403f9209855525a25d57Steve Block pasteHandler: isEditingName ? pasteHandler.bind(this, context) : null 1621f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }); 1622f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1623ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._prompt = new WebInspector.StylesSidebarPane.CSSPropertyPrompt(selectElement, isEditingName ? WebInspector.cssNameCompletions : WebInspector.CSSKeywordCompletions.forProperty(this.nameElement.textContent)); 1624ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch window.getSelection().setBaseAndExtent(selectElement, 0, selectElement, 1); 1625f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }, 1626f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1627f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch editingValueKeyDown: function(event) 16288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1629ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (event.handled) 1630ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return; 16318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var arrowKeyPressed = (event.keyIdentifier === "Up" || event.keyIdentifier === "Down"); 16328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var pageKeyPressed = (event.keyIdentifier === "PageUp" || event.keyIdentifier === "PageDown"); 16338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!arrowKeyPressed && !pageKeyPressed) 16348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 16358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var selection = window.getSelection(); 16378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!selection.rangeCount) 16388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 16398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var selectionRange = selection.getRangeAt(0); 1641f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (selectionRange.commonAncestorContainer !== this.valueElement && !selectionRange.commonAncestorContainer.isDescendant(this.valueElement)) 16428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 16438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1644ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch var wordRange = selectionRange.startContainer.rangeOfWord(selectionRange.startOffset, WebInspector.StylesSidebarPane.StyleValueDelimiters, this.valueElement); 16458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var wordString = wordRange.toString(); 16468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var replacementString = wordString; 16478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var matches = /(.*?)(-?\d+(?:\.\d+)?)(.*)/.exec(wordString); 16498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (matches && matches.length) { 16508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var prefix = matches[1]; 16518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var number = parseFloat(matches[2]); 16528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var suffix = matches[3]; 16538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If the number is near zero or the number is one and the direction will take it near zero. 16558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var numberNearZero = (number < 1 && number > -1); 16568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (number === 1 && event.keyIdentifier === "Down") 16578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project numberNearZero = true; 16588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (number === -1 && event.keyIdentifier === "Up") 16598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project numberNearZero = true; 16608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (numberNearZero && event.altKey && arrowKeyPressed) { 16628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (event.keyIdentifier === "Down") 16638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project number = Math.ceil(number - 1); 16648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 16658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project number = Math.floor(number + 1); 16668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 16678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Jump by 10 when shift is down or jump by 0.1 when near zero or Alt/Option is down. 16688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Also jump by 10 for page up and down, or by 100 if shift is held with a page key. 16698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var changeAmount = 1; 16708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (event.shiftKey && pageKeyPressed) 16718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project changeAmount = 100; 16728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (event.shiftKey || pageKeyPressed) 16738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project changeAmount = 10; 16748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (event.altKey || numberNearZero) 16758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project changeAmount = 0.1; 16768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (event.keyIdentifier === "Down" || event.keyIdentifier === "PageDown") 16788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project changeAmount *= -1; 16798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Make the new number and constrain it to a precision of 6, this matches numbers the engine returns. 16818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Use the Number constructor to forget the fixed precision, so 1.100000 will print as 1.1. 16828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project number = Number((number + changeAmount).toFixed(6)); 16838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 16848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project replacementString = prefix + number + suffix; 16868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1687ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch var replacementTextNode = document.createTextNode(replacementString); 16888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1689ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch wordRange.deleteContents(); 1690ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch wordRange.insertNode(replacementTextNode); 16918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1692ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch var finalSelectionRange = document.createRange(); 1693ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch finalSelectionRange.setStart(replacementTextNode, 0); 1694ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch finalSelectionRange.setEnd(replacementTextNode, replacementString.length); 16958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1696ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch selection.removeAllRanges(); 1697ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch selection.addRange(finalSelectionRange); 16988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1699ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch event.handled = true; 1700ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch event.preventDefault(); 17018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1702ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (!("originalPropertyText" in this)) { 1703ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // Remember the rule's original CSS text on [Page](Up|Down), so it can be restored 1704ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // if the editing is canceled. 1705ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this.originalPropertyText = this.property.propertyText; 1706ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 1707f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1708ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // Synthesize property text disregarding any comments, custom whitespace etc. 1709ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this.applyStyleText(this.nameElement.textContent + ": " + this.valueElement.textContent); 1710ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 17118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 17128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project editingEnded: function(context) 17148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 17158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.hasChildren = context.hasChildren; 17168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (context.expanded) 17178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.expand(); 1718f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var editedElement = context.isEditingName ? this.nameElement : this.valueElement; 1719ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (!context.isEditingName) 1720ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch editedElement.removeEventListener("keydown", context.keyDownListener, false); 1721f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (editedElement.parentElement) 1722f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch editedElement.parentElement.removeStyleClass("child-editing"); 1723f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 17246b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner delete this.originalPropertyText; 172581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch delete this._parentPane.isModifyingStyle; 17268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 17278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project editingCancelled: function(element, context) 17298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 17302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._removePrompt(); 17316b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if ("originalPropertyText" in this) 17326b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.applyStyleText(this.originalPropertyText, true); 17336b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner else { 17346b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (this._newProperty) 17356b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.treeOutline.removeChild(this); 17366b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner else 17376b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.updateTitle(); 17386b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 1739ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1740ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // This should happen last, as it clears the info necessary to restore the property value after [Page]Up/Down changes. 17418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.editingEnded(context); 17428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 17438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch editingCommitted: function(element, userInput, previousContent, context, moveDirection) 17458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 17462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._removePrompt(); 17478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.editingEnded(context); 1748f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var isEditingName = context.isEditingName; 17498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Determine where to move to before making changes 1751f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var createNewProperty, moveToPropertyName, moveToSelector; 17526b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var moveTo = this; 1753f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var moveToOther = (isEditingName ^ (moveDirection === "forward")); 1754f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var abandonNewProperty = this._newProperty && !userInput && (moveToOther || isEditingName); 1755f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (moveDirection === "forward" && !isEditingName || moveDirection === "backward" && isEditingName) { 1756f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch do { 1757f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch moveTo = (moveDirection === "forward" ? moveTo.nextSibling : moveTo.previousSibling); 1758f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } while(moveTo && !moveTo.selectable); 1759f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1760f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (moveTo) 1761f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch moveToPropertyName = moveTo.name; 1762f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else if (moveDirection === "forward" && (!this._newProperty || userInput)) 1763f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch createNewProperty = true; 1764f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else if (moveDirection === "backward" && this.treeOutline.section.rule) 1765f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch moveToSelector = true; 1766f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 17670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1768f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Make the Changes and trigger the moveToNextCallback after updating. 17690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var blankInput = /^\s*$/.test(userInput); 1770cad810f21b803229eb11403f9209855525a25d57Steve Block var isDataPasted = "originalName" in context; 1771cad810f21b803229eb11403f9209855525a25d57Steve Block var isDirtyViaPaste = isDataPasted && (this.nameElement.textContent !== context.originalName || this.valueElement.textContent !== context.originalValue); 1772f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var shouldCommitNewProperty = this._newProperty && (moveToOther || (!moveDirection && !isEditingName) || (isEditingName && blankInput)); 1773cad810f21b803229eb11403f9209855525a25d57Steve Block if (((userInput !== previousContent || isDirtyViaPaste) && !this._newProperty) || shouldCommitNewProperty) { 177481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch this._parentPane.isModifyingStyle = true; 1775f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this.treeOutline.section._afterUpdate = moveToNextCallback.bind(this, this._newProperty, !blankInput, this.treeOutline.section); 1776f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var propertyText; 1777f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (blankInput || (this._newProperty && /^\s*$/.test(this.valueElement.textContent))) 1778f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch propertyText = ""; 1779f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else { 1780f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (isEditingName) 1781f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch propertyText = userInput + ": " + this.valueElement.textContent; 1782f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else 1783f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch propertyText = this.nameElement.textContent + ": " + userInput; 1784f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 1785f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this.applyStyleText(propertyText, true); 1786f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } else { 1787cad810f21b803229eb11403f9209855525a25d57Steve Block if (!isDataPasted && !this._newProperty) 1788f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this.updateTitle(); 178981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch moveToNextCallback.call(this, this._newProperty, false, this.treeOutline.section); 1790f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 1791f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1792f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var moveToIndex = moveTo && this.treeOutline ? this.treeOutline.children.indexOf(moveTo) : -1; 1793f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1794f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // The Callback to start editing the next/previous property/selector. 1795231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block function moveToNextCallback(alreadyNew, valueChanged, section) 1796231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 179781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch delete this._parentPane.isModifyingStyle; 179881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 17990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!moveDirection) 18000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 18010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1802f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // User just tabbed through without changes. 18030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (moveTo && moveTo.parent) { 1804f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch moveTo.startEditing(!isEditingName ? moveTo.nameElement : moveTo.valueElement); 18050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 18060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 18070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1808f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // User has made a change then tabbed, wiping all the original treeElements. 1809f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Recalculate the new treeElement for the same property we were going to edit next. 18100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (moveTo && !moveTo.parent) { 1811f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var propertyElements = section.propertiesTreeOutline.children; 1812f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (moveDirection === "forward" && blankInput && !isEditingName) 1813f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch --moveToIndex; 1814f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (moveToIndex >= propertyElements.length && !this._newProperty) 1815f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch createNewProperty = true; 1816f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else { 1817f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var treeElement = moveToIndex >= 0 ? propertyElements[moveToIndex] : null; 1818f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (treeElement) { 1819f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch treeElement.startEditing(!isEditingName ? treeElement.nameElement : treeElement.valueElement); 1820f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 1821f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } else if (!alreadyNew) 1822f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch moveToSelector = true; 1823f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 18240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 18250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1826f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Create a new attribute in this section (or move to next editable selector if possible). 1827f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (createNewProperty) { 1828f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (alreadyNew && !valueChanged && (isEditingName ^ (moveDirection === "backward"))) 18290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 18300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 18318a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block section.addNewBlankProperty().startEditing(); 18320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 18330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 18340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1835f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (abandonNewProperty) { 1836f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var sectionToEdit = moveDirection === "backward" ? section : section.nextEditableSibling(); 1837f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (sectionToEdit && sectionToEdit.rule) 1838f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch sectionToEdit.startEditingSelector(); 1839f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 1840f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 1841f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 18420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (moveToSelector) 18430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch section.startEditingSelector(); 18440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 18458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 18468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _removePrompt: function() 18482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 18492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // BUG 53242. This cannot go into editingEnded(), as it should always happen first for any editing outcome. 18502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (this._prompt) { 18512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._prompt.removeFromElement(); 18522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block delete this._prompt; 18532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 18542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block }, 18552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1856cad810f21b803229eb11403f9209855525a25d57Steve Block _hasBeenAppliedToPageViaUpDown: function() 1857cad810f21b803229eb11403f9209855525a25d57Steve Block { 1858cad810f21b803229eb11403f9209855525a25d57Steve Block // New properties applied via up/down have an originalPropertyText and will be deleted later 1859cad810f21b803229eb11403f9209855525a25d57Steve Block // on, if cancelled, when the empty string gets applied as their style text. 1860cad810f21b803229eb11403f9209855525a25d57Steve Block return ("originalPropertyText" in this); 1861cad810f21b803229eb11403f9209855525a25d57Steve Block }, 1862cad810f21b803229eb11403f9209855525a25d57Steve Block 18638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project applyStyleText: function(styleText, updateInterface) 18648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 18650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var section = this.treeOutline.section; 18660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var elementsPanel = WebInspector.panels.elements; 1867f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch styleText = styleText.replace(/\s/g, " ").trim(); // Replace with whitespace. 1868dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var styleTextLength = styleText.length; 1869cad810f21b803229eb11403f9209855525a25d57Steve Block if (!styleTextLength && updateInterface && this._newProperty && !this._hasBeenAppliedToPageViaUpDown()) { 1870cad810f21b803229eb11403f9209855525a25d57Steve Block // The user deleted everything and never applied a new property value via Up/Down scrolling, so remove the tree element and update. 1871f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this.parent.removeChild(this); 1872f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch section.afterUpdate(); 1873f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 18748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 18758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1876e14391e94c850b8bd03680c23b38978db68687a8John Reck function callback(newStyle) 1877231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 1878e14391e94c850b8bd03680c23b38978db68687a8John Reck if (!newStyle) { 1879e14391e94c850b8bd03680c23b38978db68687a8John Reck // The user typed something, but it didn't parse. Just abort and restore 1880e14391e94c850b8bd03680c23b38978db68687a8John Reck // the original title for this property. If this was a new attribute and 1881e14391e94c850b8bd03680c23b38978db68687a8John Reck // we couldn't parse, then just remove it. 1882e14391e94c850b8bd03680c23b38978db68687a8John Reck if (this._newProperty) { 1883e14391e94c850b8bd03680c23b38978db68687a8John Reck this.parent.removeChild(this); 1884e14391e94c850b8bd03680c23b38978db68687a8John Reck return; 1885e14391e94c850b8bd03680c23b38978db68687a8John Reck } 1886e14391e94c850b8bd03680c23b38978db68687a8John Reck if (updateInterface) 1887e14391e94c850b8bd03680c23b38978db68687a8John Reck this.updateTitle(); 18880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 18898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 18908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18916b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.style = newStyle; 18926b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.property = newStyle.propertyAt(this.property.index); 18936b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this._styleRule.style = this.style; 1894231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 18950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (section && section.pane) 18960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch section.pane.dispatchEventToListeners("style edited"); 18978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (updateInterface) 1899e14391e94c850b8bd03680c23b38978db68687a8John Reck this.updateAll(true); 1900231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 1901545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 19026b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // Append a ";" if the new text does not end in ";". 19036b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // FIXME: this does not handle trailing comments. 19046b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (styleText.length && !/;\s*$/.test(styleText)) 19056b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner styleText += ";"; 19064576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this.property.setText(styleText, updateInterface, callback.bind(this)); 19078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 19088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 19098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 19108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.StylePropertyTreeElement.prototype.__proto__ = TreeElement.prototype; 1911ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1912ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWebInspector.StylesSidebarPane.CSSPropertyPrompt = function(element, cssCompletions) 1913ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 1914ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WebInspector.TextPrompt.call(this, element, this._buildPropertyCompletions.bind(this), WebInspector.StylesSidebarPane.StyleValueDelimiters, true); 1915ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._cssCompletions = cssCompletions; 1916ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 1917ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1918ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWebInspector.StylesSidebarPane.CSSPropertyPrompt.prototype = { 1919ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch upKeyPressed: function(event) 1920ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 1921ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._handleNameOrValueUpDown(event); 1922ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch }, 1923ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1924ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch downKeyPressed: function(event) 1925ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 1926ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._handleNameOrValueUpDown(event); 1927ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch }, 1928ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1929ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tabKeyPressed: function(event) 1930ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 1931ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this.acceptAutoComplete(); 1932ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch }, 1933ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1934ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _handleNameOrValueUpDown: function(event) 1935ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 1936ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch var reverse = event.keyIdentifier === "Up"; 1937ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (this.autoCompleteElement) 1938ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this.complete(false, reverse); // Accept the current suggestion, if any. 19392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block else { 19402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // Select the word suffix to affect it when computing the subsequent suggestion. 19412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._selectCurrentWordSuffix(); 19422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 19432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1944ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this.complete(false, reverse); // Actually increment/decrement the suggestion. 1945ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch event.handled = true; 1946ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch }, 1947ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 19482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _selectCurrentWordSuffix: function() 1949ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 19502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var selection = window.getSelection(); 19512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!selection.rangeCount) 1952ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return; 1953ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 19542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var selectionRange = selection.getRangeAt(0); 19552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!selectionRange.commonAncestorContainer.isDescendant(this.element)) 19562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; 19572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var wordSuffixRange = selectionRange.startContainer.rangeOfWord(selectionRange.startOffset, WebInspector.StylesSidebarPane.StyleValueDelimiters, this.element, "forward"); 19582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!wordSuffixRange.toString()) 19592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; 19602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block selection.removeAllRanges(); 19612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block selection.addRange(wordSuffixRange); 19622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block }, 19632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 19642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _buildPropertyCompletions: function(wordRange, bestMatchOnly, completionsReadyCallback) 19652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 19662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var prefix = wordRange.toString().toLowerCase(); 1967ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch var results; 1968ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (bestMatchOnly) { 1969ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch results = []; 1970ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch var firstMatch = this._cssCompletions.firstStartsWith(prefix); 1971ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (firstMatch) 1972ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch results.push(firstMatch); 1973ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return completionsReadyCallback(results); 1974ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 1975ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1976ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch results = this._cssCompletions.startsWith(prefix); 1977ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (results) 1978ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch completionsReadyCallback(results); 1979ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 1980ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 1981ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1982ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWebInspector.StylesSidebarPane.CSSPropertyPrompt.prototype.__proto__ = WebInspector.TextPrompt.prototype; 1983