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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/ui/ShadowEditor.js

Issue 2252913002: DevTools: Box-shadow editor initial implementation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@shadowIcon
Patch Set: Created 4 years, 4 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 {!WebInspector.ShadowEditor.Shadow} shadow
8 * @extends {WebInspector.VBox}
7 */ 9 */
8 WebInspector.ShadowEditor = function() {} 10 WebInspector.ShadowEditor = function(shadow)
11 {
12 WebInspector.VBox.call(this, true);
13 this._shadow = shadow;
lushnikov 2016/08/17 17:07:21 this._model = ..
flandy 2016/08/24 18:10:07 Done.
14 this._type = shadow.type();
15 this.registerRequiredCSS("ui/shadowEditor.css");
lushnikov 2016/08/17 17:07:21 this should go as the first line after super-call
flandy 2016/08/24 18:10:07 Done.
16
17 var field, label, slider;
18 if (this._type === "box-shadow") {
19 field = this.contentElement.createChild("div", "shadow-editor-field");
20 label = field.createChild("label");
21 label.textContent = WebInspector.UIString("Type");
22 this._outsetButton = field.createChild("div", "shadow-editor-button left ");
23 this._outsetButton.textContent = WebInspector.UIString("Outset");
24 this._outsetButton.addEventListener("click", this._onInsetOutsetClicked. bind(this), true);
25 this._insetButton = field.createChild("div", "shadow-editor-button right ");
26 this._insetButton.textContent = WebInspector.UIString("Inset");
27 this._insetButton.addEventListener("click", this._onInsetOutsetClicked.b ind(this), true);
28 }
29
30 field = this.contentElement.createChild("div", "shadow-editor-field");
lushnikov 2016/08/17 17:07:21 these look strikingly similar. Maybe it's possible
flandy 2016/08/24 18:10:07 Done.
31 label = field.createChild("label");
32 label.textContent = WebInspector.UIString("X offset");
33 label.for = "shadow-editor-x";
34 this._xInput = field.createChild("input");
35 this._xInput.type = "text";
36 this._xInput.id = "shadow-editor-x";
37 this._xInput.addEventListener("input", this._onTextInput.bind(this), true);
38 slider = field.createChild("div", "shadow-editor-slider");
39 this._xSliderTrack = slider.createChild("div", "shadow-editor-slider-track") ;
40 this._xSliderThumb = this._xSliderTrack.createChild("div", "shadow-editor-sl ider-thumb");
41 WebInspector.installDragHandle(slider, this._dragStart.bind(this), this._dra gX.bind(this), this._dragX.bind(this), "default");
lushnikov 2016/08/17 17:07:21 can you please attach a screenshot - it's hard to
flandy 2016/08/24 18:10:07 Done.
42
43 field = this.contentElement.createChild("div", "shadow-editor-field");
44 label = field.createChild("label");
45 label.textContent = WebInspector.UIString("Y offset");
46 label.for = "shadow-editor-y";
47 this._yInput = field.createChild("input");
48 this._yInput.type = "text";
49 this._yInput.id = "shadow-editor-y";
50 this._yInput.addEventListener("input", this._onTextInput.bind(this), true);
51 slider = field.createChild("div", "shadow-editor-slider");
52 this._ySliderTrack = slider.createChild("div", "shadow-editor-slider-track") ;
53 this._ySliderThumb = this._ySliderTrack.createChild("div", "shadow-editor-sl ider-thumb");
54 WebInspector.installDragHandle(slider, this._dragStart.bind(this), this._dra gY.bind(this), this._dragY.bind(this), "default");
lushnikov 2016/08/17 17:07:21 Why not listen to default slider changed events?
flandy 2016/08/24 18:10:07 Done.
55
56 field = this.contentElement.createChild("div", "shadow-editor-field");
57 label = field.createChild("label");
58 label.textContent = WebInspector.UIString("Blur");
59 label.for = "shadow-editor-blur";
60 this._blurInput = field.createChild("input");
61 this._blurInput.type = "text";
62 this._blurInput.id = "shadow-editor-blur";
63 this._blurInput.addEventListener("input", this._onTextInput.bind(this), true );
64 slider = field.createChild("div", "shadow-editor-slider");
65 this._blurSliderTrack = slider.createChild("div", "shadow-editor-slider-trac k");
66 this._blurSliderThumb = this._blurSliderTrack.createChild("div", "shadow-edi tor-slider-thumb");
67 WebInspector.installDragHandle(slider, this._dragStart.bind(this), this._dra gBlur.bind(this), this._dragBlur.bind(this), "default");
68
69 if (this._type === "box-shadow") {
70 field = this.contentElement.createChild("div", "shadow-editor-field");
71 label = field.createChild("label");
72 label.textContent = WebInspector.UIString("Spread");
73 label.for = "shadow-editor-spread";
74 this._spreadInput = field.createChild("input");
75 this._spreadInput.type = "text";
76 this._spreadInput.id = "shadow-editor-spread";
77 this._spreadInput.addEventListener("input", this._onTextInput.bind(this) , true);
78 slider = field.createChild("div", "shadow-editor-slider");
79 this._spreadSliderTrack = slider.createChild("div", "shadow-editor-slide r-track");
80 this._spreadSliderThumb = this._spreadSliderTrack.createChild("div", "sh adow-editor-slider-thumb");
81 WebInspector.installDragHandle(slider, this._dragStart.bind(this), this. _dragSpread.bind(this), this._dragSpread.bind(this), "default");
82 }
83 }
84
85 WebInspector.ShadowEditor.Events = {
86 ShadowChanged: "ShadowChanged"
87 }
88
89 /** @type {number} */
90 WebInspector.ShadowEditor.maxSliderValue = 25;
91
92 WebInspector.ShadowEditor.prototype = {
93 /**
94 * @override
95 */
96 wasShown: function()
97 {
98 this._sliderTrackWidth = this._blurSliderTrack.offsetWidth;
dgozman 2016/08/17 17:42:09 Should we use measureElement instead?
flandy 2016/08/24 18:10:06 Removed.
99 this._halfSliderThumbWidth = this._blurSliderThumb.offsetWidth / 2;
100 this._updateUI();
101 },
102
103 _updateUI: function()
104 {
105 this._updateTextInputs();
106 this._updateSliders();
107 if (this._type === "box-shadow") {
108 this._insetButton.classList.toggle("enabled", this._shadow.inset());
109 this._outsetButton.classList.toggle("enabled", !this._shadow.inset() );
110 }
111 },
112
113 _updateTextInputs: function()
114 {
115 this._xInput.value = this._shadow.xOffset().toString();
116 this._yInput.value = this._shadow.yOffset().toString();
117 this._blurInput.value = this._shadow.blur().toString();
118 if (this._type === "box-shadow")
dgozman 2016/08/17 17:42:09 We should either make "box-shadow" a named constan
flandy 2016/08/24 18:10:07 Let's hide fields that are not needed.
119 this._spreadInput.value = this._shadow.spread().toString();
120 },
121
122 _updateSliders: function()
123 {
124 updateSlider.call(this, this._xSliderThumb, this._shadow.xOffset().amoun t, true);
125 updateSlider.call(this, this._ySliderThumb, this._shadow.yOffset().amoun t, true);
126 updateSlider.call(this, this._blurSliderThumb, this._shadow.blur().amoun t, false);
127 if (this._type === "box-shadow")
128 updateSlider.call(this, this._spreadSliderThumb, this._shadow.sprea d().amount, false);
129
130 /**
131 * @param {!Element} thumb
132 * @param {number} amount
133 * @param {boolean} negativeAllowed
134 * @this {WebInspector.ShadowEditor}
135 */
136 function updateSlider(thumb, amount, negativeAllowed)
137 {
138 amount = Number.constrain(amount, WebInspector.ShadowEditor.maxSlide rValue * -1, WebInspector.ShadowEditor.maxSliderValue);
139 var percent = amount / WebInspector.ShadowEditor.maxSliderValue;
140 if (negativeAllowed) {
141 if (amount < 0)
142 percent = (amount + WebInspector.ShadowEditor.maxSliderValue ) / WebInspector.ShadowEditor.maxSliderValue / 2;
143 else
144 percent = amount / WebInspector.ShadowEditor.maxSliderValue / 2 + 0.5;
145 }
146 thumb.style.left = (Number.constrain(percent, 0, 1) * this._sliderTr ackWidth - this._halfSliderThumbWidth) + "px";
147 }
148 },
149
150 /**
151 * @param {!MouseEvent} event
152 * @return {boolean}
153 */
154 _dragStart: function(event)
155 {
156 this._sliderTrackLeft = this._blurSliderTrack.totalOffsetLeft();
157 return true;
158 },
159
160 /**
161 * @param {!MouseEvent} event
162 */
163 _dragX: function(event)
164 {
165 this._shadow.setXAmount(this._amountFromSlider(event, true));
166 this._onSliderChange();
167 },
168
169 /**
170 * @param {!MouseEvent} event
171 */
172 _dragY: function(event)
173 {
174 this._shadow.setYAmount(this._amountFromSlider(event, true));
175 this._onSliderChange();
176 },
177
178 /**
179 * @param {!MouseEvent} event
180 */
181 _dragBlur: function(event)
182 {
183 this._shadow.setBlurAmount(this._amountFromSlider(event, false));
184 this._onSliderChange();
185 },
186
187 /**
188 * @param {!MouseEvent} event
189 */
190 _dragSpread: function(event)
dgozman 2016/08/17 17:42:09 I'm curious why default slider handling doesn't wo
flandy 2016/08/24 18:10:07 Changed to use a default range input with custom s
191 {
192 this._shadow.setSpreadAmount(this._amountFromSlider(event, false));
193 this._onSliderChange();
194 },
195
196 /**
197 * @param {!MouseEvent} event
198 * @param {boolean} negativeAllowed
199 * @return {number}
200 */
201 _amountFromSlider: function(event, negativeAllowed)
202 {
203 var offsetX = event.x - this._sliderTrackLeft;
204 var percent = Number.constrain(offsetX / this._sliderTrackWidth, 0, 1);
205 if (!negativeAllowed)
206 return Math.round(percent * WebInspector.ShadowEditor.maxSliderValue );
207
208 var amount;
209 if (percent < 0.5) {
210 percent = percent * 2;
211 amount = percent * WebInspector.ShadowEditor.maxSliderValue - WebIns pector.ShadowEditor.maxSliderValue;
212 } else {
213 percent = (percent - 0.5) * 2;
214 amount = percent * WebInspector.ShadowEditor.maxSliderValue
215 }
216 return Math.round(amount);
217 },
218
219 _onSliderChange: function()
220 {
221 this._updateSliders();
222 this._updateTextInputs();
223 this.dispatchEventToListeners(WebInspector.ShadowEditor.Events.ShadowCha nged, this._shadow);
224 },
225
226 _onInsetOutsetClicked: function()
227 {
228 this._insetButton.classList.toggle("enabled");
229 this._outsetButton.classList.toggle("enabled");
230 this._shadow.setInset(this._insetButton.classList.contains("enabled"));
231 this.dispatchEventToListeners(WebInspector.ShadowEditor.Events.ShadowCha nged, this._shadow);
232 },
233
234 /**
235 * @param {!Event} event
236 */
237 _onTextInput: function(event)
238 {
239 if (WebInspector.ShadowEditor.Length.parse(event.currentTarget.value)) {
240 this._shadow.setXOffset(this._xInput.value);
241 this._shadow.setYOffset(this._yInput.value);
242 this._shadow.setBlur(this._blurInput.value);
243 if (this._type === "box-shadow")
244 this._shadow.setSpread(this._spreadInput.value);
245 this._updateSliders();
246 this.dispatchEventToListeners(WebInspector.ShadowEditor.Events.Shado wChanged, this._shadow);
247 }
248 },
249
250 __proto__: WebInspector.VBox.prototype
251 }
9 252
10 /** 253 /**
11 * @constructor 254 * @constructor
12 */ 255 */
13 WebInspector.ShadowEditor.Shadow = function(type) 256 WebInspector.ShadowEditor.Shadow = function(type)
14 { 257 {
15 this.type = type; 258 this._type = type;
16 this.order = []; 259 this._order = [];
17 } 260 }
18 261
19 /** 262 /**
20 * @enum {string} 263 * @enum {string}
21 */ 264 */
22 WebInspector.ShadowEditor.Shadow.Parts = { 265 WebInspector.ShadowEditor.Shadow.Parts = {
23 Inset: "inset", 266 Inset: "inset",
24 Length: "length", 267 Length: "length",
25 Color: "color" 268 Color: "color"
26 }; 269 };
27 270
28 /** 271 /**
29 * @param {string} text 272 * @param {string} text
30 * @param {string} type 273 * @param {string} type
31 * @return {?Array<!WebInspector.ShadowEditor.Shadow>} 274 * @return {!Array<!WebInspector.ShadowEditor.Shadow>}
32 */ 275 */
33 WebInspector.ShadowEditor.Shadow.parse = function(text, type) 276 WebInspector.ShadowEditor.Shadow.parse = function(text, type)
34 { 277 {
35 var shadowTexts = []; 278 var shadowTexts = [];
36 // Split by commas that aren't inside of color values to get the individual shadow values. 279 // Split by commas that aren't inside of color values to get the individual shadow values.
37 var splits = WebInspector.TextUtils.splitStringByRegexes(text, [WebInspector .Color.Regex, /,/g]); 280 var splits = WebInspector.TextUtils.splitStringByRegexes(text, [WebInspector .Color.Regex, /,/g]);
38 var currentIndex = 0; 281 var currentIndex = 0;
39 for (var i = 0; i < splits.length; i++) { 282 for (var i = 0; i < splits.length; i++) {
40 if (splits[i].regexIndex === 1) { 283 if (splits[i].regexIndex === 1) {
41 var comma = splits[i]; 284 var comma = splits[i];
42 shadowTexts.push(text.substring(currentIndex, comma.position)); 285 shadowTexts.push(text.substring(currentIndex, comma.position));
43 currentIndex = comma.position + 1; 286 currentIndex = comma.position + 1;
44 } 287 }
45 } 288 }
46 shadowTexts.push(text.substring(currentIndex, text.length)); 289 shadowTexts.push(text.substring(currentIndex, text.length));
47 290
48 var shadows = []; 291 var shadows = [];
49 for (var i = 0; i < shadowTexts.length; i++) { 292 for (var i = 0; i < shadowTexts.length; i++) {
50 var shadow = new WebInspector.ShadowEditor.Shadow(type); 293 var shadow = new WebInspector.ShadowEditor.Shadow(type);
294 var order = [];
51 var regexes = [/inset/g, WebInspector.Color.Regex, WebInspector.ShadowEd itor.Length.Regex]; 295 var regexes = [/inset/g, WebInspector.Color.Regex, WebInspector.ShadowEd itor.Length.Regex];
52 var results = WebInspector.TextUtils.splitStringByRegexes(shadowTexts[i] , regexes); 296 var results = WebInspector.TextUtils.splitStringByRegexes(shadowTexts[i] , regexes);
297 var numLengths = 0;
53 for (var j = 0; j < results.length; j++) { 298 for (var j = 0; j < results.length; j++) {
54 var result = results[j]; 299 var result = results[j];
55 if (result.regexIndex === 0) { 300 if (result.regexIndex === 0) {
56 shadow.setInset(result.value); 301 shadow.setInset(true);
302 order.push(WebInspector.ShadowEditor.Shadow.Parts.Inset);
57 } else if (result.regexIndex === 1) { 303 } else if (result.regexIndex === 1) {
58 var color = WebInspector.Color.parse(result.value); 304 shadow.setColor(result.value)
59 if (!color) 305 order.push(WebInspector.ShadowEditor.Shadow.Parts.Color);
60 return null;
61 shadow.setColor(color);
62 } else if (result.regexIndex === 2) { 306 } else if (result.regexIndex === 2) {
63 var length = WebInspector.ShadowEditor.Length.parse(result.value ); 307 switch (numLengths) {
64 if (!length) 308 case 0:
65 return null; 309 shadow.setXOffset(result.value);
66 shadow.addLength(length); 310 order.push(WebInspector.ShadowEditor.Shadow.Parts.Length);
311 break;
312 case 1:
313 shadow.setYOffset(result.value);
314 break;
315 case 2:
316 shadow.setBlur(result.value);
317 break;
318 case 3:
319 shadow.setSpread(result.value);
320 }
321 numLengths++;
67 } 322 }
68 } 323 }
324 // If inset is not specified, set inset to appear first in the css text by default.
325 if (!order.find(part => part === WebInspector.ShadowEditor.Shadow.Parts. Inset))
326 order.unshift(WebInspector.ShadowEditor.Shadow.Parts.Inset);
327 // If color is not specified, set color to appear last in the css text b y default.
328 if (!order.find(part => part === WebInspector.ShadowEditor.Shadow.Parts. Color))
329 order.push(WebInspector.ShadowEditor.Shadow.Parts.Color);
330 shadow.setOrder(order);
69 shadows.push(shadow); 331 shadows.push(shadow);
70 } 332 }
71 return shadows; 333 return shadows;
72 } 334 }
73 335
74 WebInspector.ShadowEditor.Shadow.prototype = { 336 WebInspector.ShadowEditor.Shadow.prototype = {
75 /** 337 /**
76 * @param {string} inset 338 * @param {!Array<string>} order
339 */
340 setOrder: function(order)
341 {
342 this._order = order;
343 },
344
345 /**
346 * @param {boolean} inset
77 */ 347 */
78 setInset: function(inset) 348 setInset: function(inset)
79 { 349 {
80 if (!this.inset) 350 this._inset = inset;
81 this.order.push(WebInspector.ShadowEditor.Shadow.Parts.Inset);
82 this.inset = inset;
83 }, 351 },
84 352
85 /** 353 /**
86 * @param {!WebInspector.Color} color 354 * @param {string} text
87 */ 355 */
88 setColor: function(color) 356 setColor: function(text)
89 { 357 {
90 if (!this.color) 358 var color = WebInspector.Color.parse(text);
91 this.order.push(WebInspector.ShadowEditor.Shadow.Parts.Color); 359 if (color)
92 this.color = color; 360 this._color = color;
93 }, 361 },
94 362
95 /** 363 /**
96 * @param {!WebInspector.ShadowEditor.Length} length 364 * @param {string} text
97 */ 365 */
98 addLength: function(length) 366 setXOffset: function(text)
99 { 367 {
100 if (!this.xOffset) { 368 var length = WebInspector.ShadowEditor.Length.parse(text);
101 this.order.push(WebInspector.ShadowEditor.Shadow.Parts.Length); 369 if (length)
102 this.xOffset = length; 370 this._xOffset = length;
103 } else if (!this.yOffset) { 371 },
104 this.yOffset = length; 372
105 } else if (!this.blur) { 373 /**
106 this.blur = length; 374 * @param {string} text
107 } else if (!this.spread) { 375 */
108 this.spread = length; 376 setYOffset: function(text)
377 {
378 var length = WebInspector.ShadowEditor.Length.parse(text);
379 if (length)
380 this._yOffset = length;
381 },
382
383 /**
384 * @param {string} text
385 */
386 setBlur: function(text)
387 {
388 var length = WebInspector.ShadowEditor.Length.parse(text);
389 if (length)
390 this._blur = length;
391 },
392
393 /**
394 * @param {string} text
395 */
396 setSpread: function(text)
397 {
398 var length = WebInspector.ShadowEditor.Length.parse(text);
399 if (length) {
400 if (!this._blur)
401 this._blur = new WebInspector.ShadowEditor.Length(0, "");
402 this._spread = length;
109 } 403 }
110 }, 404 },
111 405
112 /** 406 /**
407 * @param {number} amount
408 */
409 setXAmount: function(amount)
410 {
411 if (this._xOffset && this._xOffset.unit)
412 this._xOffset.amount = amount;
413 else
414 this._xOffset = new WebInspector.ShadowEditor.Length(amount, "px");
415 },
416
417 /**
418 * @param {number} amount
419 */
420 setYAmount: function(amount)
421 {
422 if (this._yOffset && this._yOffset.unit)
423 this._yOffset.amount = amount;
424 else
425 this._yOffset = new WebInspector.ShadowEditor.Length(amount, "px");
426 },
427
428
429 /**
430 * @param {number} amount
431 */
432 setBlurAmount: function(amount)
433 {
434 if (this._blur && this._blur.unit)
435 this._blur.amount = amount;
436 else
437 this._blur = new WebInspector.ShadowEditor.Length(amount, "px");
438 },
439
440 /**
441 * @param {number} amount
442 */
443 setSpreadAmount: function(amount)
444 {
445 if (!this._blur)
446 this._blur = new WebInspector.ShadowEditor.Length(0, "");
447 if (this._spread && this._spread.unit)
448 this._spread.amount = amount;
449 else
450 this._spread = new WebInspector.ShadowEditor.Length(amount, "px");
451 },
452
453 /**
454 * @return {string}
455 */
456 type: function()
457 {
458 return this._type;
459 },
460
461 /**
462 * @return {boolean}
463 */
464 inset: function()
465 {
466 return !!this._inset;
467 },
468
469 /**
470 * @return {!WebInspector.ShadowEditor.Length}
471 */
472 xOffset: function()
473 {
474 return this._xOffset ? this._xOffset : new WebInspector.ShadowEditor.Len gth(0, "");
475 },
476
477 /**
478 * @return {!WebInspector.ShadowEditor.Length}
479 */
480 yOffset: function()
481 {
482 return this._yOffset ? this._yOffset : new WebInspector.ShadowEditor.Len gth(0, "");
483 },
484
485 /**
486 * @return {!WebInspector.ShadowEditor.Length}
487 */
488 blur: function()
489 {
490 return this._blur ? this._blur : new WebInspector.ShadowEditor.Length(0, "");
491 },
492
493 /**
494 * @return {!WebInspector.ShadowEditor.Length}
495 */
496 spread: function()
497 {
498 return this._spread ? this._spread : new WebInspector.ShadowEditor.Lengt h(0, "");
499 },
500
501 /**
113 * @return {!Array<!WebInspector.ShadowEditor.Length>} 502 * @return {!Array<!WebInspector.ShadowEditor.Length>}
114 */ 503 */
115 lengths: function() 504 _lengths: function()
116 { 505 {
117 var lengthValues = []; 506 var lengthValues = [];
118 if (this.xOffset) 507 if (this._xOffset)
119 lengthValues.push(this.xOffset); 508 lengthValues.push(this._xOffset);
120 if (this.yOffset) 509 if (this._yOffset)
121 lengthValues.push(this.yOffset); 510 lengthValues.push(this._yOffset);
122 if (this.blur) 511 if (this._blur)
123 lengthValues.push(this.blur); 512 lengthValues.push(this._blur);
124 if (this.spread) 513 if (this._spread)
125 lengthValues.push(this.spread); 514 lengthValues.push(this._spread);
126 return lengthValues; 515 return lengthValues;
127 }, 516 },
128 517
129 /** 518 /**
130 * @return {!Array<{type: string, text: string}>} 519 * @return {!Array<{type: string, text: string}>}
131 */ 520 */
132 textParts: function() 521 textParts: function()
133 { 522 {
134 var parts = []; 523 var parts = [];
135 for (var i = 0; i < this.order.length; i++) { 524 for (var i = 0; i < this._order.length; i++) {
136 var currentPart = this.order[i]; 525 var currentPart = this._order[i];
137 var textValue; 526 var textValue = null;
138 if (currentPart === WebInspector.ShadowEditor.Shadow.Parts.Inset) 527 if (currentPart === WebInspector.ShadowEditor.Shadow.Parts.Inset && this._inset)
139 textValue = this.inset; 528 textValue = "inset";
140 else if (currentPart === WebInspector.ShadowEditor.Shadow.Parts.Leng th) 529 else if (currentPart === WebInspector.ShadowEditor.Shadow.Parts.Leng th)
141 textValue = this.lengths().join(" "); 530 textValue = this._lengths().join(" ");
142 else if (currentPart === WebInspector.ShadowEditor.Shadow.Parts.Colo r) 531 else if (currentPart === WebInspector.ShadowEditor.Shadow.Parts.Colo r && this._color)
143 textValue = this.color.asString(this.color.format()); 532 textValue = this._color.asString(this._color.format());
144 parts.push({ 533 if (textValue !== null) {
145 type: currentPart, 534 parts.push({
146 text: textValue 535 type: currentPart,
147 }); 536 text: textValue
537 });
538 }
148 } 539 }
149 return parts; 540 return parts;
150 } 541 }
151 } 542 }
152 543
153 544
154 /** 545 /**
155 * @constructor 546 * @constructor
156 * @param {number} amount 547 * @param {number} amount
157 * @param {string} unit 548 * @param {string} unit
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 WebInspector.ShadowEditor.Length.prototype = { 581 WebInspector.ShadowEditor.Length.prototype = {
191 /** 582 /**
192 * @override 583 * @override
193 * @return {string} 584 * @return {string}
194 */ 585 */
195 toString: function() 586 toString: function()
196 { 587 {
197 return this.amount + this.unit; 588 return this.amount + this.unit;
198 } 589 }
199 } 590 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698