diff --git a/data/www/js/fleet/node-player-groups.js b/data/www/js/fleet/node-player-groups.js index 8fe2c65..4831497 100644 --- a/data/www/js/fleet/node-player-groups.js +++ b/data/www/js/fleet/node-player-groups.js @@ -21,7 +21,7 @@ jQuery(document).ready(function ($) { $(document).on('click', '.node-player-group-player-assign', function () { const route = $(this).attr('data-route'); - showPickers('modal-node-player-explr-picker', function(nodePlayer) { + showPickers('modal-node-player-explr-picker', function (nodePlayer) { if (!nodePlayer.group_id || (nodePlayer.group_id && confirm(l.js_fleet_node_player_assign_confirmation))) { document.location.href = route.replace('__id__', nodePlayer.id); } @@ -31,15 +31,19 @@ jQuery(document).ready(function ($) { $(document).on('click', '.node-player-group-unassign-player', function () { if (confirm(l.js_fleet_node_player_delete_confirmation)) { const $item = $(this).parents('.player-item:eq(0)'); - $item.remove(); - $.ajax({ - method: 'DELETE', - url: $(this).attr('data-route'), - headers: {'Content-Type': 'application/json'}, - success: function(response) { - $('.node-player-group-item-'+response.group_id+' .players-counter').html(response.pcounter); - } - }); + if ($item.parents('ul:eq(0)').find('.player-item').length === 1) { + document.location.href = $(this).attr('data-route'); + } else { + $item.remove(); + $.ajax({ + method: 'DELETE', + url: $(this).attr('data-route'), + headers: {'Content-Type': 'application/json'}, + success: function (response) { + $('.node-player-group-item-' + response.group_id + ' .players-counter').html(response.pcounter); + } + }); + } } }); diff --git a/data/www/js/slideshow/slides.js b/data/www/js/slideshow/slides.js index 50a2fe9..7978bc7 100644 --- a/data/www/js/slideshow/slides.js +++ b/data/www/js/slideshow/slides.js @@ -1,8 +1,8 @@ jQuery(document).ready(function ($) { - const loadDateTimePicker = function($els) { + const loadDateTimePicker = function ($els) { const d = new Date(); - $els.each(function() { + $els.each(function () { var $el = $(this); $el.flatpickr({ enableTime: true, @@ -12,7 +12,7 @@ jQuery(document).ready(function ($) { dateFormat: 'Y-m-d H:i', defaultHour: d.getHours(), defaultMinute: d.getMinutes(), - onChange: function(selectedDates, dateStr, instance) { + onChange: function (selectedDates, dateStr, instance) { const d = selectedDates[0]; const $target = $el.parents('.widget:eq(0)').find('.target'); $target.val( @@ -61,7 +61,7 @@ jQuery(document).ready(function ($) { } }; - const inputSchedulerUpdate = function() { + const inputSchedulerUpdate = function () { const $modal = $('.modal-slide:visible'); const $scheduleStartGroup = $modal.find('.slide-schedule-group'); const $scheduleEndGroup = $modal.find('.slide-schedule-end-group'); @@ -100,11 +100,14 @@ jQuery(document).ready(function ($) { } } - return { scheduleStartChoices, scheduleEndChoices }; + return {scheduleStartChoices, scheduleEndChoices}; } function applyChoices() { - const { scheduleStartChoices, scheduleEndChoices } = updateScheduleChoices(isNotification, isLoopStart, isCronStart); + const { + scheduleStartChoices, + scheduleEndChoices + } = updateScheduleChoices(isNotification, isLoopStart, isCronStart); recreateSelectOptions($triggerStart, scheduleStartChoices); recreateSelectOptions($triggerEnd, scheduleEndChoices); } @@ -193,12 +196,12 @@ jQuery(document).ready(function ($) { }); $(document).on('click', '.content-explr-picker', function () { - showPickers('modal-content-explr-picker', function(content) { + showPickers('modal-content-explr-picker', function (content) { inputContentUpdate(content) }); }); - const inputContentUpdate = function(content) { + const inputContentUpdate = function (content) { const $modal = $('.modal-slide:visible'); const $group = $modal.find('.slide-content-id-group'); const $inputLabel = $group.find('.target-label'); @@ -261,15 +264,19 @@ jQuery(document).ready(function ($) { $(document).on('click', '.slide-delete', function () { if (confirm(l.js_slideshow_slide_delete_confirmation)) { const $item = $(this).parents('.slide-item:eq(0)'); - $item.remove(); - $.ajax({ - method: 'DELETE', - url: $(this).attr('data-route').replace('__id__', getId($(this))), - headers: {'Content-Type': 'application/json'}, - success: function(response) { - $('.playlist-item-'+response.playlist_id+' .playlist-duration').html(secondsToHHMMSS(response.duration)); - } - }); + if ($item.parents('ul:eq(0)').find('.slide-item').length === 1) { + document.location.href = $(this).attr('data-route').replace('__id__', getId($(this))); + } else { + $item.remove(); + $.ajax({ + method: 'DELETE', + url: $(this).attr('data-route').replace('__id__', getId($(this))), + headers: {'Content-Type': 'application/json'}, + success: function (response) { + $('.playlist-item-' + response.playlist_id + ' .playlist-duration').html(secondsToHHMMSS(response.duration)); + } + }); + } } }); diff --git a/src/controller/FleetNodePlayerGroupController.py b/src/controller/FleetNodePlayerGroupController.py index c50465d..2e51ee5 100644 --- a/src/controller/FleetNodePlayerGroupController.py +++ b/src/controller/FleetNodePlayerGroupController.py @@ -24,7 +24,7 @@ class FleetNodePlayerGroupController(ObController): self._app.add_url_rule('/fleet/node-player-group/add', 'fleet_node_player_group_add', self.guard_fleet(self._auth(self.fleet_node_player_group_add)), methods=['POST']) self._app.add_url_rule('/fleet/node-player-group/save', 'fleet_node_player_group_save', self.guard_fleet(self._auth(self.fleet_node_player_group_save)), methods=['POST']) self._app.add_url_rule('/fleet/node-player-group/delete/', 'fleet_node_player_group_delete', self.guard_fleet(self._auth(self.fleet_node_player_group_delete)), methods=['GET']) - self._app.add_url_rule('/fleet/node-player-group/unassign-player/', 'fleet_node_player_group_unassign_player', self._auth(self.fleet_node_player_group_unassign_player), methods=['DELETE']) + self._app.add_url_rule('/fleet/node-player-group/unassign-player/', 'fleet_node_player_group_unassign_player', self._auth(self.fleet_node_player_group_unassign_player), methods=['GET', 'DELETE']) self._app.add_url_rule('/fleet/node-player-group/assign-player//', 'fleet_node_player_group_assign_player', self._auth(self.fleet_node_player_group_assign_player), methods=['GET']) def fleet_node_player_group(self): @@ -108,7 +108,10 @@ class FleetNodePlayerGroupController(ObController): self._post_update() pcounter = self._model_store.node_player_group().get_player_counters_by_player_groups(group_id=group_id) - return jsonify({'status': 'ok', 'pcounter': pcounter, 'group_id': group_id}) + if request.headers.get('X-Requested-With') == 'XMLHttpRequest': + return jsonify({'status': 'ok', 'pcounter': pcounter, 'group_id': group_id}) + + return redirect(url_for('fleet_node_player_group_list', player_group_id=group_id)) def fleet_node_player_group_assign_player(self, player_group_id: int = 0, player_id: int = 0): node_player_group = self._model_store.node_player_group().get(player_group_id) diff --git a/src/controller/SlideController.py b/src/controller/SlideController.py index a307527..d340dfd 100644 --- a/src/controller/SlideController.py +++ b/src/controller/SlideController.py @@ -18,7 +18,7 @@ class SlideController(ObController): self._app.add_url_rule('/manage', 'manage', self.manage, methods=['GET']) self._app.add_url_rule('/slideshow/slide/add', 'slideshow_slide_add', self._auth(self.slideshow_slide_add), methods=['POST']) self._app.add_url_rule('/slideshow/slide/edit', 'slideshow_slide_edit', self._auth(self.slideshow_slide_edit), methods=['POST']) - self._app.add_url_rule('/slideshow/slide/delete/', 'slideshow_slide_delete', self._auth(self.slideshow_slide_delete), methods=['DELETE']) + self._app.add_url_rule('/slideshow/slide/delete/', 'slideshow_slide_delete', self._auth(self.slideshow_slide_delete), methods=['GET', 'DELETE']) self._app.add_url_rule('/slideshow/slide/position', 'slideshow_slide_position', self._auth(self.slideshow_slide_position), methods=['POST']) self._app.add_url_rule('/slideshow/player-refresh', 'slideshow_player_refresh', self._auth(self.slideshow_player_refresh), methods=['GET']) @@ -81,11 +81,17 @@ class SlideController(ObController): if not slide: abort(404) + playlist_id = slide.playlist_id + self._model_store.slide().delete(slide_id) - duration = self._model_store.playlist().get_durations_by_playlists(playlist_id=slide.playlist_id) + duration = self._model_store.playlist().get_durations_by_playlists(playlist_id=playlist_id) self._post_update() - return jsonify({'status': 'ok', 'duration': duration, 'playlist_id': slide.playlist_id}) + + if request.headers.get('X-Requested-With') == 'XMLHttpRequest': + return jsonify({'status': 'ok', 'duration': duration, 'playlist_id': playlist_id}) + + return redirect(url_for('playlist_list', playlist_id=playlist_id)) def slideshow_slide_position(self): data = request.get_json()