]> BookStack Code Mirror - bookstack/blobdiff - resources/assets/js/components/shelf-sort.js
Merge branch 'fix/ru-locale' of git://github.com/mullinsmikey/BookStack into mullinsm...
[bookstack] / resources / assets / js / components / shelf-sort.js
index 91713ab41f1ec212169b9c179bb628454dba75f6..59ac712a4d726600a604e9d497780ff5f897b0b5 100644 (file)
@@ -5,6 +5,7 @@ class ShelfSort {
         this.elem = elem;
         this.sortGroup = this.initSortable();
         this.input = document.getElementById('books-input');
+        this.setupListeners();
     }
 
     initSortable() {
@@ -21,10 +22,39 @@ class ShelfSort {
         });
     }
 
+    setupListeners() {
+        this.elem.addEventListener('click', event => {
+            const sortItem = event.target.closest('.scroll-box-item:not(.instruction)');
+            if (sortItem) {
+                event.preventDefault();
+                this.sortItemClick(sortItem);
+            }
+        });
+    }
+
+    /**
+     * Called when a sort item is clicked.
+     * @param {Element} sortItem
+     */
+    sortItemClick(sortItem) {
+        const lists = this.elem.querySelectorAll('.scroll-box');
+        const newList = Array.from(lists).filter(list => sortItem.parentElement !== list);
+        if (newList.length > 0) {
+            newList[0].appendChild(sortItem);
+        }
+        this.onChange();
+    }
+
     onDrop($item, container, _super) {
+        this.onChange();
+        _super($item, container);
+    }
+
+    onChange() {
         const data = this.sortGroup.sortable('serialize').get();
         this.input.value = data[0].map(item => item.id).join(',');
-        _super($item, container);
+        const instruction = this.elem.querySelector('.scroll-box-item.instruction');
+        instruction.parentNode.insertBefore(instruction, instruction.parentNode.children[0]);
     }
 
     getPlaceholderHTML() {