| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 /** |
| 5 /** | 5 * @unrestricted |
| 6 * @constructor | 6 */ |
| 7 * @param {!CSSAgent.Value} payload | 7 WebInspector.CSSValue = class { |
| 8 */ | 8 /** |
| 9 WebInspector.CSSValue = function(payload) | 9 * @param {!CSSAgent.Value} payload |
| 10 { | 10 */ |
| 11 constructor(payload) { |
| 11 this.text = payload.text; | 12 this.text = payload.text; |
| 12 if (payload.range) | 13 if (payload.range) |
| 13 this.range = WebInspector.TextRange.fromObject(payload.range); | 14 this.range = WebInspector.TextRange.fromObject(payload.range); |
| 14 }; | 15 } |
| 15 | 16 |
| 16 WebInspector.CSSValue.prototype = { | 17 /** |
| 17 /** | 18 * @param {!WebInspector.CSSModel.Edit} edit |
| 18 * @param {!WebInspector.CSSModel.Edit} edit | 19 */ |
| 19 */ | 20 rebase(edit) { |
| 20 rebase: function(edit) | 21 if (!this.range) |
| 21 { | 22 return; |
| 22 if (!this.range) | 23 this.range = this.range.rebaseAfterTextEdit(edit.oldRange, edit.newRange); |
| 23 return; | 24 } |
| 24 this.range = this.range.rebaseAfterTextEdit(edit.oldRange, edit.newRange
); | 25 }; |
| 25 } | 26 |
| 26 }; | 27 /** |
| 27 | 28 * @unrestricted |
| 28 /** | 29 */ |
| 29 * @constructor | 30 WebInspector.CSSRule = class { |
| 30 * @param {!WebInspector.CSSModel} cssModel | 31 /** |
| 31 * @param {{style: !CSSAgent.CSSStyle, styleSheetId: (string|undefined), origin:
!CSSAgent.StyleSheetOrigin}} payload | 32 * @param {!WebInspector.CSSModel} cssModel |
| 32 */ | 33 * @param {{style: !CSSAgent.CSSStyle, styleSheetId: (string|undefined), origi
n: !CSSAgent.StyleSheetOrigin}} payload |
| 33 WebInspector.CSSRule = function(cssModel, payload) | 34 */ |
| 34 { | 35 constructor(cssModel, payload) { |
| 35 this._cssModel = cssModel; | 36 this._cssModel = cssModel; |
| 36 this.styleSheetId = payload.styleSheetId; | 37 this.styleSheetId = payload.styleSheetId; |
| 37 | 38 |
| 38 if (this.styleSheetId) { | 39 if (this.styleSheetId) { |
| 39 var styleSheetHeader = cssModel.styleSheetHeaderForId(this.styleSheetId)
; | 40 var styleSheetHeader = cssModel.styleSheetHeaderForId(this.styleSheetId); |
| 40 this.sourceURL = styleSheetHeader.sourceURL; | 41 this.sourceURL = styleSheetHeader.sourceURL; |
| 41 } | 42 } |
| 42 this.origin = payload.origin; | 43 this.origin = payload.origin; |
| 43 this.style = new WebInspector.CSSStyleDeclaration(this._cssModel, this, payl
oad.style, WebInspector.CSSStyleDeclaration.Type.Regular); | 44 this.style = new WebInspector.CSSStyleDeclaration( |
| 44 }; | 45 this._cssModel, this, payload.style, WebInspector.CSSStyleDeclaration.Ty
pe.Regular); |
| 45 | 46 } |
| 46 WebInspector.CSSRule.prototype = { | 47 |
| 47 /** | 48 /** |
| 48 * @param {!WebInspector.CSSModel.Edit} edit | 49 * @param {!WebInspector.CSSModel.Edit} edit |
| 49 */ | 50 */ |
| 50 rebase: function(edit) | 51 rebase(edit) { |
| 51 { | 52 if (this.styleSheetId !== edit.styleSheetId) |
| 52 if (this.styleSheetId !== edit.styleSheetId) | 53 return; |
| 53 return; | 54 this.style.rebase(edit); |
| 54 this.style.rebase(edit); | 55 } |
| 55 }, | 56 |
| 56 | 57 /** |
| 57 /** | 58 * @return {string} |
| 58 * @return {string} | 59 */ |
| 59 */ | 60 resourceURL() { |
| 60 resourceURL: function() | 61 if (!this.styleSheetId) |
| 61 { | 62 return ''; |
| 62 if (!this.styleSheetId) | 63 var styleSheetHeader = this._cssModel.styleSheetHeaderForId(this.styleSheetI
d); |
| 63 return ""; | 64 return styleSheetHeader.resourceURL(); |
| 64 var styleSheetHeader = this._cssModel.styleSheetHeaderForId(this.styleSh
eetId); | 65 } |
| 65 return styleSheetHeader.resourceURL(); | 66 |
| 66 }, | 67 /** |
| 67 | 68 * @return {boolean} |
| 68 /** | 69 */ |
| 69 * @return {boolean} | 70 isUserAgent() { |
| 70 */ | 71 return this.origin === CSSAgent.StyleSheetOrigin.UserAgent; |
| 71 isUserAgent: function() | 72 } |
| 72 { | 73 |
| 73 return this.origin === CSSAgent.StyleSheetOrigin.UserAgent; | 74 /** |
| 74 }, | 75 * @return {boolean} |
| 75 | 76 */ |
| 76 /** | 77 isInjected() { |
| 77 * @return {boolean} | 78 return this.origin === CSSAgent.StyleSheetOrigin.Injected; |
| 78 */ | 79 } |
| 79 isInjected: function() | 80 |
| 80 { | 81 /** |
| 81 return this.origin === CSSAgent.StyleSheetOrigin.Injected; | 82 * @return {boolean} |
| 82 }, | 83 */ |
| 83 | 84 isViaInspector() { |
| 84 /** | 85 return this.origin === CSSAgent.StyleSheetOrigin.Inspector; |
| 85 * @return {boolean} | 86 } |
| 86 */ | 87 |
| 87 isViaInspector: function() | 88 /** |
| 88 { | 89 * @return {boolean} |
| 89 return this.origin === CSSAgent.StyleSheetOrigin.Inspector; | 90 */ |
| 90 }, | 91 isRegular() { |
| 91 | 92 return this.origin === CSSAgent.StyleSheetOrigin.Regular; |
| 92 /** | 93 } |
| 93 * @return {boolean} | 94 }; |
| 94 */ | 95 |
| 95 isRegular: function() | 96 /** |
| 96 { | 97 * @unrestricted |
| 97 return this.origin === CSSAgent.StyleSheetOrigin.Regular; | 98 */ |
| 98 } | 99 WebInspector.CSSStyleRule = class extends WebInspector.CSSRule { |
| 99 }; | 100 /** |
| 100 | 101 * @param {!WebInspector.CSSModel} cssModel |
| 101 /** | 102 * @param {!CSSAgent.CSSRule} payload |
| 102 * @constructor | 103 */ |
| 103 * @extends {WebInspector.CSSRule} | 104 constructor(cssModel, payload) { |
| 104 * @param {!WebInspector.CSSModel} cssModel | 105 super(cssModel, payload); |
| 105 * @param {!CSSAgent.CSSRule} payload | |
| 106 */ | |
| 107 WebInspector.CSSStyleRule = function(cssModel, payload) | |
| 108 { | |
| 109 WebInspector.CSSRule.call(this, cssModel, payload); | |
| 110 | 106 |
| 111 this._reinitializeSelectors(payload.selectorList); | 107 this._reinitializeSelectors(payload.selectorList); |
| 112 this.media = payload.media ? WebInspector.CSSMedia.parseMediaArrayPayload(cs
sModel, payload.media) : []; | 108 this.media = payload.media ? WebInspector.CSSMedia.parseMediaArrayPayload(cs
sModel, payload.media) : []; |
| 113 }; | 109 } |
| 114 | 110 |
| 115 /** | 111 /** |
| 116 * @param {!WebInspector.CSSModel} cssModel | 112 * @param {!WebInspector.CSSModel} cssModel |
| 117 * @param {string} selectorText | 113 * @param {string} selectorText |
| 118 * @return {!WebInspector.CSSStyleRule} | 114 * @return {!WebInspector.CSSStyleRule} |
| 119 */ | 115 */ |
| 120 WebInspector.CSSStyleRule.createDummyRule = function(cssModel, selectorText) | 116 static createDummyRule(cssModel, selectorText) { |
| 121 { | |
| 122 var dummyPayload = { | 117 var dummyPayload = { |
| 123 selectorList: { | 118 selectorList: { |
| 124 selectors: [{ text: selectorText}], | 119 selectors: [{text: selectorText}], |
| 125 }, | 120 }, |
| 126 style: { | 121 style: |
| 127 styleSheetId: "0", | 122 {styleSheetId: '0', range: new WebInspector.TextRange(0, 0, 0, 0), sho
rthandEntries: [], cssProperties: []} |
| 128 range: new WebInspector.TextRange(0, 0, 0, 0), | |
| 129 shorthandEntries: [], | |
| 130 cssProperties: [] | |
| 131 } | |
| 132 }; | 123 }; |
| 133 return new WebInspector.CSSStyleRule(cssModel, /** @type {!CSSAgent.CSSRule}
*/(dummyPayload)); | 124 return new WebInspector.CSSStyleRule(cssModel, /** @type {!CSSAgent.CSSRule}
*/ (dummyPayload)); |
| 134 }; | 125 } |
| 135 | 126 |
| 136 WebInspector.CSSStyleRule.prototype = { | 127 /** |
| 137 /** | 128 * @param {!CSSAgent.SelectorList} selectorList |
| 138 * @param {!CSSAgent.SelectorList} selectorList | 129 */ |
| 139 */ | 130 _reinitializeSelectors(selectorList) { |
| 140 _reinitializeSelectors: function(selectorList) | 131 /** @type {!Array.<!WebInspector.CSSValue>} */ |
| 141 { | 132 this.selectors = []; |
| 142 /** @type {!Array.<!WebInspector.CSSValue>} */ | 133 for (var i = 0; i < selectorList.selectors.length; ++i) |
| 143 this.selectors = []; | 134 this.selectors.push(new WebInspector.CSSValue(selectorList.selectors[i])); |
| 144 for (var i = 0; i < selectorList.selectors.length; ++i) | 135 } |
| 145 this.selectors.push(new WebInspector.CSSValue(selectorList.selectors
[i])); | 136 |
| 146 }, | 137 /** |
| 147 | 138 * @param {string} newSelector |
| 148 /** | 139 * @return {!Promise.<boolean>} |
| 149 * @param {string} newSelector | 140 */ |
| 150 * @return {!Promise.<boolean>} | 141 setSelectorText(newSelector) { |
| 151 */ | 142 var styleSheetId = this.styleSheetId; |
| 152 setSelectorText: function(newSelector) | 143 if (!styleSheetId) |
| 153 { | 144 throw 'No rule stylesheet id'; |
| 154 var styleSheetId = this.styleSheetId; | 145 var range = this.selectorRange(); |
| 155 if (!styleSheetId) | 146 if (!range) |
| 156 throw "No rule stylesheet id"; | 147 throw 'Rule selector is not editable'; |
| 157 var range = this.selectorRange(); | 148 return this._cssModel.setSelectorText(styleSheetId, range, newSelector); |
| 158 if (!range) | 149 } |
| 159 throw "Rule selector is not editable"; | 150 |
| 160 return this._cssModel.setSelectorText(styleSheetId, range, newSelector); | 151 /** |
| 161 }, | 152 * @return {string} |
| 162 | 153 */ |
| 163 /** | 154 selectorText() { |
| 164 * @return {string} | 155 return this.selectors.select('text').join(', '); |
| 165 */ | 156 } |
| 166 selectorText: function() | 157 |
| 167 { | 158 /** |
| 168 return this.selectors.select("text").join(", "); | 159 * @return {?WebInspector.TextRange} |
| 169 }, | 160 */ |
| 170 | 161 selectorRange() { |
| 171 /** | 162 var firstRange = this.selectors[0].range; |
| 172 * @return {?WebInspector.TextRange} | 163 if (!firstRange) |
| 173 */ | 164 return null; |
| 174 selectorRange: function() | 165 var lastRange = this.selectors.peekLast().range; |
| 175 { | 166 return new WebInspector.TextRange( |
| 176 var firstRange = this.selectors[0].range; | 167 firstRange.startLine, firstRange.startColumn, lastRange.endLine, lastRan
ge.endColumn); |
| 177 if (!firstRange) | 168 } |
| 178 return null; | 169 |
| 179 var lastRange = this.selectors.peekLast().range; | 170 /** |
| 180 return new WebInspector.TextRange(firstRange.startLine, firstRange.start
Column, lastRange.endLine, lastRange.endColumn); | 171 * @param {number} selectorIndex |
| 181 }, | 172 * @return {number} |
| 182 | 173 */ |
| 183 /** | 174 lineNumberInSource(selectorIndex) { |
| 184 * @param {number} selectorIndex | 175 var selector = this.selectors[selectorIndex]; |
| 185 * @return {number} | 176 if (!selector || !selector.range || !this.styleSheetId) |
| 186 */ | 177 return 0; |
| 187 lineNumberInSource: function(selectorIndex) | 178 var styleSheetHeader = this._cssModel.styleSheetHeaderForId(this.styleSheetI
d); |
| 188 { | 179 return styleSheetHeader.lineNumberInSource(selector.range.startLine); |
| 189 var selector = this.selectors[selectorIndex]; | 180 } |
| 190 if (!selector || !selector.range || !this.styleSheetId) | 181 |
| 191 return 0; | 182 /** |
| 192 var styleSheetHeader = this._cssModel.styleSheetHeaderForId(this.styleSh
eetId); | 183 * @param {number} selectorIndex |
| 193 return styleSheetHeader.lineNumberInSource(selector.range.startLine); | 184 * @return {number|undefined} |
| 194 }, | 185 */ |
| 195 | 186 columnNumberInSource(selectorIndex) { |
| 196 /** | 187 var selector = this.selectors[selectorIndex]; |
| 197 * @param {number} selectorIndex | 188 if (!selector || !selector.range || !this.styleSheetId) |
| 198 * @return {number|undefined} | 189 return undefined; |
| 199 */ | 190 var styleSheetHeader = this._cssModel.styleSheetHeaderForId(this.styleSheetI
d); |
| 200 columnNumberInSource: function(selectorIndex) | 191 console.assert(styleSheetHeader); |
| 201 { | 192 return styleSheetHeader.columnNumberInSource(selector.range.startLine, selec
tor.range.startColumn); |
| 202 var selector = this.selectors[selectorIndex]; | 193 } |
| 203 if (!selector || !selector.range || !this.styleSheetId) | 194 |
| 204 return undefined; | 195 /** |
| 205 var styleSheetHeader = this._cssModel.styleSheetHeaderForId(this.styleSh
eetId); | 196 * @override |
| 206 console.assert(styleSheetHeader); | 197 * @param {!WebInspector.CSSModel.Edit} edit |
| 207 return styleSheetHeader.columnNumberInSource(selector.range.startLine, s
elector.range.startColumn); | 198 */ |
| 208 }, | 199 rebase(edit) { |
| 209 | 200 if (this.styleSheetId !== edit.styleSheetId) |
| 210 /** | 201 return; |
| 211 * @override | 202 if (this.selectorRange().equal(edit.oldRange)) { |
| 212 * @param {!WebInspector.CSSModel.Edit} edit | 203 this._reinitializeSelectors(/** @type {!CSSAgent.SelectorList} */ (edit.pa
yload)); |
| 213 */ | 204 } else { |
| 214 rebase: function(edit) | 205 for (var i = 0; i < this.selectors.length; ++i) |
| 215 { | 206 this.selectors[i].rebase(edit); |
| 216 if (this.styleSheetId !== edit.styleSheetId) | 207 } |
| 217 return; | 208 for (var media of this.media) |
| 218 if (this.selectorRange().equal(edit.oldRange)) { | 209 media.rebase(edit); |
| 219 this._reinitializeSelectors(/** @type {!CSSAgent.SelectorList} */(ed
it.payload)); | 210 |
| 220 } else { | 211 super.rebase(edit); |
| 221 for (var i = 0; i < this.selectors.length; ++i) | 212 } |
| 222 this.selectors[i].rebase(edit); | 213 }; |
| 223 } | 214 |
| 224 for (var media of this.media) | 215 |
| 225 media.rebase(edit); | 216 /** |
| 226 | 217 * @unrestricted |
| 227 WebInspector.CSSRule.prototype.rebase.call(this, edit); | 218 */ |
| 228 }, | 219 WebInspector.CSSKeyframesRule = class { |
| 229 | 220 /** |
| 230 __proto__: WebInspector.CSSRule.prototype | 221 * @param {!WebInspector.CSSModel} cssModel |
| 231 }; | 222 * @param {!CSSAgent.CSSKeyframesRule} payload |
| 232 | 223 */ |
| 233 /** | 224 constructor(cssModel, payload) { |
| 234 * @constructor | |
| 235 * @param {!WebInspector.CSSModel} cssModel | |
| 236 * @param {!CSSAgent.CSSKeyframesRule} payload | |
| 237 */ | |
| 238 WebInspector.CSSKeyframesRule = function(cssModel, payload) | |
| 239 { | |
| 240 this._cssModel = cssModel; | 225 this._cssModel = cssModel; |
| 241 this._animationName = new WebInspector.CSSValue(payload.animationName); | 226 this._animationName = new WebInspector.CSSValue(payload.animationName); |
| 242 this._keyframes = payload.keyframes.map(keyframeRule => new WebInspector.CSS
KeyframeRule(cssModel, keyframeRule)); | 227 this._keyframes = payload.keyframes.map(keyframeRule => new WebInspector.CSS
KeyframeRule(cssModel, keyframeRule)); |
| 243 }; | 228 } |
| 244 | 229 |
| 245 WebInspector.CSSKeyframesRule.prototype = { | 230 /** |
| 246 /** | 231 * @return {!WebInspector.CSSValue} |
| 247 * @return {!WebInspector.CSSValue} | 232 */ |
| 248 */ | 233 name() { |
| 249 name: function() | 234 return this._animationName; |
| 250 { | 235 } |
| 251 return this._animationName; | 236 |
| 252 }, | 237 /** |
| 253 | 238 * @return {!Array.<!WebInspector.CSSKeyframeRule>} |
| 254 /** | 239 */ |
| 255 * @return {!Array.<!WebInspector.CSSKeyframeRule>} | 240 keyframes() { |
| 256 */ | 241 return this._keyframes; |
| 257 keyframes: function() | 242 } |
| 258 { | 243 }; |
| 259 return this._keyframes; | 244 |
| 260 } | 245 /** |
| 261 }; | 246 * @unrestricted |
| 262 | 247 */ |
| 263 /** | 248 WebInspector.CSSKeyframeRule = class extends WebInspector.CSSRule { |
| 264 * @constructor | 249 /** |
| 265 * @extends {WebInspector.CSSRule} | 250 * @param {!WebInspector.CSSModel} cssModel |
| 266 * @param {!WebInspector.CSSModel} cssModel | 251 * @param {!CSSAgent.CSSKeyframeRule} payload |
| 267 * @param {!CSSAgent.CSSKeyframeRule} payload | 252 */ |
| 268 */ | 253 constructor(cssModel, payload) { |
| 269 WebInspector.CSSKeyframeRule = function(cssModel, payload) | 254 super(cssModel, payload); |
| 270 { | |
| 271 WebInspector.CSSRule.call(this, cssModel, payload); | |
| 272 this._reinitializeKey(payload.keyText); | 255 this._reinitializeKey(payload.keyText); |
| 273 }; | 256 } |
| 274 | 257 |
| 275 WebInspector.CSSKeyframeRule.prototype = { | 258 /** |
| 276 /** | 259 * @return {!WebInspector.CSSValue} |
| 277 * @return {!WebInspector.CSSValue} | 260 */ |
| 278 */ | 261 key() { |
| 279 key: function() | 262 return this._keyText; |
| 280 { | 263 } |
| 281 return this._keyText; | 264 |
| 282 }, | 265 /** |
| 283 | 266 * @param {!CSSAgent.Value} payload |
| 284 /** | 267 */ |
| 285 * @param {!CSSAgent.Value} payload | 268 _reinitializeKey(payload) { |
| 286 */ | 269 this._keyText = new WebInspector.CSSValue(payload); |
| 287 _reinitializeKey: function(payload) | 270 } |
| 288 { | 271 |
| 289 this._keyText = new WebInspector.CSSValue(payload); | 272 /** |
| 290 }, | 273 * @override |
| 291 | 274 * @param {!WebInspector.CSSModel.Edit} edit |
| 292 /** | 275 */ |
| 293 * @override | 276 rebase(edit) { |
| 294 * @param {!WebInspector.CSSModel.Edit} edit | 277 if (this.styleSheetId !== edit.styleSheetId || !this._keyText.range) |
| 295 */ | 278 return; |
| 296 rebase: function(edit) | 279 if (edit.oldRange.equal(this._keyText.range)) |
| 297 { | 280 this._reinitializeKey(/** @type {!CSSAgent.Value} */ (edit.payload)); |
| 298 if (this.styleSheetId !== edit.styleSheetId || !this._keyText.range) | 281 else |
| 299 return; | 282 this._keyText.rebase(edit); |
| 300 if (edit.oldRange.equal(this._keyText.range)) | 283 |
| 301 this._reinitializeKey(/** @type {!CSSAgent.Value} */(edit.payload)); | 284 super.rebase(edit); |
| 302 else | 285 } |
| 303 this._keyText.rebase(edit); | 286 |
| 304 | 287 /** |
| 305 WebInspector.CSSRule.prototype.rebase.call(this, edit); | 288 * @param {string} newKeyText |
| 306 }, | 289 * @return {!Promise.<boolean>} |
| 307 | 290 */ |
| 308 /** | 291 setKeyText(newKeyText) { |
| 309 * @param {string} newKeyText | 292 var styleSheetId = this.styleSheetId; |
| 310 * @return {!Promise.<boolean>} | 293 if (!styleSheetId) |
| 311 */ | 294 throw 'No rule stylesheet id'; |
| 312 setKeyText: function(newKeyText) | 295 var range = this._keyText.range; |
| 313 { | 296 if (!range) |
| 314 var styleSheetId = this.styleSheetId; | 297 throw 'Keyframe key is not editable'; |
| 315 if (!styleSheetId) | 298 return this._cssModel.setKeyframeKey(styleSheetId, range, newKeyText); |
| 316 throw "No rule stylesheet id"; | 299 } |
| 317 var range = this._keyText.range; | 300 }; |
| 318 if (!range) | |
| 319 throw "Keyframe key is not editable"; | |
| 320 return this._cssModel.setKeyframeKey(styleSheetId, range, newKeyText); | |
| 321 }, | |
| 322 | |
| 323 __proto__: WebInspector.CSSRule.prototype | |
| 324 }; | |
| OLD | NEW |