From 34cc7c3b8dba37497425eb00abb43ab7a1eeefae Mon Sep 17 00:00:00 2001 From: jr-k Date: Wed, 17 Jul 2024 18:07:00 +0200 Subject: [PATCH] better explr --- data/www/js/explorer.js | 46 ++++++++++++++------- src/controller/ContentController.py | 23 ++++++++--- src/controller/FleetNodePlayerController.py | 22 +++++++--- src/manager/FolderManager.py | 12 +++--- views/fleet/node-players/list.jinja.html | 10 ++--- views/slideshow/contents/list.jinja.html | 10 ++--- 6 files changed, 82 insertions(+), 41 deletions(-) diff --git a/data/www/js/explorer.js b/data/www/js/explorer.js index d9e0b76..5fc4046 100644 --- a/data/www/js/explorer.js +++ b/data/www/js/explorer.js @@ -76,7 +76,7 @@ jQuery(function ($) { if (selectionRectangle) { selectionRectangle.remove(); - setTimeout(function() { + setTimeout(function () { selectionRectangle = null; selectionStart = null; }, 100); @@ -112,13 +112,14 @@ jQuery(function ($) { }); $('.draggable').each(function () { - $(this).draggable({ + $(this).multiDraggable({ revert: "invalid", revertDuration: 10, - start: function(event, ui) { + group: 'li.highlight-clicked', + startNative: function (event, ui) { $('body').addClass('dragging'); }, - stop: function() { + stopNative: function () { $('body').removeClass('dragging'); } }); @@ -136,19 +137,34 @@ jQuery(function ($) { drop: function (event, ui) { $(this).removeClass("highlight-drop"); const $form = $('#folder-move-form'); - const $moved = ui.draggable; + const $moved = $('.ui-draggable-dragging'); const $target = $(this); - $form.find('[name=is_folder]').val($moved.attr('data-folder')) - $form.find('[name=entity_id]').val($moved.attr('data-id')) - $form.find('[name=new_folder_id]').val($target.attr('data-id')) - ui.draggable.position({ - my: "center", - at: "center", - of: $(this), - using: function (pos) { - $(this).animate(pos, 50); + const folder_ids = [], entity_ids = []; + + $moved.each(function () { + const $item = $(this); + const is_folder = $item.attr('data-folder') === '1'; + const id = $item.attr('data-id'); + + if (is_folder) { + folder_ids.push(id); + } else { + entity_ids.push(id); } + + $item.position({ + my: "center", + at: "center", + of: $target, + using: function (pos) { + $item.animate(pos, 50); + } + }); }); + + $form.find('[name=entity_ids]').val(entity_ids.join(',')) + $form.find('[name=folder_ids]').val(folder_ids.join(',')) + $form.find('[name=new_folder_id]').val($target.attr('data-id')) $form.submit(); } }); @@ -300,7 +316,7 @@ jQuery(function ($) { const $prevLi = $selectedLi.prev('li:visible'); const $nextLi = $selectedLiLast.next('li:visible'); const verticalNeighbors = getAboveBelowElement($selectedLi); - const clearIfNoMeta = function() { + const clearIfNoMeta = function () { if (!e.metaKey && !e.ctrlKey && !e.shiftKey) { clearSelection() } diff --git a/src/controller/ContentController.py b/src/controller/ContentController.py index 28f827d..7d1e8d0 100644 --- a/src/controller/ContentController.py +++ b/src/controller/ContentController.py @@ -189,11 +189,24 @@ class ContentController(ObController): def slideshow_content_folder_move(self): working_folder_path, working_folder = self.get_working_folder() - self._model_store.folder().move_to_folder( - entity_id=request.form['entity_id'], - folder_id=request.form['new_folder_id'], - entity_is_folder=True if 'is_folder' in request.form and request.form['is_folder'] == '1' else False, - ) + entity_ids = request.form['entity_ids'].split(',') + folder_ids = request.form['folder_ids'].split(',') + + for id in entity_ids: + self._model_store.folder().move_to_folder( + entity_id=id, + folder_id=request.form['new_folder_id'], + entity_is_folder=False, + entity=FolderEntity.CONTENT + ) + + for id in folder_ids: + self._model_store.folder().move_to_folder( + entity_id=id, + folder_id=request.form['new_folder_id'], + entity_is_folder=True, + entity=FolderEntity.CONTENT + ) return redirect(url_for('slideshow_content_list', path=working_folder_path)) diff --git a/src/controller/FleetNodePlayerController.py b/src/controller/FleetNodePlayerController.py index 39b0718..9118829 100644 --- a/src/controller/FleetNodePlayerController.py +++ b/src/controller/FleetNodePlayerController.py @@ -177,12 +177,24 @@ class FleetNodePlayerController(ObController): def fleet_node_player_folder_move(self): working_folder_path, working_folder = self.get_working_folder() + entity_ids = request.form['entity_ids'].split(',') + folder_ids = request.form['folder_ids'].split(',') - self._model_store.folder().move_to_folder( - entity_id=request.form['entity_id'], - folder_id=request.form['new_folder_id'], - entity_is_folder=True if 'is_folder' in request.form and request.form['is_folder'] == '1' else False, - ) + for id in entity_ids: + self._model_store.folder().move_to_folder( + entity_id=id, + folder_id=request.form['new_folder_id'], + entity_is_folder=False, + entity=FolderEntity.NODE_PLAYER + ) + + for id in folder_ids: + self._model_store.folder().move_to_folder( + entity_id=id, + folder_id=request.form['new_folder_id'], + entity_is_folder=True, + entity=FolderEntity.NODE_PLAYER + ) return redirect(url_for('fleet_node_player_list', path=working_folder_path)) diff --git a/src/manager/FolderManager.py b/src/manager/FolderManager.py index a452dfc..5fc69b1 100644 --- a/src/manager/FolderManager.py +++ b/src/manager/FolderManager.py @@ -143,10 +143,10 @@ class FolderManager(ModelManager): self._db.update_by_id(self.TABLE_NAME, id, self.pre_update({"name": name})) self.post_update(id) - def move_to_folder(self, entity_id: int, folder_id: int, entity_is_folder=False) -> None: - folder = self.get(folder_id) + def move_to_folder(self, entity_id: int, entity: FolderEntity, folder_id: Optional[int] = None, entity_is_folder=False) -> None: + folder = self.get(folder_id) if folder_id else None - if not folder and not entity_is_folder: + if folder and folder.entity != entity: return if entity_is_folder: @@ -157,15 +157,15 @@ class FolderManager(ModelManager): table = None - if folder.entity == FolderEntity.CONTENT: + if entity == FolderEntity.CONTENT: table = ContentManager.TABLE_NAME - elif folder.entity == FolderEntity.NODE_PLAYER: + elif entity == FolderEntity.NODE_PLAYER: table = NodePlayerManager.TABLE_NAME if table: return self._db.execute_write_query( query="UPDATE {} set folder_id = ? WHERE id = ?".format(table), - params=(folder_id, entity_id) + params=(folder_id if folder else None, entity_id) ) def get_working_folder(self, entity: FolderEntity) -> str: diff --git a/views/fleet/node-players/list.jinja.html b/views/fleet/node-players/list.jinja.html index 893bd3a..67e5ab7 100644 --- a/views/fleet/node-players/list.jinja.html +++ b/views/fleet/node-players/list.jinja.html @@ -14,6 +14,7 @@ + {{ HOOK(H_FLEET_NODE_PLAYER_JAVASCRIPT) }} {% endblock %} @@ -83,11 +84,10 @@ {% endwith %} -
@@ -132,7 +132,7 @@ {% set parent_path = '/'.join(working_folder_path.rstrip('/').split('/')[:-1]) %} {% if parent_path %}
  • + data-id="{{ working_folder.parent_id if working_folder.parent_id else '' }}" data-folder="1"> diff --git a/views/slideshow/contents/list.jinja.html b/views/slideshow/contents/list.jinja.html index 00a7c44..a9cb838 100644 --- a/views/slideshow/contents/list.jinja.html +++ b/views/slideshow/contents/list.jinja.html @@ -21,6 +21,7 @@ + {{ HOOK(H_SLIDESHOW_CONTENT_JAVASCRIPT) }} @@ -105,11 +106,10 @@ {% endwith %}
  • -
    @@ -154,7 +154,7 @@ {% set parent_path = '/'.join(working_folder_path.rstrip('/').split('/')[:-1]) %} {% if parent_path %}
  • + data-id="{{ working_folder.parent_id if working_folder.parent_id else '' }}" data-folder="1">