Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2009 Joseph Pecoraro | 3 * Copyright (C) 2009 Joseph Pecoraro |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * | 8 * |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 559 }, | 559 }, |
| 560 | 560 |
| 561 /** | 561 /** |
| 562 * @param {!Event} event | 562 * @param {!Event} event |
| 563 */ | 563 */ |
| 564 _mouseMovedOverElement: function(event) | 564 _mouseMovedOverElement: function(event) |
| 565 { | 565 { |
| 566 if (this._elementUnderMouse && event.target !== this._elementUnderMouse) | 566 if (this._elementUnderMouse && event.target !== this._elementUnderMouse) |
| 567 this._discardElementUnderMouse(); | 567 this._discardElementUnderMouse(); |
| 568 this._elementUnderMouse = event.target; | 568 this._elementUnderMouse = event.target; |
| 569 if (WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(/** @type {!MouseEv ent} */(event))) | 569 if (WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(/** @type {!MouseEv ent} */(event))) { |
| 570 this._elementUnderMouse.classList.add("styles-panel-hovered"); | 570 this._elementUnderMouse.classList.add("styles-panel-hovered"); |
| 571 var selectorElement = this._elementUnderMouse.enclosingNodeOrSelfWit hClass("selector"); | |
|
pfeldman
2016/07/15 21:13:01
Both are ugly. please fetch section object instead
lushnikov
2016/07/15 21:26:04
As per offline discussion, I'll simplify this code
| |
| 572 var sectionElement = selectorElement ? selectorElement.enclosingNode OrSelfWithClass("styles-section") : null; | |
| 573 if (sectionElement) | |
| 574 sectionElement._section.setHoverableSelectorsMode(true); | |
|
pfeldman
2016/07/15 21:13:01
makeHoverableSelectorsMode()
lushnikov
2016/07/15 21:26:04
Done.
| |
| 575 } | |
| 571 }, | 576 }, |
| 572 | 577 |
| 573 /** | 578 /** |
| 574 * @param {!Event} event | 579 * @param {!Event} event |
| 575 */ | 580 */ |
| 576 _keyDown: function(event) | 581 _keyDown: function(event) |
| 577 { | 582 { |
| 578 if ((!WebInspector.isMac() && event.keyCode === WebInspector.KeyboardSho rtcut.Keys.Ctrl.code) || | 583 if ((!WebInspector.isMac() && event.keyCode === WebInspector.KeyboardSho rtcut.Keys.Ctrl.code) || |
| 579 (WebInspector.isMac() && event.keyCode === WebInspector.KeyboardShor tcut.Keys.Meta.code)) { | 584 (WebInspector.isMac() && event.keyCode === WebInspector.KeyboardShor tcut.Keys.Meta.code)) { |
| 580 if (this._elementUnderMouse) | 585 if (this._elementUnderMouse) |
| (...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1178 hasMatchingChild |= child._updateFilter(); | 1183 hasMatchingChild |= child._updateFilter(); |
| 1179 | 1184 |
| 1180 var regex = this._parentPane.filterRegex(); | 1185 var regex = this._parentPane.filterRegex(); |
| 1181 var hideRule = !hasMatchingChild && !!regex && !regex.test(this.element. textContent); | 1186 var hideRule = !hasMatchingChild && !!regex && !regex.test(this.element. textContent); |
| 1182 this.element.classList.toggle("hidden", hideRule); | 1187 this.element.classList.toggle("hidden", hideRule); |
| 1183 if (!hideRule && this._style.parentRule) | 1188 if (!hideRule && this._style.parentRule) |
| 1184 this._markSelectorHighlights(); | 1189 this._markSelectorHighlights(); |
| 1185 return !hideRule; | 1190 return !hideRule; |
| 1186 }, | 1191 }, |
| 1187 | 1192 |
| 1193 /** | |
| 1194 * @param {boolean} value | |
| 1195 */ | |
| 1196 setHoverableSelectorsMode: function(value) | |
| 1197 { | |
| 1198 if (this._hoverableSelectorsMode === value) | |
| 1199 return; | |
| 1200 this._hoverableSelectorsMode = value; | |
| 1201 this._markSelectorMatches(); | |
| 1202 }, | |
| 1203 | |
| 1188 _markSelectorMatches: function() | 1204 _markSelectorMatches: function() |
| 1189 { | 1205 { |
| 1190 var rule = this._style.parentRule; | 1206 var rule = this._style.parentRule; |
| 1191 if (!rule) | 1207 if (!rule) |
| 1192 return; | 1208 return; |
| 1193 | 1209 |
| 1194 this._mediaListElement.classList.toggle("media-matches", this._matchedSt yles.mediaMatches(this._style)); | 1210 this._mediaListElement.classList.toggle("media-matches", this._matchedSt yles.mediaMatches(this._style)); |
| 1195 | 1211 |
| 1196 if (!this._matchedStyles.hasMatchingSelectors(/** @type {!WebInspector.C SSStyleRule} */(rule))) | 1212 if (!this._matchedStyles.hasMatchingSelectors(/** @type {!WebInspector.C SSStyleRule} */(rule))) |
| 1197 return; | 1213 return; |
| 1198 | 1214 |
| 1199 var selectors = rule.selectors; | 1215 var selectorTexts = rule.selectors.map(selector => selector.text); |
| 1200 var fragment = createDocumentFragment(); | |
| 1201 var currentMatch = 0; | |
| 1202 var matchingSelectors = this._matchedStyles.matchingSelectors(/** @type {!WebInspector.CSSStyleRule} */(rule)); | |
| 1203 for (var i = 0; i < selectors.length ; ++i) { | |
| 1204 if (i) | |
| 1205 fragment.createTextChild(", "); | |
| 1206 var isSelectorMatching = matchingSelectors[currentMatch] === i; | |
| 1207 if (isSelectorMatching) | |
| 1208 ++currentMatch; | |
| 1209 var matchingSelectorClass = isSelectorMatching ? " selector-matches" : ""; | |
| 1210 var selectorElement = createElement("span"); | |
| 1211 selectorElement.className = "simple-selector" + matchingSelectorClas s; | |
| 1212 if (rule.styleSheetId) | |
| 1213 selectorElement._selectorIndex = i; | |
| 1214 selectorElement.textContent = selectors[i].text; | |
| 1215 | 1216 |
| 1216 fragment.appendChild(selectorElement); | 1217 var matchingSelectorIndexes = this._matchedStyles.matchingSelectors(/** @type {!WebInspector.CSSStyleRule} */(rule)); |
| 1217 } | 1218 var matchingSelectors = new Array(selectorTexts.length).fill(false); |
| 1219 for (var matchingIndex of matchingSelectorIndexes) | |
| 1220 matchingSelectors[matchingIndex] = true; | |
| 1218 | 1221 |
| 1222 var fragment = this._hoverableSelectorsMode ? this._renderHoverableSelec tors(selectorTexts, matchingSelectors) : this._renderSimplifiedSelectors(selecto rTexts, matchingSelectors); | |
| 1219 this._selectorElement.removeChildren(); | 1223 this._selectorElement.removeChildren(); |
| 1220 this._selectorElement.appendChild(fragment); | 1224 this._selectorElement.appendChild(fragment); |
| 1221 this._markSelectorHighlights(); | 1225 this._markSelectorHighlights(); |
| 1222 }, | 1226 }, |
| 1223 | 1227 |
| 1228 /** | |
| 1229 * @param {!Array<string>} selectors | |
| 1230 * @param {!Array<boolean>} matchingSelectors | |
| 1231 * @return {!DocumentFragment} | |
| 1232 */ | |
| 1233 _renderHoverableSelectors: function(selectors, matchingSelectors) | |
| 1234 { | |
| 1235 var fragment = createDocumentFragment(); | |
| 1236 for (var i = 0; i < selectors.length ; ++i) { | |
| 1237 if (i) | |
| 1238 fragment.createTextChild(", "); | |
| 1239 fragment.appendChild(this._createSelectorElement(selectors[i], match ingSelectors[i], i)); | |
| 1240 } | |
| 1241 return fragment; | |
| 1242 }, | |
| 1243 | |
| 1244 /** | |
| 1245 * @param {string} text | |
| 1246 * @param {boolean} isMatching | |
| 1247 * @param {number=} navigationIndex | |
| 1248 * @return {!Element} | |
| 1249 */ | |
| 1250 _createSelectorElement: function(text, isMatching, navigationIndex) | |
| 1251 { | |
| 1252 var element = createElementWithClass("span", "simple-selector"); | |
| 1253 element.classList.toggle("selector-matches", isMatching); | |
| 1254 if (typeof navigationIndex === "number") | |
| 1255 element._selectorIndex = navigationIndex; | |
| 1256 element.textContent = text; | |
| 1257 return element; | |
| 1258 }, | |
| 1259 | |
| 1260 /** | |
| 1261 * @param {!Array<string>} selectors | |
| 1262 * @param {!Array<boolean>} matchingSelectors | |
| 1263 * @return {!DocumentFragment} | |
| 1264 */ | |
| 1265 _renderSimplifiedSelectors: function(selectors, matchingSelectors) | |
| 1266 { | |
| 1267 var fragment = createDocumentFragment(); | |
| 1268 var currentMatching = false; | |
| 1269 var text = ""; | |
| 1270 for (var i = 0; i < selectors.length; ++i) { | |
| 1271 if (currentMatching !== matchingSelectors[i] && text) { | |
| 1272 fragment.appendChild(this._createSelectorElement(text, currentMa tching)); | |
| 1273 text = ""; | |
| 1274 } | |
| 1275 currentMatching = matchingSelectors[i]; | |
| 1276 text += selectors[i] + (i === selectors.length - 1 ? "" : ", "); | |
| 1277 } | |
| 1278 if (text) | |
| 1279 fragment.appendChild(this._createSelectorElement(text, currentMatchi ng)); | |
| 1280 return fragment; | |
| 1281 }, | |
| 1282 | |
| 1224 _markSelectorHighlights: function() | 1283 _markSelectorHighlights: function() |
| 1225 { | 1284 { |
| 1226 var selectors = this._selectorElement.getElementsByClassName("simple-sel ector"); | 1285 var selectors = this._selectorElement.getElementsByClassName("simple-sel ector"); |
| 1227 var regex = this._parentPane.filterRegex(); | 1286 var regex = this._parentPane.filterRegex(); |
| 1228 for (var i = 0; i < selectors.length; ++i) { | 1287 for (var i = 0; i < selectors.length; ++i) { |
| 1229 var selectorMatchesFilter = !!regex && regex.test(selectors[i].textC ontent); | 1288 var selectorMatchesFilter = !!regex && regex.test(selectors[i].textC ontent); |
| 1230 selectors[i].classList.toggle("filter-match", selectorMatchesFilter) ; | 1289 selectors[i].classList.toggle("filter-match", selectorMatchesFilter) ; |
| 1231 } | 1290 } |
| 1232 }, | 1291 }, |
| 1233 | 1292 |
| (...skipping 1903 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3137 WebInspector.context.addFlavorChangeListener(WebInspector.DOMNode, onNodeCha nged); | 3196 WebInspector.context.addFlavorChangeListener(WebInspector.DOMNode, onNodeCha nged); |
| 3138 onNodeChanged(); | 3197 onNodeChanged(); |
| 3139 return button; | 3198 return button; |
| 3140 | 3199 |
| 3141 function onNodeChanged() | 3200 function onNodeChanged() |
| 3142 { | 3201 { |
| 3143 var node = WebInspector.context.flavor(WebInspector.DOMNode); | 3202 var node = WebInspector.context.flavor(WebInspector.DOMNode); |
| 3144 button.setEnabled(!!node); | 3203 button.setEnabled(!!node); |
| 3145 } | 3204 } |
| 3146 } | 3205 } |
| OLD | NEW |