From e15cd177630fa01566e6bfaeac5413a69e58dd32 Mon Sep 17 00:00:00 2001 From: Wotuu Date: Fri, 15 Nov 2024 17:12:25 +0100 Subject: [PATCH] #2611 Route publishing page now shows a publishing section along with a datetime selector. --- lang/en_US/js.php | 1 + .../js/custom/inline/dungeonroute/table.js | 12 ++++ .../custom/inline/dungeonroute/tableview.js | 70 +++++++++++++++++++ .../assets/js/custom/inline/team/edit.js | 19 +++-- ...ute_publishing_actions_template.handlebars | 1 + resources/views/team/edit.blade.php | 15 ++-- .../team/edittabs/routepublishing.blade.php | 2 +- 7 files changed, 106 insertions(+), 14 deletions(-) create mode 100644 resources/assets/js/handlebars/team_dungeonroute_table_route_publishing_actions_template.handlebars diff --git a/lang/en_US/js.php b/lang/en_US/js.php index b4f56ecb5a..7d28c02bfd 100644 --- a/lang/en_US/js.php +++ b/lang/en_US/js.php @@ -361,6 +361,7 @@ 'floorunion_rotation_label' => 'Rotation', 'floorunionarea_floor_union_id_label' => 'Floor Union ID', 'actions_label' => 'Actions', + 'scheduling_label' => 'Scheduling', 'add_to_team_label' => 'Add to team...', 'view_label' => 'View', 'collaborator_label' => 'Edit', diff --git a/resources/assets/js/custom/inline/dungeonroute/table.js b/resources/assets/js/custom/inline/dungeonroute/table.js index 30ce2838fa..bba6474575 100644 --- a/resources/assets/js/custom/inline/dungeonroute/table.js +++ b/resources/assets/js/custom/inline/dungeonroute/table.js @@ -5,6 +5,7 @@ class DungeonrouteTable extends InlineCode { this._viewMode = 'biglist'; this._dt = null; + /** @type TableView */ this._tableView = null; this._routeData = []; // Handles the displaying of tags inside the table @@ -87,6 +88,10 @@ class DungeonrouteTable extends InlineCode { this._tableView = new TeamTableView(); break; } + case 'team_route_publishing': { + this._tableView = new TeamRoutePublishingTableView(); + break; + } case 'routes': { this._tableView = new RoutesTableView(); break; @@ -476,6 +481,13 @@ class DungeonrouteTable extends InlineCode { } return result; } + }, + scheduling: { + 'title': lang.get('messages.scheduling_label'), + 'render': function (data, type, row, meta) { + let template = Handlebars.templates['team_dungeonroute_table_route_publishing_actions_template']; + return template($.extend({}, getHandlebarsDefaultVariables(), {public_key: row.public_key})); + } } }; diff --git a/resources/assets/js/custom/inline/dungeonroute/tableview.js b/resources/assets/js/custom/inline/dungeonroute/tableview.js index 4cc5e582a1..85519c4a48 100644 --- a/resources/assets/js/custom/inline/dungeonroute/tableview.js +++ b/resources/assets/js/custom/inline/dungeonroute/tableview.js @@ -232,3 +232,73 @@ class TeamTableView extends TableView { return 'team'; } } + + +class TeamRoutePublishingTableView extends TableView { + constructor() { + super(); + + this._teamPublicKey = ''; + this._isUserModerator = false; + } + + /** + * Set the team ID (for filtering purposes) + * @param value + */ + setTeamPublicKey(value) { + this._teamPublicKey = value; + } + + setIsUserModerator(value) { + this._isUserModerator = value; + } + + /** + * Gets the Id of the team that was set for this view. + * @returns {*} + */ + getTeamPublicKey() { + return this._teamPublicKey; + } + + /** + * Get the parameters when sending the AJAX request + * @returns {{team_public_key: *}} + */ + getAjaxParameters() { + return {team_public_key: this._teamPublicKey}; + } + + getColumns(view) { + let defaultDungeonId = $('#dungeonroute_search_dungeon_id').val(); + + this._columns = { + list: [ + {name: 'title', width: '15%'}, + {name: 'dungeon', width: '15%', defaultSearch: defaultDungeonId}, + {name: 'features', width: '25%', className: 'd-none d-lg-table-cell'}, + // {name: 'setup', width: '15%'}, + {name: 'enemy_forces', width: '10%'}, + ], + biglist: [ + {name: 'preview', width: '15%', clickable: false}, + {name: 'title', width: '15%'}, + {name: 'dungeon', width: '15%', className: 'd-none d-lg-table-cell', defaultSearch: defaultDungeonId}, + {name: 'features', width: '25%', className: 'd-none d-lg-table-cell'}, + ] + }; + + // Push different columns based on if add mode is enabled or not + if (this._isUserModerator) { + this._columns.list.push({name: 'scheduling', width: '15%', clickable: false}); + this._columns.biglist.push({name: 'scheduling', width: '15%', clickable: false}); + } + + return super.getColumns(view); + } + + getName() { + return 'team_route_publishing'; + } +} diff --git a/resources/assets/js/custom/inline/team/edit.js b/resources/assets/js/custom/inline/team/edit.js index 684a628c5e..2647e253cf 100644 --- a/resources/assets/js/custom/inline/team/edit.js +++ b/resources/assets/js/custom/inline/team/edit.js @@ -12,9 +12,16 @@ class TeamEdit extends InlineCode { super.activate(); let self = this; - let code = _inlineManager.getInlineCodeById(this.options.routesTableInlineId); - let tableView = code.getTableView(); - tableView.setIsUserModerator(this.options.userIsModerator); + + // All dungeon route tables on this page need to know if the user is a moderator or not + let routesTablesInlineCode = _inlineManager.getInlineCode('dungeonroute/table'); + for (let index in routesTablesInlineCode) { + let tableView = routesTablesInlineCode[index].getTableView(); + tableView.setIsUserModerator(this.options.userIsModerator); + } + + let routesTableInlineCode = _inlineManager.getInlineCodeById(this.options.routesTableInlineId); + let tableView = routesTableInlineCode.getTableView(); $('#team_invite_link_copy_to_clipboard').unbind('click').bind('click', function () { copyToClipboard($('#team_members_invite_link').val()); @@ -29,7 +36,7 @@ class TeamEdit extends InlineCode { $('#add_route_btn:enabled').unbind('click').bind('click', function () { tableView.setAddMode(true); - code.refreshTable(); + routesTableInlineCode.refreshTable(); $(this).hide(); $('#view_existing_routes').show(); }); @@ -38,7 +45,7 @@ class TeamEdit extends InlineCode { $('#view_existing_routes').unbind('click').bind('click', function () { tableView.setAddMode(false); - code.refreshTable(); + routesTableInlineCode.refreshTable(); $(this).hide(); $('#add_route_btn').show(); }); @@ -91,7 +98,7 @@ class TeamEdit extends InlineCode { }); }); - $(this.options.routePublishingEnabledSelector).on('change', function(){ + $(this.options.routePublishingEnabledSelector).on('change', function () { $.ajax({ type: 'PUT', url: `/ajax/team/${self.options.teamPublicKey}/routepublishing`, diff --git a/resources/assets/js/handlebars/team_dungeonroute_table_route_publishing_actions_template.handlebars b/resources/assets/js/handlebars/team_dungeonroute_table_route_publishing_actions_template.handlebars new file mode 100644 index 0000000000..42f8422bf1 --- /dev/null +++ b/resources/assets/js/handlebars/team_dungeonroute_table_route_publishing_actions_template.handlebars @@ -0,0 +1 @@ + diff --git a/resources/views/team/edit.blade.php b/resources/views/team/edit.blade.php index 328bfb5f2c..3b7dcdde5c 100644 --- a/resources/views/team/edit.blade.php +++ b/resources/views/team/edit.blade.php @@ -13,8 +13,9 @@ * @var int $userAdFreeTeamMembersMax */ -$title = sprintf(__('view_team.edit.title'), $team->name); -$routesTableInlineId = 'team_edit_routes_table'; +$title = sprintf(__('view_team.edit.title'), $team->name); +$routesTableInlineId = 'team_edit_routes_table'; +$routePublishingTableInlineId = 'team_edit_route_publishing_table'; /** @var User $user */ $user = Auth::user(); @@ -67,7 +68,7 @@ @endsection @include('common.general.inline', ['path' => 'team/edit', 'options' => [ - 'dependenciesById' => [$routesTableInlineId], + 'dependenciesById' => [$routesTableInlineId, $routePublishingTableInlineId], 'routesTableInlineId' => $routesTableInlineId, 'routePublishingEnabledSelector' => '#route_publishing_enabled_checkbox', @@ -98,21 +99,21 @@ @include('team.edittabs.routes', [ 'inlineId' => $routesTableInlineId, 'team' => $team, - 'userIsModerator' => $userIsModerator + 'userIsModerator' => $userIsModerator, ]) @include('team.edittabs.members', [ 'team' => $team, 'userIsModerator' => $userIsModerator, 'userHasAdFreeTeamMembersPatreonBenefit' => $userHasAdFreeTeamMembersPatreonBenefit, 'userAdFreeTeamMembersRemaining' => $userAdFreeTeamMembersRemaining, - 'userAdFreeTeamMembersMax' => $userAdFreeTeamMembersMax + 'userAdFreeTeamMembersMax' => $userAdFreeTeamMembersMax, ]) @include('team.edittabs.teamtags', ['team' => $team]) @if($userIsModerator) @include('team.edittabs.routepublishing', [ - 'inlineId' => 'team_edit_route_publishing_table', - 'team' => $team + 'inlineId' => $routePublishingTableInlineId, + 'team' => $team, ]) @include('team.edittabs.details', ['team' => $team]) @endif diff --git a/resources/views/team/edittabs/routepublishing.blade.php b/resources/views/team/edittabs/routepublishing.blade.php index 826903b75f..87b20b2b92 100644 --- a/resources/views/team/edittabs/routepublishing.blade.php +++ b/resources/views/team/edittabs/routepublishing.blade.php @@ -28,7 +28,7 @@
@include('common.dungeonroute.table', [ 'inlineId' => $inlineId, - 'view' => 'team', + 'view' => 'team_route_publishing', 'team' => $team, 'tableId' => 'route_publishing_table', 'filterButtonId' => 'route_publishing_filter_button',