aa-intel-tool 2.10.1__py3-none-any.whl → 2.11.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. aa_intel_tool/__init__.py +1 -1
  2. aa_intel_tool/auth_hooks.py +2 -2
  3. aa_intel_tool/locale/cs_CZ/LC_MESSAGES/django.po +2 -2
  4. aa_intel_tool/locale/de/LC_MESSAGES/django.po +2 -2
  5. aa_intel_tool/locale/django.pot +3 -3
  6. aa_intel_tool/locale/es/LC_MESSAGES/django.po +2 -2
  7. aa_intel_tool/locale/fr_FR/LC_MESSAGES/django.po +2 -2
  8. aa_intel_tool/locale/it_IT/LC_MESSAGES/django.po +2 -2
  9. aa_intel_tool/locale/ja/LC_MESSAGES/django.mo +0 -0
  10. aa_intel_tool/locale/ja/LC_MESSAGES/django.po +33 -33
  11. aa_intel_tool/locale/ko_KR/LC_MESSAGES/django.po +2 -2
  12. aa_intel_tool/locale/nl_NL/LC_MESSAGES/django.po +2 -2
  13. aa_intel_tool/locale/pl_PL/LC_MESSAGES/django.po +2 -2
  14. aa_intel_tool/locale/ru/LC_MESSAGES/django.po +2 -2
  15. aa_intel_tool/locale/sk/LC_MESSAGES/django.po +2 -2
  16. aa_intel_tool/locale/uk/LC_MESSAGES/django.po +2 -2
  17. aa_intel_tool/locale/zh_Hans/LC_MESSAGES/django.po +2 -2
  18. aa_intel_tool/parser/module/dscan.py +4 -5
  19. aa_intel_tool/static/aa_intel_tool/css/aa-intel-tool.css +13 -16
  20. aa_intel_tool/static/aa_intel_tool/css/aa-intel-tool.min.css +1 -1
  21. aa_intel_tool/static/aa_intel_tool/css/aa-intel-tool.min.css.map +1 -1
  22. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-chatscan.js +171 -282
  23. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-chatscan.min.js +1 -1
  24. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-chatscan.min.js.map +1 -1
  25. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-dscan.js +251 -572
  26. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-dscan.min.js +1 -1
  27. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-dscan.min.js.map +1 -1
  28. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-fleetcomposition.js +163 -237
  29. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-fleetcomposition.min.js +1 -1
  30. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-fleetcomposition.min.js.map +1 -1
  31. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-scan-result-common.js +18 -0
  32. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-scan-result-common.min.js +1 -1
  33. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-scan-result-common.min.js.map +1 -1
  34. aa_intel_tool/static/aa_intel_tool/libs/DataTables/2.3.4/dataTables.bootstrap5.css +610 -0
  35. aa_intel_tool/static/aa_intel_tool/libs/DataTables/2.3.4/dataTables.bootstrap5.js +123 -0
  36. aa_intel_tool/static/aa_intel_tool/libs/DataTables/2.3.4/dataTables.bootstrap5.min.css +8 -0
  37. aa_intel_tool/static/aa_intel_tool/libs/DataTables/2.3.4/dataTables.bootstrap5.min.css.map +1 -0
  38. aa_intel_tool/static/aa_intel_tool/libs/DataTables/2.3.4/dataTables.bootstrap5.min.js +6 -0
  39. aa_intel_tool/static/aa_intel_tool/libs/DataTables/2.3.4/dataTables.bootstrap5.min.js.map +1 -0
  40. aa_intel_tool/static/aa_intel_tool/libs/DataTables/2.3.4/datatables.min.js +10 -0
  41. aa_intel_tool/static/aa_intel_tool/libs/DataTables/2.3.4/datatables.min.js.map +1 -0
  42. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/ColumnControl/1.1.1/css/columnControl.bootstrap5.css +516 -0
  43. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/ColumnControl/1.1.1/css/columnControl.bootstrap5.min.css +2 -0
  44. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/ColumnControl/1.1.1/css/columnControl.bootstrap5.min.css.map +1 -0
  45. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/ColumnControl/1.1.1/js/columnControl.bootstrap5.js +73 -0
  46. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/ColumnControl/1.1.1/js/columnControl.bootstrap5.min.js +6 -0
  47. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/ColumnControl/1.1.1/js/columnControl.bootstrap5.min.js.map +1 -0
  48. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/ColumnControl/1.1.1/js/dataTables.columnControl.js +3091 -0
  49. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/ColumnControl/1.1.1/js/dataTables.columnControl.min.js +10 -0
  50. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/ColumnControl/1.1.1/js/dataTables.columnControl.min.js.map +1 -0
  51. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/FixedHeader/4.0.4/css/fixedHeader.bootstrap5.css +20 -0
  52. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/FixedHeader/4.0.4/css/fixedHeader.bootstrap5.min.css +2 -0
  53. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/FixedHeader/4.0.4/css/fixedHeader.bootstrap5.min.css.map +1 -0
  54. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/FixedHeader/4.0.4/js/dataTables.fixedHeader.js +1203 -0
  55. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/FixedHeader/4.0.4/js/dataTables.fixedHeader.min.js +6 -0
  56. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/FixedHeader/4.0.4/js/dataTables.fixedHeader.min.js.map +1 -0
  57. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/FixedHeader/4.0.4/js/fixedHeader.bootstrap5.js +59 -0
  58. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/FixedHeader/4.0.4/js/fixedHeader.bootstrap5.min.js +6 -0
  59. aa_intel_tool/static/aa_intel_tool/libs/DataTables/Extensions/FixedHeader/4.0.4/js/fixedHeader.bootstrap5.min.js.map +1 -0
  60. aa_intel_tool/templates/aa_intel_tool/base.html +30 -0
  61. aa_intel_tool/templates/aa_intel_tool/bundles/datatables-2-css.html +11 -0
  62. aa_intel_tool/templates/aa_intel_tool/bundles/datatables-2-js.html +14 -0
  63. aa_intel_tool/templates/aa_intel_tool/partials/scan/chatlist/alliances.html +1 -1
  64. aa_intel_tool/templates/aa_intel_tool/partials/scan/chatlist/corporations.html +1 -1
  65. aa_intel_tool/templates/aa_intel_tool/partials/scan/chatlist/pilots.html +1 -1
  66. aa_intel_tool/templates/aa_intel_tool/partials/scan/dscan/interesting-on-grid/items.html +1 -1
  67. aa_intel_tool/templates/aa_intel_tool/partials/scan/dscan/ships-breakdown/ship-classes.html +1 -1
  68. aa_intel_tool/templates/aa_intel_tool/partials/scan/dscan/ships-breakdown/ship-types.html +1 -1
  69. aa_intel_tool/templates/aa_intel_tool/partials/scan/fleetcomp/fleet-details/pilots.html +1 -1
  70. aa_intel_tool/templates/aa_intel_tool/views/scan/chatlist.html +2 -2
  71. aa_intel_tool/templates/aa_intel_tool/views/scan/dscan.html +2 -2
  72. aa_intel_tool/templates/aa_intel_tool/views/scan/fleetcomp.html +2 -2
  73. aa_intel_tool/tests/__init__.py +38 -0
  74. aa_intel_tool/tests/test_access.py +2 -2
  75. aa_intel_tool/tests/test_admin.py +4 -3
  76. aa_intel_tool/tests/test_app_settings.py +3 -2
  77. aa_intel_tool/tests/test_auth_hooks.py +2 -2
  78. aa_intel_tool/tests/test_helper_data_structures.py +2 -4
  79. aa_intel_tool/tests/test_helper_eve_character.py +5 -7
  80. aa_intel_tool/tests/test_models.py +3 -3
  81. aa_intel_tool/tests/test_parser_general.py +48 -34
  82. aa_intel_tool/tests/test_parser_helper_db.py +2 -4
  83. aa_intel_tool/tests/test_parser_module_chatlist.py +2 -2
  84. aa_intel_tool/tests/test_parser_module_dscan.py +828 -0
  85. aa_intel_tool/tests/test_parser_module_feetcomp.py +230 -0
  86. aa_intel_tool/tests/test_tasks.py +56 -0
  87. aa_intel_tool/tests/test_views_ajax.py +72 -0
  88. aa_intel_tool/tests/test_views_general.py +240 -0
  89. {aa_intel_tool-2.10.1.dist-info → aa_intel_tool-2.11.0.dist-info}/METADATA +1 -1
  90. {aa_intel_tool-2.10.1.dist-info → aa_intel_tool-2.11.0.dist-info}/RECORD +92 -59
  91. {aa_intel_tool-2.10.1.dist-info → aa_intel_tool-2.11.0.dist-info}/WHEEL +0 -0
  92. {aa_intel_tool-2.10.1.dist-info → aa_intel_tool-2.11.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,10 +1,8 @@
1
- /* global _getAaIntelToolJsSettings, numberFormatter, bootstrapTooltip, fetchGet, shipInfoPanel, _toggleDscanStickyHighlight */
1
+ /* global _getAaIntelToolJsSettings, numberFormatter, bootstrapTooltip, fetchGet, shipInfoPanel, _toggleDscanStickyHighlight, DataTable, _removeSearchFromColumnControl */
2
2
 
3
3
  $(document).ready(() => {
4
4
  'use strict';
5
5
 
6
- /* Variables and helpers
7
- --------------------------------------------------------------------------------- */
8
6
  const settings = _getAaIntelToolJsSettings();
9
7
  const elements = {
10
8
  shipClassesAllTable: $('table.aa-intel-dscan-ship-classes-all-list'),
@@ -24,600 +22,281 @@ $(document).ready(() => {
24
22
  starbasesTable: $('table.aa-intel-dscan-starbases-list'),
25
23
  dscanCountStarbases: $('span#aa-intel-dscan-starbases-count')
26
24
  };
25
+ const columnsDefs = [
26
+ {
27
+ target: 0,
28
+ createdCell: (td) => $(td).addClass('text-ellipsis fix-eve-image-position')
29
+ },
30
+ {
31
+ target: 1,
32
+ width: 35,
33
+ createdCell: (td) => $(td).addClass('text-end'),
34
+ columnControl: _removeSearchFromColumnControl(settings.dataTables.columnControl, 1)
35
+ }
36
+ ];
27
37
 
28
- /* DataTables
29
- --------------------------------------------------------------------------------- */
30
38
  /**
31
- * Datatable D-Scan All
39
+ * Create the DataTable.
40
+ *
41
+ * @param key
42
+ * @param loadingKey
43
+ * @param tableEl
44
+ * @param url
45
+ * @param containerSelector
46
+ * @param extraSelectors
47
+ * @param rowItemClass
48
+ * @param extraRowClass
49
+ * @param idAttr
50
+ * @param typeIdAttr
51
+ * @param countEl
52
+ * @param massEl
53
+ * @param columns
54
+ * @param tooltipSelector
55
+ * @param highlightType
56
+ * @param highlightOnly
32
57
  */
33
- fetchGet({url: settings.url.getShipClassesAll})
34
- .then((tableData) => {
35
- if (tableData) {
36
- $('div.aa-intel-loading-table-info-all').addClass('d-none');
37
-
38
- if (Object.keys(tableData).length === 0) {
39
- $('div.aa-intel-empty-table-info-all').removeClass('d-none');
40
- } else {
41
- $('div.table-dscan-ship-classes-all').removeClass('d-none');
42
-
43
- elements.shipClassesAllTable.DataTable({
44
- data: tableData,
45
- paging: false,
46
- language: settings.language.dataTables,
47
- lengthChange: false,
48
- dom:
49
- '<\'row\'<\'col-sm-12\'f>>' +
50
- '<\'row\'<\'col-sm-12\'tr>>' +
51
- '<\'row\'<\'col-sm-12\'i>>',
52
- columns: [
53
- {
54
- data: (data) => {
55
- return shipInfoPanel(data);
56
- }
57
- },
58
- {
59
- data: 'count'
60
- },
61
- {
62
- data: 'type_name'
63
- }
64
- ],
65
- order: [
66
- [1, 'desc']
67
- ],
68
- columnDefs: [
69
- {
70
- targets: 0,
71
- createdCell: (td) => {
72
- $(td).addClass('text-ellipsis fix-eve-image-position');
73
- }
74
- },
75
- {
76
- targets: 1,
77
- width: 45,
78
- createdCell: (td) => {
79
- $(td).addClass('text-end');
80
- }
81
- },
82
- {
83
- targets: 2,
84
- visible: false
85
- }
86
- ],
87
- createdRow: (row, data) => {
88
- // D-Scan total count
89
- const currentTotal = elements.dscanCountAll.html();
90
- const newTotal = parseInt(currentTotal) + data.count;
91
-
92
- elements.dscanCountAll.html(newTotal);
93
-
94
- const currentMass = elements.dscanMassAll.data('mass') || 0;
95
- const newMass = parseInt(currentMass) + data.mass;
96
-
97
- elements.dscanMassAll.data('mass', newMass);
98
- elements.dscanMassAll.html(numberFormatter({value: newMass, locales: settings.language.django}));
99
-
100
- $(row)
101
- .addClass(`aa-intel-shipclass-all-item aa-intel-shipclass-id-${data.id} aa-intel-shiptype-id-${data.type_id}`)
102
- .attr('data-shipclass-id', data.id)
103
- .attr('data-shiptype-id', data.type_id);
104
- },
105
- initComplete: () => {
106
- const classTableRow = $('.aa-intel-shipclass-all-item');
107
-
108
- _toggleDscanStickyHighlight({
109
- element: classTableRow,
110
- type: 'shipclass'
111
- });
112
-
113
- // Initialize Bootstrap tooltips
114
- bootstrapTooltip({selector: '.aa-intel-dscan-ship-classes-all-list'});
115
- }
116
- });
58
+ const createDataTable = ({
59
+ key,
60
+ loadingKey,
61
+ tableEl,
62
+ url,
63
+ containerSelector,
64
+ extraSelectors,
65
+ rowItemClass,
66
+ extraRowClass,
67
+ idAttr,
68
+ typeIdAttr,
69
+ countEl,
70
+ massEl,
71
+ columns,
72
+ tooltipSelector,
73
+ highlightType,
74
+ highlightOnly
75
+ }) => {
76
+ fetchGet({url: url})
77
+ .then((tableData) => {
78
+ if (!tableData) {
79
+ return;
117
80
  }
118
- }
119
- })
120
- .catch((error) => {
121
- console.error('Error fetching all ship classes data:', error);
122
- });
123
81
 
124
- /**
125
- * Datatable D-Scan On Grid
126
- */
127
- fetchGet({url: settings.url.getShipClassesOngrid})
128
- .then((tableData) => {
129
- if (tableData) {
130
- $('div.aa-intel-loading-table-info-ongrid').addClass('d-none');
82
+ // hide loading, show empty or table container
83
+ $(`div.aa-intel-loading-table-info-${loadingKey || key}`).addClass('d-none');
131
84
 
132
85
  if (Object.keys(tableData).length === 0) {
133
- $('div.aa-intel-empty-table-info-ongrid').removeClass('d-none');
134
- } else {
135
- $('div.table-dscan-ship-classes-ongrid').removeClass('d-none');
136
-
137
- elements.shipClassesOngridTable.DataTable({
138
- data: tableData,
139
- paging: false,
140
- language: settings.language.dataTables,
141
- lengthChange: false,
142
- dom:
143
- '<\'row\'<\'col-sm-12\'f>>' +
144
- '<\'row\'<\'col-sm-12\'tr>>' +
145
- '<\'row\'<\'col-sm-12\'i>>',
146
- columns: [
147
- {
148
- data: (data) => {
149
- return shipInfoPanel(data);
150
- }
151
- },
152
- {
153
- data: 'count'
154
- },
155
- {
156
- data: 'type_name'
157
- }
158
- ],
159
- order: [
160
- [1, 'desc']
161
- ],
162
- columnDefs: [
163
- {
164
- targets: 0,
165
- createdCell: (td) => {
166
- $(td).addClass('text-ellipsis fix-eve-image-position');
167
- }
168
- },
169
- {
170
- targets: 1,
171
- width: 45,
172
- createdCell: (td) => {
173
- $(td).addClass('text-end');
174
- }
175
- },
176
- {
177
- targets: 2,
178
- visible: false
179
- }
180
- ],
181
- createdRow: (row, data) => {
182
- // D-Scan total count
183
- const currentTotal = elements.dscanCountOngrid.html();
184
- const newTotal = parseInt(currentTotal) + data.count;
185
-
186
- elements.dscanCountOngrid.html(newTotal);
86
+ $(`div.aa-intel-empty-table-info-${loadingKey || key}`).removeClass('d-none');
187
87
 
188
- const currentMass = elements.dscanMassOnGrid.data('mass') || 0;
189
- const newMass = parseInt(currentMass) + data.mass;
190
-
191
- elements.dscanMassOnGrid.data('mass', newMass);
192
- elements.dscanMassOnGrid.html(numberFormatter({value: newMass, locales: settings.language.django}));
193
-
194
- $(row)
195
- .addClass(`aa-intel-shipclass-ongrid-item aa-intel-shipclass-id-${data.id} aa-intel-shiptype-id-${data.type_id}`)
196
- .attr('data-shipclass-id', data.id)
197
- .attr('data-shiptype-id', data.type_id);
198
- },
199
- initComplete: () => {
200
- const classTableRow = $('.aa-intel-shipclass-ongrid-item');
201
-
202
- _toggleDscanStickyHighlight({
203
- element: classTableRow,
204
- type: 'shipclass'
205
- });
206
-
207
- // Initialize Bootstrap tooltips
208
- bootstrapTooltip({selector: '.aa-intel-dscan-ship-classes-ongrid-list'});
209
- }
210
- });
88
+ return;
211
89
  }
212
- }
213
- })
214
- .catch((error) => {
215
- console.error('Error fetching ongrid ship classes data:', error);
216
- });
217
-
218
- /**
219
- * Datatable D-Scan Off Grid
220
- */
221
- fetchGet({url: settings.url.getShipClassesOffgrid})
222
- .then((tableData) => {
223
- if (tableData) {
224
- $('div.aa-intel-loading-table-info-offgrid').addClass('d-none');
225
-
226
- if (Object.keys(tableData).length === 0) {
227
- $('div.aa-intel-empty-table-info-offgrid').removeClass('d-none');
228
- } else {
229
- $('div.table-dscan-ship-classes-offgrid').removeClass('d-none');
230
-
231
- elements.shipClassesOffgridTable.DataTable({
232
- data: tableData,
233
- paging: false,
234
- language: settings.language.dataTables,
235
- lengthChange: false,
236
- dom:
237
- '<\'row\'<\'col-sm-12\'f>>' +
238
- '<\'row\'<\'col-sm-12\'tr>>' +
239
- '<\'row\'<\'col-sm-12\'i>>',
240
- columns: [
241
- {
242
- data: (data) => {
243
- return shipInfoPanel(data);
244
- }
245
- },
246
- {
247
- data: 'count'
248
- },
249
- {
250
- data: 'type_name'
251
- }
252
- ],
253
- order: [
254
- [1, 'desc']
255
- ],
256
- columnDefs: [
257
- {
258
- targets: 0,
259
- createdCell: (td) => {
260
- $(td).addClass('text-ellipsis fix-eve-image-position');
261
- }
262
- },
263
- {
264
- targets: 1,
265
- width: 45,
266
- createdCell: (td) => {
267
- $(td).addClass('text-end');
268
- }
269
- },
270
- {
271
- targets: 2,
272
- visible: false
273
- }
274
- ],
275
- createdRow: (row, data) => {
276
- // D-Scan total count
277
- const currentTotal = elements.dscanCountOffgrid.html();
278
- const newTotal = parseInt(currentTotal) + data.count;
279
-
280
- elements.dscanCountOffgrid.html(newTotal);
281
-
282
- const currentMass = elements.dscanMassOffGrid.data('mass') || 0;
283
- const newMass = parseInt(currentMass) + data.mass;
284
90
 
285
- elements.dscanMassOffGrid.data('mass', newMass);
286
- elements.dscanMassOffGrid.html(numberFormatter({value: newMass, locales: settings.language.django}));
287
-
288
- $(row)
289
- .addClass(`aa-intel-shipclass-offgrid-item aa-intel-shipclass-id-${data.id} aa-intel-shiptype-id-${data.type_id}`)
290
- .attr('data-shipclass-id', data.id)
291
- .attr('data-shiptype-id', data.type_id);
292
- },
293
- initComplete: () => {
294
- const classTableRow = $('.aa-intel-shipclass-offgrid-item');
295
-
296
- _toggleDscanStickyHighlight({
297
- element: classTableRow,
298
- type: 'shipclass'
299
- });
300
-
301
- // Initialize Bootstrap tooltips
302
- bootstrapTooltip({selector: '.aa-intel-dscan-ship-classes-offgrid-list'});
303
- }
304
- });
91
+ // unhide main container(s)
92
+ if (containerSelector) {
93
+ $(containerSelector).removeClass('d-none');
305
94
  }
306
- }
307
- })
308
- .catch((error) => {
309
- console.error('Error fetching offgrid ship classes data:', error);
310
- });
311
95
 
312
- /**
313
- * Datatable D-Scan Ship Types
314
- */
315
- fetchGet({url: settings.url.getShipTypes})
316
- .then((tableData) => {
317
- if (tableData) {
318
- $('div.aa-intel-loading-table-info-ship-types').addClass('d-none');
319
-
320
- if (Object.keys(tableData).length === 0) {
321
- $('div.aa-intel-empty-table-info-ship-types').removeClass('d-none');
322
- } else {
323
- $('div.table-dscan-ship-types').removeClass('d-none');
324
-
325
- elements.shipTypesTable.DataTable({
326
- data: tableData,
327
- paging: false,
328
- language: settings.language.dataTables,
329
- lengthChange: false,
330
- dom:
331
- '<\'row\'<\'col-sm-12\'f>>' +
332
- '<\'row\'<\'col-sm-12\'tr>>' +
333
- '<\'row\'<\'col-sm-12\'i>>',
334
- columns: [
335
- {
336
- data: 'name'
337
- },
338
- {
339
- data: 'count'
340
- }
341
- ],
342
- order: [
343
- [1, 'desc']
344
- ],
345
- columnDefs: [
346
- {
347
- targets: 0,
348
- createdCell: (td) => {
349
- $(td).addClass('text-ellipsis fix-eve-image-position');
350
- }
351
- },
352
- {
353
- targets: 1,
354
- width: 35,
355
- createdCell: (td) => {
356
- $(td).addClass('text-end');
357
- }
358
- }
359
- ],
360
- createdRow: (row, data) => {
361
- $(row)
362
- .addClass(`aa-intel-shiptype-item aa-intel-shiptype-id-${data.id}`)
363
- .attr('data-shiptype-id', data.id);
364
- },
365
- initComplete: () => {
366
- const classTableRow = $('.aa-intel-shiptype-item');
367
-
368
- _toggleDscanStickyHighlight({
369
- element: classTableRow,
370
- type: 'shiptype'
371
- });
372
- }
373
- });
96
+ if (extraSelectors) {
97
+ extraSelectors.forEach(s => $(s).removeClass('d-none'));
374
98
  }
375
- }
376
- })
377
- .catch((error) => {
378
- console.error('Error fetching ship types data:', error);
379
- });
380
-
381
- /**
382
- * Datatable D-Scan Upwell Structures on Grid
383
- */
384
- fetchGet({url: settings.url.getStructuresOnGrid})
385
- .then((tableData) => {
386
- if (tableData) {
387
- $('div.aa-intel-loading-table-info-upwell-structures').addClass('d-none');
388
-
389
- if (Object.keys(tableData).length === 0) {
390
- $('div.aa-intel-empty-table-info-upwell-structures').removeClass('d-none');
391
- } else {
392
- $('div#aa-intel-dscan-row-interesting-on-grid').removeClass('d-none');
393
- $('div.col-aa-intel-upwell-structures').removeClass('d-none');
394
99
 
395
- elements.upwellStructuresTable.DataTable({
396
- data: tableData,
397
- paging: false,
398
- language: settings.language.dataTables,
399
- lengthChange: false,
400
- dom:
401
- '<\'row\'<\'col-sm-12\'f>>' +
402
- '<\'row\'<\'col-sm-12\'tr>>' +
403
- '<\'row\'<\'col-sm-12\'i>>',
404
- columns: [
405
- {
406
- data: (data) => {
407
- return shipInfoPanel(data);
408
- }
409
- },
410
- {
411
- data: 'count'
412
- }
413
- ],
414
- order: [
415
- [1, 'desc']
416
- ],
417
- columnDefs: [
418
- {
419
- targets: 0,
420
- createdCell: (td) => {
421
- $(td).addClass('text-ellipsis fix-eve-image-position');
422
- }
423
- },
424
- {
425
- targets: 1,
426
- width: 35,
427
- createdCell: (td) => {
428
- $(td).addClass('text-end');
429
- }
430
- }
431
- ],
432
- createdRow: (row, data) => {
433
- // Upwell Structures total count
434
- const currentTotal = elements.dscanCountUpwellStructures.html();
435
- const newTotal = parseInt(currentTotal) + data.count;
436
-
437
- elements.dscanCountUpwellStructures.html(newTotal);
438
-
439
- $(row)
440
- .addClass(`aa-intel-structuretype-item aa-intel-structuretype-id-${data.id}`)
441
- .attr('data-structuretype-id', data.id);
442
- },
443
- initComplete: () => {
444
- const classTableRow = $('.aa-intel-structuretype-item');
445
-
446
- _toggleDscanStickyHighlight({
447
- element: classTableRow,
448
- highlightOnly: true
449
- });
450
-
451
- // Initialize Bootstrap tooltips
452
- bootstrapTooltip({selector: '.aa-intel-dscan-upwell-structures-list'});
100
+ // initialize DataTable
101
+ const dt = new DataTable(tableEl, { // eslint-disable-line no-unused-vars
102
+ data: tableData,
103
+ paging: false,
104
+ language: settings.language.dataTables,
105
+ lengthChange: false,
106
+ dom: settings.dataTables.dom,
107
+ ordering: settings.dataTables.ordering,
108
+ columnControl: settings.dataTables.columnControl,
109
+ columns: columns,
110
+ order: [[1, 'desc']],
111
+ columnDefs: columnsDefs,
112
+ createdRow: (row, data) => {
113
+ // update counts if provided
114
+ if (countEl) {
115
+ const currentTotal = parseInt(countEl.html()) || 0;
116
+
117
+ countEl.html(currentTotal + (data.count || 0));
453
118
  }
454
- });
455
- }
456
- }
457
- })
458
- .catch((error) => {
459
- console.error('Error fetching upwell structures data:', error);
460
- });
461
-
462
- /**
463
- * Datatable D-Scan Deployables on Grid
464
- */
465
- fetchGet({url: settings.url.getDeployablesOnGrid})
466
- .then((tableData) => {
467
- if (tableData) {
468
- $('div.aa-intel-loading-table-info-deployables').addClass('d-none');
469
119
 
470
- if (Object.keys(tableData).length === 0) {
471
- $('div.aa-intel-empty-table-info-deployables').removeClass('d-none');
472
- } else {
473
- $('div#aa-intel-dscan-row-interesting-on-grid').removeClass('d-none');
474
- $('div.col-aa-intel-deployables').removeClass('d-none');
475
-
476
- elements.deployablesTable.DataTable({
477
- data: tableData,
478
- paging: false,
479
- language: settings.language.dataTables,
480
- lengthChange: false,
481
- dom:
482
- '<\'row\'<\'col-sm-12\'f>>' +
483
- '<\'row\'<\'col-sm-12\'tr>>' +
484
- '<\'row\'<\'col-sm-12\'i>>',
485
- columns: [
486
- {
487
- data: (data) => {
488
- return shipInfoPanel(data);
489
- }
490
- },
491
- {
492
- data: 'count'
493
- }
494
- ],
495
- order: [
496
- [1, 'desc']
497
- ],
498
- columnDefs: [
499
- {
500
- targets: 0,
501
- createdCell: (td) => {
502
- $(td).addClass('text-ellipsis fix-eve-image-position');
503
- }
504
- },
505
- {
506
- targets: 1,
507
- width: 35,
508
- createdCell: (td) => {
509
- $(td).addClass('text-end');
510
- }
511
- }
512
- ],
513
- createdRow: (row, data) => {
514
- // Upwell Structures total count
515
- const currentTotal = elements.dscanCountDeployables.html();
516
- const newTotal = parseInt(currentTotal) + data.count;
517
-
518
- elements.dscanCountDeployables.html(newTotal);
519
-
520
- $(row)
521
- .addClass(`aa-intel-deployabletype-item aa-intel-deployabletype-id-${data.id}`)
522
- .attr('data-deployabletype-id', data.id);
523
- },
524
- initComplete: () => {
525
- const classTableRow = $('.aa-intel-deployabletype-item');
526
-
527
- _toggleDscanStickyHighlight({
528
- element: classTableRow,
529
- highlightOnly: true
530
- });
120
+ // update mass if provided
121
+ if (massEl) {
122
+ const currentMass = parseInt(massEl.data('mass')) || 0;
123
+ const newMass = currentMass + (data.mass || 0);
531
124
 
532
- // Initialize Bootstrap tooltips
533
- bootstrapTooltip({selector: '.aa-intel-dscan-deployables-list'});
125
+ massEl.data('mass', newMass);
126
+ massEl.html(numberFormatter({
127
+ value: newMass,
128
+ locales: settings.language.django
129
+ }));
534
130
  }
535
- });
536
- }
537
- }
538
- })
539
- .catch((error) => {
540
- console.error('Error fetching deployables data:', error);
541
- });
542
-
543
- /**
544
- * Datatable D-Scan POS/POS Modules on Grid
545
- */
546
- fetchGet({url: settings.url.getStarbasesOnGrid})
547
- .then((tableData) => {
548
- if (tableData) {
549
- $('div.aa-intel-loading-table-info-starbases').addClass('d-none');
550
131
 
551
- if (Object.keys(tableData).length === 0) {
552
- $('div.aa-intel-empty-table-info-starbases').removeClass('d-none');
553
- } else {
554
- $('div#aa-intel-dscan-row-interesting-on-grid').removeClass('d-none');
555
- $('div.col-aa-intel-starbases').removeClass('d-none');
132
+ // row classes and attributes
133
+ if (rowItemClass) {
134
+ $(row).addClass(rowItemClass);
135
+ }
556
136
 
557
- elements.starbasesTable.DataTable({
558
- data: tableData,
559
- paging: false,
560
- language: settings.language.dataTables,
561
- lengthChange: false,
562
- dom:
563
- '<\'row\'<\'col-sm-12\'f>>' +
564
- '<\'row\'<\'col-sm-12\'tr>>' +
565
- '<\'row\'<\'col-sm-12\'i>>',
566
- columns: [
567
- {
568
- data: (data) => {
569
- return shipInfoPanel(data);
570
- }
571
- },
572
- {
573
- data: 'count'
574
- }
575
- ],
576
- order: [
577
- [1, 'desc']
578
- ],
579
- columnDefs: [
580
- {
581
- targets: 0,
582
- createdCell: (td) => {
583
- $(td).addClass('text-ellipsis fix-eve-image-position');
584
- }
585
- },
586
- {
587
- targets: 1,
588
- width: 35,
589
- createdCell: (td) => {
590
- $(td).addClass('text-end');
591
- }
592
- }
593
- ],
594
- createdRow: (row, data) => {
595
- // Upwell Structures total count
596
- const currentTotal = elements.dscanCountStarbases.html();
597
- const newTotal = parseInt(currentTotal) + data.count;
137
+ if (idAttr) {
138
+ $(row).attr(idAttr, data.id);
139
+ }
598
140
 
599
- elements.dscanCountStarbases.html(newTotal);
141
+ if (typeIdAttr && data.type_id !== undefined) {
142
+ $(row).attr(typeIdAttr, data.type_id);
143
+ }
600
144
 
601
- $(row)
602
- .addClass(`aa-intel-starbasetype-item aa-intel-starbasetype-id-${data.id}`)
603
- .attr('data-starbasetype-id', data.id);
604
- },
605
- initComplete: () => {
606
- const classTableRow = $('.aa-intel-starbasetype-item');
145
+ if (extraRowClass) {
146
+ $(row).addClass(extraRowClass);
147
+ }
148
+ },
149
+ initComplete: () => {
150
+ if (rowItemClass) {
151
+ const selector = `.${rowItemClass.split(' ').join('.')}`;
152
+ const el = $(selector);
607
153
 
608
154
  _toggleDscanStickyHighlight({
609
- element: classTableRow,
610
- highlightOnly: true
155
+ element: el,
156
+ type: highlightType || 'shipclass',
157
+ highlightOnly: !!highlightOnly
611
158
  });
159
+ }
612
160
 
613
- // Initialize Bootstrap tooltips
614
- bootstrapTooltip({selector: '.aa-intel-dscan-starbases-list'});
161
+ if (tooltipSelector) {
162
+ bootstrapTooltip({selector: tooltipSelector});
615
163
  }
616
- });
617
- }
618
- }
619
- })
620
- .catch((error) => {
621
- console.error('Error fetching starbases data:', error);
622
- });
164
+ }
165
+ });
166
+ })
167
+ .catch((error) => {
168
+ console.error(`Error fetching ${key} data:`, error);
169
+ });
170
+ };
171
+
172
+ // Ship Classes - All
173
+ createDataTable({
174
+ key: 'all',
175
+ loadingKey: 'all',
176
+ tableEl: elements.shipClassesAllTable,
177
+ url: settings.url.getShipClassesAll,
178
+ containerSelector: 'div.table-dscan-ship-classes-all',
179
+ rowItemClass: 'aa-intel-shipclass-all-item',
180
+ extraRowClass: null,
181
+ idAttr: 'data-shipclass-id',
182
+ typeIdAttr: 'data-shiptype-id',
183
+ countEl: elements.dscanCountAll,
184
+ massEl: elements.dscanMassAll,
185
+ columns: [
186
+ {data: (d) => shipInfoPanel(d)},
187
+ {data: 'count'}
188
+ ],
189
+ tooltipSelector: '.aa-intel-dscan-ship-classes-all-list'
190
+ });
191
+
192
+ // Ship Classes - On Grid
193
+ createDataTable({
194
+ key: 'ongrid',
195
+ loadingKey: 'ongrid',
196
+ tableEl: elements.shipClassesOngridTable,
197
+ url: settings.url.getShipClassesOngrid,
198
+ containerSelector: 'div.table-dscan-ship-classes-ongrid',
199
+ rowItemClass: 'aa-intel-shipclass-ongrid-item',
200
+ idAttr: 'data-shipclass-id',
201
+ typeIdAttr: 'data-shiptype-id',
202
+ countEl: elements.dscanCountOngrid,
203
+ massEl: elements.dscanMassOnGrid,
204
+ columns: [
205
+ {data: (d) => shipInfoPanel(d)},
206
+ {data: 'count'}
207
+ ],
208
+ tooltipSelector: '.aa-intel-dscan-ship-classes-ongrid-list'
209
+ });
210
+
211
+ // Ship Classes - Off Grid
212
+ createDataTable({
213
+ key: 'offgrid',
214
+ loadingKey: 'offgrid',
215
+ tableEl: elements.shipClassesOffgridTable,
216
+ url: settings.url.getShipClassesOffgrid,
217
+ containerSelector: 'div.table-dscan-ship-classes-offgrid',
218
+ rowItemClass: 'aa-intel-shipclass-offgrid-item',
219
+ idAttr: 'data-shipclass-id',
220
+ typeIdAttr: 'data-shiptype-id',
221
+ countEl: elements.dscanCountOffgrid,
222
+ massEl: elements.dscanMassOffGrid,
223
+ columns: [
224
+ {data: (d) => shipInfoPanel(d)},
225
+ {data: 'count'}
226
+ ],
227
+ tooltipSelector: '.aa-intel-dscan-ship-classes-offgrid-list'
228
+ });
229
+
230
+ // Ship Types
231
+ createDataTable({
232
+ key: 'ship-types',
233
+ loadingKey: 'ship-types',
234
+ tableEl: elements.shipTypesTable,
235
+ url: settings.url.getShipTypes,
236
+ containerSelector: 'div.table-dscan-ship-types',
237
+ rowItemClass: 'aa-intel-shiptype-item',
238
+ idAttr: 'data-shiptype-id',
239
+ columns: [
240
+ {data: 'name'},
241
+ {data: 'count'}
242
+ ],
243
+ highlightType: 'shiptype'
244
+ });
245
+
246
+ // Upwell Structures (on grid)
247
+ createDataTable({
248
+ key: 'upwell-structures',
249
+ loadingKey: 'upwell-structures',
250
+ tableEl: elements.upwellStructuresTable,
251
+ url: settings.url.getStructuresOnGrid,
252
+ containerSelector: 'div#aa-intel-dscan-row-interesting-on-grid',
253
+ extraSelectors: ['div.col-aa-intel-upwell-structures'],
254
+ rowItemClass: 'aa-intel-structuretype-item',
255
+ idAttr: 'data-structuretype-id',
256
+ countEl: elements.dscanCountUpwellStructures,
257
+ columns: [
258
+ {data: (d) => shipInfoPanel(d)},
259
+ {data: 'count'}
260
+ ],
261
+ highlightOnly: true,
262
+ tooltipSelector: '.aa-intel-dscan-upwell-structures-list'
263
+ });
264
+
265
+ // Deployables (on grid)
266
+ createDataTable({
267
+ key: 'deployables',
268
+ loadingKey: 'deployables',
269
+ tableEl: elements.deployablesTable,
270
+ url: settings.url.getDeployablesOnGrid,
271
+ containerSelector: 'div#aa-intel-dscan-row-interesting-on-grid',
272
+ extraSelectors: ['div.col-aa-intel-deployables'],
273
+ rowItemClass: 'aa-intel-deployabletype-item',
274
+ idAttr: 'data-deployabletype-id',
275
+ countEl: elements.dscanCountDeployables,
276
+ columns: [
277
+ {data: (d) => shipInfoPanel(d)},
278
+ {data: 'count'}
279
+ ],
280
+ highlightOnly: true,
281
+ tooltipSelector: '.aa-intel-dscan-deployables-list'
282
+ });
283
+
284
+ // Starbases (on grid)
285
+ createDataTable({
286
+ key: 'starbases',
287
+ loadingKey: 'starbases',
288
+ tableEl: elements.starbasesTable,
289
+ url: settings.url.getStarbasesOnGrid,
290
+ containerSelector: 'div#aa-intel-dscan-row-interesting-on-grid',
291
+ extraSelectors: ['div.col-aa-intel-starbases'],
292
+ rowItemClass: 'aa-intel-starbasetype-item',
293
+ idAttr: 'data-starbasetype-id',
294
+ countEl: elements.dscanCountStarbases,
295
+ columns: [
296
+ {data: (d) => shipInfoPanel(d)},
297
+ {data: 'count'}
298
+ ],
299
+ highlightOnly: true,
300
+ tooltipSelector: '.aa-intel-dscan-starbases-list'
301
+ });
623
302
  });