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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/common/CSSShadowModel.js

Issue 2319763004: DevTools: (DO NOT COMMIT) Add shadow swatches to Sources, work in progress (Closed)
Patch Set: Created 4 years, 3 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
OLDNEW
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 /**
6 * @constructor 6 * @constructor
7 * @param {boolean} isBoxShadow 7 * @param {boolean} isBoxShadow
8 */ 8 */
9 WebInspector.CSSShadowModel = function(isBoxShadow) 9 WebInspector.CSSShadowModel = function(isBoxShadow)
10 { 10 {
11 this._isBoxShadow = isBoxShadow; 11 this._isBoxShadow = isBoxShadow;
12 this._inset = false; 12 this._inset = false;
13 this._offsetX = WebInspector.CSSLength.zero(); 13 this._offsetX = WebInspector.CSSLength.zero();
14 this._offsetY = WebInspector.CSSLength.zero(); 14 this._offsetY = WebInspector.CSSLength.zero();
15 this._blurRadius = WebInspector.CSSLength.zero(); 15 this._blurRadius = WebInspector.CSSLength.zero();
16 this._spreadRadius = WebInspector.CSSLength.zero(); 16 this._spreadRadius = WebInspector.CSSLength.zero();
17 this._color = /** @type {!WebInspector.Color} */ (WebInspector.Color.parse(" black")); 17 this._color = /** @type {!WebInspector.Color} */ (WebInspector.Color.parse(" black"));
18 this._format = [WebInspector.CSSShadowModel._Part.OffsetX, WebInspector.CSSS hadowModel._Part.OffsetY]; 18 this._format = [WebInspector.CSSShadowModel._Part.OffsetX, WebInspector.CSSS hadowModel._Part.OffsetY];
19 } 19 }
20 20
21 WebInspector.CSSShadowModel.PropertyRegex = /((?:-webkit-)?box|text)-shadow\s*?: .+?[;\n\r]/g;
22
21 /** 23 /**
22 * @enum {string} 24 * @enum {string}
23 */ 25 */
24 WebInspector.CSSShadowModel._Part = { 26 WebInspector.CSSShadowModel._Part = {
25 Inset: "I", 27 Inset: "I",
26 OffsetX: "X", 28 OffsetX: "X",
27 OffsetY: "Y", 29 OffsetY: "Y",
28 BlurRadius: "B", 30 BlurRadius: "B",
29 SpreadRadius: "S", 31 SpreadRadius: "S",
30 Color: "C" 32 Color: "C"
(...skipping 10 matching lines...) Expand all
41 43
42 /** 44 /**
43 * @param {string} text 45 * @param {string} text
44 * @return {!Array<!WebInspector.CSSShadowModel>} 46 * @return {!Array<!WebInspector.CSSShadowModel>}
45 */ 47 */
46 WebInspector.CSSShadowModel.parseBoxShadow = function(text) 48 WebInspector.CSSShadowModel.parseBoxShadow = function(text)
47 { 49 {
48 return WebInspector.CSSShadowModel._parseShadow(text, true); 50 return WebInspector.CSSShadowModel._parseShadow(text, true);
49 } 51 }
50 52
53 /**
54 * @param {string} text
55 * @return {!Array<{text: string, position: number}>}
56 */
57 WebInspector.CSSShadowModel.splitShadows = function(text)
58 {
59 // This function removes the whitespace around each shadow but not inside.
60 var shadowTexts = WebInspector.CSSShadowModel._splitShadowsByCommas(text);
61 var shadowPositions = [];
62 var index = 0;
63 for (var i = 0; i < shadowTexts.length; i++) {
64 var shadowText = shadowTexts[i];
65 var position = shadowText.search(/\S/);
66 if (position === -1)
67 return []
68 shadowPositions.push({
69 text: shadowText.trim(),
70 position: index + position
71 });
72 // +1 for the comma that was removed.
73 index = index + shadowText.length + 1;
74 }
75 return shadowPositions;
76 }
77
51 WebInspector.CSSShadowModel.prototype = { 78 WebInspector.CSSShadowModel.prototype = {
52 /** 79 /**
53 * @param {boolean} inset 80 * @param {boolean} inset
54 */ 81 */
55 setInset: function(inset) 82 setInset: function(inset)
56 { 83 {
57 this._inset = inset; 84 this._inset = inset;
58 if (this._format.indexOf(WebInspector.CSSShadowModel._Part.Inset) === -1 ) 85 if (this._format.indexOf(WebInspector.CSSShadowModel._Part.Inset) === -1 )
59 this._format.unshift(WebInspector.CSSShadowModel._Part.Inset); 86 this._format.unshift(WebInspector.CSSShadowModel._Part.Inset);
60 }, 87 },
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 } 218 }
192 } 219 }
193 220
194 /** 221 /**
195 * @param {string} text 222 * @param {string} text
196 * @param {boolean} isBoxShadow 223 * @param {boolean} isBoxShadow
197 * @return {!Array<!WebInspector.CSSShadowModel>} 224 * @return {!Array<!WebInspector.CSSShadowModel>}
198 */ 225 */
199 WebInspector.CSSShadowModel._parseShadow = function(text, isBoxShadow) 226 WebInspector.CSSShadowModel._parseShadow = function(text, isBoxShadow)
200 { 227 {
201 var shadowTexts = []; 228 var shadowTexts = WebInspector.CSSShadowModel._splitShadowsByCommas(text);
202 // Split by commas that aren't inside of color values to get the individual shadow values.
203 var splits = WebInspector.TextUtils.splitStringByRegexes(text, [WebInspector .Color.Regex, /,/g]);
204 var currentIndex = 0;
205 for (var i = 0; i < splits.length; i++) {
206 if (splits[i].regexIndex === 1) {
207 var comma = splits[i];
208 shadowTexts.push(text.substring(currentIndex, comma.position));
209 currentIndex = comma.position + 1;
210 }
211 }
212 shadowTexts.push(text.substring(currentIndex, text.length));
213
214 var shadows = []; 229 var shadows = [];
215 for (var i = 0; i < shadowTexts.length; i++) { 230 for (var i = 0; i < shadowTexts.length; i++) {
216 var shadow = new WebInspector.CSSShadowModel(isBoxShadow); 231 var shadow = new WebInspector.CSSShadowModel(isBoxShadow);
217 shadow._format = []; 232 shadow._format = [];
218 var nextPartAllowed = true; 233 var nextPartAllowed = true;
219 var regexes = [/inset/gi, WebInspector.Color.Regex, WebInspector.CSSLeng th.Regex]; 234 var regexes = [/inset/gi, WebInspector.Color.Regex, WebInspector.CSSLeng th.Regex];
220 var results = WebInspector.TextUtils.splitStringByRegexes(shadowTexts[i] , regexes); 235 var results = WebInspector.TextUtils.splitStringByRegexes(shadowTexts[i] , regexes);
221 for (var j = 0; j < results.length; j++) { 236 for (var j = 0; j < results.length; j++) {
222 var result = results[j]; 237 var result = results[j];
223 if (result.regexIndex === -1) { 238 if (result.regexIndex === -1) {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 var count = 0; 298 var count = 0;
284 for (var i = 0; i < shadow._format.length; i++) { 299 for (var i = 0; i < shadow._format.length; i++) {
285 if (shadow._format[i] === part) 300 if (shadow._format[i] === part)
286 count++; 301 count++;
287 } 302 }
288 return count < min || count > max; 303 return count < min || count > max;
289 } 304 }
290 } 305 }
291 306
292 /** 307 /**
308 * @param {string} text
309 * @return {!Array<string>}
310 */
311 WebInspector.CSSShadowModel._splitShadowsByCommas = function(text)
312 {
313 var shadowTexts = [];
314 // Split by commas that aren't inside of color values to get the individual shadow values.
315 var splits = WebInspector.TextUtils.splitStringByRegexes(text, [WebInspector .Color.Regex, /,/g]);
316 var currentIndex = 0;
317 for (var i = 0; i < splits.length; i++) {
318 if (splits[i].regexIndex === 1) {
319 var comma = splits[i];
320 shadowTexts.push(text.substring(currentIndex, comma.position));
321 currentIndex = comma.position + 1;
322 }
323 }
324 shadowTexts.push(text.substring(currentIndex, text.length));
325 return shadowTexts;
326 }
327
328 /**
293 * @constructor 329 * @constructor
294 * @param {number} amount 330 * @param {number} amount
295 * @param {string} unit 331 * @param {string} unit
296 */ 332 */
297 WebInspector.CSSLength = function(amount, unit) 333 WebInspector.CSSLength = function(amount, unit)
298 { 334 {
299 this.amount = amount; 335 this.amount = amount;
300 this.unit = unit; 336 this.unit = unit;
301 } 337 }
302 338
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 370
335 WebInspector.CSSLength.prototype = { 371 WebInspector.CSSLength.prototype = {
336 /** 372 /**
337 * @return {string} 373 * @return {string}
338 */ 374 */
339 asCSSText: function() 375 asCSSText: function()
340 { 376 {
341 return this.amount + this.unit; 377 return this.amount + this.unit;
342 } 378 }
343 } 379 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698