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 1352bde8e466a4451c7319e3a072d118917957d6554Steve Block if (node && node.nodeType() === Node.TEXT_NODE && node.parentNode) 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project node = node.parentNode; 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1382bde8e466a4451c7319e3a072d118917957d6554Steve Block 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 }; 2472bde8e466a4451c7319e3a072d118917957d6554Steve 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 2552bde8e466a4451c7319e3a072d118917957d6554Steve 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 { 50154cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block this.expanded = true; 502231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.addBlankSection().startEditingSelector(); 503231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 5040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 505231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block addBlankSection: function() 506231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 5072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var blankSection = new WebInspector.BlankStylePropertiesSection(this, this.node ? this.node.appropriateSelectorFor(true) : ""); 508231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block blankSection.pane = this; 5090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 510dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var elementStyleSection = this.sections[0][1]; 511231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.bodyElement.insertBefore(blankSection.element, elementStyleSection.element.nextSibling); 5120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 513dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.sections[0].splice(2, 0, blankSection); 5140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 515231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return blankSection; 516231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 517231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 518231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block removeSection: function(section) 519231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 520dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (var pseudoId in this.sections) { 521dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var sections = this.sections[pseudoId]; 522dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var index = sections.indexOf(section); 523dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (index === -1) 524dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block continue; 525dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sections.splice(index, 1); 526dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (section.element.parentNode) 527dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block section.element.parentNode.removeChild(section.element); 528dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 5296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen }, 5306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 5316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen registerShortcuts: function() 5326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen { 5336c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen var section = WebInspector.shortcutsHelp.section(WebInspector.UIString("Styles Pane")); 5346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen var shortcut = WebInspector.KeyboardShortcut; 5356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen var keys = [ 5366c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.Tab), 5376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.Tab, shortcut.Modifiers.Shift) 5386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ]; 5396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen section.addRelatedKeys(keys, WebInspector.UIString("Next/previous property")); 5406c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen keys = [ 5416c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.Up), 5426c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.Down) 5436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ]; 5446c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen section.addRelatedKeys(keys, WebInspector.UIString("Increment/decrement value")); 5456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen keys = [ 5466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.Up, shortcut.Modifiers.Shift), 5476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.Down, shortcut.Modifiers.Shift) 5486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ]; 5496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen section.addRelatedKeys(keys, WebInspector.UIString("Increment/decrement by %f", 10)); 5506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen keys = [ 5516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.PageUp), 5526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.PageDown) 5536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ]; 5546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen section.addRelatedKeys(keys, WebInspector.UIString("Increment/decrement by %f", 10)); 5556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen keys = [ 5566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.PageUp, shortcut.Modifiers.Shift), 5576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.PageDown, shortcut.Modifiers.Shift) 5586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ]; 5596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen section.addRelatedKeys(keys, WebInspector.UIString("Increment/decrement by %f", 100)); 5606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen keys = [ 5616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.PageUp, shortcut.Modifiers.Alt), 5626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shortcut.shortcutToString(shortcut.Keys.PageDown, shortcut.Modifiers.Alt) 5636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ]; 5646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen section.addRelatedKeys(keys, WebInspector.UIString("Increment/decrement by %f", 0.1)); 5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.StylesSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype; 5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenWebInspector.ComputedStyleSidebarPane = function() 5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen WebInspector.SidebarPane.call(this, WebInspector.UIString("Computed Style")); 5736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen var showInheritedCheckbox = new WebInspector.Checkbox(WebInspector.UIString("Show inherited"), "sidebar-pane-subtitle"); 5746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this.titleElement.appendChild(showInheritedCheckbox.element); 575231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 57628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (WebInspector.settings.showInheritedComputedStyleProperties) { 577e14391e94c850b8bd03680c23b38978db68687a8John Reck this.bodyElement.addStyleClass("show-inherited"); 578e14391e94c850b8bd03680c23b38978db68687a8John Reck showInheritedCheckbox.checked = true; 5796c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen } 5806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 5816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen function showInheritedToggleFunction(event) 5826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen { 58328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu WebInspector.settings.showInheritedComputedStyleProperties = showInheritedCheckbox.checked; 58428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (WebInspector.settings.showInheritedComputedStyleProperties) 5856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this.bodyElement.addStyleClass("show-inherited"); 5866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen else 5876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this.bodyElement.removeStyleClass("show-inherited"); 5886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen } 5896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 5906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen showInheritedCheckbox.addEventListener(showInheritedToggleFunction.bind(this)); 5916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen} 592545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 5936c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenWebInspector.ComputedStyleSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype; 5946c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 59581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochWebInspector.StylePropertiesSection = function(parentPane, styleRule, editable, isInherited, isFirstSection) 5966c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 5976c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen WebInspector.PropertiesSection.call(this, ""); 5986c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this.element.className = "styles-section monospace" + (isFirstSection ? " first-styles-section" : ""); 5996c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 6006c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this._selectorElement = document.createElement("span"); 6016c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this._selectorElement.textContent = styleRule.selectorText; 6026c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this.titleElement.appendChild(this._selectorElement); 6036b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (Preferences.debugMode) 6046b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this._selectorElement.addEventListener("click", this._debugShowStyle.bind(this), false); 6056c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 606e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var openBrace = document.createElement("span"); 607e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block openBrace.textContent = " {"; 608e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.titleElement.appendChild(openBrace); 6096c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 610e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var closeBrace = document.createElement("div"); 611e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block closeBrace.textContent = "}"; 612e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.element.appendChild(closeBrace); 6136c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 6146c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen this._selectorElement.addEventListener("dblclick", this._handleSelectorDoubleClick.bind(this), false); 615dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.element.addEventListener("dblclick", this._handleEmptySpaceDoubleClick.bind(this), false); 6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 61781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch this._parentPane = parentPane; 6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.styleRule = styleRule; 6190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.rule = this.styleRule.rule; 620e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.editable = editable; 621dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.isInherited = isInherited; 6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Prevent editing the user agent and user rules. 624231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var isUserAgent = this.rule && this.rule.isUserAgent; 625231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var isUser = this.rule && this.rule.isUser; 626231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var isViaInspector = this.rule && this.rule.isViaInspector; 6270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isUserAgent || isUser) 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.editable = false; 6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 631e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._usedProperties = styleRule.usedProperties; 6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 633dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (this.rule) 634dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.titleElement.addStyleClass("styles-selector"); 635dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 636e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block function linkifyUncopyable(url, line) 637e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block { 638e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var link = WebInspector.linkifyResourceAsNode(url, "resources", line + 1); 639e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return link; 6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 642e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var subtitle = ""; 643e14391e94c850b8bd03680c23b38978db68687a8John Reck if (this.styleRule.sourceURL) 644e14391e94c850b8bd03680c23b38978db68687a8John Reck this.subtitleElement.appendChild(linkifyUncopyable(this.styleRule.sourceURL, this.rule.sourceLine)); 645e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block else if (isUserAgent) 646e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block subtitle = WebInspector.UIString("user agent stylesheet"); 647e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block else if (isUser) 648e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block subtitle = WebInspector.UIString("user stylesheet"); 649e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block else if (isViaInspector) 650e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block subtitle = WebInspector.UIString("via inspector"); 651e14391e94c850b8bd03680c23b38978db68687a8John Reck else if (this.rule && this.rule.sourceURL) 652e14391e94c850b8bd03680c23b38978db68687a8John Reck this.subtitleElement.appendChild(linkifyUncopyable(this.rule.sourceURL, this.rule.sourceLine)); 653e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 654e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (isInherited) 655e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.element.addStyleClass("show-inherited"); // This one is related to inherited rules, not compted style. 656e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (subtitle) 657e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.subtitle = subtitle; 658e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.identifier = styleRule.selectorText; 6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.subtitle) 66106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen this.identifier += ":" + this.subtitle; 662e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 663e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (!this.editable) 664e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.element.addStyleClass("read-only"); 6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.StylePropertiesSection.prototype = { 6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project collapse: function(dontRememberState) 6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 6706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // Overriding with empty body. 6718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 673e14391e94c850b8bd03680c23b38978db68687a8John Reck isPropertyInherited: function(propertyName) 6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 675dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (this.isInherited) { 676dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // While rendering inherited stylesheet, reverse meaning of this property. 677dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Render truly inherited properties with black, i.e. return them as non-inherited. 678e14391e94c850b8bd03680c23b38978db68687a8John Reck return !(propertyName in WebInspector.StylesSidebarPane.InheritedProperties); 679dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 680e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return false; 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 683e14391e94c850b8bd03680c23b38978db68687a8John Reck isPropertyOverloaded: function(propertyName, shorthand) 6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 685e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (!this._usedProperties || this.noAffect) 6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 688e14391e94c850b8bd03680c23b38978db68687a8John Reck if (this.isInherited && !(propertyName in WebInspector.StylesSidebarPane.InheritedProperties)) { 689dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // In the inherited sections, only show overrides for the potentially inherited properties. 690dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 691dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 692dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 693e14391e94c850b8bd03680c23b38978db68687a8John Reck var used = (propertyName in this._usedProperties); 6948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (used || !shorthand) 6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !used; 6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Find out if any of the individual longhand properties of the shorthand 6988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // are used, if none are then the shorthand is overloaded too. 699e14391e94c850b8bd03680c23b38978db68687a8John Reck var longhandProperties = this.styleRule.style.getLonghandProperties(propertyName); 7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var j = 0; j < longhandProperties.length; ++j) { 7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var individualProperty = longhandProperties[j]; 702e14391e94c850b8bd03680c23b38978db68687a8John Reck if (individualProperty.name in this._usedProperties) 7038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 7048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 7078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 7088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 709f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch nextEditableSibling: function() 710f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 711f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var curSection = this; 712f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch do { 713f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch curSection = curSection.nextSibling; 714f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } while (curSection && !curSection.editable); 715f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 716f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return curSection; 717f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }, 718f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 719f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch previousEditableSibling: function() 720f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 721f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var curSection = this; 722f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch do { 723f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch curSection = curSection.previousSibling; 724f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } while (curSection && !curSection.editable); 725f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 726f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return curSection; 727f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }, 728f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 7298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project update: function(full) 7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 731e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (full) { 7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.propertiesTreeOutline.removeChildren(); 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.populated = false; 7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var child = this.propertiesTreeOutline.children[0]; 7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while (child) { 7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project child.overloaded = this.isPropertyOverloaded(child.name, child.shorthand); 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project child = child.traverseNextTreeElement(false, null, true); 7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.afterUpdate(); 7428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }, 7438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block afterUpdate: function() 7458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block { 7460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (this._afterUpdate) { 7470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this._afterUpdate(this); 7480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch delete this._afterUpdate; 7490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project onpopulate: function() 7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var style = this.styleRule.style; 7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 756e14391e94c850b8bd03680c23b38978db68687a8John Reck var handledProperties = {}; 757e14391e94c850b8bd03680c23b38978db68687a8John Reck var shorthandNames = {}; 7588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 759e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.uniqueProperties = []; 760e14391e94c850b8bd03680c23b38978db68687a8John Reck var allProperties = style.allProperties; 761e14391e94c850b8bd03680c23b38978db68687a8John Reck for (var i = 0; i < allProperties.length; ++i) 762e14391e94c850b8bd03680c23b38978db68687a8John Reck this.uniqueProperties.push(allProperties[i]); 763dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 764e14391e94c850b8bd03680c23b38978db68687a8John Reck // Collect all shorthand names. 765e14391e94c850b8bd03680c23b38978db68687a8John Reck for (var i = 0; i < this.uniqueProperties.length; ++i) { 766e14391e94c850b8bd03680c23b38978db68687a8John Reck var property = this.uniqueProperties[i]; 767e14391e94c850b8bd03680c23b38978db68687a8John Reck if (property.disabled) 768e14391e94c850b8bd03680c23b38978db68687a8John Reck continue; 769e14391e94c850b8bd03680c23b38978db68687a8John Reck if (property.shorthand) 770e14391e94c850b8bd03680c23b38978db68687a8John Reck shorthandNames[property.shorthand] = true; 771e14391e94c850b8bd03680c23b38978db68687a8John Reck } 7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7736b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // Collect all shorthand names. 774e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block for (var i = 0; i < this.uniqueProperties.length; ++i) { 775e14391e94c850b8bd03680c23b38978db68687a8John Reck var property = this.uniqueProperties[i]; 776e14391e94c850b8bd03680c23b38978db68687a8John Reck var disabled = property.disabled; 777e14391e94c850b8bd03680c23b38978db68687a8John Reck if (!disabled && this.disabledComputedProperties && !(property.name in this.usedProperties) && property.name in this.disabledComputedProperties) 778e14391e94c850b8bd03680c23b38978db68687a8John Reck disabled = true; 7798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 780e14391e94c850b8bd03680c23b38978db68687a8John Reck var shorthand = !disabled ? property.shorthand : null; 781e14391e94c850b8bd03680c23b38978db68687a8John Reck 782e14391e94c850b8bd03680c23b38978db68687a8John Reck if (shorthand && shorthand in handledProperties) 7838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project continue; 7848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (shorthand) { 786e14391e94c850b8bd03680c23b38978db68687a8John Reck property = style.getLiveProperty(shorthand); 787e14391e94c850b8bd03680c23b38978db68687a8John Reck if (!property) 788e14391e94c850b8bd03680c23b38978db68687a8John Reck property = new WebInspector.CSSProperty(style, style.allProperties.length, shorthand, style.getShorthandValue(shorthand), style.getShorthandPriority(shorthand), "style", true, true, ""); 7898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 791e14391e94c850b8bd03680c23b38978db68687a8John Reck var isShorthand = !!(property.isLive && (shorthand || shorthandNames[property.name])); 792e14391e94c850b8bd03680c23b38978db68687a8John Reck var inherited = this.isPropertyInherited(property.name); 793e14391e94c850b8bd03680c23b38978db68687a8John Reck var overloaded = this.isPropertyOverloaded(property.name, isShorthand); 7948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 79581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch var item = new WebInspector.StylePropertyTreeElement(this._parentPane, this.styleRule, style, property, isShorthand, inherited, overloaded); 7968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.propertiesTreeOutline.appendChild(item); 797e14391e94c850b8bd03680c23b38978db68687a8John Reck handledProperties[property.name] = property; 7988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 8000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch findTreeElementWithName: function(name) 8020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 8030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var treeElement = this.propertiesTreeOutline.children[0]; 8040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch while (treeElement) { 8050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (treeElement.name === name) 8060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return treeElement; 8070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch treeElement = treeElement.traverseNextTreeElement(true, null, true); 8080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 8090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return null; 8100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 8110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8126b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner addNewBlankProperty: function(optionalIndex) 8130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 814e14391e94c850b8bd03680c23b38978db68687a8John Reck var style = this.styleRule.style; 8156b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var property = style.newBlankProperty(); 81681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch var item = new WebInspector.StylePropertyTreeElement(this._parentPane, this.styleRule, style, property, false, false, false); 8170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.propertiesTreeOutline.appendChild(item); 8180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch item.listItemElement.textContent = ""; 8190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch item._newProperty = true; 820f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch item.updateTitle(); 8210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return item; 8220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 8230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8246b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner _debugShowStyle: function(anchor) 8256b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { 8266b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var boundHandler; 8276b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner function removeStyleBox(element, event) 8286b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { 8296b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (event.target === element) { 8306b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner event.stopPropagation(); 8316b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return; 8326b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 8336b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner document.body.removeChild(element); 8346b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner document.getElementById("main").removeEventListener("mousedown", boundHandler, true); 8356b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 8366b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 8376b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!event.shiftKey) 8386b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return; 8396b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 8406b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var container = document.createElement("div"); 8416b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var element = document.createElement("span"); 8426b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner container.appendChild(element); 8436b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner element.style.background = "yellow"; 8446b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner element.style.display = "inline-block"; 8456b70adc33054f8aee8c54d0f460458a9df11b8a5Russell 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;"; 8466b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner container.style.width = (document.body.offsetWidth - 100) + "px"; 8476b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner container.style.height = (document.body.offsetHeight - 100) + "px"; 8486b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner document.body.appendChild(container); 8496b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (this.rule) 8506b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner element.textContent = this.rule.selectorText + " {" + ((this.styleRule.style.cssText !== undefined) ? this.styleRule.style.cssText : "<no cssText>") + "}"; 8516b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner else 8526b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner element.textContent = this.styleRule.style.cssText; 8536b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner boundHandler = removeStyleBox.bind(null, container); 8546b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner document.getElementById("main").addEventListener("mousedown", boundHandler, true); 8556b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner }, 8566b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 857dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _handleEmptySpaceDoubleClick: function(event) 858cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block { 859dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (event.target.hasStyleClass("header")) { 860dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block event.stopPropagation(); 861cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 862dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 863dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.expand(); 864dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.addNewBlankProperty().startEditing(); 865dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }, 866cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 867dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _handleSelectorClick: function(event) 868dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 869dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block event.stopPropagation(); 870cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block }, 871cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 872dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _handleSelectorDoubleClick: function(event) 8730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 874dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this._startEditingOnMouseEvent(); 875dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block event.stopPropagation(); 8760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 8770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 878dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _startEditingOnMouseEvent: function() 8790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 8800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!this.editable) 8810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 8820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!this.rule && this.propertiesTreeOutline.children.length === 0) { 8840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.expand(); 8850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.addNewBlankProperty().startEditing(); 8860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 8870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 8880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!this.rule) 8900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 8910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.startEditingSelector(); 8930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 8940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch startEditingSelector: function() 8960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 8976c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen var element = this._selectorElement; 8980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (WebInspector.isBeingEdited(element)) 8990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 9000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 901f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebInspector.startEditing(this._selectorElement, { 902f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch context: null, 903f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch commitHandler: this.editingSelectorCommitted.bind(this), 904f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch cancelHandler: this.editingSelectorCancelled.bind(this) 905f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }); 9060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch window.getSelection().setBaseAndExtent(element, 0, element, 1); 9070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 9080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch editingSelectorCommitted: function(element, newContent, oldContent, context, moveDirection) 9100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 9110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch function moveToNextIfNeeded() { 912f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!moveDirection) 9130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 9140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 915f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (moveDirection === "forward") { 916f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this.expand(); 917f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (this.propertiesTreeOutline.children.length === 0) 918f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this.addNewBlankProperty().startEditing(); 919f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else { 920f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var item = this.propertiesTreeOutline.children[0] 921f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch item.startEditing(item.nameElement); 922f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 923f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } else { 924f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var previousSection = this.previousEditableSibling(); 925f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!previousSection) 926f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 927f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 928f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch previousSection.expand(); 929f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch previousSection.addNewBlankProperty().startEditing(); 9300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 9310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 9320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (newContent === oldContent) 9340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return moveToNextIfNeeded.call(this); 9350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var self = this; 9370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 938545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch function successCallback(newRule, doesAffectSelectedNode) 939545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch { 9400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!doesAffectSelectedNode) { 9410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.noAffect = true; 9420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.element.addStyleClass("no-affect"); 9430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else { 9440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch delete self.noAffect; 9450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.element.removeStyleClass("no-affect"); 9460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 9470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.rule = newRule; 949e14391e94c850b8bd03680c23b38978db68687a8John Reck self.styleRule = { section: self, style: newRule.style, selectorText: newRule.selectorText, sourceURL: newRule.sourceURL, rule: newRule }; 950231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 9510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var oldIdentifier = this.identifier; 9520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.identifier = newRule.selectorText + ":" + self.subtitleElement.textContent; 953231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 954231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block self.pane.update(); 955231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 9560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebInspector.panels.elements.renameSelector(oldIdentifier, this.identifier, oldContent, newContent); 9570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 958231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block moveToNextIfNeeded.call(self); 959231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 9600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9616b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var focusedNode = WebInspector.panels.elements.focusedDOMNode; 9626b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner WebInspector.cssModel.setRuleSelector(this.rule.id, focusedNode ? focusedNode.id : 0, newContent, successCallback, moveToNextIfNeeded.bind(this)); 963058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu }, 964058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu 965231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block editingSelectorCancelled: function() 966058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu { 967231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Do nothing, this is overridden by BlankStylePropertiesSection. 9688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.StylePropertiesSection.prototype.__proto__ = WebInspector.PropertiesSection.prototype; 9728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 973e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockWebInspector.ComputedStylePropertiesSection = function(styleRule, usedProperties, disabledComputedProperties) 9748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 975e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block WebInspector.PropertiesSection.call(this, ""); 976e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.headerElement.addStyleClass("hidden"); 977e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.element.className = "styles-section monospace first-styles-section read-only computed-style"; 978e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.styleRule = styleRule; 979e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._usedProperties = usedProperties; 980e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._disabledComputedProperties = disabledComputedProperties; 981e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._alwaysShowComputedProperties = { "display": true, "height": true, "width": true }; 982e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.computedStyle = true; 983e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._propertyTreeElements = {}; 984e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._expandedPropertyNames = {}; 985e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 9860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 987e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockWebInspector.ComputedStylePropertiesSection.prototype = { 988e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block collapse: function(dontRememberState) 989e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block { 990e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // Overriding with empty body. 991e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block }, 992e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 993e14391e94c850b8bd03680c23b38978db68687a8John Reck _isPropertyInherited: function(propertyName) 994e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block { 995e14391e94c850b8bd03680c23b38978db68687a8John Reck return !(propertyName in this._usedProperties) && !(propertyName in this._alwaysShowComputedProperties) && !(propertyName in this._disabledComputedProperties); 996e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block }, 997e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 998e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block update: function() 999e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block { 1000e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._expandedPropertyNames = {}; 1001e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block for (var name in this._propertyTreeElements) { 1002e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (this._propertyTreeElements[name].expanded) 1003e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._expandedPropertyNames[name] = true; 1004e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 1005e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._propertyTreeElements = {}; 1006e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.propertiesTreeOutline.removeChildren(); 1007e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.populated = false; 1008e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block }, 1009e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1010e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block onpopulate: function() 1011e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block { 1012e14391e94c850b8bd03680c23b38978db68687a8John Reck function sorter(a, b) 1013e14391e94c850b8bd03680c23b38978db68687a8John Reck { 1014e14391e94c850b8bd03680c23b38978db68687a8John Reck return a.name.localeCompare(b.name); 1015e14391e94c850b8bd03680c23b38978db68687a8John Reck } 1016e14391e94c850b8bd03680c23b38978db68687a8John Reck 1017e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var style = this.styleRule.style; 1018e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var uniqueProperties = []; 1019e14391e94c850b8bd03680c23b38978db68687a8John Reck var allProperties = style.allProperties; 1020e14391e94c850b8bd03680c23b38978db68687a8John Reck for (var i = 0; i < allProperties.length; ++i) 1021e14391e94c850b8bd03680c23b38978db68687a8John Reck uniqueProperties.push(allProperties[i]); 1022e14391e94c850b8bd03680c23b38978db68687a8John Reck uniqueProperties.sort(sorter); 1023e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1024e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._propertyTreeElements = {}; 1025e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block for (var i = 0; i < uniqueProperties.length; ++i) { 1026e14391e94c850b8bd03680c23b38978db68687a8John Reck var property = uniqueProperties[i]; 1027e14391e94c850b8bd03680c23b38978db68687a8John Reck var inherited = this._isPropertyInherited(property.name); 102881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch var item = new WebInspector.StylePropertyTreeElement(this._parentPane, this.styleRule, style, property, false, inherited, false); 1029e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this.propertiesTreeOutline.appendChild(item); 1030e14391e94c850b8bd03680c23b38978db68687a8John Reck this._propertyTreeElements[property.name] = item; 1031e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 1032e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block }, 1033e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1034e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block rebuildComputedTrace: function(sections) 1035e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block { 1036e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block for (var i = 0; i < sections.length; ++i) { 1037e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var section = sections[i]; 1038e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (section.computedStyle || section instanceof WebInspector.BlankStylePropertiesSection) 1039e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block continue; 1040e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1041e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block for (var j = 0; j < section.uniqueProperties.length; ++j) { 1042e14391e94c850b8bd03680c23b38978db68687a8John Reck var property = section.uniqueProperties[j]; 1043e14391e94c850b8bd03680c23b38978db68687a8John Reck if (property.disabled) 1044e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block continue; 1045e14391e94c850b8bd03680c23b38978db68687a8John Reck if (section.isInherited && !(property.name in WebInspector.StylesSidebarPane.InheritedProperties)) 1046e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block continue; 1047e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1048e14391e94c850b8bd03680c23b38978db68687a8John Reck var treeElement = this._propertyTreeElements[property.name]; 1049e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (treeElement) { 1050e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var selectorText = section.styleRule.selectorText; 1051e14391e94c850b8bd03680c23b38978db68687a8John Reck var value = property.value; 1052e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var title = "<span style='color: gray'>" + selectorText + "</span> - " + value; 1053e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block var subtitle = " <span style='float:right'>" + section.subtitleElement.innerHTML + "</span>"; 10546b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var childElement = new TreeElement(null, null, false); 10556b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner childElement.titleHTML = title + subtitle; 1056e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block treeElement.appendChild(childElement); 1057e14391e94c850b8bd03680c23b38978db68687a8John Reck if (section.isPropertyOverloaded(property.name)) 1058e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block childElement.listItemElement.addStyleClass("overloaded"); 1059e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 1060e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 1061e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 1062e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1063e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // Restore expanded state after update. 1064e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block for (var name in this._expandedPropertyNames) { 1065e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (name in this._propertyTreeElements) 1066e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block this._propertyTreeElements[name].expand(); 1067e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 1068e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 1069e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 1070e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1071e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockWebInspector.ComputedStylePropertiesSection.prototype.__proto__ = WebInspector.PropertiesSection.prototype; 1072e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 107381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochWebInspector.BlankStylePropertiesSection = function(parentPane, defaultSelectorText) 1074e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 107581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch WebInspector.StylePropertiesSection.call(this, parentPane, {selectorText: defaultSelectorText, rule: {isViaInspector: true}}, true, false, false); 10760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.element.addStyleClass("blank-section"); 10770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 10780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochWebInspector.BlankStylePropertiesSection.prototype = { 1080231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block expand: function() 10810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 1082231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Do nothing, blank sections are not expandable. 10830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 10840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1085231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block editingSelectorCommitted: function(element, newContent, oldContent, context) 10860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 10870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var self = this; 108828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu function successCallback(newRule, doesSelectorAffectSelectedNode) 1089231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 109028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu var styleRule = { section: self, style: newRule.style, selectorText: newRule.selectorText, sourceURL: newRule.sourceURL, rule: newRule }; 1091231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block self.makeNormal(styleRule); 1092231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1093231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!doesSelectorAffectSelectedNode) { 10940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.noAffect = true; 10950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.element.addStyleClass("no-affect"); 10960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 10970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.subtitleElement.textContent = WebInspector.UIString("via inspector"); 10990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.expand(); 11000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.addNewBlankProperty().startEditing(); 1102231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 1103231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1104545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch WebInspector.cssModel.addRule(this.pane.node.id, newContent, successCallback, this.editingSelectorCancelled.bind(this)); 1105231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 1106231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1107231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block editingSelectorCancelled: function() 1108231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 1109231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.pane.removeSection(this); 11100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 11110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch makeNormal: function(styleRule) 11130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 11140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.element.removeStyleClass("blank-section"); 11150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.styleRule = styleRule; 11160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.rule = styleRule.rule; 1117231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.identifier = styleRule.selectorText + ":via inspector"; 1118231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.__proto__ = WebInspector.StylePropertiesSection.prototype; 11190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 11200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 11210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochWebInspector.BlankStylePropertiesSection.prototype.__proto__ = WebInspector.StylePropertiesSection.prototype; 11230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 112481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochWebInspector.StylePropertyTreeElement = function(parentPane, styleRule, style, property, shorthand, inherited, overloaded) 11250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 112681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch this._parentPane = parentPane; 11270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this._styleRule = styleRule; 11288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.style = style; 1129e14391e94c850b8bd03680c23b38978db68687a8John Reck this.property = property; 11308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.shorthand = shorthand; 11318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this._inherited = inherited; 11328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this._overloaded = overloaded; 11338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Pass an empty title, the title gets made later in onattach. 11358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project TreeElement.call(this, "", null, shorthand); 11368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.StylePropertyTreeElement.prototype = { 11398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project get inherited() 11408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 11418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return this._inherited; 11428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 11438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project set inherited(x) 11458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 11468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (x === this._inherited) 11478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 11488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this._inherited = x; 11498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.updateState(); 11508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 11518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project get overloaded() 11538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 11548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return this._overloaded; 11558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 11568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project set overloaded(x) 11588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 11598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (x === this._overloaded) 11608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 11618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this._overloaded = x; 11628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.updateState(); 11638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 11648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project get disabled() 11668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1167e14391e94c850b8bd03680c23b38978db68687a8John Reck return this.property.disabled; 11688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 11698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1170e14391e94c850b8bd03680c23b38978db68687a8John Reck get name() 11718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 11726b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!this.disabled || !this.property.text) 11736b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return this.property.name; 11746b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 11756b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var text = this.property.text; 11766b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var index = text.indexOf(":"); 11776b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (index < 1) 11786b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return this.property.name; 11796b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 11806b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return text.substring(0, index).trim(); 11818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 11828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project get priority() 11848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1185e14391e94c850b8bd03680c23b38978db68687a8John Reck if (this.disabled) 11866b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return ""; // rely upon raw text to render it in the value field 11876b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return this.property.priority; 11888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 11898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project get value() 11918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 11926b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!this.disabled || !this.property.text) 11936b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return this.property.value; 11946b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 11956b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var match = this.property.text.match(/(.*);\s*/); 11966b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!match || !match[1]) 11976b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return this.property.value; 11986b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 11996b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var text = match[1]; 12006b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var index = text.indexOf(":"); 12016b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (index < 1) 1202e14391e94c850b8bd03680c23b38978db68687a8John Reck return this.property.value; 12036b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 12046b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return text.substring(index + 1).trim(); 1205e14391e94c850b8bd03680c23b38978db68687a8John Reck }, 1206e14391e94c850b8bd03680c23b38978db68687a8John Reck 1207e14391e94c850b8bd03680c23b38978db68687a8John Reck get parsedOk() 1208e14391e94c850b8bd03680c23b38978db68687a8John Reck { 1209e14391e94c850b8bd03680c23b38978db68687a8John Reck return this.property.parsedOk; 12108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 12118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project onattach: function() 12138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 12148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.updateTitle(); 12158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 12168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project updateTitle: function() 12188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 12198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var value = this.value; 12208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.updateState(); 12228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1223e14391e94c850b8bd03680c23b38978db68687a8John Reck var enabledCheckboxElement; 1224e14391e94c850b8bd03680c23b38978db68687a8John Reck if (this.parsedOk) { 1225e14391e94c850b8bd03680c23b38978db68687a8John Reck enabledCheckboxElement = document.createElement("input"); 1226e14391e94c850b8bd03680c23b38978db68687a8John Reck enabledCheckboxElement.className = "enabled-button"; 1227e14391e94c850b8bd03680c23b38978db68687a8John Reck enabledCheckboxElement.type = "checkbox"; 1228e14391e94c850b8bd03680c23b38978db68687a8John Reck enabledCheckboxElement.checked = !this.disabled; 1229e14391e94c850b8bd03680c23b38978db68687a8John Reck enabledCheckboxElement.addEventListener("change", this.toggleEnabled.bind(this), false); 1230e14391e94c850b8bd03680c23b38978db68687a8John Reck } 12318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var nameElement = document.createElement("span"); 12336c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen nameElement.className = "webkit-css-property"; 12348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nameElement.textContent = this.name; 12350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.nameElement = nameElement; 12368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var valueElement = document.createElement("span"); 12388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project valueElement.className = "value"; 12390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.valueElement = valueElement; 12408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1241231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (value) { 1242cad810f21b803229eb11403f9209855525a25d57Steve Block var self = this; 1243cad810f21b803229eb11403f9209855525a25d57Steve Block 1244231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block function processValue(regex, processor, nextProcessor, valueText) 1245231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 1246231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var container = document.createDocumentFragment(); 1247231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1248231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var items = valueText.replace(regex, "\0$1\0").split("\0"); 1249231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block for (var i = 0; i < items.length; ++i) { 1250231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if ((i % 2) === 0) { 1251231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (nextProcessor) 1252231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block container.appendChild(nextProcessor(items[i])); 1253231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block else 1254231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block container.appendChild(document.createTextNode(items[i])); 1255231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } else { 1256231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var processedNode = processor(items[i]); 1257231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (processedNode) 1258231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block container.appendChild(processedNode); 1259231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 1260231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 12618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1262231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return container; 1263231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 12648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1265231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block function linkifyURL(url) 1266231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 1267cad810f21b803229eb11403f9209855525a25d57Steve Block var hrefUrl = url; 1268cad810f21b803229eb11403f9209855525a25d57Steve Block var match = hrefUrl.match(/['"]?([^'"]+)/); 1269cad810f21b803229eb11403f9209855525a25d57Steve Block if (match) 1270cad810f21b803229eb11403f9209855525a25d57Steve Block hrefUrl = match[1]; 1271231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var container = document.createDocumentFragment(); 1272231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block container.appendChild(document.createTextNode("url(")); 1273cad810f21b803229eb11403f9209855525a25d57Steve Block if (self._styleRule.sourceURL) 1274cad810f21b803229eb11403f9209855525a25d57Steve Block hrefUrl = WebInspector.completeURL(self._styleRule.sourceURL, hrefUrl); 1275cad810f21b803229eb11403f9209855525a25d57Steve Block else if (WebInspector.panels.elements.focusedDOMNode) 1276cad810f21b803229eb11403f9209855525a25d57Steve Block hrefUrl = WebInspector.resourceURLForRelatedNode(WebInspector.panels.elements.focusedDOMNode, hrefUrl); 1277cad810f21b803229eb11403f9209855525a25d57Steve Block var hasResource = !!WebInspector.resourceForURL(hrefUrl); 1278cad810f21b803229eb11403f9209855525a25d57Steve Block // FIXME: WebInspector.linkifyURLAsNode() should really use baseURI. 1279cad810f21b803229eb11403f9209855525a25d57Steve Block container.appendChild(WebInspector.linkifyURLAsNode(hrefUrl, url, null, hasResource)); 1280231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block container.appendChild(document.createTextNode(")")); 1281231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return container; 1282231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 12838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1284231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block function processColor(text) 1285231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 1286231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block try { 1287231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var color = new WebInspector.Color(text); 1288231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } catch (e) { 1289231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return document.createTextNode(text); 12900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 12910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1292231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var swatchElement = document.createElement("span"); 1293231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block swatchElement.title = WebInspector.UIString("Click to change color format"); 1294231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block swatchElement.className = "swatch"; 1295231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block swatchElement.style.setProperty("background-color", text); 1296231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1297231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block swatchElement.addEventListener("click", changeColorDisplay, false); 1298231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block swatchElement.addEventListener("dblclick", function(event) { event.stopPropagation() }, false); 1299231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1300231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var format; 13014576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (WebInspector.settings.colorFormat === "original") 13024576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang format = "original"; 13034576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang else if (Preferences.showColorNicknames && color.nickname) 1304231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block format = "nickname"; 130528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu else if (WebInspector.settings.colorFormat === "rgb") 1306231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block format = (color.simple ? "rgb" : "rgba"); 130728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu else if (WebInspector.settings.colorFormat === "hsl") 1308231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block format = (color.simple ? "hsl" : "hsla"); 1309231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block else if (color.simple) 1310231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block format = (color.hasShortHex() ? "shorthex" : "hex"); 1311231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block else 1312231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block format = "rgba"; 13130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1314231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var colorValueElement = document.createElement("span"); 1315231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block colorValueElement.textContent = color.toString(format); 1316231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 13174576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang function nextFormat(curFormat) 1318231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 13194576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // The format loop is as follows: 13204576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // * original 13214576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // * rgb(a) 13224576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // * hsl(a) 13234576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // * nickname (if the color has a nickname) 13244576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // * if the color is simple: 13254576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // - shorthex (if has short hex) 13264576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // - hex 13274576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang switch (curFormat) { 13284576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang case "original": 13294576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return color.simple ? "rgb" : "rgba"; 13304576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 1331058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu case "rgb": 13324576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang case "rgba": 13334576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return color.simple ? "hsl" : "hsla"; 13344576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 13354576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang case "hsl": 13364576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang case "hsla": 13374576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (color.nickname) 13384576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return "nickname"; 13394576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (color.simple) 13404576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return color.hasShortHex() ? "shorthex" : "hex"; 13414576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang else 13424576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return "original"; 13430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1344058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu case "shorthex": 13454576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return "hex"; 13460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1347058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu case "hex": 13484576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return "original"; 13490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1350058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu case "nickname": 13514576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (color.simple) 13524576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return color.hasShortHex() ? "shorthex" : "hex"; 1353058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu else 13544576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return "original"; 1355058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu 13564576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang default: 13574576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return null; 13580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 13594576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } 13604576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 13614576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang function changeColorDisplay(event) 13624576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang { 13634576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang do { 13644576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang format = nextFormat(format); 13654576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang var currentValue = color.toString(format || ""); 13664576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } while (format && currentValue === color.value && format !== "original"); 1367231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 13684576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (format) 13694576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang colorValueElement.textContent = currentValue; 13708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1371231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1372231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var container = document.createDocumentFragment(); 1373231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block container.appendChild(swatchElement); 1374231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block container.appendChild(colorValueElement); 1375231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return container; 13768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1377231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1378dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var colorRegex = /((?:rgb|hsl)a?\([^)]+\)|#[0-9a-fA-F]{6}|#[0-9a-fA-F]{3}|\b\w+\b(?!-))/g; 1379231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var colorProcessor = processValue.bind(window, colorRegex, processColor, null); 1380231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1381cad810f21b803229eb11403f9209855525a25d57Steve Block valueElement.appendChild(processValue(/url\(\s*([^)\s]+)\s*\)/g, linkifyURL, colorProcessor, value)); 1382231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 1383231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1384231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.listItemElement.removeChildren(); 1385ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch nameElement.normalize(); 1386ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch valueElement.normalize(); 1387231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1388545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (!this.treeOutline) 1389545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return; 1390545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 1391231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Append the checkbox for root elements of an editable section. 1392e14391e94c850b8bd03680c23b38978db68687a8John Reck if (enabledCheckboxElement && this.treeOutline.section && this.treeOutline.section.editable && this.parent.root) 1393231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.listItemElement.appendChild(enabledCheckboxElement); 1394231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.listItemElement.appendChild(nameElement); 1395231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.listItemElement.appendChild(document.createTextNode(": ")); 1396231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.listItemElement.appendChild(valueElement); 1397231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.listItemElement.appendChild(document.createTextNode(";")); 1398231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1399f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!this.parsedOk) { 1400f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Avoid having longhands under an invalid shorthand. 1401f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this.hasChildren = false; 14026b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.listItemElement.addStyleClass("not-parsed-ok"); 1403f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 14046b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (this.property.inactive) 14056b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.listItemElement.addStyleClass("inactive"); 14066b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 1407e14391e94c850b8bd03680c23b38978db68687a8John Reck this.tooltip = this.property.propertyText; 14088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 14098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project updateAll: function(updateAllRules) 14118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 14126c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (!this.treeOutline) 14136c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen return; 14148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (updateAllRules && this.treeOutline.section && this.treeOutline.section.pane) 14158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.treeOutline.section.pane.update(null, this.treeOutline.section); 14168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (this.treeOutline.section) 14178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.treeOutline.section.update(true); 14188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 1419e14391e94c850b8bd03680c23b38978db68687a8John Reck this.updateTitle(); // FIXME: this will not show new properties. But we don't hit this case yet. 14208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 14218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project toggleEnabled: function(event) 14238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 14248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var disabled = !event.target.checked; 14258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1426545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch function callback(newStyle) 1427231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 1428545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (!newStyle) 14290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 14308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1431e14391e94c850b8bd03680c23b38978db68687a8John Reck this.style = newStyle; 1432e14391e94c850b8bd03680c23b38978db68687a8John Reck this._styleRule.style = newStyle; 14338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1434e14391e94c850b8bd03680c23b38978db68687a8John Reck if (this.treeOutline.section && this.treeOutline.section.pane) 1435e14391e94c850b8bd03680c23b38978db68687a8John Reck this.treeOutline.section.pane.dispatchEventToListeners("style property toggled"); 14368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1437e14391e94c850b8bd03680c23b38978db68687a8John Reck this.updateAll(true); 1438231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 1439231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1440e14391e94c850b8bd03680c23b38978db68687a8John Reck this.property.setDisabled(disabled, callback.bind(this)); 14418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 14428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project updateState: function() 14448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 14458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!this.listItemElement) 14468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 14478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.style.isPropertyImplicit(this.name) || this.value === "initial") 14498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.addStyleClass("implicit"); 14508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 14518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.removeStyleClass("implicit"); 14528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14536b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.selectable = !this.inherited; 14548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.inherited) 14558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.addStyleClass("inherited"); 14568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 14578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.removeStyleClass("inherited"); 14588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.overloaded) 14608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.addStyleClass("overloaded"); 14618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 14628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.removeStyleClass("overloaded"); 14638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.disabled) 14658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.addStyleClass("disabled"); 14668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 14678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.listItemElement.removeStyleClass("disabled"); 14688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 14698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project onpopulate: function() 14718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 14728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Only populate once and if this property is a shorthand. 14738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.children.length || !this.shorthand) 14748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 14758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var longhandProperties = this.style.getLonghandProperties(this.name); 14778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var i = 0; i < longhandProperties.length; ++i) { 1478e14391e94c850b8bd03680c23b38978db68687a8John Reck var name = longhandProperties[i].name; 1479e14391e94c850b8bd03680c23b38978db68687a8John Reck 14808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.treeOutline.section) { 14828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var inherited = this.treeOutline.section.isPropertyInherited(name); 14838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var overloaded = this.treeOutline.section.isPropertyOverloaded(name); 14848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 14858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1486e14391e94c850b8bd03680c23b38978db68687a8John Reck var liveProperty = this.style.getLiveProperty(name); 148781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch var item = new WebInspector.StylePropertyTreeElement(this._parentPane, this._styleRule, this.style, liveProperty, false, inherited, overloaded); 14888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.appendChild(item); 14898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 14908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 14918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1492643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ondblclick: function(event) 14938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 14948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.startEditing(event.target); 14950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch event.stopPropagation(); 14968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 14978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 149806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen restoreNameElement: function() 149906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen { 150006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // Restore <span class="webkit-css-property"> if it doesn't yet exist or was accidentally deleted. 150106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (this.nameElement === this.listItemElement.querySelector(".webkit-css-property")) 150206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return; 150306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 150406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen this.nameElement = document.createElement("span"); 150506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen this.nameElement.className = "webkit-css-property"; 150606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen this.nameElement.textContent = ""; 150706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen this.listItemElement.insertBefore(this.nameElement, this.listItemElement.firstChild); 150806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen }, 150906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 15108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project startEditing: function(selectElement) 15118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 15128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: we don't allow editing of longhand properties under a shorthand right now. 15138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (this.parent.shorthand) 15148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 15158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1516f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (this.treeOutline.section && !this.treeOutline.section.editable) 1517f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 1518f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1519f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!selectElement) 1520f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch selectElement = this.nameElement; // No arguments passed in - edit the name element by default. 1521f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else 1522f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch selectElement = selectElement.enclosingNodeOrSelfWithClass("webkit-css-property") || selectElement.enclosingNodeOrSelfWithClass("value"); 1523f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1524f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var isEditingName = selectElement === this.nameElement; 1525f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!isEditingName && selectElement !== this.valueElement) { 1526f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Double-click in the LI - start editing value. 1527f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch isEditingName = false; 1528f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch selectElement = this.valueElement; 1529f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 1530f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1531f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (WebInspector.isBeingEdited(selectElement)) 15328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 15338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 153406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen var context = { 153506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen expanded: this.expanded, 153606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen hasChildren: this.hasChildren, 1537ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch keyDownListener: isEditingName ? null : this.editingValueKeyDown.bind(this), 1538f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch isEditingName: isEditingName, 153906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen }; 15408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Lie about our children to prevent expanding on double click and to collapse shorthands. 15428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.hasChildren = false; 15438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1544ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (!isEditingName) 1545ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch selectElement.addEventListener("keydown", context.keyDownListener, false); 1546f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (selectElement.parentElement) 1547f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch selectElement.parentElement.addStyleClass("child-editing"); 1548f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch selectElement.textContent = selectElement.textContent; // remove color swatch and the like 1549f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1550f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch function shouldCommitValueSemicolon(text, cursorPosition) 1551f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 1552f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // FIXME: should this account for semicolons inside comments? 1553f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var openQuote = ""; 1554f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch for (var i = 0; i < cursorPosition; ++i) { 1555f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var ch = text[i]; 1556f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (ch === "\\" && openQuote !== "") 1557f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch ++i; // skip next character inside string 1558f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else if (!openQuote && (ch === "\"" || ch === "'")) 1559f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch openQuote = ch; 1560f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else if (openQuote === ch) 1561f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch openQuote = ""; 1562f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 1563f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return !openQuote; 1564f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 15658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1566f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch function nameValueFinishHandler(context, isEditingName, event) 1567f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 1568f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // FIXME: the ":"/";" detection does not work for non-US layouts due to the event being keydown rather than keypress. 1569f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var isFieldInputTerminated = (event.keyCode === WebInspector.KeyboardShortcut.Keys.Semicolon.code) && 1570f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch (isEditingName ? event.shiftKey : (!event.shiftKey && shouldCommitValueSemicolon(event.target.textContent, event.target.selectionLeftOffset))); 1571f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (isEnterKey(event) || isFieldInputTerminated) { 1572f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Enter or colon (for name)/semicolon outside of string (for value). 1573f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch event.preventDefault(); 1574f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return "move-forward"; 1575f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } else if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.code) 1576f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return "cancel"; 1577cad810f21b803229eb11403f9209855525a25d57Steve Block else if (!isEditingName && this._newProperty && event.keyCode === WebInspector.KeyboardShortcut.Keys.Backspace.code) { 1578cad810f21b803229eb11403f9209855525a25d57Steve Block // For a new property, when Backspace is pressed at the beginning of new property value, move back to the property name. 1579cad810f21b803229eb11403f9209855525a25d57Steve Block var selection = window.getSelection(); 1580cad810f21b803229eb11403f9209855525a25d57Steve Block if (selection.isCollapsed && !selection.focusOffset) { 1581cad810f21b803229eb11403f9209855525a25d57Steve Block event.preventDefault(); 1582cad810f21b803229eb11403f9209855525a25d57Steve Block return "move-backward"; 1583cad810f21b803229eb11403f9209855525a25d57Steve Block } 1584cad810f21b803229eb11403f9209855525a25d57Steve Block } else if (event.keyIdentifier === "U+0009") // Tab key. 1585f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return "move-" + (event.shiftKey ? "backward" : "forward"); 1586f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 15878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1588cad810f21b803229eb11403f9209855525a25d57Steve Block function pasteHandler(context, event) 1589cad810f21b803229eb11403f9209855525a25d57Steve Block { 1590cad810f21b803229eb11403f9209855525a25d57Steve Block var data = event.clipboardData.getData("Text"); 1591cad810f21b803229eb11403f9209855525a25d57Steve Block if (!data) 1592cad810f21b803229eb11403f9209855525a25d57Steve Block return; 1593cad810f21b803229eb11403f9209855525a25d57Steve Block var colonIdx = data.indexOf(":"); 1594cad810f21b803229eb11403f9209855525a25d57Steve Block if (colonIdx < 0) 1595cad810f21b803229eb11403f9209855525a25d57Steve Block return; 1596cad810f21b803229eb11403f9209855525a25d57Steve Block var name = data.substring(0, colonIdx).trim(); 1597cad810f21b803229eb11403f9209855525a25d57Steve Block var value = data.substring(colonIdx + 1).trim(); 1598cad810f21b803229eb11403f9209855525a25d57Steve Block 1599cad810f21b803229eb11403f9209855525a25d57Steve Block event.preventDefault(); 1600cad810f21b803229eb11403f9209855525a25d57Steve Block 1601cad810f21b803229eb11403f9209855525a25d57Steve Block if (!("originalName" in context)) { 1602cad810f21b803229eb11403f9209855525a25d57Steve Block context.originalName = this.nameElement.textContent; 1603cad810f21b803229eb11403f9209855525a25d57Steve Block context.originalValue = this.valueElement.textContent; 1604cad810f21b803229eb11403f9209855525a25d57Steve Block } 1605cad810f21b803229eb11403f9209855525a25d57Steve Block this.nameElement.textContent = name; 1606cad810f21b803229eb11403f9209855525a25d57Steve Block this.valueElement.textContent = value; 1607cad810f21b803229eb11403f9209855525a25d57Steve Block this.nameElement.normalize(); 1608cad810f21b803229eb11403f9209855525a25d57Steve Block this.valueElement.normalize(); 1609cad810f21b803229eb11403f9209855525a25d57Steve Block 1610cad810f21b803229eb11403f9209855525a25d57Steve Block return "move-forward"; 1611cad810f21b803229eb11403f9209855525a25d57Steve Block } 1612cad810f21b803229eb11403f9209855525a25d57Steve Block 161381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch this._parentPane.isModifyingStyle = true; 1614f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebInspector.startEditing(selectElement, { 1615f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch context: context, 1616f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch commitHandler: this.editingCommitted.bind(this), 1617f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch cancelHandler: this.editingCancelled.bind(this), 1618cad810f21b803229eb11403f9209855525a25d57Steve Block customFinishHandler: nameValueFinishHandler.bind(this, context, isEditingName), 1619cad810f21b803229eb11403f9209855525a25d57Steve Block pasteHandler: isEditingName ? pasteHandler.bind(this, context) : null 1620f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }); 1621f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1622ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._prompt = new WebInspector.StylesSidebarPane.CSSPropertyPrompt(selectElement, isEditingName ? WebInspector.cssNameCompletions : WebInspector.CSSKeywordCompletions.forProperty(this.nameElement.textContent)); 1623ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch window.getSelection().setBaseAndExtent(selectElement, 0, selectElement, 1); 1624f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }, 1625f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1626f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch editingValueKeyDown: function(event) 16278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1628ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (event.handled) 1629ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return; 16308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var arrowKeyPressed = (event.keyIdentifier === "Up" || event.keyIdentifier === "Down"); 16318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var pageKeyPressed = (event.keyIdentifier === "PageUp" || event.keyIdentifier === "PageDown"); 16328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!arrowKeyPressed && !pageKeyPressed) 16338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 16348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var selection = window.getSelection(); 16368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!selection.rangeCount) 16378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 16388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var selectionRange = selection.getRangeAt(0); 1640f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (selectionRange.commonAncestorContainer !== this.valueElement && !selectionRange.commonAncestorContainer.isDescendant(this.valueElement)) 16418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 16428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1643ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch var wordRange = selectionRange.startContainer.rangeOfWord(selectionRange.startOffset, WebInspector.StylesSidebarPane.StyleValueDelimiters, this.valueElement); 16448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var wordString = wordRange.toString(); 16452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var replacementString; 16462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var prefix, suffix, number; 16478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var matches; 16492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch matches = /(.*#)([\da-fA-F]+)(.*)/.exec(wordString); 16508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (matches && matches.length) { 16512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch prefix = matches[1]; 16522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch suffix = matches[3]; 16532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch number = this._alteredHexNumber(matches[2], event); 16548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project replacementString = prefix + number + suffix; 16562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } else { 16572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch matches = /(.*?)(-?(?:\d+(?:\.\d+)?|\.\d+))(.*)/.exec(wordString); 16582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (matches && matches.length) { 16592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch prefix = matches[1]; 16602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch suffix = matches[3]; 16612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch number = this._alteredFloatNumber(parseFloat(matches[2]), event); 16628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch replacementString = prefix + number + suffix; 16642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 16652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 16662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 16672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (replacementString) { 1668ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch var replacementTextNode = document.createTextNode(replacementString); 16698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1670ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch wordRange.deleteContents(); 1671ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch wordRange.insertNode(replacementTextNode); 16728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1673ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch var finalSelectionRange = document.createRange(); 1674ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch finalSelectionRange.setStart(replacementTextNode, 0); 1675ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch finalSelectionRange.setEnd(replacementTextNode, replacementString.length); 16768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1677ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch selection.removeAllRanges(); 1678ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch selection.addRange(finalSelectionRange); 16798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1680ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch event.handled = true; 1681ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch event.preventDefault(); 16828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1683ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (!("originalPropertyText" in this)) { 1684ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // Remember the rule's original CSS text on [Page](Up|Down), so it can be restored 1685ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // if the editing is canceled. 1686ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this.originalPropertyText = this.property.propertyText; 1687ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 1688f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1689ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // Synthesize property text disregarding any comments, custom whitespace etc. 1690ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this.applyStyleText(this.nameElement.textContent + ": " + this.valueElement.textContent); 1691ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 16928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 16938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch _alteredFloatNumber: function(number, event) 16952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch { 16962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var arrowKeyPressed = (event.keyIdentifier === "Up" || event.keyIdentifier === "Down"); 16972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // If the number is near zero or the number is one and the direction will take it near zero. 16982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var numberNearZero = (number < 1 && number > -1); 16992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (number === 1 && event.keyIdentifier === "Down") 17002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch numberNearZero = true; 17012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch else if (number === -1 && event.keyIdentifier === "Up") 17022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch numberNearZero = true; 17032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 17042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var result; 17052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (numberNearZero && event.altKey && arrowKeyPressed) { 17062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (event.keyIdentifier === "Down") 17072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch result = Math.ceil(number - 1); 17082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch else 17092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch result = Math.floor(number + 1); 17102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } else { 17112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Jump by 10 when shift is down or jump by 0.1 when near zero or Alt/Option is down. 17122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Also jump by 10 for page up and down, or by 100 if shift is held with a page key. 17132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var changeAmount = 1; 17142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (event.shiftKey && !arrowKeyPressed) 17152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch changeAmount = 100; 17162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch else if (event.shiftKey || !arrowKeyPressed) 17172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch changeAmount = 10; 17182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch else if (event.altKey || numberNearZero) 17192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch changeAmount = 0.1; 17202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 17212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (event.keyIdentifier === "Down" || event.keyIdentifier === "PageDown") 17222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch changeAmount *= -1; 17232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 17242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Make the new number and constrain it to a precision of 6, this matches numbers the engine returns. 17252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Use the Number constructor to forget the fixed precision, so 1.100000 will print as 1.1. 17262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch result = Number((number + changeAmount).toFixed(6)); 17272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 17282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 17292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return result; 17302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch }, 17312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 17322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch _alteredHexNumber: function(hexString, event) 17332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch { 17342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var number = parseInt(hexString, 16); 17352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (isNaN(number) || !isFinite(number)) 17362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return hexString; 17372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 17382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var maxValue = Math.pow(16, hexString.length) - 1; 17392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var arrowKeyPressed = (event.keyIdentifier === "Up" || event.keyIdentifier === "Down"); 17402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 17412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var delta; 17422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (arrowKeyPressed) 17432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch delta = (event.keyIdentifier === "Up") ? 1 : -1; 17442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch else 17452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch delta = (event.keyIdentifier === "PageUp") ? 16 : -16; 17462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 17472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (event.shiftKey) 17482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch delta *= 16; 17492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 17502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var result = number + delta; 17512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (result < 0) 17522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch result = 0; // Color hex values are never negative, so clamp to 0. 17532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch else if (result > maxValue) 17542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return hexString; 17552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 17562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Ensure the result length is the same as the original hex value. 17572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var resultString = result.toString(16).toUpperCase(); 17582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch for (var i = 0, lengthDelta = hexString.length - resultString.length; i < lengthDelta; ++i) 17592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch resultString = "0" + resultString; 17602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return resultString; 17612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch }, 17622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 17638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project editingEnded: function(context) 17648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 17658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.hasChildren = context.hasChildren; 17668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (context.expanded) 17678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.expand(); 1768f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var editedElement = context.isEditingName ? this.nameElement : this.valueElement; 1769ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (!context.isEditingName) 1770ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch editedElement.removeEventListener("keydown", context.keyDownListener, false); 1771f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (editedElement.parentElement) 1772f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch editedElement.parentElement.removeStyleClass("child-editing"); 1773f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 17746b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner delete this.originalPropertyText; 177581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch delete this._parentPane.isModifyingStyle; 17768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 17778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project editingCancelled: function(element, context) 17798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 17802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._removePrompt(); 17816b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if ("originalPropertyText" in this) 17826b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.applyStyleText(this.originalPropertyText, true); 17836b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner else { 17846b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (this._newProperty) 17856b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.treeOutline.removeChild(this); 17866b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner else 17876b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.updateTitle(); 17886b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 1789ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1790ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // This should happen last, as it clears the info necessary to restore the property value after [Page]Up/Down changes. 17918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.editingEnded(context); 17928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 17938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch editingCommitted: function(element, userInput, previousContent, context, moveDirection) 17958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 17962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._removePrompt(); 17978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.editingEnded(context); 1798f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var isEditingName = context.isEditingName; 17998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Determine where to move to before making changes 1801f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var createNewProperty, moveToPropertyName, moveToSelector; 18026b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner var moveTo = this; 1803f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var moveToOther = (isEditingName ^ (moveDirection === "forward")); 1804f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var abandonNewProperty = this._newProperty && !userInput && (moveToOther || isEditingName); 1805f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (moveDirection === "forward" && !isEditingName || moveDirection === "backward" && isEditingName) { 1806f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch do { 1807f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch moveTo = (moveDirection === "forward" ? moveTo.nextSibling : moveTo.previousSibling); 1808f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } while(moveTo && !moveTo.selectable); 1809f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1810f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (moveTo) 1811f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch moveToPropertyName = moveTo.name; 1812f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else if (moveDirection === "forward" && (!this._newProperty || userInput)) 1813f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch createNewProperty = true; 1814f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else if (moveDirection === "backward" && this.treeOutline.section.rule) 1815f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch moveToSelector = true; 1816f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 18170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1818f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Make the Changes and trigger the moveToNextCallback after updating. 18190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var blankInput = /^\s*$/.test(userInput); 1820cad810f21b803229eb11403f9209855525a25d57Steve Block var isDataPasted = "originalName" in context; 1821cad810f21b803229eb11403f9209855525a25d57Steve Block var isDirtyViaPaste = isDataPasted && (this.nameElement.textContent !== context.originalName || this.valueElement.textContent !== context.originalValue); 1822f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var shouldCommitNewProperty = this._newProperty && (moveToOther || (!moveDirection && !isEditingName) || (isEditingName && blankInput)); 1823cad810f21b803229eb11403f9209855525a25d57Steve Block if (((userInput !== previousContent || isDirtyViaPaste) && !this._newProperty) || shouldCommitNewProperty) { 182481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch this._parentPane.isModifyingStyle = true; 1825f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this.treeOutline.section._afterUpdate = moveToNextCallback.bind(this, this._newProperty, !blankInput, this.treeOutline.section); 1826f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var propertyText; 1827f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (blankInput || (this._newProperty && /^\s*$/.test(this.valueElement.textContent))) 1828f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch propertyText = ""; 1829f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else { 1830f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (isEditingName) 1831f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch propertyText = userInput + ": " + this.valueElement.textContent; 1832f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else 1833f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch propertyText = this.nameElement.textContent + ": " + userInput; 1834f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 1835f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this.applyStyleText(propertyText, true); 1836f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } else { 1837cad810f21b803229eb11403f9209855525a25d57Steve Block if (!isDataPasted && !this._newProperty) 1838f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this.updateTitle(); 183981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch moveToNextCallback.call(this, this._newProperty, false, this.treeOutline.section); 1840f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 1841f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1842f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var moveToIndex = moveTo && this.treeOutline ? this.treeOutline.children.indexOf(moveTo) : -1; 1843f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1844f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // The Callback to start editing the next/previous property/selector. 1845231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block function moveToNextCallback(alreadyNew, valueChanged, section) 1846231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 184781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch delete this._parentPane.isModifyingStyle; 184881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 18490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!moveDirection) 18500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 18510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1852f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // User just tabbed through without changes. 18530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (moveTo && moveTo.parent) { 1854f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch moveTo.startEditing(!isEditingName ? moveTo.nameElement : moveTo.valueElement); 18550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 18560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 18570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1858f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // User has made a change then tabbed, wiping all the original treeElements. 1859f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Recalculate the new treeElement for the same property we were going to edit next. 18600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (moveTo && !moveTo.parent) { 1861f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var propertyElements = section.propertiesTreeOutline.children; 1862f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (moveDirection === "forward" && blankInput && !isEditingName) 1863f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch --moveToIndex; 1864f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (moveToIndex >= propertyElements.length && !this._newProperty) 1865f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch createNewProperty = true; 1866f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else { 1867f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var treeElement = moveToIndex >= 0 ? propertyElements[moveToIndex] : null; 1868f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (treeElement) { 1869f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch treeElement.startEditing(!isEditingName ? treeElement.nameElement : treeElement.valueElement); 1870f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 1871f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } else if (!alreadyNew) 1872f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch moveToSelector = true; 1873f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 18740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 18750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1876f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Create a new attribute in this section (or move to next editable selector if possible). 1877f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (createNewProperty) { 1878f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (alreadyNew && !valueChanged && (isEditingName ^ (moveDirection === "backward"))) 18790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 18800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 18818a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block section.addNewBlankProperty().startEditing(); 18820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 18830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 18840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1885f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (abandonNewProperty) { 1886f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var sectionToEdit = moveDirection === "backward" ? section : section.nextEditableSibling(); 1887f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (sectionToEdit && sectionToEdit.rule) 1888f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch sectionToEdit.startEditingSelector(); 1889f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 1890f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 1891f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 18920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (moveToSelector) 18930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch section.startEditingSelector(); 18940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 18958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 18968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _removePrompt: function() 18982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 18992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // BUG 53242. This cannot go into editingEnded(), as it should always happen first for any editing outcome. 19002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (this._prompt) { 19012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._prompt.removeFromElement(); 19022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block delete this._prompt; 19032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 19042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block }, 19052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1906cad810f21b803229eb11403f9209855525a25d57Steve Block _hasBeenAppliedToPageViaUpDown: function() 1907cad810f21b803229eb11403f9209855525a25d57Steve Block { 1908cad810f21b803229eb11403f9209855525a25d57Steve Block // New properties applied via up/down have an originalPropertyText and will be deleted later 1909cad810f21b803229eb11403f9209855525a25d57Steve Block // on, if cancelled, when the empty string gets applied as their style text. 1910cad810f21b803229eb11403f9209855525a25d57Steve Block return ("originalPropertyText" in this); 1911cad810f21b803229eb11403f9209855525a25d57Steve Block }, 1912cad810f21b803229eb11403f9209855525a25d57Steve Block 19138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project applyStyleText: function(styleText, updateInterface) 19148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 19150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var section = this.treeOutline.section; 19160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var elementsPanel = WebInspector.panels.elements; 1917f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch styleText = styleText.replace(/\s/g, " ").trim(); // Replace with whitespace. 1918dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var styleTextLength = styleText.length; 1919cad810f21b803229eb11403f9209855525a25d57Steve Block if (!styleTextLength && updateInterface && this._newProperty && !this._hasBeenAppliedToPageViaUpDown()) { 1920cad810f21b803229eb11403f9209855525a25d57Steve Block // The user deleted everything and never applied a new property value via Up/Down scrolling, so remove the tree element and update. 1921f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this.parent.removeChild(this); 1922f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch section.afterUpdate(); 1923f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 19248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 19258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1926e14391e94c850b8bd03680c23b38978db68687a8John Reck function callback(newStyle) 1927231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 1928e14391e94c850b8bd03680c23b38978db68687a8John Reck if (!newStyle) { 1929e14391e94c850b8bd03680c23b38978db68687a8John Reck // The user typed something, but it didn't parse. Just abort and restore 1930e14391e94c850b8bd03680c23b38978db68687a8John Reck // the original title for this property. If this was a new attribute and 1931e14391e94c850b8bd03680c23b38978db68687a8John Reck // we couldn't parse, then just remove it. 1932e14391e94c850b8bd03680c23b38978db68687a8John Reck if (this._newProperty) { 1933e14391e94c850b8bd03680c23b38978db68687a8John Reck this.parent.removeChild(this); 1934e14391e94c850b8bd03680c23b38978db68687a8John Reck return; 1935e14391e94c850b8bd03680c23b38978db68687a8John Reck } 1936e14391e94c850b8bd03680c23b38978db68687a8John Reck if (updateInterface) 1937e14391e94c850b8bd03680c23b38978db68687a8John Reck this.updateTitle(); 19380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 19398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 19408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 19416b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.style = newStyle; 19426b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this.property = newStyle.propertyAt(this.property.index); 19436b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner this._styleRule.style = this.style; 1944231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 19450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (section && section.pane) 19460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch section.pane.dispatchEventToListeners("style edited"); 19478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 19480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (updateInterface) 1949e14391e94c850b8bd03680c23b38978db68687a8John Reck this.updateAll(true); 1950231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 1951545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 19526b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // Append a ";" if the new text does not end in ";". 19536b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // FIXME: this does not handle trailing comments. 19546b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (styleText.length && !/;\s*$/.test(styleText)) 19556b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner styleText += ";"; 19564576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this.property.setText(styleText, updateInterface, callback.bind(this)); 19578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 19588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 19598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 19608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.StylePropertyTreeElement.prototype.__proto__ = TreeElement.prototype; 1961ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1962ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWebInspector.StylesSidebarPane.CSSPropertyPrompt = function(element, cssCompletions) 1963ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 1964ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WebInspector.TextPrompt.call(this, element, this._buildPropertyCompletions.bind(this), WebInspector.StylesSidebarPane.StyleValueDelimiters, true); 1965ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._cssCompletions = cssCompletions; 1966ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 1967ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1968ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWebInspector.StylesSidebarPane.CSSPropertyPrompt.prototype = { 1969ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch upKeyPressed: function(event) 1970ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 1971ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._handleNameOrValueUpDown(event); 1972ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch }, 1973ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1974ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch downKeyPressed: function(event) 1975ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 1976ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._handleNameOrValueUpDown(event); 1977ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch }, 1978ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1979ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch tabKeyPressed: function(event) 1980ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 1981ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this.acceptAutoComplete(); 1982ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch }, 1983ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1984ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _handleNameOrValueUpDown: function(event) 1985ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 1986ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch var reverse = event.keyIdentifier === "Up"; 1987ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (this.autoCompleteElement) 1988ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this.complete(false, reverse); // Accept the current suggestion, if any. 19892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block else { 19902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // Select the word suffix to affect it when computing the subsequent suggestion. 19912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._selectCurrentWordSuffix(); 19922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 19932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1994ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this.complete(false, reverse); // Actually increment/decrement the suggestion. 1995ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch event.handled = true; 1996ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch }, 1997ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 19982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _selectCurrentWordSuffix: function() 1999ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 20002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var selection = window.getSelection(); 20012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!selection.rangeCount) 2002ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return; 2003ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 20042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var selectionRange = selection.getRangeAt(0); 20052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!selectionRange.commonAncestorContainer.isDescendant(this.element)) 20062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; 20072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var wordSuffixRange = selectionRange.startContainer.rangeOfWord(selectionRange.startOffset, WebInspector.StylesSidebarPane.StyleValueDelimiters, this.element, "forward"); 20082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!wordSuffixRange.toString()) 20092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; 20102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block selection.removeAllRanges(); 20112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block selection.addRange(wordSuffixRange); 20122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block }, 20132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 20142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _buildPropertyCompletions: function(wordRange, bestMatchOnly, completionsReadyCallback) 20152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 20162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var prefix = wordRange.toString().toLowerCase(); 20172bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!prefix && bestMatchOnly) 20182bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 20192bde8e466a4451c7319e3a072d118917957d6554Steve Block 2020ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch var results; 2021ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (bestMatchOnly) { 2022ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch results = []; 2023ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch var firstMatch = this._cssCompletions.firstStartsWith(prefix); 2024ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (firstMatch) 2025ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch results.push(firstMatch); 2026ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return completionsReadyCallback(results); 2027ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 2028ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 2029ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch results = this._cssCompletions.startsWith(prefix); 2030ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (results) 2031ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch completionsReadyCallback(results); 2032ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 2033ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 2034ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 2035ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochWebInspector.StylesSidebarPane.CSSPropertyPrompt.prototype.__proto__ = WebInspector.TextPrompt.prototype; 2036