| 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 29 matching lines...) Expand all Loading... |
| 40 this._elementStateButton = document.createElement("button"); | 40 this._elementStateButton = document.createElement("button"); |
| 41 this._elementStateButton.className = "pane-title-button element-state"; | 41 this._elementStateButton.className = "pane-title-button element-state"; |
| 42 this._elementStateButton.title = WebInspector.UIString("Toggle Element State
"); | 42 this._elementStateButton.title = WebInspector.UIString("Toggle Element State
"); |
| 43 this._elementStateButton.addEventListener("click", this._toggleElementStateP
ane.bind(this), false); | 43 this._elementStateButton.addEventListener("click", this._toggleElementStateP
ane.bind(this), false); |
| 44 this.titleElement.appendChild(this._elementStateButton); | 44 this.titleElement.appendChild(this._elementStateButton); |
| 45 | 45 |
| 46 var addButton = document.createElement("button"); | 46 var addButton = document.createElement("button"); |
| 47 addButton.className = "pane-title-button add"; | 47 addButton.className = "pane-title-button add"; |
| 48 addButton.id = "add-style-button-test-id"; | 48 addButton.id = "add-style-button-test-id"; |
| 49 addButton.title = WebInspector.UIString("New Style Rule"); | 49 addButton.title = WebInspector.UIString("New Style Rule"); |
| 50 addButton.addEventListener("click", this._createNewRule.bind(this), false); | 50 addButton.addEventListener("click", this._createNewRuleInViaInspectorStyleSh
eet.bind(this), false); |
| 51 this.titleElement.appendChild(addButton); | 51 this.titleElement.appendChild(addButton); |
| 52 | 52 |
| 53 this._computedStylePane = computedStylePane; | 53 this._computedStylePane = computedStylePane; |
| 54 computedStylePane.setHostingPane(this); | 54 computedStylePane.setHostingPane(this); |
| 55 this._setPseudoClassCallback = setPseudoClassCallback; | 55 this._setPseudoClassCallback = setPseudoClassCallback; |
| 56 this.element.addEventListener("contextmenu", this._contextMenuEventFired.bin
d(this), true); | 56 this.element.addEventListener("contextmenu", this._contextMenuEventFired.bin
d(this), true); |
| 57 WebInspector.settings.colorFormat.addChangeListener(this._colorFormatSetting
Changed.bind(this)); | 57 WebInspector.settings.colorFormat.addChangeListener(this._colorFormatSetting
Changed.bind(this)); |
| 58 WebInspector.settings.showUserAgentStyles.addChangeListener(this._showUserAg
entStylesSettingChanged.bind(this)); | 58 WebInspector.settings.showUserAgentStyles.addChangeListener(this._showUserAg
entStylesSettingChanged.bind(this)); |
| 59 | 59 |
| 60 this._createElementStatePane(); | 60 this._createElementStatePane(); |
| (...skipping 722 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 783 | 783 |
| 784 _colorFormatSettingChanged: function(event) | 784 _colorFormatSettingChanged: function(event) |
| 785 { | 785 { |
| 786 for (var pseudoId in this.sections) { | 786 for (var pseudoId in this.sections) { |
| 787 var sections = this.sections[pseudoId]; | 787 var sections = this.sections[pseudoId]; |
| 788 for (var i = 0; i < sections.length; ++i) | 788 for (var i = 0; i < sections.length; ++i) |
| 789 sections[i].update(true); | 789 sections[i].update(true); |
| 790 } | 790 } |
| 791 }, | 791 }, |
| 792 | 792 |
| 793 _createNewRule: function(event) | 793 /** |
| 794 * @param {?Event} event |
| 795 */ |
| 796 _createNewRuleInViaInspectorStyleSheet: function(event) |
| 794 { | 797 { |
| 795 event.consume(); | 798 event.consume(); |
| 796 this.expand(); | 799 var cssModel = this._target.cssModel; |
| 797 this.addBlankSection().startEditingSelector(); | 800 cssModel.requestViaInspectorStylesheet(this._node, viaInspectorCallback.
bind(this)); |
| 801 |
| 802 /** |
| 803 * @param {?WebInspector.CSSStyleSheetHeader} styleSheetHeader |
| 804 * @this {WebInspector.StylesSidebarPane} |
| 805 */ |
| 806 function viaInspectorCallback(styleSheetHeader) |
| 807 { |
| 808 if (!styleSheetHeader) |
| 809 return; |
| 810 styleSheetHeader.requestContent(onViaInspectorContent.bind(this, sty
leSheetHeader.id)); |
| 811 } |
| 812 |
| 813 /** |
| 814 * @param {string} styleSheetId |
| 815 * @param {string} text |
| 816 * @this {WebInspector.StylesSidebarPane} |
| 817 */ |
| 818 function onViaInspectorContent(styleSheetId, text) |
| 819 { |
| 820 var lines = text.split("\n"); |
| 821 var range = WebInspector.TextRange.createFromLocation(lines.length -
1, lines[lines.length - 1].length); |
| 822 this._addBlankSection(this.sections[0][1], styleSheetId, range); |
| 823 } |
| 798 }, | 824 }, |
| 799 | 825 |
| 800 /** | 826 /** |
| 801 * @return {!WebInspector.BlankStylePropertiesSection} | 827 * @param {!WebInspector.StylePropertiesSection} insertAfterSection |
| 828 * @param {string} styleSheetId |
| 829 * @param {!WebInspector.TextRange} ruleLocation |
| 802 */ | 830 */ |
| 803 addBlankSection: function() | 831 _addBlankSection: function(insertAfterSection, styleSheetId, ruleLocation) |
| 804 { | 832 { |
| 805 var blankSection = new WebInspector.BlankStylePropertiesSection(this, th
is._node ? WebInspector.DOMPresentationUtils.simpleSelector(this._node) : ""); | 833 this.expand(); |
| 834 var blankSection = new WebInspector.BlankStylePropertiesSection(this, th
is._node ? WebInspector.DOMPresentationUtils.simpleSelector(this._node) : "", st
yleSheetId, ruleLocation, insertAfterSection.rule); |
| 806 | 835 |
| 807 var elementStyleSection = this.sections[0][1]; | 836 this._sectionsContainer.insertBefore(blankSection.element, insertAfterSe
ction.element.nextSibling); |
| 808 this._sectionsContainer.insertBefore(blankSection.element, elementStyleS
ection.element.nextSibling); | |
| 809 | 837 |
| 810 this.sections[0].splice(2, 0, blankSection); | 838 var index = this.sections[0].indexOf(insertAfterSection); |
| 811 | 839 this.sections[0].splice(index + 1, 0, blankSection); |
| 812 return blankSection; | 840 blankSection.startEditingSelector(); |
| 813 }, | 841 }, |
| 814 | 842 |
| 815 removeSection: function(section) | 843 removeSection: function(section) |
| 816 { | 844 { |
| 817 for (var pseudoId in this.sections) { | 845 for (var pseudoId in this.sections) { |
| 818 var sections = this.sections[pseudoId]; | 846 var sections = this.sections[pseudoId]; |
| 819 var index = sections.indexOf(section); | 847 var index = sections.indexOf(section); |
| 820 if (index === -1) | 848 if (index === -1) |
| 821 continue; | 849 continue; |
| 822 sections.splice(index, 1); | 850 sections.splice(index, 1); |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1101 var openBrace = document.createElement("span"); | 1129 var openBrace = document.createElement("span"); |
| 1102 openBrace.textContent = " {"; | 1130 openBrace.textContent = " {"; |
| 1103 selectorContainer.appendChild(openBrace); | 1131 selectorContainer.appendChild(openBrace); |
| 1104 selectorContainer.addEventListener("mousedown", this._handleEmptySpaceMouseD
own.bind(this), false); | 1132 selectorContainer.addEventListener("mousedown", this._handleEmptySpaceMouseD
own.bind(this), false); |
| 1105 selectorContainer.addEventListener("click", this._handleSelectorContainerCli
ck.bind(this), false); | 1133 selectorContainer.addEventListener("click", this._handleSelectorContainerCli
ck.bind(this), false); |
| 1106 | 1134 |
| 1107 var closeBrace = document.createElement("div"); | 1135 var closeBrace = document.createElement("div"); |
| 1108 closeBrace.textContent = "}"; | 1136 closeBrace.textContent = "}"; |
| 1109 this.element.appendChild(closeBrace); | 1137 this.element.appendChild(closeBrace); |
| 1110 | 1138 |
| 1139 if (this.editable && this.rule) { |
| 1140 var newRuleButton = closeBrace.createChild("div", "sidebar-pane-button-n
ew-rule"); |
| 1141 newRuleButton.addEventListener("click", this._onNewRuleClick.bind(this),
false); |
| 1142 } |
| 1143 |
| 1111 this._selectorElement.addEventListener("click", this._handleSelectorClick.bi
nd(this), false); | 1144 this._selectorElement.addEventListener("click", this._handleSelectorClick.bi
nd(this), false); |
| 1112 this.element.addEventListener("mousedown", this._handleEmptySpaceMouseDown.b
ind(this), false); | 1145 this.element.addEventListener("mousedown", this._handleEmptySpaceMouseDown.b
ind(this), false); |
| 1113 this.element.addEventListener("click", this._handleEmptySpaceClick.bind(this
), false); | 1146 this.element.addEventListener("click", this._handleEmptySpaceClick.bind(this
), false); |
| 1114 | 1147 |
| 1115 if (this.rule) { | 1148 if (this.rule) { |
| 1116 // Prevent editing the user agent and user rules. | 1149 // Prevent editing the user agent and user rules. |
| 1117 if (this.rule.isUserAgent || this.rule.isUser) | 1150 if (this.rule.isUserAgent || this.rule.isUser) |
| 1118 this.editable = false; | 1151 this.editable = false; |
| 1119 else { | 1152 else { |
| 1120 // Check this is a real CSSRule, not a bogus object coming from WebI
nspector.BlankStylePropertiesSection. | 1153 // Check this is a real CSSRule, not a bogus object coming from WebI
nspector.BlankStylePropertiesSection. |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1140 | 1173 |
| 1141 if (this.navigable) | 1174 if (this.navigable) |
| 1142 this.element.classList.add("navigable"); | 1175 this.element.classList.add("navigable"); |
| 1143 | 1176 |
| 1144 if (!this.editable) | 1177 if (!this.editable) |
| 1145 this.element.classList.add("read-only"); | 1178 this.element.classList.add("read-only"); |
| 1146 } | 1179 } |
| 1147 | 1180 |
| 1148 WebInspector.StylePropertiesSection.prototype = { | 1181 WebInspector.StylePropertiesSection.prototype = { |
| 1149 /** | 1182 /** |
| 1183 * @param {?Event} event |
| 1184 */ |
| 1185 _onNewRuleClick: function(event) |
| 1186 { |
| 1187 event.consume(); |
| 1188 var range = WebInspector.TextRange.createFromLocation(this.rule.style.ra
nge.endLine, this.rule.style.range.endColumn + 1); |
| 1189 this._parentPane._addBlankSection(this, this.rule.styleSheetId, range); |
| 1190 }, |
| 1191 |
| 1192 /** |
| 1150 * @param {!WebInspector.CSSRule} editedRule | 1193 * @param {!WebInspector.CSSRule} editedRule |
| 1151 * @param {!WebInspector.TextRange} oldRange | 1194 * @param {!WebInspector.TextRange} oldRange |
| 1152 * @param {!WebInspector.TextRange} newRange | 1195 * @param {!WebInspector.TextRange} newRange |
| 1153 */ | 1196 */ |
| 1154 _styleSheetRuleEdited: function(editedRule, oldRange, newRange) | 1197 _styleSheetRuleEdited: function(editedRule, oldRange, newRange) |
| 1155 { | 1198 { |
| 1156 if (!this.rule || !this.rule.styleSheetId) | 1199 if (!this.rule || !this.rule.styleSheetId) |
| 1157 return; | 1200 return; |
| 1158 if (this.rule !== editedRule) | 1201 if (this.rule !== editedRule) |
| 1159 this.rule.sourceStyleSheetEdited(editedRule.styleSheetId, oldRange,
newRange); | 1202 this.rule.sourceStyleSheetEdited(editedRule.styleSheetId, oldRange,
newRange); |
| (...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1833 }, | 1876 }, |
| 1834 | 1877 |
| 1835 __proto__: WebInspector.PropertiesSection.prototype | 1878 __proto__: WebInspector.PropertiesSection.prototype |
| 1836 } | 1879 } |
| 1837 | 1880 |
| 1838 /** | 1881 /** |
| 1839 * @constructor | 1882 * @constructor |
| 1840 * @extends {WebInspector.StylePropertiesSection} | 1883 * @extends {WebInspector.StylePropertiesSection} |
| 1841 * @param {!WebInspector.StylesSidebarPane} stylesPane | 1884 * @param {!WebInspector.StylesSidebarPane} stylesPane |
| 1842 * @param {string} defaultSelectorText | 1885 * @param {string} defaultSelectorText |
| 1886 * @param {string} styleSheetId |
| 1887 * @param {!WebInspector.TextRange} ruleLocation |
| 1888 * @param {!WebInspector.CSSRule=} insertAfterRule |
| 1843 */ | 1889 */ |
| 1844 WebInspector.BlankStylePropertiesSection = function(stylesPane, defaultSelectorT
ext) | 1890 WebInspector.BlankStylePropertiesSection = function(stylesPane, defaultSelectorT
ext, styleSheetId, ruleLocation, insertAfterRule) |
| 1845 { | 1891 { |
| 1846 WebInspector.StylePropertiesSection.call(this, stylesPane, {selectorText: de
faultSelectorText, rule: {isViaInspector: true}}, true, false); | 1892 WebInspector.StylePropertiesSection.call(this, stylesPane, {selectorText: de
faultSelectorText, rule: {isViaInspector: true}}, true, false); |
| 1893 this._ruleLocation = ruleLocation; |
| 1894 this._styleSheetId = styleSheetId; |
| 1895 if (insertAfterRule) |
| 1896 this._createMediaList(insertAfterRule); |
| 1847 this.element.classList.add("blank-section"); | 1897 this.element.classList.add("blank-section"); |
| 1848 } | 1898 } |
| 1849 | 1899 |
| 1850 WebInspector.BlankStylePropertiesSection.prototype = { | 1900 WebInspector.BlankStylePropertiesSection.prototype = { |
| 1851 get isBlank() | 1901 get isBlank() |
| 1852 { | 1902 { |
| 1853 return !this._normal; | 1903 return !this._normal; |
| 1854 }, | 1904 }, |
| 1855 | 1905 |
| 1856 expand: function() | 1906 expand: function() |
| 1857 { | 1907 { |
| 1858 if (!this.isBlank) | 1908 if (!this.isBlank) |
| 1859 WebInspector.StylePropertiesSection.prototype.expand.call(this); | 1909 WebInspector.StylePropertiesSection.prototype.expand.call(this); |
| 1860 }, | 1910 }, |
| 1861 | 1911 |
| 1862 editingSelectorCommitted: function(element, newContent, oldContent, context,
moveDirection) | 1912 editingSelectorCommitted: function(element, newContent, oldContent, context,
moveDirection) |
| 1863 { | 1913 { |
| 1864 if (!this.isBlank) { | 1914 if (!this.isBlank) { |
| 1865 WebInspector.StylePropertiesSection.prototype.editingSelectorCommitt
ed.call(this, element, newContent, oldContent, context, moveDirection); | 1915 WebInspector.StylePropertiesSection.prototype.editingSelectorCommitt
ed.call(this, element, newContent, oldContent, context, moveDirection); |
| 1866 return; | 1916 return; |
| 1867 } | 1917 } |
| 1868 | 1918 |
| 1869 /** | 1919 /** |
| 1870 * @param {!WebInspector.CSSRule} newRule | 1920 * @param {!WebInspector.CSSRule} newRule |
| 1871 * @this {WebInspector.StylePropertiesSection} | 1921 * @this {WebInspector.StylePropertiesSection} |
| 1872 */ | 1922 */ |
| 1873 function successCallback(newRule) | 1923 function successCallback(newRule) |
| 1874 { | 1924 { |
| 1875 var doesSelectorAffectSelectedNode = newRule.matchingSelectors.lengt
h > 0; | 1925 var doesSelectorAffectSelectedNode = newRule.matchingSelectors.lengt
h > 0; |
| 1876 var styleRule = { section: this, style: newRule.style, selectorText:
newRule.selectorText, sourceURL: newRule.resourceURL(), rule: newRule }; | 1926 var styleRule = { media: newRule.media, section: this, style: newRul
e.style, selectorText: newRule.selectorText, sourceURL: newRule.resourceURL(), r
ule: newRule }; |
| 1877 this._makeNormal(styleRule); | 1927 this._makeNormal(styleRule); |
| 1878 | 1928 |
| 1879 if (!doesSelectorAffectSelectedNode) { | 1929 if (!doesSelectorAffectSelectedNode) { |
| 1880 this.noAffect = true; | 1930 this.noAffect = true; |
| 1881 this.element.classList.add("no-affect"); | 1931 this.element.classList.add("no-affect"); |
| 1882 } | 1932 } |
| 1883 | 1933 |
| 1934 var ruleTextLines = ruleText.split("\n"); |
| 1935 var startLine = this._ruleLocation.startLine; |
| 1936 var startColumn = this._ruleLocation.startColumn; |
| 1937 var newRange = new WebInspector.TextRange(startLine, startColumn, st
artLine + ruleTextLines.length - 1, startColumn + ruleTextLines[ruleTextLines.le
ngth - 1].length); |
| 1938 this._parentPane._styleSheetRuleEdited(newRule, this._ruleLocation,
newRange); |
| 1939 |
| 1884 this._updateRuleOrigin(); | 1940 this._updateRuleOrigin(); |
| 1885 this.expand(); | 1941 this.expand(); |
| 1886 if (this.element.parentElement) // Might have been detached already. | 1942 if (this.element.parentElement) // Might have been detached already. |
| 1887 this._moveEditorFromSelector(moveDirection); | 1943 this._moveEditorFromSelector(moveDirection); |
| 1888 | 1944 |
| 1889 delete this._parentPane._userOperation; | 1945 delete this._parentPane._userOperation; |
| 1890 this._editingSelectorEnded(); | 1946 this._editingSelectorEnded(); |
| 1891 this._markSelectorMatches(); | 1947 this._markSelectorMatches(); |
| 1892 } | 1948 } |
| 1893 | 1949 |
| 1894 if (newContent) | 1950 if (newContent) |
| 1895 newContent = newContent.trim(); | 1951 newContent = newContent.trim(); |
| 1896 this._parentPane._userOperation = true; | 1952 this._parentPane._userOperation = true; |
| 1897 | 1953 |
| 1898 var cssModel = this._parentPane._target.cssModel; | 1954 var cssModel = this._parentPane._target.cssModel; |
| 1899 cssModel.requestViaInspectorStylesheet(this._parentPane._node, viaInspec
torCallback.bind(this)); | 1955 var rulePrefix = this._ruleLocation.startLine === 0 && this._ruleLocatio
n.startColumn === 0 ? "" : "\n\n"; |
| 1900 | 1956 var ruleText = rulePrefix + newContent + " {}"; |
| 1901 /** | 1957 cssModel.addRule(this._styleSheetId, this._parentPane._node, ruleText, t
his._ruleLocation, successCallback.bind(this), this.editingSelectorCancelled.bin
d(this)); |
| 1902 * @this {WebInspector.BlankStylePropertiesSection} | |
| 1903 * @param {?WebInspector.CSSStyleSheetHeader} styleSheetHeader | |
| 1904 */ | |
| 1905 function viaInspectorCallback(styleSheetHeader) | |
| 1906 { | |
| 1907 if (!styleSheetHeader) { | |
| 1908 this.editingSelectorCancelled(); | |
| 1909 return; | |
| 1910 } | |
| 1911 cssModel.addRule(styleSheetHeader.id, this._parentPane._node, newCon
tent, successCallback.bind(this), this.editingSelectorCancelled.bind(this)); | |
| 1912 } | |
| 1913 }, | 1958 }, |
| 1914 | 1959 |
| 1915 editingSelectorCancelled: function() | 1960 editingSelectorCancelled: function() |
| 1916 { | 1961 { |
| 1917 delete this._parentPane._userOperation; | 1962 delete this._parentPane._userOperation; |
| 1918 if (!this.isBlank) { | 1963 if (!this.isBlank) { |
| 1919 WebInspector.StylePropertiesSection.prototype.editingSelectorCancell
ed.call(this); | 1964 WebInspector.StylePropertiesSection.prototype.editingSelectorCancell
ed.call(this); |
| 1920 return; | 1965 return; |
| 1921 } | 1966 } |
| 1922 | 1967 |
| (...skipping 1388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3311 if (userEnteredText && (userEnteredText === userEnteredText.toUpperCase(
))) { | 3356 if (userEnteredText && (userEnteredText === userEnteredText.toUpperCase(
))) { |
| 3312 for (var i = 0; i < results.length; ++i) | 3357 for (var i = 0; i < results.length; ++i) |
| 3313 results[i] = results[i].toUpperCase(); | 3358 results[i] = results[i].toUpperCase(); |
| 3314 } | 3359 } |
| 3315 var selectedIndex = this._cssCompletions.mostUsedOf(results); | 3360 var selectedIndex = this._cssCompletions.mostUsedOf(results); |
| 3316 completionsReadyCallback(results, selectedIndex); | 3361 completionsReadyCallback(results, selectedIndex); |
| 3317 }, | 3362 }, |
| 3318 | 3363 |
| 3319 __proto__: WebInspector.TextPrompt.prototype | 3364 __proto__: WebInspector.TextPrompt.prototype |
| 3320 } | 3365 } |
| OLD | NEW |