Files
habitica/website/client/directives/sortable.directive.js
Matteo Pagliazzi a208ba4aba Tasks v2 Part 2 (#9236)
* start updating colors for tasks controls

* finish updating controls colors

* change hoevr behavior

* change transition duration

* update color with transition

* refactor menu wip

* wip

* upgrade vue deps

* fix warnings

* fix menu

* misc fixes

* more fixes

* fix badge

* fix margins in menu

* wip tooltips

* tooltips

* fix checklist colors

* add badges

* fix quick add input

* add transition to task controls too

* add batch add

* fix task filtering

* finish tasks badges

* fix menu

* upgrade deps

* fix shop items using all the same image

* fix animation

* disable client tests until we remove phantomjs

* revert changes to tasks colors

* fix opacity in task modal inputs

* remove client unit tests from travis

* wip task dropdown

* fix z-index for task footer/header

* fixes and add files

* fixes

* bigger clickable area

* more space to open task dropdown

* droddown position

* fix menu position

* make sure other dropdowns get closed correctly

* fixes

* start to fix z-index

* draggable = false for task dropdown

* fix for dropdown position

* implement move to top / bottom

* fix push to bottom

* typo

* fix drag and drop

* use standard code

* wider click area for dropdown

* unify badge look

* fix padding

* misc fixes

* more fixes

* make dropdown scrollable

* misc fixes

* fix padding for notes

* use existing code instead of new props
2017-11-02 21:07:38 +01:00

47 lines
1.2 KiB
JavaScript

import Sortable from 'sortablejs';
import uuid from 'uuid';
let emit = (vNode, eventName, data) => {
let handlers = vNode.data && vNode.data.on ||
vNode.componentOptions && vNode.componentOptions.listeners;
if (handlers && handlers[eventName]) {
handlers[eventName].fns(data);
}
};
let sortableReferences = {};
function createSortable (el, vNode) {
let sortableRef = Sortable.create(el, {
filter: '.task-dropdown', // do not make the tasks dropdown draggable or it won't work
onSort: (evt) => {
emit(vNode, 'onsort', {
oldIndex: evt.oldIndex,
newIndex: evt.newIndex,
});
},
});
let uniqueId = uuid();
sortableReferences[uniqueId] = sortableRef;
el.dataset.sortableId = uniqueId;
}
export default {
bind (el, binding, vNode) {
createSortable(el, vNode);
},
unbind (el) {
if (sortableReferences[el.dataset.sortableId]) sortableReferences[el.dataset.sortableId].destroy();
},
update (el, vNode) {
if (sortableReferences[el.dataset.sortableId] && !vNode.value) {
sortableReferences[el.dataset.sortableId].destroy();
delete sortableReferences[el.dataset.sortableId];
return;
}
if (!sortableReferences[el.dataset.sortableId]) createSortable(el, vNode);
},
};