From 8e0ed8cd8b82cb4cee4dcc44ae65e0515679602e Mon Sep 17 00:00:00 2001 From: Quincy Morgan Date: Fri, 8 Mar 2019 10:54:18 -0500 Subject: [PATCH] Make recent presets reorder-able in the ribbon --- modules/presets/index.js | 21 ++++++++++++--------- modules/ui/modes.js | 12 +++++++++--- modules/ui/preset_favorite.js | 2 +- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/modules/presets/index.js b/modules/presets/index.js index 16d443a74..0f629ef22 100644 --- a/modules/presets/index.js +++ b/modules/presets/index.js @@ -365,7 +365,7 @@ export function presetIndex(context) { all.toggleFavorite = function(preset, geometry) { var favs = all.getFavorites(); - var favorite = all.isFavorite(preset, geometry); + var favorite = all.favoriteMatching(preset, geometry); if (favorite) { favs.splice(favs.indexOf(favorite), 1); } else { @@ -380,23 +380,23 @@ export function presetIndex(context) { setFavorites(favs); }; - all.isFavorite = function(preset, geometry) { + all.favoriteMatching = function(preset, geometry) { var favs = all.getFavorites(); for (var index in favs) { if (favs[index].matches(preset, geometry)) { return favs[index]; } } - return false; + return null; }; - all.isRecent = function(preset, geometry) { + all.recentMatching = function(preset, geometry) { var items = all.getRecents(); for (var index in items) { if (items[index].matches(preset, geometry)) { return items[index]; } } - return false; + return null; }; all.moveItem = function(items, fromIndex, toIndex) { @@ -412,8 +412,11 @@ export function presetIndex(context) { if (items) setFavorites(items); }; - all.moveRecent = function(fromIndex, toIndex) { - var items = all.moveItem(all.getRecents(), fromIndex, toIndex); + all.moveRecent = function(item, beforeItem) { + var recents = all.getRecents(); + var fromIndex = recents.indexOf(item); + var toIndex = recents.indexOf(beforeItem); + var items = all.moveItem(recents, fromIndex, toIndex); if (items) setRecents(items); }; @@ -421,7 +424,7 @@ export function presetIndex(context) { if (preset.searchable === false) return; var items = all.getRecents(); - var item = all.isRecent(preset, geometry); + var item = all.recentMatching(preset, geometry); if (item) { items.splice(items.indexOf(item), 1); } else { @@ -437,7 +440,7 @@ export function presetIndex(context) { setRecents(items); }; all.removeRecent = function(preset, geometry) { - var item = all.isRecent(preset, geometry); + var item = all.recentMatching(preset, geometry); if (item) { var items = all.getRecents(); items.splice(items.indexOf(item), 1); diff --git a/modules/ui/modes.js b/modules/ui/modes.js index d1aee07c6..e348d1340 100644 --- a/modules/ui/modes.js +++ b/modules/ui/modes.js @@ -212,7 +212,7 @@ export function uiModes(context) { } }); - var dragOrigin, targetIndex; + var dragOrigin, targetIndex, targetData; buttonsEnter.call(d3_drag() .on('start', function() { @@ -221,6 +221,7 @@ export function uiModes(context) { y: d3_event.y }; targetIndex = null; + targetData = null; }) .on('drag', function(d, index) { var x = d3_event.x - dragOrigin.x, @@ -231,6 +232,7 @@ export function uiModes(context) { .classed('removing', y > 50); targetIndex = null; + targetData = null; selection.selectAll('button.add-preset') .style('transform', function(d2, index2) { @@ -241,13 +243,14 @@ export function uiModes(context) { if (index2 > index) { return 'translateX(' + (textDirection === 'rtl' ? '' : '-') + '100%)'; } - } else if (d.source === 'favorite' && d.source === d2.source) { + } else if (d.source === d2.source) { if (index2 > index && ( (d3_event.x > node.offsetLeft && textDirection === 'ltr') || (d3_event.x < node.offsetLeft + node.offsetWidth && textDirection === 'rtl') )) { if (targetIndex === null || index2 > targetIndex) { targetIndex = index2; + targetData = d2; } return 'translateX(' + (textDirection === 'rtl' ? '' : '-') + '100%)'; } else if (index2 < index && ( @@ -256,6 +259,7 @@ export function uiModes(context) { )) { if (targetIndex === null || index2 < targetIndex) { targetIndex = index2; + targetData = d2; } return 'translateX(' + (textDirection === 'rtl' ? '-' : '') + '100%)'; } @@ -285,7 +289,9 @@ export function uiModes(context) { if (d.isFavorite()) { context.presets().moveFavorite(index, targetIndex); } else if (d.isRecent()) { - //context.presets().moveRecent(index - favoritesCount, targetIndex - favoritesCount); + var item = context.presets().recentMatching(d.preset, d.geometry); + var beforeItem = context.presets().recentMatching(targetData.preset, targetData.geometry); + context.presets().moveRecent(item, beforeItem); } } }) diff --git a/modules/ui/preset_favorite.js b/modules/ui/preset_favorite.js index a0ae2bf5c..544bb0bff 100644 --- a/modules/ui/preset_favorite.js +++ b/modules/ui/preset_favorite.js @@ -45,7 +45,7 @@ export function uiPresetFavorite(preset, geom, context, klass) { function update() { _button - .classed('active', context.presets().isFavorite(preset, geom)); + .classed('active', context.presets().favoriteMatching(preset, geom)); } context.presets().on('favoritePreset.button-' + preset.id.replace(/[^a-zA-Z\d:]/g, '-') + '-' + geom, update);