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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/elements/StylesSidebarPane.js

Issue 2681063002: DevTools: Remove @unrestricted from StylesSidebarPane.js (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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.
11 * 2. Redistributions in binary form must reproduce the above copyright 11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the 12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution. 13 * documentation and/or other materials provided with the distribution.
14 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 14 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
15 * its contributors may be used to endorse or promote products derived 15 * its contributors may be used to endorse or promote products derived
16 * from this software without specific prior written permission. 16 * from this software without specific prior written permission.
17 * 17 *
18 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 18 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
19 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 21 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */ 28 */
29 29
30 /**
31 * @unrestricted
32 */
33 Elements.StylesSidebarPane = class extends Elements.ElementsSidebarPane { 30 Elements.StylesSidebarPane = class extends Elements.ElementsSidebarPane {
34 constructor() { 31 constructor() {
35 super(); 32 super();
36 this.setMinimumSize(96, 26); 33 this.setMinimumSize(96, 26);
37 34
38 Common.moduleSetting('colorFormat').addChangeListener(this.update.bind(this) ); 35 Common.moduleSetting('colorFormat').addChangeListener(this.update.bind(this) );
39 Common.moduleSetting('textEditorIndent').addChangeListener(this.update.bind( this)); 36 Common.moduleSetting('textEditorIndent').addChangeListener(this.update.bind( this));
40 37
41 this._sectionsContainer = this.element.createChild('div'); 38 this._sectionsContainer = this.element.createChild('div');
42 this._swatchPopoverHelper = new InlineEditor.SwatchPopoverHelper(); 39 this._swatchPopoverHelper = new InlineEditor.SwatchPopoverHelper();
43 this._linkifier = new Components.Linkifier(Elements.StylesSidebarPane._maxLi nkLength, /* useLinkDecorator */ true); 40 this._linkifier = new Components.Linkifier(Elements.StylesSidebarPane._maxLi nkLength, /* useLinkDecorator */ true);
41 /** @type {?Elements.StylePropertyHighlighter} */
42 this._decorator = null;
43 this._userOperation = false;
44 this._isEditingStyle = false;
45 /** @type {?RegExp} */
46 this._filterRegex = null;
47
48 /** @type {?Elements.StylePropertyTreeElement} */
49 this._mouseDownTreeElement = null;
50 this._mouseDownTreeElementIsName = false;
51 this._mouseDownTreeElementIsValue = false;
44 52
45 this.element.classList.add('styles-pane'); 53 this.element.classList.add('styles-pane');
46 54
47 /** @type {!Array<!Elements.SectionBlock>} */ 55 /** @type {!Array<!Elements.SectionBlock>} */
48 this._sectionBlocks = []; 56 this._sectionBlocks = [];
49 Elements.StylesSidebarPane._instance = this; 57 Elements.StylesSidebarPane._instance = this;
50 UI.context.addFlavorChangeListener(SDK.DOMNode, this.forceUpdate, this); 58 UI.context.addFlavorChangeListener(SDK.DOMNode, this.forceUpdate, this);
51 } 59 }
52 60
53 /** 61 /**
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 for (var section of block.sections) 350 for (var section of block.sections)
343 this._sectionsContainer.appendChild(section.element); 351 this._sectionsContainer.appendChild(section.element);
344 } 352 }
345 353
346 if (this._filterRegex) 354 if (this._filterRegex)
347 this._updateFilter(); 355 this._updateFilter();
348 356
349 this._nodeStylesUpdatedForTest(node, true); 357 this._nodeStylesUpdatedForTest(node, true);
350 if (this._decorator) { 358 if (this._decorator) {
351 this._decorator.perform(); 359 this._decorator.perform();
352 delete this._decorator; 360 this._decorator = null;
353 } 361 }
354 } 362 }
355 363
356 /** 364 /**
357 * @param {!SDK.DOMNode} node 365 * @param {!SDK.DOMNode} node
358 * @param {boolean} rebuild 366 * @param {boolean} rebuild
359 */ 367 */
360 _nodeStylesUpdatedForTest(node, rebuild) { 368 _nodeStylesUpdatedForTest(node, rebuild) {
361 // For sniffing in tests. 369 // For sniffing in tests.
362 } 370 }
(...skipping 25 matching lines...) Expand all
388 if (!cssModel || !node) 396 if (!cssModel || !node)
389 return; 397 return;
390 this._userOperation = true; 398 this._userOperation = true;
391 cssModel.requestViaInspectorStylesheet(node, onViaInspectorStyleSheet.bind(t his)); 399 cssModel.requestViaInspectorStylesheet(node, onViaInspectorStyleSheet.bind(t his));
392 400
393 /** 401 /**
394 * @param {?SDK.CSSStyleSheetHeader} styleSheetHeader 402 * @param {?SDK.CSSStyleSheetHeader} styleSheetHeader
395 * @this {Elements.StylesSidebarPane} 403 * @this {Elements.StylesSidebarPane}
396 */ 404 */
397 function onViaInspectorStyleSheet(styleSheetHeader) { 405 function onViaInspectorStyleSheet(styleSheetHeader) {
398 delete this._userOperation; 406 this._userOperation = false;
399 this._createNewRuleInStyleSheet(styleSheetHeader); 407 this._createNewRuleInStyleSheet(styleSheetHeader);
400 } 408 }
401 } 409 }
402 410
403 /** 411 /**
404 * @param {?SDK.CSSStyleSheetHeader} styleSheetHeader 412 * @param {?SDK.CSSStyleSheetHeader} styleSheetHeader
405 */ 413 */
406 _createNewRuleInStyleSheet(styleSheetHeader) { 414 _createNewRuleInStyleSheet(styleSheetHeader) {
407 if (!styleSheetHeader) 415 if (!styleSheetHeader)
408 return; 416 return;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 allSections() { 490 allSections() {
483 var sections = []; 491 var sections = [];
484 for (var block of this._sectionBlocks) 492 for (var block of this._sectionBlocks)
485 sections = sections.concat(block.sections); 493 sections = sections.concat(block.sections);
486 return sections; 494 return sections;
487 } 495 }
488 }; 496 };
489 497
490 Elements.StylesSidebarPane._maxLinkLength = 30; 498 Elements.StylesSidebarPane._maxLinkLength = 30;
491 499
492 /**
493 * @unrestricted
494 */
495 Elements.SectionBlock = class { 500 Elements.SectionBlock = class {
496 /** 501 /**
497 * @param {?Element} titleElement 502 * @param {?Element} titleElement
498 */ 503 */
499 constructor(titleElement) { 504 constructor(titleElement) {
500 this._titleElement = titleElement; 505 this._titleElement = titleElement;
501 this.sections = []; 506 this.sections = [];
502 } 507 }
503 508
504 /** 509 /**
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 } 550 }
546 551
547 /** 552 /**
548 * @return {?Element} 553 * @return {?Element}
549 */ 554 */
550 titleElement() { 555 titleElement() {
551 return this._titleElement; 556 return this._titleElement;
552 } 557 }
553 }; 558 };
554 559
555
556 /**
557 * @unrestricted
558 */
559 Elements.StylePropertiesSection = class { 560 Elements.StylePropertiesSection = class {
560 /** 561 /**
561 * @param {!Elements.StylesSidebarPane} parentPane 562 * @param {!Elements.StylesSidebarPane} parentPane
562 * @param {!SDK.CSSMatchedStyles} matchedStyles 563 * @param {!SDK.CSSMatchedStyles} matchedStyles
563 * @param {!SDK.CSSStyleDeclaration} style 564 * @param {!SDK.CSSStyleDeclaration} style
564 */ 565 */
565 constructor(parentPane, matchedStyles, style) { 566 constructor(parentPane, matchedStyles, style) {
566 this._parentPane = parentPane; 567 this._parentPane = parentPane;
567 this._style = style; 568 this._style = style;
568 this._matchedStyles = matchedStyles; 569 this._matchedStyles = matchedStyles;
569 this.editable = !!(style.styleSheetId && style.range); 570 this.editable = !!(style.styleSheetId && style.range);
571 /** @type {?number} */
572 this._hoverTimer = null;
573 /** @type {?function(!Elements.StylePropertiesSection)} */
574 this._afterUpdate = null;
575 this._willCauseCancelEditing = false;
570 576
571 var rule = style.parentRule; 577 var rule = style.parentRule;
572 this.element = createElementWithClass('div', 'styles-section matched-styles monospace'); 578 this.element = createElementWithClass('div', 'styles-section matched-styles monospace');
573 this.element._section = this; 579 this.element._section = this;
574 580
575 this._titleElement = this.element.createChild('div', 'styles-section-title ' + (rule ? 'styles-selector' : '')); 581 this._titleElement = this.element.createChild('div', 'styles-section-title ' + (rule ? 'styles-selector' : ''));
576 582
577 this.propertiesTreeOutline = new UI.TreeOutlineInShadow(); 583 this.propertiesTreeOutline = new UI.TreeOutlineInShadow();
578 this.propertiesTreeOutline.registerRequiredCSS('elements/stylesSectionTree.c ss'); 584 this.propertiesTreeOutline.registerRequiredCSS('elements/stylesSectionTree.c ss');
579 this.propertiesTreeOutline.element.classList.add('style-properties', 'matche d-styles', 'monospace'); 585 this.propertiesTreeOutline.element.classList.add('style-properties', 'matche d-styles', 'monospace');
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
1050 child.setOverloaded(this._isPropertyOverloaded(child.property)); 1056 child.setOverloaded(this._isPropertyOverloaded(child.property));
1051 child = child.traverseNextTreeElement(false, null, true); 1057 child = child.traverseNextTreeElement(false, null, true);
1052 } 1058 }
1053 } 1059 }
1054 this.afterUpdate(); 1060 this.afterUpdate();
1055 } 1061 }
1056 1062
1057 afterUpdate() { 1063 afterUpdate() {
1058 if (this._afterUpdate) { 1064 if (this._afterUpdate) {
1059 this._afterUpdate(this); 1065 this._afterUpdate(this);
1060 delete this._afterUpdate; 1066 this._afterUpdate = null;
1061 this._afterUpdateFinishedForTest(); 1067 this._afterUpdateFinishedForTest();
1062 } 1068 }
1063 } 1069 }
1064 1070
1065 _afterUpdateFinishedForTest() { 1071 _afterUpdateFinishedForTest() {
1066 } 1072 }
1067 1073
1068 onpopulate() { 1074 onpopulate() {
1069 var style = this._style; 1075 var style = this._style;
1070 for (var property of style.leadingProperties()) { 1076 for (var property of style.leadingProperties()) {
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1183 var selectorMatchesFilter = !!regex && regex.test(selectors[i].textContent ); 1189 var selectorMatchesFilter = !!regex && regex.test(selectors[i].textContent );
1184 selectors[i].classList.toggle('filter-match', selectorMatchesFilter); 1190 selectors[i].classList.toggle('filter-match', selectorMatchesFilter);
1185 } 1191 }
1186 } 1192 }
1187 1193
1188 /** 1194 /**
1189 * @return {boolean} 1195 * @return {boolean}
1190 */ 1196 */
1191 _checkWillCancelEditing() { 1197 _checkWillCancelEditing() {
1192 var willCauseCancelEditing = this._willCauseCancelEditing; 1198 var willCauseCancelEditing = this._willCauseCancelEditing;
1193 delete this._willCauseCancelEditing; 1199 this._willCauseCancelEditing = false;
1194 return willCauseCancelEditing; 1200 return willCauseCancelEditing;
1195 } 1201 }
1196 1202
1197 /** 1203 /**
1198 * @param {!Event} event 1204 * @param {!Event} event
1199 */ 1205 */
1200 _handleSelectorContainerClick(event) { 1206 _handleSelectorContainerClick(event) {
1201 if (this._checkWillCancelEditing() || !this.editable) 1207 if (this._checkWillCancelEditing() || !this.editable)
1202 return; 1208 return;
1203 if (event.target === this._selectorContainer) { 1209 if (event.target === this._selectorContainer) {
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1340 1346
1341 /** 1347 /**
1342 * @param {boolean} success 1348 * @param {boolean} success
1343 * @this {Elements.StylePropertiesSection} 1349 * @this {Elements.StylePropertiesSection}
1344 */ 1350 */
1345 function userCallback(success) { 1351 function userCallback(success) {
1346 if (success) { 1352 if (success) {
1347 this._matchedStyles.resetActiveProperties(); 1353 this._matchedStyles.resetActiveProperties();
1348 this._parentPane._refreshUpdate(this); 1354 this._parentPane._refreshUpdate(this);
1349 } 1355 }
1350 delete this._parentPane._userOperation; 1356 this._parentPane._userOperation = false;
1351 this._editingMediaTextCommittedForTest(); 1357 this._editingMediaTextCommittedForTest();
1352 } 1358 }
1353 1359
1354 // This gets deleted in finishOperation(), which is called both on success a nd failure. 1360 // This gets deleted in finishOperation(), which is called both on success a nd failure.
1355 this._parentPane._userOperation = true; 1361 this._parentPane._userOperation = true;
1356 this._parentPane.cssModel().setMediaText(media.styleSheetId, media.range, ne wContent).then(userCallback.bind(this)); 1362 this._parentPane.cssModel().setMediaText(media.styleSheetId, media.range, ne wContent).then(userCallback.bind(this));
1357 } 1363 }
1358 1364
1359 _editingMediaTextCommittedForTest() { 1365 _editingMediaTextCommittedForTest() {
1360 } 1366 }
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1467 return; 1473 return;
1468 } 1474 }
1469 var rule = this._style.parentRule; 1475 var rule = this._style.parentRule;
1470 if (!rule) 1476 if (!rule)
1471 return; 1477 return;
1472 1478
1473 /** 1479 /**
1474 * @this {Elements.StylePropertiesSection} 1480 * @this {Elements.StylePropertiesSection}
1475 */ 1481 */
1476 function headerTextCommitted() { 1482 function headerTextCommitted() {
1477 delete this._parentPane._userOperation; 1483 this._parentPane._userOperation = false;
1478 this._moveEditorFromSelector(moveDirection); 1484 this._moveEditorFromSelector(moveDirection);
1479 this._editingSelectorCommittedForTest(); 1485 this._editingSelectorCommittedForTest();
1480 } 1486 }
1481 1487
1482 // This gets deleted in finishOperationAndMoveEditor(), which is called both on success and failure. 1488 // This gets deleted in finishOperationAndMoveEditor(), which is called both on success and failure.
1483 this._parentPane._userOperation = true; 1489 this._parentPane._userOperation = true;
1484 this._setHeaderText(rule, newContent).then(headerTextCommitted.bind(this)); 1490 this._setHeaderText(rule, newContent).then(headerTextCommitted.bind(this));
1485 } 1491 }
1486 1492
1487 /** 1493 /**
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1536 1542
1537 editingSelectorCancelled() { 1543 editingSelectorCancelled() {
1538 this._editingSelectorEnded(); 1544 this._editingSelectorEnded();
1539 1545
1540 // Mark the selectors in group if necessary. 1546 // Mark the selectors in group if necessary.
1541 // This is overridden by BlankStylePropertiesSection. 1547 // This is overridden by BlankStylePropertiesSection.
1542 this._markSelectorMatches(); 1548 this._markSelectorMatches();
1543 } 1549 }
1544 }; 1550 };
1545 1551
1546
1547 /**
1548 * @unrestricted
1549 */
1550 Elements.BlankStylePropertiesSection = class extends Elements.StylePropertiesSec tion { 1552 Elements.BlankStylePropertiesSection = class extends Elements.StylePropertiesSec tion {
1551 /** 1553 /**
1552 * @param {!Elements.StylesSidebarPane} stylesPane 1554 * @param {!Elements.StylesSidebarPane} stylesPane
1553 * @param {!SDK.CSSMatchedStyles} matchedStyles 1555 * @param {!SDK.CSSMatchedStyles} matchedStyles
1554 * @param {string} defaultSelectorText 1556 * @param {string} defaultSelectorText
1555 * @param {string} styleSheetId 1557 * @param {string} styleSheetId
1556 * @param {!Common.TextRange} ruleLocation 1558 * @param {!Common.TextRange} ruleLocation
1557 * @param {!SDK.CSSStyleDeclaration} insertAfterStyle 1559 * @param {!SDK.CSSStyleDeclaration} insertAfterStyle
1558 */ 1560 */
1559 constructor(stylesPane, matchedStyles, defaultSelectorText, styleSheetId, rule Location, insertAfterStyle) { 1561 constructor(stylesPane, matchedStyles, defaultSelectorText, styleSheetId, rule Location, insertAfterStyle) {
1560 var cssModel = /** @type {!SDK.CSSModel} */ (stylesPane.cssModel()); 1562 var cssModel = /** @type {!SDK.CSSModel} */ (stylesPane.cssModel());
1561 var rule = SDK.CSSStyleRule.createDummyRule(cssModel, defaultSelectorText); 1563 var rule = SDK.CSSStyleRule.createDummyRule(cssModel, defaultSelectorText);
1562 super(stylesPane, matchedStyles, rule.style); 1564 super(stylesPane, matchedStyles, rule.style);
1565 this._normal = false;
1563 this._ruleLocation = ruleLocation; 1566 this._ruleLocation = ruleLocation;
1564 this._styleSheetId = styleSheetId; 1567 this._styleSheetId = styleSheetId;
1565 this._selectorRefElement.removeChildren(); 1568 this._selectorRefElement.removeChildren();
1566 this._selectorRefElement.appendChild(Elements.StylePropertiesSection._linkif yRuleLocation( 1569 this._selectorRefElement.appendChild(Elements.StylePropertiesSection._linkif yRuleLocation(
1567 cssModel, this._parentPane._linkifier, styleSheetId, this._actualRuleLoc ation())); 1570 cssModel, this._parentPane._linkifier, styleSheetId, this._actualRuleLoc ation()));
1568 if (insertAfterStyle && insertAfterStyle.parentRule) 1571 if (insertAfterStyle && insertAfterStyle.parentRule)
1569 this._createMediaList(insertAfterStyle.parentRule.media); 1572 this._createMediaList(insertAfterStyle.parentRule.media);
1570 this.element.classList.add('blank-section'); 1573 this.element.classList.add('blank-section');
1571 } 1574 }
1572 1575
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1604 */ 1607 */
1605 editingSelectorCommitted(element, newContent, oldContent, context, moveDirecti on) { 1608 editingSelectorCommitted(element, newContent, oldContent, context, moveDirecti on) {
1606 if (!this.isBlank) { 1609 if (!this.isBlank) {
1607 super.editingSelectorCommitted(element, newContent, oldContent, context, m oveDirection); 1610 super.editingSelectorCommitted(element, newContent, oldContent, context, m oveDirection);
1608 return; 1611 return;
1609 } 1612 }
1610 1613
1611 /** 1614 /**
1612 * @param {?SDK.CSSStyleRule} newRule 1615 * @param {?SDK.CSSStyleRule} newRule
1613 * @return {!Promise} 1616 * @return {!Promise}
1614 * @this {Elements.StylePropertiesSection} 1617 * @this {Elements.BlankStylePropertiesSection}
1615 */ 1618 */
1616 function onRuleAdded(newRule) { 1619 function onRuleAdded(newRule) {
1617 if (!newRule) { 1620 if (!newRule) {
1618 this.editingSelectorCancelled(); 1621 this.editingSelectorCancelled();
1619 this._editingSelectorCommittedForTest(); 1622 this._editingSelectorCommittedForTest();
1620 return Promise.resolve(); 1623 return Promise.resolve();
1621 } 1624 }
1622 return this._matchedStyles.addNewRule(newRule, this._matchedStyles.node()) 1625 return this._matchedStyles.addNewRule(newRule, this._matchedStyles.node())
1623 .then(onAddedToCascade.bind(this, newRule)); 1626 .then(onAddedToCascade.bind(this, newRule));
1624 } 1627 }
1625 1628
1626 /** 1629 /**
1627 * @param {!SDK.CSSStyleRule} newRule 1630 * @param {!SDK.CSSStyleRule} newRule
1628 * @this {Elements.StylePropertiesSection} 1631 * @this {Elements.BlankStylePropertiesSection}
1629 */ 1632 */
1630 function onAddedToCascade(newRule) { 1633 function onAddedToCascade(newRule) {
1631 var doesSelectorAffectSelectedNode = this._matchedStyles.matchingSelectors (newRule).length > 0; 1634 var doesSelectorAffectSelectedNode = this._matchedStyles.matchingSelectors (newRule).length > 0;
1632 this._makeNormal(newRule); 1635 this._makeNormal(newRule);
1633 1636
1634 if (!doesSelectorAffectSelectedNode) 1637 if (!doesSelectorAffectSelectedNode)
1635 this.propertiesTreeOutline.element.classList.add('no-affect'); 1638 this.propertiesTreeOutline.element.classList.add('no-affect');
1636 1639
1637 this._updateRuleOrigin(); 1640 this._updateRuleOrigin();
1638 if (this.element.parentElement) // Might have been detached already. 1641 if (this.element.parentElement) // Might have been detached already.
1639 this._moveEditorFromSelector(moveDirection); 1642 this._moveEditorFromSelector(moveDirection);
1640 1643
1641 delete this._parentPane._userOperation; 1644 this._parentPane._userOperation = false;
1642 this._editingSelectorEnded(); 1645 this._editingSelectorEnded();
1643 this._markSelectorMatches(); 1646 this._markSelectorMatches();
1644 1647
1645 this._editingSelectorCommittedForTest(); 1648 this._editingSelectorCommittedForTest();
1646 } 1649 }
1647 1650
1648 if (newContent) 1651 if (newContent)
1649 newContent = newContent.trim(); 1652 newContent = newContent.trim();
1650 this._parentPane._userOperation = true; 1653 this._parentPane._userOperation = true;
1651 1654
1652 var cssModel = this._parentPane.cssModel(); 1655 var cssModel = this._parentPane.cssModel();
1653 var ruleText = this._rulePrefix() + newContent + ' {}'; 1656 var ruleText = this._rulePrefix() + newContent + ' {}';
1654 cssModel.addRule(this._styleSheetId, ruleText, this._ruleLocation).then(onRu leAdded.bind(this)); 1657 cssModel.addRule(this._styleSheetId, ruleText, this._ruleLocation).then(onRu leAdded.bind(this));
1655 } 1658 }
1656 1659
1657 /** 1660 /**
1658 * @override 1661 * @override
1659 */ 1662 */
1660 editingSelectorCancelled() { 1663 editingSelectorCancelled() {
1661 delete this._parentPane._userOperation; 1664 this._parentPane._userOperation = false;
1662 if (!this.isBlank) { 1665 if (!this.isBlank) {
1663 super.editingSelectorCancelled(); 1666 super.editingSelectorCancelled();
1664 return; 1667 return;
1665 } 1668 }
1666 1669
1667 this._editingSelectorEnded(); 1670 this._editingSelectorEnded();
1668 this._parentPane.removeSection(this); 1671 this._parentPane.removeSection(this);
1669 } 1672 }
1670 1673
1671 /** 1674 /**
1672 * @param {!SDK.CSSRule} newRule 1675 * @param {!SDK.CSSRule} newRule
1673 */ 1676 */
1674 _makeNormal(newRule) { 1677 _makeNormal(newRule) {
1675 this.element.classList.remove('blank-section'); 1678 this.element.classList.remove('blank-section');
1676 this._style = newRule.style; 1679 this._style = newRule.style;
1677 // FIXME: replace this instance by a normal Elements.StylePropertiesSection. 1680 // FIXME: replace this instance by a normal Elements.StylePropertiesSection.
1678 this._normal = true; 1681 this._normal = true;
1679 } 1682 }
1680 }; 1683 };
1681 1684
1682 /**
1683 * @unrestricted
1684 */
1685 Elements.KeyframePropertiesSection = class extends Elements.StylePropertiesSecti on { 1685 Elements.KeyframePropertiesSection = class extends Elements.StylePropertiesSecti on {
1686 /** 1686 /**
1687 * @param {!Elements.StylesSidebarPane} stylesPane 1687 * @param {!Elements.StylesSidebarPane} stylesPane
1688 * @param {!SDK.CSSMatchedStyles} matchedStyles 1688 * @param {!SDK.CSSMatchedStyles} matchedStyles
1689 * @param {!SDK.CSSStyleDeclaration} style 1689 * @param {!SDK.CSSStyleDeclaration} style
1690 */ 1690 */
1691 constructor(stylesPane, matchedStyles, style) { 1691 constructor(stylesPane, matchedStyles, style) {
1692 super(stylesPane, matchedStyles, style); 1692 super(stylesPane, matchedStyles, style);
1693 this._selectorElement.className = 'keyframe-key'; 1693 this._selectorElement.className = 'keyframe-key';
1694 } 1694 }
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1756 this._selectorElement.textContent = this._style.parentRule.key().text; 1756 this._selectorElement.textContent = this._style.parentRule.key().text;
1757 } 1757 }
1758 1758
1759 /** 1759 /**
1760 * @override 1760 * @override
1761 */ 1761 */
1762 _highlight() { 1762 _highlight() {
1763 } 1763 }
1764 }; 1764 };
1765 1765
1766 /**
1767 * @unrestricted
1768 */
1769 Elements.StylePropertyTreeElement = class extends UI.TreeElement { 1766 Elements.StylePropertyTreeElement = class extends UI.TreeElement {
1770 /** 1767 /**
1771 * @param {!Elements.StylesSidebarPane} stylesPane 1768 * @param {!Elements.StylesSidebarPane} stylesPane
1772 * @param {!SDK.CSSMatchedStyles} matchedStyles 1769 * @param {!SDK.CSSMatchedStyles} matchedStyles
1773 * @param {!SDK.CSSProperty} property 1770 * @param {!SDK.CSSProperty} property
1774 * @param {boolean} isShorthand 1771 * @param {boolean} isShorthand
1775 * @param {boolean} inherited 1772 * @param {boolean} inherited
1776 * @param {boolean} overloaded 1773 * @param {boolean} overloaded
1777 */ 1774 */
1778 constructor(stylesPane, matchedStyles, property, isShorthand, inherited, overl oaded) { 1775 constructor(stylesPane, matchedStyles, property, isShorthand, inherited, overl oaded) {
1779 // Pass an empty title, the title gets made later in onattach. 1776 // Pass an empty title, the title gets made later in onattach.
1780 super('', isShorthand); 1777 super('', isShorthand);
1781 this._style = property.ownerStyle; 1778 this._style = property.ownerStyle;
1782 this._matchedStyles = matchedStyles; 1779 this._matchedStyles = matchedStyles;
1783 this.property = property; 1780 this.property = property;
1784 this._inherited = inherited; 1781 this._inherited = inherited;
1785 this._overloaded = overloaded; 1782 this._overloaded = overloaded;
1786 this.selectable = false; 1783 this.selectable = false;
1787 this._parentPane = stylesPane; 1784 this._parentPane = stylesPane;
1788 this.isShorthand = isShorthand; 1785 this.isShorthand = isShorthand;
1789 this._applyStyleThrottler = new Common.Throttler(0); 1786 this._applyStyleThrottler = new Common.Throttler(0);
1787 this._newProperty = false;
1788 this._expandedDueToFilter = false;
1789 this.valueElement = null;
1790 this.nameElement = null;
1791 this._expandElement = null;
1792 this._originalPropertyText = '';
1793 this._prompt = null;
einbinder 2017/02/08 02:05:30 This was scary, working with TextPrompt without he
1794 this._propertyHasBeenEditedIncrementally = false;
1790 } 1795 }
1791 1796
1792 /** 1797 /**
1793 * @return {boolean} 1798 * @return {boolean}
1794 */ 1799 */
1795 _editable() { 1800 _editable() {
1796 return !!(this._style.styleSheetId && this._style.range); 1801 return !!(this._style.styleSheetId && this._style.range);
1797 } 1802 }
1798 1803
1799 /** 1804 /**
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
2031 var disabled = !event.target.checked; 2036 var disabled = !event.target.checked;
2032 var oldStyleRange = this._style.range; 2037 var oldStyleRange = this._style.range;
2033 if (!oldStyleRange) 2038 if (!oldStyleRange)
2034 return; 2039 return;
2035 2040
2036 /** 2041 /**
2037 * @param {boolean} success 2042 * @param {boolean} success
2038 * @this {Elements.StylePropertyTreeElement} 2043 * @this {Elements.StylePropertyTreeElement}
2039 */ 2044 */
2040 function callback(success) { 2045 function callback(success) {
2041 delete this._parentPane._userOperation; 2046 this._parentPane._userOperation = false;
2042 2047
2043 if (!success) 2048 if (!success)
2044 return; 2049 return;
2045 this._matchedStyles.resetActiveProperties(); 2050 this._matchedStyles.resetActiveProperties();
2046 this._updatePane(); 2051 this._updatePane();
2047 this.styleTextAppliedForTest(); 2052 this.styleTextAppliedForTest();
2048 } 2053 }
2049 2054
2050 event.consume(); 2055 event.consume();
2051 this._parentPane._userOperation = true; 2056 this._parentPane._userOperation = true;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
2098 this._parentPane._mouseDownTreeElement = this; 2103 this._parentPane._mouseDownTreeElement = this;
2099 this._parentPane._mouseDownTreeElementIsName = 2104 this._parentPane._mouseDownTreeElementIsName =
2100 this.nameElement && this.nameElement.isSelfOrAncestor(event.target); 2105 this.nameElement && this.nameElement.isSelfOrAncestor(event.target);
2101 this._parentPane._mouseDownTreeElementIsValue = 2106 this._parentPane._mouseDownTreeElementIsValue =
2102 this.valueElement && this.valueElement.isSelfOrAncestor(event.target); 2107 this.valueElement && this.valueElement.isSelfOrAncestor(event.target);
2103 } 2108 }
2104 } 2109 }
2105 2110
2106 _resetMouseDownElement() { 2111 _resetMouseDownElement() {
2107 if (this._parentPane) { 2112 if (this._parentPane) {
2108 delete this._parentPane._mouseDownTreeElement; 2113 this._parentPane._mouseDownTreeElement = null;
2109 delete this._parentPane._mouseDownTreeElementIsName; 2114 this._parentPane._mouseDownTreeElementIsName = false;
2110 delete this._parentPane._mouseDownTreeElementIsValue; 2115 this._parentPane._mouseDownTreeElementIsValue = false;
2111 } 2116 }
2112 } 2117 }
2113 2118
2114 /** 2119 /**
2115 * @override 2120 * @override
2116 */ 2121 */
2117 onexpand() { 2122 onexpand() {
2118 this._updateExpandElement(); 2123 this._updateExpandElement();
2119 } 2124 }
2120 2125
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
2499 editingCancelled(element, context) { 2504 editingCancelled(element, context) {
2500 this._removePrompt(); 2505 this._removePrompt();
2501 this._revertStyleUponEditingCanceled(); 2506 this._revertStyleUponEditingCanceled();
2502 // This should happen last, as it clears the info necessary to restore the p roperty value after [Page]Up/Down changes. 2507 // This should happen last, as it clears the info necessary to restore the p roperty value after [Page]Up/Down changes.
2503 this.editingEnded(context); 2508 this.editingEnded(context);
2504 } 2509 }
2505 2510
2506 _revertStyleUponEditingCanceled() { 2511 _revertStyleUponEditingCanceled() {
2507 if (this._propertyHasBeenEditedIncrementally) { 2512 if (this._propertyHasBeenEditedIncrementally) {
2508 this.applyStyleText(this._originalPropertyText, false); 2513 this.applyStyleText(this._originalPropertyText, false);
2509 delete this._originalPropertyText; 2514 this._originalPropertyText = '';
einbinder 2017/02/08 02:05:29 I am a little concerned about originalPropertyText
2510 } else if (this._newProperty) { 2515 } else if (this._newProperty) {
2511 this.treeOutline.removeChild(this); 2516 this.treeOutline.removeChild(this);
2512 } else { 2517 } else {
2513 this.updateTitle(); 2518 this.updateTitle();
2514 } 2519 }
2515 } 2520 }
2516 2521
2517 /** 2522 /**
2518 * @param {string} moveDirection 2523 * @param {string} moveDirection
2519 * @return {?Elements.StylePropertyTreeElement} 2524 * @return {?Elements.StylePropertyTreeElement}
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
2748 * @return {boolean} 2753 * @return {boolean}
2749 */ 2754 */
2750 isEventWithinDisclosureTriangle(event) { 2755 isEventWithinDisclosureTriangle(event) {
2751 return event.target === this._expandElement; 2756 return event.target === this._expandElement;
2752 } 2757 }
2753 }; 2758 };
2754 2759
2755 /** @typedef {{expanded: boolean, hasChildren: boolean, isEditingName: boolean, previousContent: string}} */ 2760 /** @typedef {{expanded: boolean, hasChildren: boolean, isEditingName: boolean, previousContent: string}} */
2756 Elements.StylePropertyTreeElement.Context; 2761 Elements.StylePropertyTreeElement.Context;
2757 2762
2758 /**
2759 * @unrestricted
2760 */
2761 Elements.StylesSidebarPane.CSSPropertyPrompt = class extends UI.TextPrompt { 2763 Elements.StylesSidebarPane.CSSPropertyPrompt = class extends UI.TextPrompt {
2762 /** 2764 /**
2763 * @param {!Array<string>} cssCompletions 2765 * @param {!Array<string>} cssCompletions
2764 * @param {!Array<string>} cssVariables 2766 * @param {!Array<string>} cssVariables
2765 * @param {!Elements.StylePropertyTreeElement} treeElement 2767 * @param {!Elements.StylePropertyTreeElement} treeElement
2766 * @param {boolean} isEditingName 2768 * @param {boolean} isEditingName
2767 */ 2769 */
2768 constructor(cssCompletions, cssVariables, treeElement, isEditingName) { 2770 constructor(cssCompletions, cssVariables, treeElement, isEditingName) {
2769 // Use the same callback both for applyItemCallback and acceptItemCallback. 2771 // Use the same callback both for applyItemCallback and acceptItemCallback.
2770 super(); 2772 super();
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
2866 * @return {string} 2868 * @return {string}
2867 * @this {Elements.StylesSidebarPane.CSSPropertyPrompt} 2869 * @this {Elements.StylesSidebarPane.CSSPropertyPrompt}
2868 */ 2870 */
2869 function customNumberHandler(prefix, number, suffix) { 2871 function customNumberHandler(prefix, number, suffix) {
2870 if (number !== 0 && !suffix.length && SDK.cssMetadata().isLengthProperty(t his._treeElement.property.name)) 2872 if (number !== 0 && !suffix.length && SDK.cssMetadata().isLengthProperty(t his._treeElement.property.name))
2871 suffix = 'px'; 2873 suffix = 'px';
2872 return prefix + number + suffix; 2874 return prefix + number + suffix;
2873 } 2875 }
2874 2876
2875 // Handle numeric value increment/decrement only at this point. 2877 // Handle numeric value increment/decrement only at this point.
2876 if (!this._isEditingName && 2878 if (!this._isEditingName && this._treeElement.valueElement &&
einbinder 2017/02/08 02:05:29 valueElement could be null here. It shouldn't be b
2877 UI.handleElementValueModifications( 2879 UI.handleElementValueModifications(
2878 event, this._treeElement.valueElement, finishHandler.bind(this), thi s._isValueSuggestion.bind(this), 2880 event, this._treeElement.valueElement, finishHandler.bind(this), thi s._isValueSuggestion.bind(this),
2879 customNumberHandler.bind(this))) 2881 customNumberHandler.bind(this)))
2880 return true; 2882 return true;
2881 2883
2882 return false; 2884 return false;
2883 } 2885 }
2884 2886
2885 /** 2887 /**
2886 * @param {string} word 2888 * @param {string} word
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
2935 if (index === 0) { 2937 if (index === 0) {
2936 var priority = this._isEditingName ? SDK.cssMetadata().propertyUsageWeig ht(completion) : 1; 2938 var priority = this._isEditingName ? SDK.cssMetadata().propertyUsageWeig ht(completion) : 1;
2937 prefixResults.push({text: completion, priority: priority}); 2939 prefixResults.push({text: completion, priority: priority});
2938 } else if (index > -1) { 2940 } else if (index > -1) {
2939 anywhereResults.push({text: completion}); 2941 anywhereResults.push({text: completion});
2940 } 2942 }
2941 } 2943 }
2942 } 2944 }
2943 }; 2945 };
2944 2946
2945 /**
2946 * @unrestricted
2947 */
2948 Elements.StylesSidebarPropertyRenderer = class { 2947 Elements.StylesSidebarPropertyRenderer = class {
2949 /** 2948 /**
2950 * @param {?SDK.CSSRule} rule 2949 * @param {?SDK.CSSRule} rule
2951 * @param {?SDK.DOMNode} node 2950 * @param {?SDK.DOMNode} node
2952 * @param {string} name 2951 * @param {string} name
2953 * @param {string} value 2952 * @param {string} value
2954 */ 2953 */
2955 constructor(rule, node, name, value) { 2954 constructor(rule, node, name, value) {
2956 this._rule = rule; 2955 this._rule = rule;
2957 this._node = node; 2956 this._node = node;
2958 this._propertyName = name; 2957 this._propertyName = name;
2959 this._propertyValue = value; 2958 this._propertyValue = value;
2959 /** @type {?function(string):!Node} */
2960 this._colorHandler = null;
2961 /** @type {?function(string):!Node} */
2962 this._bezierHandler = null;
2963 /** @type {?function(string, string):!Node} */
2964 this._shadowHandler = null;
2960 } 2965 }
2961 2966
2962 /** 2967 /**
2963 * @param {function(string):!Node} handler 2968 * @param {function(string):!Node} handler
2964 */ 2969 */
2965 setColorHandler(handler) { 2970 setColorHandler(handler) {
2966 this._colorHandler = handler; 2971 this._colorHandler = handler;
2967 } 2972 }
2968 2973
2969 /** 2974 /**
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
3046 else if (this._node) 3051 else if (this._node)
3047 hrefUrl = this._node.resolveURL(url); 3052 hrefUrl = this._node.resolveURL(url);
3048 container.appendChild(Components.Linkifier.linkifyURL(hrefUrl || url, url, ' ', undefined, undefined, true)); 3053 container.appendChild(Components.Linkifier.linkifyURL(hrefUrl || url, url, ' ', undefined, undefined, true));
3049 container.createTextChild(')'); 3054 container.createTextChild(')');
3050 return container; 3055 return container;
3051 } 3056 }
3052 }; 3057 };
3053 3058
3054 /** 3059 /**
3055 * @implements {UI.ToolbarItem.Provider} 3060 * @implements {UI.ToolbarItem.Provider}
3056 * @unrestricted
3057 */ 3061 */
3058 Elements.StylesSidebarPane.ButtonProvider = class { 3062 Elements.StylesSidebarPane.ButtonProvider = class {
3059 constructor() { 3063 constructor() {
3060 this._button = new UI.ToolbarButton(Common.UIString('New Style Rule'), 'larg eicon-add'); 3064 this._button = new UI.ToolbarButton(Common.UIString('New Style Rule'), 'larg eicon-add');
3061 this._button.addEventListener(UI.ToolbarButton.Events.Click, this._clicked, this); 3065 this._button.addEventListener(UI.ToolbarButton.Events.Click, this._clicked, this);
3062 var longclickTriangle = UI.Icon.create('largeicon-longclick-triangle', 'long -click-glyph'); 3066 var longclickTriangle = UI.Icon.create('largeicon-longclick-triangle', 'long -click-glyph');
3063 this._button.element.appendChild(longclickTriangle); 3067 this._button.element.appendChild(longclickTriangle);
3064 3068
3065 new UI.LongClickController(this._button.element, this._longClicked.bind(this )); 3069 new UI.LongClickController(this._button.element, this._longClicked.bind(this ));
3066 UI.context.addFlavorChangeListener(SDK.DOMNode, onNodeChanged.bind(this)); 3070 UI.context.addFlavorChangeListener(SDK.DOMNode, onNodeChanged.bind(this));
(...skipping 24 matching lines...) Expand all
3091 } 3095 }
3092 3096
3093 /** 3097 /**
3094 * @override 3098 * @override
3095 * @return {!UI.ToolbarItem} 3099 * @return {!UI.ToolbarItem}
3096 */ 3100 */
3097 item() { 3101 item() {
3098 return this._button; 3102 return this._button;
3099 } 3103 }
3100 }; 3104 };
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698