OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2011 Brian Grinstead All rights reserved. | 2 * Copyright (C) 2011 Brian Grinstead All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
95 this._hexValue.addEventListener("keydown", this._inputChanged.bind(this), fa lse); | 95 this._hexValue.addEventListener("keydown", this._inputChanged.bind(this), fa lse); |
96 this._hexValue.addEventListener("mousewheel", this._inputChanged.bind(this), false); | 96 this._hexValue.addEventListener("mousewheel", this._inputChanged.bind(this), false); |
97 | 97 |
98 var label = this._hexContainer.createChild("div", "spectrum-text-label"); | 98 var label = this._hexContainer.createChild("div", "spectrum-text-label"); |
99 label.textContent = "HEX"; | 99 label.textContent = "HEX"; |
100 | 100 |
101 WebInspector.installDragHandle(this._hueElement, dragStart.bind(this, positi onHue.bind(this)), positionHue.bind(this), null, "default"); | 101 WebInspector.installDragHandle(this._hueElement, dragStart.bind(this, positi onHue.bind(this)), positionHue.bind(this), null, "default"); |
102 WebInspector.installDragHandle(this._alphaElement, dragStart.bind(this, posi tionAlpha.bind(this)), positionAlpha.bind(this), null, "default"); | 102 WebInspector.installDragHandle(this._alphaElement, dragStart.bind(this, posi tionAlpha.bind(this)), positionAlpha.bind(this), null, "default"); |
103 WebInspector.installDragHandle(this._colorElement, dragStart.bind(this, posi tionColor.bind(this)), positionColor.bind(this), null, "default"); | 103 WebInspector.installDragHandle(this._colorElement, dragStart.bind(this, posi tionColor.bind(this)), positionColor.bind(this), null, "default"); |
104 | 104 |
105 if (Runtime.experiments.isEnabled("colorPalettes")) { | 105 this.element.classList.add("palettes-enabled"); |
106 this.element.classList.add("palettes-enabled"); | 106 /** @type {!Map.<string, !WebInspector.Spectrum.Palette>} */ |
107 /** @type {!Map.<string, !WebInspector.Spectrum.Palette>} */ | 107 this._palettes = new Map(); |
108 this._palettes = new Map(); | 108 this._palettePanel = this.contentElement.createChild("div", "palette-panel") ; |
109 this._palettePanel = this.contentElement.createChild("div", "palette-pan el"); | 109 this._palettePanelShowing = false; |
110 this._palettePanelShowing = false; | 110 this._paletteContainer = this.contentElement.createChild("div", "spectrum-pa lette"); |
111 this._paletteContainer = this.contentElement.createChild("div", "spectru m-palette"); | 111 this._paletteContainer.addEventListener("contextmenu", this._showPaletteColo rContextMenu.bind(this, -1)); |
112 var paletteSwitcher = this.contentElement.createChild("div", "spectrum-p alette-switcher spectrum-switcher"); | 112 WebInspector.installDragHandle(this._paletteContainer, this._paletteDragStar t.bind(this), this._paletteDrag.bind(this), this._paletteDragEnd.bind(this), "de fault"); |
113 appendSwitcherIcon(paletteSwitcher); | 113 var paletteSwitcher = this.contentElement.createChild("div", "spectrum-palet te-switcher spectrum-switcher"); |
114 paletteSwitcher.addEventListener("click", this._togglePalettePanel.bind( this, true)); | 114 appendSwitcherIcon(paletteSwitcher); |
115 var overlay = this.contentElement.createChild("div", "spectrum-overlay f ill"); | 115 paletteSwitcher.addEventListener("click", this._togglePalettePanel.bind(this , true)); |
116 overlay.addEventListener("click", this._togglePalettePanel.bind(this, fa lse)); | 116 var overlay = this.contentElement.createChild("div", "spectrum-overlay fill" ); |
117 overlay.addEventListener("click", this._togglePalettePanel.bind(this, false) ); | |
117 | 118 |
118 this._addColorToolbar = new WebInspector.Toolbar(); | 119 this._addColorToolbar = new WebInspector.Toolbar(); |
119 var addColorButton = new WebInspector.ToolbarButton(WebInspector.UIStrin g("Add to palette"), "add-toolbar-item"); | 120 var addColorButton = new WebInspector.ToolbarButton(WebInspector.UIString("A dd to palette"), "add-toolbar-item"); |
120 addColorButton.addEventListener("click", this._addColorToCustomPalette.b ind(this)); | 121 addColorButton.addEventListener("click", this._addColorToCustomPalette.bind( this)); |
121 this._addColorToolbar.appendToolbarItem(addColorButton); | 122 this._addColorToolbar.appendToolbarItem(addColorButton); |
122 | 123 |
123 new WebInspector.Spectrum.PaletteGenerator(this._generatedPaletteLoaded. bind(this)); | 124 new WebInspector.Spectrum.PaletteGenerator(this._generatedPaletteLoaded.bind (this)); |
124 } | |
125 | 125 |
126 /** | 126 /** |
127 * @param {function(!Event)} callback | 127 * @param {function(!Event)} callback |
128 * @param {!Event} event | 128 * @param {!Event} event |
129 * @return {boolean} | 129 * @return {boolean} |
130 * @this {WebInspector.Spectrum} | 130 * @this {WebInspector.Spectrum} |
131 */ | 131 */ |
132 function dragStart(callback, event) | 132 function dragStart(callback, event) |
133 { | 133 { |
134 this._hueAlphaLeft = this._hueElement.totalOffsetLeft(); | 134 this._hueAlphaLeft = this._hueElement.totalOffsetLeft(); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
233 * @param {!WebInspector.Spectrum.Palette} palette | 233 * @param {!WebInspector.Spectrum.Palette} palette |
234 * @param {boolean} animate | 234 * @param {boolean} animate |
235 * @param {!Event=} event | 235 * @param {!Event=} event |
236 */ | 236 */ |
237 _showPalette: function(palette, animate, event) | 237 _showPalette: function(palette, animate, event) |
238 { | 238 { |
239 this._paletteContainer.removeChildren(); | 239 this._paletteContainer.removeChildren(); |
240 for (var i = 0; i < palette.colors.length; i++) { | 240 for (var i = 0; i < palette.colors.length; i++) { |
241 var animationDelay = animate ? i * 100 / palette.colors.length : 0; | 241 var animationDelay = animate ? i * 100 / palette.colors.length : 0; |
242 var colorElement = this._createPaletteColor(palette.colors[i], anima tionDelay); | 242 var colorElement = this._createPaletteColor(palette.colors[i], anima tionDelay); |
243 colorElement.addEventListener("click", this._paletteColorSelected.bi nd(this, palette.colors[i])); | 243 colorElement.addEventListener("mousedown", this._paletteColorSelecte d.bind(this, palette.colors[i])); |
244 if (palette.mutable) | 244 if (palette.mutable) { |
245 colorElement.__mutable = true; | |
dgozman
2015/08/21 01:11:29
Could use |this._paletteContainerMutable| instead.
| |
246 colorElement.__color = palette.colors[i]; | |
245 colorElement.addEventListener("contextmenu", this._showPaletteCo lorContextMenu.bind(this, i)); | 247 colorElement.addEventListener("contextmenu", this._showPaletteCo lorContextMenu.bind(this, i)); |
248 } | |
246 this._paletteContainer.appendChild(colorElement); | 249 this._paletteContainer.appendChild(colorElement); |
247 } | 250 } |
251 this._paletteContainerMutable = palette.mutable; | |
248 | 252 |
249 var numItems = palette.colors.length; | 253 var numItems = palette.colors.length; |
250 if (palette.mutable) | 254 if (palette.mutable) |
251 numItems++; | 255 numItems++; |
252 var rowsNeeded = Math.max(1, Math.ceil(numItems / 8)); | 256 var rowsNeeded = Math.max(1, Math.ceil(numItems / 8)); |
253 for (var i = 0; palette.mutable && i < rowsNeeded * 8 - numItems; i++) | 257 for (var i = 0; palette.mutable && i < rowsNeeded * 8 - numItems; i++) |
254 this._paletteContainer.createChild("div", "spectrum-palette-color em pty-color"); | 258 this._paletteContainer.createChild("div", "spectrum-palette-color em pty-color"); |
255 if (palette.mutable) | 259 if (palette.mutable) |
256 this._paletteContainer.appendChild(this._addColorToolbar.element); | 260 this._paletteContainer.appendChild(this._addColorToolbar.element); |
257 | 261 |
258 this._togglePalettePanel(false); | 262 this._togglePalettePanel(false); |
259 var paletteColorHeight = 12; | 263 var paletteColorHeight = 12; |
260 var paletteMargin = 12; | 264 var paletteMargin = 12; |
261 this.element.style.height = (this._paletteContainer.offsetTop + paletteM argin + (paletteColorHeight + paletteMargin) * rowsNeeded) + "px"; | 265 this.element.style.height = (this._paletteContainer.offsetTop + paletteM argin + (paletteColorHeight + paletteMargin) * rowsNeeded) + "px"; |
262 this.dispatchEventToListeners(WebInspector.Spectrum.Events.SizeChanged); | 266 this.dispatchEventToListeners(WebInspector.Spectrum.Events.SizeChanged); |
263 }, | 267 }, |
264 | 268 |
265 /** | 269 /** |
270 * @param {!Event} e | |
271 * @return {number} | |
272 */ | |
273 _slotIndexForEvent: function(e) | |
274 { | |
275 var localX = e.pageX - this._paletteContainer.totalOffsetLeft(); | |
276 var localY = e.pageY - this._paletteContainer.totalOffsetTop(); | |
277 var col = localX / 24 % 8 | 0; | |
dgozman
2015/08/21 01:11:29
nit: add parenthesis for consistency.
dgozman
2015/08/21 01:11:29
Why %8, and not Math.min(, 7)?
| |
278 var row = (localY / 24) | 0; | |
dgozman
2015/08/21 01:11:28
24 to named constant!
| |
279 return Math.min(row * 8 + col, this._paletteContainer.children.length - 2); | |
dgozman
2015/08/21 01:11:29
Let's move add button out of container.
| |
280 }, | |
281 | |
282 /** | |
283 * @param {!Event} e | |
284 * @return {boolean} | |
285 */ | |
286 _paletteDragStart: function(e) | |
287 { | |
288 var element = e.deepElementFromPoint(); | |
289 if (!element.__mutable) | |
290 return false; | |
291 | |
292 var index = this._slotIndexForEvent(e); | |
293 this._dragElement = element; | |
294 this._dragHotSpotX = e.pageX - (index % 8) * 24; | |
295 this._dragHotSpotY = e.pageY - (index / 8 | 0) * 24; | |
296 return true; | |
297 }, | |
298 | |
299 /** | |
300 * @param {!Event} e | |
301 */ | |
302 _paletteDrag: function(e) | |
303 { | |
304 if (e.pageX < this._paletteContainer.totalOffsetLeft() || e.pageY < this ._paletteContainer.totalOffsetTop()) | |
305 return; | |
306 var newIndex = this._slotIndexForEvent(e); | |
307 var offsetX = e.pageX - (newIndex % 8) * 24; | |
308 var offsetY = e.pageY - (newIndex / 8 | 0) * 24; | |
309 | |
310 this._dragElement.style.position = "relative"; | |
311 this._dragElement.style.left = (offsetX - this._dragHotSpotX) + "px"; | |
312 this._dragElement.style.top = (offsetY - this._dragHotSpotY) + "px"; | |
313 var children = Array.prototype.slice.call(this._paletteContainer.childre n); | |
314 var index = children.indexOf(this._dragElement); | |
315 if (index !== newIndex) | |
316 this._paletteContainer.insertBefore(this._dragElement, children[new Index > index ? newIndex + 1 : newIndex]); | |
dgozman
2015/08/21 01:11:29
nit: weird indent. Presubmit?
| |
317 }, | |
318 | |
319 /** | |
320 * @param {!Event} e | |
321 */ | |
322 _paletteDragEnd: function(e) | |
323 { | |
324 this._dragElement.style.removeProperty("position"); | |
325 this._dragElement.style.removeProperty("left"); | |
326 this._dragElement.style.removeProperty("top"); | |
327 var children = this._paletteContainer.children; | |
328 var colors = []; | |
329 for (var i = 0; i < children.length; ++i) { | |
330 if (children[i].__color) | |
331 colors.push(children[i].__color); | |
332 } | |
333 var palette = this._customPaletteSetting.get(); | |
334 palette.colors = colors; | |
335 this._customPaletteSetting.set(palette); | |
336 this._showPalette(this._customPaletteSetting.get(), false); | |
337 }, | |
338 | |
339 /** | |
266 * @param {!WebInspector.Spectrum.Palette} generatedPalette | 340 * @param {!WebInspector.Spectrum.Palette} generatedPalette |
267 */ | 341 */ |
268 _generatedPaletteLoaded: function(generatedPalette) | 342 _generatedPaletteLoaded: function(generatedPalette) |
269 { | 343 { |
270 if (generatedPalette.colors.length) | 344 if (generatedPalette.colors.length) |
271 this._palettes.set(generatedPalette.title, generatedPalette); | 345 this._palettes.set(generatedPalette.title, generatedPalette); |
272 this._palettes.set(WebInspector.Spectrum.MaterialPalette.title, WebInspe ctor.Spectrum.MaterialPalette); | 346 this._palettes.set(WebInspector.Spectrum.MaterialPalette.title, WebInspe ctor.Spectrum.MaterialPalette); |
273 /** @type {!WebInspector.Spectrum.Palette} */ | 347 /** @type {!WebInspector.Spectrum.Palette} */ |
274 var defaultCustomPalette = { title: "Custom", colors: [], mutable: true }; | 348 var defaultCustomPalette = { title: "Custom", colors: [], mutable: true }; |
275 this._customPaletteSetting = WebInspector.settings.createSetting("custom ColorPalette", defaultCustomPalette); | 349 this._customPaletteSetting = WebInspector.settings.createSetting("custom ColorPalette", defaultCustomPalette); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
327 this._customPaletteSetting.set(palette); | 401 this._customPaletteSetting.set(palette); |
328 this._showPalette(this._customPaletteSetting.get(), false); | 402 this._showPalette(this._customPaletteSetting.get(), false); |
329 }, | 403 }, |
330 | 404 |
331 /** | 405 /** |
332 * @param {number} colorIndex | 406 * @param {number} colorIndex |
333 * @param {!Event} event | 407 * @param {!Event} event |
334 */ | 408 */ |
335 _showPaletteColorContextMenu: function(colorIndex, event) | 409 _showPaletteColorContextMenu: function(colorIndex, event) |
336 { | 410 { |
411 if (!this._paletteContainerMutable) | |
412 return; | |
337 var contextMenu = new WebInspector.ContextMenu(event); | 413 var contextMenu = new WebInspector.ContextMenu(event); |
338 contextMenu.appendItem(WebInspector.UIString("Remove color"), this._dele tePaletteColor.bind(this, colorIndex)); | 414 if (colorIndex !== -1) { |
339 contextMenu.appendItem(WebInspector.UIString("Clear palette"), this._del etePaletteColor.bind(this, undefined)); | 415 contextMenu.appendItem(WebInspector.UIString("Remove color"), this._ deletePaletteColors.bind(this, colorIndex, false)); |
dgozman
2015/08/21 01:11:29
We use |UIString.capitalize| in context menus.
| |
416 contextMenu.appendItem(WebInspector.UIString("Remove all to the righ t"), this._deletePaletteColors.bind(this, colorIndex, true)); | |
417 } | |
418 contextMenu.appendItem(WebInspector.UIString("Clear palette"), this._del etePaletteColors.bind(this, -1, true)); | |
340 contextMenu.show(); | 419 contextMenu.show(); |
341 }, | 420 }, |
342 | 421 |
343 /** | 422 /** |
344 * @param {number=} colorIndex | 423 * @param {number} colorIndex |
424 * @param {boolean} toRight | |
345 */ | 425 */ |
346 _deletePaletteColor: function(colorIndex) | 426 _deletePaletteColors: function(colorIndex, toRight) |
347 { | 427 { |
348 var palette = this._customPaletteSetting.get(); | 428 var palette = this._customPaletteSetting.get(); |
349 if (colorIndex !== undefined) | 429 if (toRight) |
430 palette.colors.splice(colorIndex + 1, palette.colors.length - colorI ndex - 1); | |
431 else | |
350 palette.colors.splice(colorIndex, 1); | 432 palette.colors.splice(colorIndex, 1); |
351 else | |
352 palette.colors = []; | |
353 this._customPaletteSetting.set(palette); | 433 this._customPaletteSetting.set(palette); |
354 this._showPalette(this._customPaletteSetting.get(), false); | 434 this._showPalette(this._customPaletteSetting.get(), false); |
355 }, | 435 }, |
356 | 436 |
357 /** | 437 /** |
358 * @param {!WebInspector.Color} color | 438 * @param {!WebInspector.Color} color |
359 * @param {string} colorFormat | 439 * @param {string} colorFormat |
360 */ | 440 */ |
361 setColor: function(color, colorFormat) | 441 setColor: function(color, colorFormat) |
362 { | 442 { |
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
808 "#8BC34A", | 888 "#8BC34A", |
809 "#CDDC39", | 889 "#CDDC39", |
810 "#FFEB3B", | 890 "#FFEB3B", |
811 "#FFC107", | 891 "#FFC107", |
812 "#FF9800", | 892 "#FF9800", |
813 "#FF5722", | 893 "#FF5722", |
814 "#795548", | 894 "#795548", |
815 "#9E9E9E", | 895 "#9E9E9E", |
816 "#607D8B" | 896 "#607D8B" |
817 ]}; | 897 ]}; |
OLD | NEW |