From 33c3918832dd12eb72c016dd040f311fc33a6956 Mon Sep 17 00:00:00 2001 From: Peter Pfeufer Date: Fri, 16 Jan 2026 22:08:55 +0100 Subject: [PATCH] [CHANGE] DataTable processing refactored/improved --- CHANGELOG.md | 1 + sovtimer/locale/django.pot | 16 +-- sovtimer/static/sovtimer/js/aa-sov-timer.js | 98 +++++++++---------- .../static/sovtimer/js/aa-sov-timer.min.js | 2 +- .../sovtimer/js/aa-sov-timer.min.js.map | 2 +- sovtimer/templates/sovtimer/dashboard.html | 7 -- sovtimer/tests/test_auth_hooks.py | 2 +- sovtimer/tests/test_views.py | 7 +- sovtimer/views.py | 43 +++++--- 9 files changed, 86 insertions(+), 92 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a7beca02..5d09b6d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ Section Order: ### Changed +- DataTable processing refactored/improved - Enabled global search in the campaign table - Allow clicking on table headers to change the sorting order diff --git a/sovtimer/locale/django.pot b/sovtimer/locale/django.pot index 250a773b..9dab4f5f 100644 --- a/sovtimer/locale/django.pot +++ b/sovtimer/locale/django.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: AA Sov Timer 3.3.2\n" "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n" -"POT-Creation-Date: 2026-01-05 22:47+0100\n" +"POT-Creation-Date: 2026-01-16 22:11+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -51,14 +51,6 @@ msgstr "" msgid "Sovereignty campaigns" msgstr "" -#: sovtimer/templates/sovtimer/dashboard.html:15 sovtimer/views.py:147 -msgid "Yes" -msgstr "" - -#: sovtimer/templates/sovtimer/dashboard.html:16 sovtimer/views.py:140 -msgid "No" -msgstr "" - #: sovtimer/templates/sovtimer/partials/common/spinner.html:8 msgid "Loading …" msgstr "" @@ -131,14 +123,14 @@ msgstr "" msgid "Join our team of translators!" msgstr "" -#: sovtimer/views.py:151 +#: sovtimer/views.py:148 msgid "Defenders making progress" msgstr "" -#: sovtimer/views.py:155 +#: sovtimer/views.py:152 msgid "Attackers making progress" msgstr "" -#: sovtimer/views.py:159 +#: sovtimer/views.py:156 msgid "Neither side has made any progress yet" msgstr "" diff --git a/sovtimer/static/sovtimer/js/aa-sov-timer.js b/sovtimer/static/sovtimer/js/aa-sov-timer.js index be390315..4bf2d41e 100644 --- a/sovtimer/static/sovtimer/js/aa-sov-timer.js +++ b/sovtimer/static/sovtimer/js/aa-sov-timer.js @@ -45,19 +45,21 @@ $(document).ready(() => { /** * Remove search from column control. * - * @param {Array} columnControl Column control. - * @param {int} index Index of the column to remove search from. * @return {Array} Modified column control. * @private */ - const _removeSearchFromColumnControl = (columnControl, index = 1) => { - const cc = JSON.parse(JSON.stringify(columnControl)); - - if (cc[index]) { - cc[index].content = []; - } + const _removeSearchFromColumnControl = () => { + return sovtimerSettings.dataTables.columnControl.map((control, index) => index === 1 ? { ...control, content: [] } : control); + }; - return cc; + /** + * Remove all controls from column control. + * + * @return {Array} Modified column control. + * @private + */ + const _removeColumnControl = () => { // eslint-disable-line no-unused-vars + return sovtimerSettings.dataTables.columnControl.map((control) => ({ ...control, content: [] })); }; /** @@ -95,16 +97,17 @@ $(document).ready(() => { const counts = data.reduce((campaigns, item) => { campaigns.total++; - if ( - item.active_campaign === sovtimerSettings.translation.no - && item.remaining_time_in_seconds <= sovtimerSettings.upcomingTimerThreshold // jshint ignore:line - ) { - campaigns.upcoming++; + if (item.campaign_status && Object.prototype.hasOwnProperty.call(campaigns, item.campaign_status)) { + campaigns[item.campaign_status]++; } - if (item.active_campaign === sovtimerSettings.translation.yes) { - campaigns.active++; - } + // if (item.campaign_status === 'upcoming') { + // campaigns.upcoming++; + // } + // + // if (item.campaign_status === 'active') { + // campaigns.active++; + // } return campaigns; }, {total: 0, upcoming: 0, active: 0}); @@ -132,33 +135,33 @@ $(document).ready(() => { // Column: 0 - System { data: { - display: d => d.solar_system_name_html, - sort: d => d.solar_system_name, - filter: d => d.solar_system_name + display: d => d.solar_system.display, + sort: d => d.solar_system.sort, + filter: d => d.solar_system.sort } }, // Column: 1 - Constellation { data: { - display: d => d.constellation_name_html, - sort: d => d.constellation_name, - filter: d => d.constellation_name + display: d => d.constellation.display, + sort: d => d.constellation.sort, + filter: d => d.constellation.sort } }, // Column: 2 - Region { data: { - display: d => d.region_name_html, - sort: d => d.region_name, - filter: d => d.region_name + display: d => d.region.display, + sort: d => d.region.sort, + filter: d => d.region.sort } }, // Column: 3 - Defender { data: { - display: d => d.defender_name_html, - sort: d => d.defender_name, - filter: d => d.defender_name + display: d => d.defender.display, + sort: d => d.defender.sort, + filter: d => d.defender.sort } }, // Column: 4 - Activity Defense Multiplier @@ -176,16 +179,16 @@ $(document).ready(() => { // Column: 6 - Remaining Time { data: { - display: d => d.remaining_time, - sort: d => parseInt(d.remaining_time_in_seconds, 10), - filter: d => parseInt(d.remaining_time_in_seconds, 10) + display: d => d.remaining_time.display, + sort: d => d.remaining_time.seconds, + filter: d => d.remaining_time.seconds } }, // Column: 7 - Campaign Progress { data: { - display: d => d.campaign_progress, - sort: d => d.campaign_progress, + display: d => d.campaign_progress.display, + sort: d => d.campaign_progress.current, filter: d => d.campaign_status } } @@ -193,25 +196,18 @@ $(document).ready(() => { columnDefs: [ { targets: [4, 5, 6, 7], - columnControl: _removeSearchFromColumnControl(sovtimerSettings.dataTables.columnControl, 1) + columnControl: _removeSearchFromColumnControl() + }, + { + targets: [6, 7], + type: 'float', + width: 175 }, - {target: 6, type: 'string', width: 175}, - {target: 7, type: 'string', width: 175} ], order: [[5, 'asc']], createdRow: (row, data) => { - // Upcoming timer (< 4 hrs) - if ( - data.active_campaign === sovtimerSettings.translation.no - && data.remaining_time_in_seconds <= sovtimerSettings.upcomingTimerThreshold // jshint ignore: line - ) { - $(row).addClass('aa-sovtimer-upcoming-campaign'); - } - - // Active timer - if (data.active_campaign === sovtimerSettings.translation.yes) { - $(row).addClass('aa-sovtimer-active-campaign'); - } + // Add a class for upcoming or active campaigns + $(row).addClass(`aa-sovtimer-${data.campaign_status}-campaign`); }, paging: false, initComplete: () => { @@ -226,7 +222,7 @@ $(document).ready(() => { return { rowIdx, cellNode: dt.cell(rowIdx, 6).node(), - remainingSeconds: Number(rowData.remaining_time_in_seconds) + remainingSeconds: Number(rowData.remaining_time.seconds) }; }); @@ -242,7 +238,7 @@ $(document).ready(() => { return { rowIdx, cellNode: dt.cell(rowIdx, 6).node(), - remainingSeconds: Number(rowData.remaining_time_in_seconds) + remainingSeconds: Number(rowData.remaining_time.seconds) }; }); }; diff --git a/sovtimer/static/sovtimer/js/aa-sov-timer.min.js b/sovtimer/static/sovtimer/js/aa-sov-timer.min.js index 7a208d5d..44d442bd 100644 --- a/sovtimer/static/sovtimer/js/aa-sov-timer.min.js +++ b/sovtimer/static/sovtimer/js/aa-sov-timer.min.js @@ -1,2 +1,2 @@ -$(document).ready(()=>{'use strict';const a='undefined'!=typeof sovtimerJsSettingsOverride?objectDeepMerge(sovtimerJsSettingsDefaults,sovtimerJsSettingsOverride):sovtimerJsSettingsDefaults,t={campaignsTotal:$('.aa-sovtimer-campaigns-total'),campaignsUpcoming:$('.aa-sovtimer-campaigns-upcoming'),campaignsActive:$('.aa-sovtimer-campaigns-active')},e=({selector:a='body',namespace:t='aa-sovtimer'})=>{document.querySelectorAll(`${a} [data-bs-tooltip="${t}"]`).forEach(a=>{const t=bootstrap.Tooltip.getInstance(a);return t&&t.dispose(),$('.bs-tooltip-auto').remove(),new bootstrap.Tooltip(a)})},n=(a,t=1)=>{const e=JSON.parse(JSON.stringify(a));return e[t]&&(e[t].content=[]),e},r=a=>{const t=a<0,e=t?'-':'',n='aa-sovtimer-remaining'+(t?' aa-sovtimer-timer-elapsed':'');a=Math.abs(a)+(t?1:-1);return{countdown:`${e}${Math.floor(a/86400)}d ${String(Math.floor(a/3600)%24).padStart(2,'0')}h ${String(Math.floor(a/60)%60).padStart(2,'0')}m ${String(Math.floor(a)%60).padStart(2,'0')}s`,remainingTimeInSeconds:e+a}},i=e=>{const n=e.reduce((t,e)=>(t.total++,e.active_campaign===a.translation.no&&e.remaining_time_in_seconds<=a.upcomingTimerThreshold&&t.upcoming++,e.active_campaign===a.translation.yes&&t.active++,t),{total:0,upcoming:0,active:0});t.campaignsTotal.html(n.total),t.campaignsUpcoming.html(n.upcoming),t.campaignsActive.html(n.active)},o=$('.aa-sovtimer-campaigns');fetchGet({url:a.url.ajaxUpdate}).then(t=>{if(!t)return;new DataTable(o,{language:{url:a.dataTables.languageUrl},data:t,layout:a.dataTables.layout,ordering:a.dataTables.ordering,columnControl:a.dataTables.columnControl,columns:[{data:{display:a=>a.solar_system_name_html,sort:a=>a.solar_system_name,filter:a=>a.solar_system_name}},{data:{display:a=>a.constellation_name_html,sort:a=>a.constellation_name,filter:a=>a.constellation_name}},{data:{display:a=>a.region_name_html,sort:a=>a.region_name,filter:a=>a.region_name}},{data:{display:a=>a.defender_name_html,sort:a=>a.defender_name,filter:a=>a.defender_name}},{data:'adm'},{data:{display:t=>t.start_time?moment(t.start_time).utc().format(a.datetimeFormat.datetimeLong):'',sort:a=>a.start_time?moment(a.start_time).unix():0,filter:a=>a.start_time||''}},{data:{display:a=>a.remaining_time,sort:a=>parseInt(a.remaining_time_in_seconds,10),filter:a=>parseInt(a.remaining_time_in_seconds,10)}},{data:{display:a=>a.campaign_progress,sort:a=>a.campaign_progress,filter:a=>a.campaign_status}}],columnDefs:[{targets:[4,5,6,7],columnControl:n(a.dataTables.columnControl,1)},{target:6,type:'string',width:175},{target:7,type:'string',width:175}],order:[[5,'asc']],createdRow:(t,e)=>{e.active_campaign===a.translation.no&&e.remaining_time_in_seconds<=a.upcomingTimerThreshold&&$(t).addClass('aa-sovtimer-upcoming-campaign'),e.active_campaign===a.translation.yes&&$(t).addClass('aa-sovtimer-active-campaign')},paging:!1,initComplete:()=>{const t=o.DataTable();let n=t.rows().indexes().toArray().map(a=>{const e=t.row(a).data();return{rowIdx:a,cellNode:t.cell(a,6).node(),remainingSeconds:Number(e.remaining_time_in_seconds)}});const s=()=>{n=t.rows().indexes().toArray().map(a=>{const e=t.row(a).data();return{rowIdx:a,cellNode:t.cell(a,6).node(),remainingSeconds:Number(e.remaining_time_in_seconds)}})},m=()=>{for(let a=0;a{$(a).click(()=>{$.fn.dataTable.ext.search=[];const n=(a,t,n,r)=>!r||e(r);$.fn.dataTable.ext.search.push(n),$('.aa-sovtimer-filter-active').removeClass('aa-sovtimer-filter-active'),$(a).addClass('aa-sovtimer-filter-active'),t.draw()})};i(t.rows().data().toArray()),e({selector:'.aa-sovtimer'}),s(),m(),setInterval(m,1e3),setInterval(()=>{fetchGet({url:a.url.ajaxUpdate}).then(a=>{t.clear().rows.add(a).draw(),i(a),e({selector:'.aa-sovtimer'})}).catch(console.error)},3e4);[['#aa-sovtimer-filter-total-campaigns',()=>!0],['#aa-sovtimer-filter-upcoming-campaigns',a=>'upcoming'===a.campaign_status],['#aa-sovtimer-filter-active-campaigns',a=>'active'===a.campaign_status]].forEach(([a,t])=>c(a,t)),t.on('draw',()=>{s(),i(t.rows().data().toArray()),e({selector:'.aa-sovtimer'})})}})}).catch(console.error)}); +$(document).ready(()=>{'use strict';const a='undefined'!=typeof sovtimerJsSettingsOverride?objectDeepMerge(sovtimerJsSettingsDefaults,sovtimerJsSettingsOverride):sovtimerJsSettingsDefaults,t={campaignsTotal:$('.aa-sovtimer-campaigns-total'),campaignsUpcoming:$('.aa-sovtimer-campaigns-upcoming'),campaignsActive:$('.aa-sovtimer-campaigns-active')},e=({selector:a='body',namespace:t='aa-sovtimer'})=>{document.querySelectorAll(`${a} [data-bs-tooltip="${t}"]`).forEach(a=>{const t=bootstrap.Tooltip.getInstance(a);return t&&t.dispose(),$('.bs-tooltip-auto').remove(),new bootstrap.Tooltip(a)})},s=()=>a.dataTables.columnControl.map((a,t)=>1===t?{...a,content:[]}:a),o=a=>{const t=a<0,e=t?'-':'',s='aa-sovtimer-remaining'+(t?' aa-sovtimer-timer-elapsed':'');a=Math.abs(a)+(t?1:-1);return{countdown:`${e}${Math.floor(a/86400)}d ${String(Math.floor(a/3600)%24).padStart(2,'0')}h ${String(Math.floor(a/60)%60).padStart(2,'0')}m ${String(Math.floor(a)%60).padStart(2,'0')}s`,remainingTimeInSeconds:e+a}},r=a=>{const e=a.reduce((a,t)=>(a.total++,t.campaign_status&&Object.prototype.hasOwnProperty.call(a,t.campaign_status)&&a[t.campaign_status]++,a),{total:0,upcoming:0,active:0});t.campaignsTotal.html(e.total),t.campaignsUpcoming.html(e.upcoming),t.campaignsActive.html(e.active)},i=$('.aa-sovtimer-campaigns');fetchGet({url:a.url.ajaxUpdate}).then(t=>{if(!t)return;new DataTable(i,{language:{url:a.dataTables.languageUrl},data:t,layout:a.dataTables.layout,ordering:a.dataTables.ordering,columnControl:a.dataTables.columnControl,columns:[{data:{display:a=>a.solar_system.display,sort:a=>a.solar_system.sort,filter:a=>a.solar_system.sort}},{data:{display:a=>a.constellation.display,sort:a=>a.constellation.sort,filter:a=>a.constellation.sort}},{data:{display:a=>a.region.display,sort:a=>a.region.sort,filter:a=>a.region.sort}},{data:{display:a=>a.defender.display,sort:a=>a.defender.sort,filter:a=>a.defender.sort}},{data:'adm'},{data:{display:t=>t.start_time?moment(t.start_time).utc().format(a.datetimeFormat.datetimeLong):'',sort:a=>a.start_time?moment(a.start_time).unix():0,filter:a=>a.start_time||''}},{data:{display:a=>a.remaining_time.display,sort:a=>a.remaining_time.seconds,filter:a=>a.remaining_time.seconds}},{data:{display:a=>a.campaign_progress.display,sort:a=>a.campaign_progress.current,filter:a=>a.campaign_status}}],columnDefs:[{targets:[4,5,6,7],columnControl:s()},{targets:[6,7],type:'float',width:175}],order:[[5,'asc']],createdRow:(a,t)=>{$(a).addClass(`aa-sovtimer-${t.campaign_status}-campaign`)},paging:!1,initComplete:()=>{const t=i.DataTable();let s=t.rows().indexes().toArray().map(a=>{const e=t.row(a).data();return{rowIdx:a,cellNode:t.cell(a,6).node(),remainingSeconds:Number(e.remaining_time.seconds)}});const n=()=>{s=t.rows().indexes().toArray().map(a=>{const e=t.row(a).data();return{rowIdx:a,cellNode:t.cell(a,6).node(),remainingSeconds:Number(e.remaining_time.seconds)}})},l=()=>{for(let a=0;a{$(a).click(()=>{$.fn.dataTable.ext.search=[];const s=(a,t,s,o)=>!o||e(o);$.fn.dataTable.ext.search.push(s),$('.aa-sovtimer-filter-active').removeClass('aa-sovtimer-filter-active'),$(a).addClass('aa-sovtimer-filter-active'),t.draw()})};r(t.rows().data().toArray()),e({selector:'.aa-sovtimer'}),n(),l(),setInterval(l,1e3),setInterval(()=>{fetchGet({url:a.url.ajaxUpdate}).then(a=>{t.clear().rows.add(a).draw(),r(a),e({selector:'.aa-sovtimer'})}).catch(console.error)},3e4);[['#aa-sovtimer-filter-total-campaigns',()=>!0],['#aa-sovtimer-filter-upcoming-campaigns',a=>'upcoming'===a.campaign_status],['#aa-sovtimer-filter-active-campaigns',a=>'active'===a.campaign_status]].forEach(([a,t])=>c(a,t)),t.on('draw',()=>{n(),r(t.rows().data().toArray()),e({selector:'.aa-sovtimer'})})}})}).catch(console.error)}); //# sourceMappingURL=aa-sov-timer.min.js.map \ No newline at end of file diff --git a/sovtimer/static/sovtimer/js/aa-sov-timer.min.js.map b/sovtimer/static/sovtimer/js/aa-sov-timer.min.js.map index 179dfc42..a94cc930 100644 --- a/sovtimer/static/sovtimer/js/aa-sov-timer.min.js.map +++ b/sovtimer/static/sovtimer/js/aa-sov-timer.min.js.map @@ -1 +1 @@ -{"version":3,"names":["$","document","ready","sovtimerSettings","sovtimerJsSettingsOverride","objectDeepMerge","sovtimerJsSettingsDefaults","elements","campaignsTotal","campaignsUpcoming","campaignsActive","_bootstrapTooltip","selector","namespace","querySelectorAll","forEach","tooltipTriggerEl","existing","bootstrap","Tooltip","getInstance","dispose","remove","_removeSearchFromColumnControl","columnControl","index","cc","JSON","parse","stringify","content","_secondsToRemainingTime","secondsRemaining","isElapsed","prefix","spanClasses","Math","abs","countdown","floor","String","padStart","remainingTimeInSeconds","_updateCampaignCounts","data","counts","reduce","campaigns","item","total","active_campaign","translation","no","remaining_time_in_seconds","upcomingTimerThreshold","upcoming","yes","active","html","sovCampaignTable","fetchGet","url","ajaxUpdate","then","tableData","DataTable","language","dataTables","languageUrl","layout","ordering","columns","display","d","solar_system_name_html","sort","solar_system_name","filter","constellation_name_html","constellation_name","region_name_html","region_name","defender_name_html","defender_name","start_time","moment","utc","format","datetimeFormat","datetimeLong","unix","remaining_time","parseInt","campaign_progress","campaign_status","columnDefs","targets","target","type","width","order","createdRow","row","addClass","paging","initComplete","dt","_rowCache","rows","indexes","toArray","map","rowIdx","rowData","cellNode","cell","node","remainingSeconds","Number","_rebuildRowCache","_tick","i","length","r","remaining","innerHTML","_filterCampaigns","predicate","click","fn","dataTable","ext","search","settings","searchData","push","removeClass","draw","setInterval","newData","clear","add","catch","console","error","on"],"sources":["aa-sov-timer.js"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"names":["$","document","ready","sovtimerSettings","sovtimerJsSettingsOverride","objectDeepMerge","sovtimerJsSettingsDefaults","elements","campaignsTotal","campaignsUpcoming","campaignsActive","_bootstrapTooltip","selector","namespace","querySelectorAll","forEach","tooltipTriggerEl","existing","bootstrap","Tooltip","getInstance","dispose","remove","_removeSearchFromColumnControl","dataTables","columnControl","map","control","index","content","_secondsToRemainingTime","secondsRemaining","isElapsed","prefix","spanClasses","Math","abs","countdown","floor","String","padStart","remainingTimeInSeconds","_updateCampaignCounts","data","counts","reduce","campaigns","item","total","campaign_status","Object","prototype","hasOwnProperty","call","upcoming","active","html","sovCampaignTable","fetchGet","url","ajaxUpdate","then","tableData","DataTable","language","languageUrl","layout","ordering","columns","display","d","solar_system","sort","filter","constellation","region","defender","start_time","moment","utc","format","datetimeFormat","datetimeLong","unix","remaining_time","seconds","campaign_progress","current","columnDefs","targets","type","width","order","createdRow","row","addClass","paging","initComplete","dt","_rowCache","rows","indexes","toArray","rowIdx","rowData","cellNode","cell","node","remainingSeconds","Number","_rebuildRowCache","_tick","i","length","r","remaining","innerHTML","_filterCampaigns","predicate","click","fn","dataTable","ext","search","settings","searchData","push","removeClass","draw","setInterval","newData","clear","add","catch","console","error","on"],"sources":["aa-sov-timer.js"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/sovtimer/templates/sovtimer/dashboard.html b/sovtimer/templates/sovtimer/dashboard.html index cc84c26f..428e62fc 100644 --- a/sovtimer/templates/sovtimer/dashboard.html +++ b/sovtimer/templates/sovtimer/dashboard.html @@ -12,18 +12,11 @@ {% endblock %} {% block extra_javascript %} - {% translate "Yes" as yes %} - {% translate "No" as no %} - diff --git a/sovtimer/tests/test_auth_hooks.py b/sovtimer/tests/test_auth_hooks.py index b24730cb..78b3c084 100644 --- a/sovtimer/tests/test_auth_hooks.py +++ b/sovtimer/tests/test_auth_hooks.py @@ -24,7 +24,7 @@ def setUpClass(cls) -> None: # User cls.user_1001 = create_fake_user( - character_id=1001, character_name="Peter Parker" + character_id=1009, character_name="Peter Parker" ) cls.html_menu = f""" diff --git a/sovtimer/tests/test_views.py b/sovtimer/tests/test_views.py index db1127f6..cefdcb50 100644 --- a/sovtimer/tests/test_views.py +++ b/sovtimer/tests/test_views.py @@ -156,8 +156,8 @@ def test_dashboard_data_includes_active_campaigns( self.assertEqual(response.status_code, HTTPStatus.OK) self.assertEqual(len(response.json()), 1) - self.assertEqual(response.json()[0]["solar_system_name"], "System A") - self.assertEqual(response.json()[0]["defender_name"], "Alliance A") + self.assertEqual(response.json()[0]["solar_system"]["sort"], "System A") + self.assertEqual(response.json()[0]["defender"]["sort"], "Alliance A") self.assertEqual(response.json()[0]["campaign_status"], "active") @patch("sovtimer.views.Campaign.Type") @@ -305,5 +305,6 @@ def test_sets_attackers_progress_when_previous_progress_is_higher( self.assertEqual(response.status_code, HTTPStatus.OK) self.assertEqual(len(response.json()), 1) self.assertIn( - "Attackers making progress", response.json()[0]["campaign_progress"] + "Attackers making progress", + response.json()[0]["campaign_progress"]["display"], ) diff --git a/sovtimer/views.py b/sovtimer/views.py index cacb9165..d8c90a58 100644 --- a/sovtimer/views.py +++ b/sovtimer/views.py @@ -136,15 +136,12 @@ def dashboard_data( # pylint: disable=too-many-statements too-many-locals curr_formatted = _fmt_float_to_percentage(campaign.progress_current) campaign_progress_html = curr_formatted - - active_campaign = _("No") campaign_status = "inactive" if 0 <= remaining_time_in_seconds <= 14400: campaign_status = "upcoming" if remaining_time_in_seconds < 0: - active_campaign = _("Yes") campaign_status = "active" if campaign.progress_previous < campaign.progress_current: @@ -182,21 +179,35 @@ def dashboard_data( # pylint: disable=too-many-statements too-many-locals data.append( { - "event_type": Campaign.Type(campaign.event_type).label, - "solar_system_name": campaign_system_name, - "solar_system_name_html": solar_system_name_html, - "constellation_name": constellation_name, - "constellation_name_html": constellation_name_html, - "region_name": region_name, - "region_name_html": region_name_html, - "defender_name": defender_name, - "defender_name_html": defender_name_html, + # "event_type": Campaign.Type(campaign.event_type).label, + "solar_system": { + "display": solar_system_name_html, + "sort": campaign_system_name, + }, + "constellation": { + "display": constellation_name_html, + "sort": constellation_name, + }, + "region": { + "display": region_name_html, + "sort": region_name, + }, + "defender": { + "display": defender_name_html, + "sort": defender_name, + }, "adm": structure_adm, "start_time": start_time, - "remaining_time": "", - "remaining_time_in_seconds": remaining_time_in_seconds, - "campaign_progress": campaign_progress_html, - "active_campaign": active_campaign, + "remaining_time": { + "display": "", + "seconds": remaining_time_in_seconds, + }, + # "remaining_time_in_seconds": remaining_time_in_seconds, + "campaign_progress": { + "current": campaign.progress_current, + "previous": campaign.progress_previous, + "display": campaign_progress_html, + }, "campaign_status": campaign_status, } )