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

Side by Side Diff: Source/devtools/front_end/elements/Spectrum.js

Issue 1324533005: Devtools Color: Drag to delete custom color in palettes (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 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
« no previous file with comments | « no previous file | Source/devtools/front_end/elements/spectrum.css » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 /** @type {!Map.<string, !WebInspector.Spectrum.Palette>} */ 106 /** @type {!Map.<string, !WebInspector.Spectrum.Palette>} */
107 this._palettes = new Map(); 107 this._palettes = new Map();
108 this._palettePanel = this.contentElement.createChild("div", "palette-panel") ; 108 this._palettePanel = this.contentElement.createChild("div", "palette-panel") ;
109 this._palettePanelShowing = false; 109 this._palettePanelShowing = false;
110 this._paletteContainer = this.contentElement.createChild("div", "spectrum-pa lette"); 110 this._paletteContainer = this.contentElement.createChild("div", "spectrum-pa lette");
111 this._paletteContainer.addEventListener("contextmenu", this._showPaletteColo rContextMenu.bind(this, -1)); 111 this._paletteContainer.addEventListener("contextmenu", this._showPaletteColo rContextMenu.bind(this, -1));
112 WebInspector.installDragHandle(this._paletteContainer, this._paletteDragStar t.bind(this), this._paletteDrag.bind(this), this._paletteDragEnd.bind(this), "de fault"); 112 WebInspector.installDragHandle(this._paletteContainer, this._paletteDragStar t.bind(this), this._paletteDrag.bind(this), this._paletteDragEnd.bind(this), "de fault");
113 var paletteSwitcher = this.contentElement.createChild("div", "spectrum-palet te-switcher spectrum-switcher"); 113 var paletteSwitcher = this.contentElement.createChild("div", "spectrum-palet te-switcher spectrum-switcher");
114 appendSwitcherIcon(paletteSwitcher); 114 appendSwitcherIcon(paletteSwitcher);
115 paletteSwitcher.addEventListener("click", this._togglePalettePanel.bind(this , true)); 115 paletteSwitcher.addEventListener("click", this._togglePalettePanel.bind(this , true));
116
117 this._deleteIconToolbar = new WebInspector.Toolbar();
118 this._deleteIconToolbar.element.classList.add("delete-color-toolbar");
119 this._deleteButton = new WebInspector.ToolbarButton("", "garbage-collect-too lbar-item");
120 this._deleteIconToolbar.appendToolbarItem(this._deleteButton);
121
116 var overlay = this.contentElement.createChild("div", "spectrum-overlay fill" ); 122 var overlay = this.contentElement.createChild("div", "spectrum-overlay fill" );
117 overlay.addEventListener("click", this._togglePalettePanel.bind(this, false) ); 123 overlay.addEventListener("click", this._togglePalettePanel.bind(this, false) );
118 124
119 this._addColorToolbar = new WebInspector.Toolbar(); 125 this._addColorToolbar = new WebInspector.Toolbar();
120 this._addColorToolbar.element.classList.add("add-color-toolbar"); 126 this._addColorToolbar.element.classList.add("add-color-toolbar");
121 var addColorButton = new WebInspector.ToolbarButton(WebInspector.UIString("A dd to palette"), "add-toolbar-item"); 127 var addColorButton = new WebInspector.ToolbarButton(WebInspector.UIString("A dd to palette"), "add-toolbar-item");
122 addColorButton.addEventListener("click", this._addColorToCustomPalette.bind( this)); 128 addColorButton.addEventListener("click", this._addColorToCustomPalette.bind( this));
123 this._addColorToolbar.appendToolbarItem(addColorButton); 129 this._addColorToolbar.appendToolbarItem(addColorButton);
124 130
125 new WebInspector.Spectrum.PaletteGenerator(this._generatedPaletteLoaded.bind (this)); 131 new WebInspector.Spectrum.PaletteGenerator(this._generatedPaletteLoaded.bind (this));
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 colorElement.addEventListener("contextmenu", this._showPaletteCo lorContextMenu.bind(this, i)); 257 colorElement.addEventListener("contextmenu", this._showPaletteCo lorContextMenu.bind(this, i));
252 } 258 }
253 this._paletteContainer.appendChild(colorElement); 259 this._paletteContainer.appendChild(colorElement);
254 } 260 }
255 this._paletteContainerMutable = palette.mutable; 261 this._paletteContainerMutable = palette.mutable;
256 262
257 var numItems = palette.colors.length; 263 var numItems = palette.colors.length;
258 if (palette.mutable) 264 if (palette.mutable)
259 numItems++; 265 numItems++;
260 var rowsNeeded = Math.max(1, Math.ceil(numItems / WebInspector.Spectrum. _itemsPerPaletteRow)); 266 var rowsNeeded = Math.max(1, Math.ceil(numItems / WebInspector.Spectrum. _itemsPerPaletteRow));
261 if (palette.mutable) 267 if (palette.mutable) {
262 this.contentElement.appendChild(this._addColorToolbar.element); 268 this._paletteContainer.appendChild(this._addColorToolbar.element);
263 else 269 this._paletteContainer.appendChild(this._deleteIconToolbar.element);
270 } else {
264 this._addColorToolbar.element.remove(); 271 this._addColorToolbar.element.remove();
272 this._deleteIconToolbar.element.remove();
273 }
265 274
266 this._togglePalettePanel(false); 275 this._togglePalettePanel(false);
267 var paletteColorHeight = 12; 276 var paletteColorHeight = 12;
268 var paletteMargin = 12; 277 var paletteMargin = 12;
269 this.element.style.height = (this._paletteContainer.offsetTop + paletteM argin + (paletteColorHeight + paletteMargin) * rowsNeeded) + "px"; 278 this.element.style.height = (this._paletteContainer.offsetTop + paletteM argin + (paletteColorHeight + paletteMargin) * rowsNeeded) + "px";
270 this.dispatchEventToListeners(WebInspector.Spectrum.Events.SizeChanged); 279 this.dispatchEventToListeners(WebInspector.Spectrum.Events.SizeChanged);
271 }, 280 },
272 281
273 /** 282 /**
274 * @param {!Event} e 283 * @param {!Event} e
275 * @return {number} 284 * @return {number}
276 */ 285 */
277 _slotIndexForEvent: function(e) 286 _slotIndexForEvent: function(e)
278 { 287 {
279 var localX = e.pageX - this._paletteContainer.totalOffsetLeft(); 288 var localX = e.pageX - this._paletteContainer.totalOffsetLeft();
280 var localY = e.pageY - this._paletteContainer.totalOffsetTop(); 289 var localY = e.pageY - this._paletteContainer.totalOffsetTop();
281 var col = Math.min(localX / WebInspector.Spectrum._colorChipSize | 0, We bInspector.Spectrum._itemsPerPaletteRow - 1); 290 var col = Math.min(localX / WebInspector.Spectrum._colorChipSize | 0, We bInspector.Spectrum._itemsPerPaletteRow - 1);
282 var row = (localY / WebInspector.Spectrum._colorChipSize) | 0; 291 var row = (localY / WebInspector.Spectrum._colorChipSize) | 0;
283 return Math.min(row * WebInspector.Spectrum._itemsPerPaletteRow + col, t his._paletteContainer.children.length - 1); 292 return Math.min(row * WebInspector.Spectrum._itemsPerPaletteRow + col, t his._customPaletteSetting.get().colors.length - 1);
284 }, 293 },
285 294
286 /** 295 /**
296 * @param {!Event} e
297 * @return {boolean}
298 */
299 _isDraggingToBin: function(e)
300 {
301 return e.pageX > this._deleteIconToolbar.element.totalOffsetLeft();
302 },
303
304 /**
287 * @param {!Event} e 305 * @param {!Event} e
288 * @return {boolean} 306 * @return {boolean}
289 */ 307 */
290 _paletteDragStart: function(e) 308 _paletteDragStart: function(e)
291 { 309 {
292 var element = e.deepElementFromPoint(); 310 var element = e.deepElementFromPoint();
293 if (!element.__mutable) 311 if (!element || !element.__mutable)
294 return false; 312 return false;
295 313
296 var index = this._slotIndexForEvent(e); 314 var index = this._slotIndexForEvent(e);
297 this._dragElement = element; 315 this._dragElement = element;
298 this._dragHotSpotX = e.pageX - (index % WebInspector.Spectrum._itemsPerP aletteRow) * WebInspector.Spectrum._colorChipSize; 316 this._dragHotSpotX = e.pageX - (index % WebInspector.Spectrum._itemsPerP aletteRow) * WebInspector.Spectrum._colorChipSize;
299 this._dragHotSpotY = e.pageY - (index / WebInspector.Spectrum._itemsPerP aletteRow | 0) * WebInspector.Spectrum._colorChipSize; 317 this._dragHotSpotY = e.pageY - (index / WebInspector.Spectrum._itemsPerP aletteRow | 0) * WebInspector.Spectrum._colorChipSize;
318
319 this._deleteIconToolbar.element.classList.add("dragging");
300 return true; 320 return true;
301 }, 321 },
302 322
303 /** 323 /**
304 * @param {!Event} e 324 * @param {!Event} e
305 */ 325 */
306 _paletteDrag: function(e) 326 _paletteDrag: function(e)
307 { 327 {
308 if (e.pageX < this._paletteContainer.totalOffsetLeft() || e.pageY < this ._paletteContainer.totalOffsetTop()) 328 if (e.pageX < this._paletteContainer.totalOffsetLeft() || e.pageY < this ._paletteContainer.totalOffsetTop())
309 return; 329 return;
310 var newIndex = this._slotIndexForEvent(e); 330 var newIndex = this._slotIndexForEvent(e);
311 var offsetX = e.pageX - (newIndex % WebInspector.Spectrum._itemsPerPalet teRow) * WebInspector.Spectrum._colorChipSize; 331 var offsetX = e.pageX - (newIndex % WebInspector.Spectrum._itemsPerPalet teRow) * WebInspector.Spectrum._colorChipSize;
312 var offsetY = e.pageY - (newIndex / WebInspector.Spectrum._itemsPerPalet teRow | 0) * WebInspector.Spectrum._colorChipSize; 332 var offsetY = e.pageY - (newIndex / WebInspector.Spectrum._itemsPerPalet teRow | 0) * WebInspector.Spectrum._colorChipSize;
313 333
314 this._dragElement.style.transform = "translateX(" + (offsetX - this._dra gHotSpotX) + "px) translateY(" + (offsetY - this._dragHotSpotY) + "px)"; 334 var isDeleting = this._isDraggingToBin(e);
335 this._deleteIconToolbar.element.classList.toggle("delete-color-toolbar-a ctive", isDeleting);
336 var dragElementTransform = "translateX(" + (offsetX - this._dragHotSpotX ) + "px) translateY(" + (offsetY - this._dragHotSpotY) + "px)";
337 this._dragElement.style.transform = isDeleting ? dragElementTransform + " scale(0.8)" : dragElementTransform;
315 var children = Array.prototype.slice.call(this._paletteContainer.childre n); 338 var children = Array.prototype.slice.call(this._paletteContainer.childre n);
316 var index = children.indexOf(this._dragElement); 339 var index = children.indexOf(this._dragElement);
317 /** @type {!Map.<!Element, {left: number, top: number}>} */ 340 /** @type {!Map.<!Element, {left: number, top: number}>} */
318 var swatchOffsets = new Map(); 341 var swatchOffsets = new Map();
319 for (var swatch of children) 342 for (var swatch of children)
320 swatchOffsets.set(swatch, swatch.totalOffset()); 343 swatchOffsets.set(swatch, swatch.totalOffset());
321 344
322 if (index !== newIndex) 345 if (index !== newIndex)
323 this._paletteContainer.insertBefore(this._dragElement, children[newI ndex > index ? newIndex + 1 : newIndex]); 346 this._paletteContainer.insertBefore(this._dragElement, children[newI ndex > index ? newIndex + 1 : newIndex]);
324 347
325 for (var swatch of children) { 348 for (var swatch of children) {
326 if (swatch === this._dragElement) 349 if (swatch === this._dragElement)
327 continue; 350 continue;
328 var before = swatchOffsets.get(swatch); 351 var before = swatchOffsets.get(swatch);
329 var after = swatch.totalOffset(); 352 var after = swatch.totalOffset();
330 if (before.left !== after.left || before.top !== after.top) { 353 if (before.left !== after.left || before.top !== after.top) {
331 swatch.animate([ 354 swatch.animate([
332 { transform: "translateX(" + (before.left - after.left) + "p x) translateY(" + (before.top - after.top) + "px)" }, 355 { transform: "translateX(" + (before.left - after.left) + "p x) translateY(" + (before.top - after.top) + "px)" },
333 { transform: "none" }], { duration: 100, easing: "cubic-bezi er(0, 0, 0.2, 1)" }); 356 { transform: "none" }], { duration: 100, easing: "cubic-bezi er(0, 0, 0.2, 1)" });
334 } 357 }
335 } 358 }
336 }, 359 },
337 360
338 /** 361 /**
339 * @param {!Event} e 362 * @param {!Event} e
340 */ 363 */
341 _paletteDragEnd: function(e) 364 _paletteDragEnd: function(e)
342 { 365 {
366 if (this._isDraggingToBin(e))
367 this._dragElement.remove();
343 this._dragElement.style.removeProperty("transform"); 368 this._dragElement.style.removeProperty("transform");
344 var children = this._paletteContainer.children; 369 var children = this._paletteContainer.children;
345 var colors = []; 370 var colors = [];
346 for (var i = 0; i < children.length; ++i) { 371 for (var i = 0; i < children.length; ++i) {
347 if (children[i].__color) 372 if (children[i].__color)
348 colors.push(children[i].__color); 373 colors.push(children[i].__color);
349 } 374 }
350 var palette = this._customPaletteSetting.get(); 375 var palette = this._customPaletteSetting.get();
351 palette.colors = colors; 376 palette.colors = colors;
352 this._customPaletteSetting.set(palette); 377 this._customPaletteSetting.set(palette);
353 this._showPalette(this._customPaletteSetting.get(), false); 378 this._showPalette(this._customPaletteSetting.get(), false);
379
380 this._deleteIconToolbar.element.classList.remove("dragging");
381 this._deleteIconToolbar.element.classList.remove("delete-color-toolbar-a ctive");
382 this._deleteButton.setToggled(false);
354 }, 383 },
355 384
356 /** 385 /**
357 * @param {!WebInspector.Spectrum.Palette} generatedPalette 386 * @param {!WebInspector.Spectrum.Palette} generatedPalette
358 */ 387 */
359 _generatedPaletteLoaded: function(generatedPalette) 388 _generatedPaletteLoaded: function(generatedPalette)
360 { 389 {
361 if (generatedPalette.colors.length) 390 if (generatedPalette.colors.length)
362 this._palettes.set(generatedPalette.title, generatedPalette); 391 this._palettes.set(generatedPalette.title, generatedPalette);
363 this._palettes.set(WebInspector.Spectrum.MaterialPalette.title, WebInspe ctor.Spectrum.MaterialPalette); 392 this._palettes.set(WebInspector.Spectrum.MaterialPalette.title, WebInspe ctor.Spectrum.MaterialPalette);
(...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 "#8BC34A", 934 "#8BC34A",
906 "#CDDC39", 935 "#CDDC39",
907 "#FFEB3B", 936 "#FFEB3B",
908 "#FFC107", 937 "#FFC107",
909 "#FF9800", 938 "#FF9800",
910 "#FF5722", 939 "#FF5722",
911 "#795548", 940 "#795548",
912 "#9E9E9E", 941 "#9E9E9E",
913 "#607D8B" 942 "#607D8B"
914 ]}; 943 ]};
OLDNEW
« no previous file with comments | « no previous file | Source/devtools/front_end/elements/spectrum.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698