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

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

Issue 2230183004: DevTools: Add shadow-editor swatch/icon before box-shadows and text-shadows (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use smallIcons and shadow model 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
(Empty)
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
3 // found in the LICENSE file.
4
5 /**
6 * @constructor
7 */
8 WebInspector.ShadowEditor = function() {}
9
10 /**
11 * @constructor
12 */
13 WebInspector.ShadowEditor.Shadow = function(type)
lushnikov 2016/08/16 22:53:20 Let's make this a real css shadow model: WebInspe
flandy 2016/08/18 22:00:41 Done. I've opted to use more options for the forma
14 {
15 this.type = type;
16 this.order = [];
17 }
18
19 /**
20 * @enum {string}
21 */
22 WebInspector.ShadowEditor.Shadow.Parts = {
23 Inset: "inset",
24 Length: "length",
25 Color: "color"
26 };
27
28 /**
29 * @param {string} text
30 * @param {string} type
31 * @return {?Array<!WebInspector.ShadowEditor.Shadow>}
32 */
33 WebInspector.ShadowEditor.Shadow.parse = function(text, type)
lushnikov 2016/08/16 22:53:20 WI.CSSShadowModel.parseBoxShadow = function(text)
flandy 2016/08/18 22:00:41 Done.
34 {
35 var shadowTexts = [];
36 // 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]);
38 var currentIndex = 0;
39 for (var i = 0; i < splits.length; i++) {
40 if (splits[i].regexIndex === 1) {
41 var comma = splits[i];
42 shadowTexts.push(text.substring(currentIndex, comma.position));
43 currentIndex = comma.position + 1;
44 }
45 }
46 shadowTexts.push(text.substring(currentIndex, text.length));
47
48 var shadows = [];
49 for (var i = 0; i < shadowTexts.length; i++) {
50 var shadow = new WebInspector.ShadowEditor.Shadow(type);
51 var regexes = [/inset/g, WebInspector.Color.Regex, WebInspector.ShadowEd itor.Length.Regex];
52 var results = WebInspector.TextUtils.splitStringByRegexes(shadowTexts[i] , regexes);
53 for (var j = 0; j < results.length; j++) {
54 var result = results[j];
55 if (result.regexIndex === 0) {
56 shadow.setInset(result.value);
57 } else if (result.regexIndex === 1) {
58 var color = WebInspector.Color.parse(result.value);
59 if (!color)
60 return null;
61 shadow.setColor(color);
62 } else if (result.regexIndex === 2) {
63 var length = WebInspector.ShadowEditor.Length.parse(result.value );
64 if (!length)
65 return null;
66 shadow.addLength(length);
67 }
68 }
69 shadows.push(shadow);
70 }
71 return shadows;
72 }
73
74 WebInspector.ShadowEditor.Shadow.prototype = {
75 /**
76 * @param {string} inset
77 */
78 setInset: function(inset)
79 {
80 if (!this.inset)
81 this.order.push(WebInspector.ShadowEditor.Shadow.Parts.Inset);
82 this.inset = inset;
83 },
84
85 /**
86 * @param {!WebInspector.Color} color
87 */
88 setColor: function(color)
89 {
90 if (!this.color)
91 this.order.push(WebInspector.ShadowEditor.Shadow.Parts.Color);
92 this.color = color;
93 },
94
95 /**
96 * @param {!WebInspector.ShadowEditor.Length} length
97 */
98 addLength: function(length)
lushnikov 2016/08/16 22:53:20 this method should not belong to model; it's a par
flandy 2016/08/18 22:00:41 Done.
99 {
100 if (!this.xOffset) {
101 this.order.push(WebInspector.ShadowEditor.Shadow.Parts.Length);
102 this.xOffset = length;
103 } else if (!this.yOffset) {
104 this.yOffset = length;
105 } else if (!this.blur) {
106 this.blur = length;
107 } else if (!this.spread) {
108 this.spread = length;
109 }
110 },
111
112 /**
113 * @return {!Array<!WebInspector.ShadowEditor.Length>}
114 */
115 lengths: function()
116 {
117 var lengthValues = [];
118 if (this.xOffset)
119 lengthValues.push(this.xOffset);
120 if (this.yOffset)
121 lengthValues.push(this.yOffset);
122 if (this.blur)
123 lengthValues.push(this.blur);
124 if (this.spread)
125 lengthValues.push(this.spread);
126 return lengthValues;
127 },
128
129 /**
130 * @return {!Array<{type: string, text: string}>}
131 */
132 textParts: function()
133 {
134 var parts = [];
135 for (var i = 0; i < this.order.length; i++) {
136 var currentPart = this.order[i];
137 var textValue;
138 if (currentPart === WebInspector.ShadowEditor.Shadow.Parts.Inset)
139 textValue = this.inset;
140 else if (currentPart === WebInspector.ShadowEditor.Shadow.Parts.Leng th)
141 textValue = this.lengths().join(" ");
142 else if (currentPart === WebInspector.ShadowEditor.Shadow.Parts.Colo r)
143 textValue = this.color.asString(this.color.format());
144 parts.push({
145 type: currentPart,
146 text: textValue
147 });
148 }
149 return parts;
150 }
151 }
152
153
154 /**
155 * @constructor
156 * @param {number} amount
157 * @param {string} unit
158 */
159 WebInspector.ShadowEditor.Length = function(amount, unit)
lushnikov 2016/08/16 22:53:20 WI.CSSLength = function(...)
flandy 2016/08/18 22:00:41 Done.
160 {
161 this.amount = amount;
162 this.unit = unit;
163 }
164
165 /** @type {!RegExp} */
166 WebInspector.ShadowEditor.Length.Regex = /([0-9]+)([a-zA-Z]{2,4})|0/g;
lushnikov 2016/08/16 22:53:20 could it be negative/fractional?
flandy 2016/08/18 22:00:41 Yes, and also scientific notation. Fixed.
167
168 /** @type {!Set<string>} */
169 WebInspector.ShadowEditor.Length._units = new Set([
lushnikov 2016/08/16 22:53:20 WI.CSSLengthUnit = { Ch: "ch", Ex: "ex",
flandy 2016/08/18 22:00:41 Done.
170 "ch", "cm", "em", "ex", "in", "mm", "pc", "pt", "px", "rem", "vh", "vmax", " vmin", "vw"
171 ]);
172
173 /**
174 * @param {string} text
175 * @return {?WebInspector.ShadowEditor.Length}
176 */
177 WebInspector.ShadowEditor.Length.parse = function(text)
178 {
179 var lengthRegex = new RegExp("^(" + WebInspector.ShadowEditor.Length.Regex.s ource + ")$");
180 var match = text.match(lengthRegex) || [];
181 if (match.length > 3 && match[3]) {
182 if (WebInspector.ShadowEditor.Length._units.has(match[3].toLowerCase()))
183 return new WebInspector.ShadowEditor.Length(parseFloat(match[2]), ma tch[3]);
184 } else if (match.length > 1) {
185 return new WebInspector.ShadowEditor.Length(0, "");
186 }
187 return null;
188 }
189
190 WebInspector.ShadowEditor.Length.prototype = {
191 /**
192 * @override
193 * @return {string}
194 */
195 toString: function()
lushnikov 2016/08/16 22:53:20 let's do toCSSText()
flandy 2016/08/18 22:00:41 Renamed to asCSSText() to keep consistent with WI.
196 {
197 return this.amount + this.unit;
198 }
199 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698