aa-intel-tool 2.8.0__py3-none-any.whl → 2.8.1__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 (32) hide show
  1. aa_intel_tool/__init__.py +1 -1
  2. aa_intel_tool/static/aa_intel_tool/css/aa-intel-tool.css +5 -0
  3. aa_intel_tool/static/aa_intel_tool/css/aa-intel-tool.min.css +1 -1
  4. aa_intel_tool/static/aa_intel_tool/css/aa-intel-tool.min.css.map +1 -1
  5. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-chatscan-highlight.js +240 -315
  6. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-chatscan-highlight.min.js +1 -1
  7. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-chatscan-highlight.min.js.map +1 -1
  8. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-chatscan.js +70 -90
  9. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-chatscan.min.js +1 -1
  10. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-chatscan.min.js.map +1 -1
  11. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-dscan-highlight.js +58 -90
  12. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-dscan-highlight.min.js +1 -1
  13. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-dscan-highlight.min.js.map +1 -1
  14. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-dscan.js +158 -197
  15. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-dscan.min.js +1 -1
  16. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-dscan.min.js.map +1 -1
  17. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-fleetcomposition-highlight.js +79 -93
  18. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-fleetcomposition-highlight.min.js +1 -1
  19. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-fleetcomposition-highlight.min.js.map +1 -1
  20. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-fleetcomposition.js +67 -91
  21. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-fleetcomposition.min.js +1 -1
  22. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-fleetcomposition.min.js.map +1 -1
  23. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-scan-result-common.js +333 -132
  24. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-scan-result-common.min.js +1 -1
  25. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool-scan-result-common.min.js.map +1 -1
  26. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool.js +16 -9
  27. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool.min.js +1 -1
  28. aa_intel_tool/static/aa_intel_tool/javascript/aa-intel-tool.min.js.map +1 -1
  29. {aa_intel_tool-2.8.0.dist-info → aa_intel_tool-2.8.1.dist-info}/METADATA +1 -1
  30. {aa_intel_tool-2.8.0.dist-info → aa_intel_tool-2.8.1.dist-info}/RECORD +32 -32
  31. {aa_intel_tool-2.8.0.dist-info → aa_intel_tool-2.8.1.dist-info}/WHEEL +0 -0
  32. {aa_intel_tool-2.8.0.dist-info → aa_intel_tool-2.8.1.dist-info}/licenses/LICENSE +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["aa-intel-tool-fleetcomposition.js"],"names":["$","elementShipClassesTable","elementShipClassesMass","elementShipTypesTable","elementFleetcompositionTable","elementPilotsCount","fetchGet","url","aaIntelToolJsSettings","getShipClasses","then","tableData","addClass","Object","keys","length","removeClass","DataTable","data","paging","language","dataTables","lengthChange","dom","columns","shipInfoPanel","order","columnDefs","targets","createdCell","td","width","visible","createdRow","row","currentMass","newMass","parseInt","mass","html","Intl","NumberFormat","django","format","id","type_id","attr","classTableRow","mouseenter","addFleetcompositionHighlight","event","currentTarget","mouseleave","removeFleetcompositionHighlight","click","target","hasClass","stopPropagation","changeFleetcompositionStickyHighlight","bootstrapTooltip","getShipTypes","getFleetComposition","pilotInfoPanel","currentTotal","newTotal","ship_id","ship_type_id"],"mappings":"AAEAA,EAAE,KAGE,MAAMC,EAA0BD,EAAE,qDAAqD,EACjFE,EAAyBF,EAAE,uCAAuC,EAClEG,EAAwBH,EAAE,sCAAsC,EAChEI,EAA+BJ,EAAE,2CAA2C,EAC5EK,EAAqBL,EAAE,yCAAyC,EAMtEM,SAAS,CAACC,IAAKC,sBAAsBD,IAAIE,cAAc,CAAC,EACnDC,KAAK,IACEC,IACAX,EAAE,8CAA8C,EAAEY,SAAS,QAAQ,EAE7B,IAAlCC,OAAOC,KAAKH,CAAS,EAAEI,OACvBf,EAAE,4CAA4C,EAAEgB,YAAY,QAAQ,GAEpEhB,EAAE,2CAA2C,EAAEgB,YAAY,QAAQ,EAEnEf,EAAwBgB,UAAU,CAC9BC,KAAMP,EACNQ,OAAQ,CAAA,EACRC,SAAUZ,sBAAsBY,SAASC,WACzCC,aAAc,CAAA,EACdC,IACI,mEAGJC,QAAS,CACL,CACIN,KAAM,GACKO,cAAcP,CAAI,CAEjC,EACA,CACIA,KAAM,OACV,EACA,CACIA,KAAM,WACV,GAEJQ,MAAO,CACH,CAAC,EAAG,SAERC,WAAY,CACR,CACIC,QAAS,EACTC,YAAa,IACT7B,EAAE8B,CAAE,EAAElB,SAAS,sCAAsC,CACzD,CACJ,EACA,CACIgB,QAAS,EACTG,MAAO,GACPF,YAAa,IACT7B,EAAE8B,CAAE,EAAElB,SAAS,UAAU,CAC7B,CACJ,EACA,CACIgB,QAAS,EACTI,QAAS,CAAA,CACb,GAEJC,WAAY,CAACC,EAAKhB,KACd,MAAMiB,EAAcjC,EAAuBgB,KAAK,MAAM,GAAK,EACrDkB,EAAUC,SAASF,CAAW,EAAIjB,EAAKoB,KAE7CpC,EAAuBgB,KAAK,OAAQkB,CAAO,EAC3ClC,EAAuBqC,KACnB,IAAIC,KAAKC,aACLjC,sBAAsBY,SAASsB,MACnC,EAAEC,OAAOP,CAAO,CACpB,EAEApC,EAAEkC,CAAG,EACAtB,0DAA0DM,EAAK0B,2BAA2B1B,EAAK2B,SAAS,EACxGC,KAAK,oBAAqB5B,EAAK0B,EAAE,EACjCE,KAAK,mBAAoB5B,EAAK2B,OAAO,CAC9C,CACJ,CAAC,GAGb,CAAC,EACAnC,KAAK,KACF,MAAMqC,EAAgB/C,EAAE,0BAA0B,EAGlD+C,EAAcC,WAAW,IACrBC,6BAA6B,YAAajD,EAAEkD,EAAMC,aAAa,CAAC,CACpE,CAAC,EAAEC,WAAW,IACVC,gCAAgC,YAAarD,EAAEkD,EAAMC,aAAa,CAAC,CACvE,CAAC,EAGDJ,EAAcO,MAAM,IACZtD,EAAEkD,EAAMK,MAAM,EAAEC,SAAS,2BAA2B,EACpDN,EAAMO,gBAAgB,EAEtBC,sCAAsC,YAAa1D,EAAEkD,EAAMC,aAAa,CAAC,CAEjF,CAAC,EAGDQ,iBAAiB,gDAAgD,CACrE,CAAC,EAMLrD,SAAS,CAACC,IAAKC,sBAAsBD,IAAIqD,YAAY,CAAC,EACjDlD,KAAK,IACEC,IACAX,EAAE,4CAA4C,EAAEY,SAAS,QAAQ,EAE3B,IAAlCC,OAAOC,KAAKH,CAAS,EAAEI,OACvBf,EAAE,0CAA0C,EAAEgB,YAAY,QAAQ,GAElEhB,EAAE,4BAA4B,EAAEgB,YAAY,QAAQ,EAEpDb,EAAsBc,UAAU,CAC5BC,KAAMP,EACNQ,OAAQ,CAAA,EACRC,SAAUZ,sBAAsBY,SAASC,WACzCC,aAAc,CAAA,EACdC,IACI,mEAGJC,QAAS,CACL,CACIN,KAAM,MACV,EACA,CACIA,KAAM,OACV,GAEJQ,MAAO,CACH,CAAC,EAAG,SAERC,WAAY,CACR,CACIC,QAAS,EACTC,YAAa,IACT7B,EAAE8B,CAAE,EAAElB,SAAS,sCAAsC,CACzD,CACJ,EACA,CACIgB,QAAS,EACTG,MAAO,GACPF,YAAa,IACT7B,EAAE8B,CAAE,EAAElB,SAAS,UAAU,CAC7B,CACJ,GAEJqB,WAAY,CAACC,EAAKhB,KACdlB,EAAEkC,CAAG,EACAtB,wDAAwDM,EAAK0B,IAAI,EACjEE,KAAK,mBAAoB5B,EAAK0B,EAAE,CACzC,CACJ,CAAC,GAGb,CAAC,EACAlC,KAAK,KACF,MAAMqC,EAAgB/C,EAAE,yBAAyB,EAGjD+C,EAAcC,WAAW,IACrBC,6BAA6B,WAAYjD,EAAEkD,EAAMC,aAAa,CAAC,CACnE,CAAC,EAAEC,WAAW,IACVC,gCAAgC,WAAYrD,EAAEkD,EAAMC,aAAa,CAAC,CACtE,CAAC,EAGDJ,EAAcO,MAAM,IACZtD,EAAEkD,EAAMK,MAAM,EAAEC,SAAS,2BAA2B,EACpDN,EAAMO,gBAAgB,EAEtBC,sCAAsC,WAAY1D,EAAEkD,EAAMC,aAAa,CAAC,CAEhF,CAAC,EAGDQ,iBAAiB,iCAAiC,CACtD,CAAC,EAMLrD,SAAS,CAACC,IAAKC,sBAAsBD,IAAIsD,mBAAmB,CAAC,EACxDnD,KAAK,IACEC,IACAX,EAAE,uDAAuD,EAAEY,SAAS,QAAQ,EAEtC,IAAlCC,OAAOC,KAAKH,CAAS,EAAEI,OACvBf,EAAE,qDAAqD,EAAEgB,YAAY,QAAQ,GAE7EhB,EAAE,iCAAiC,EAAEgB,YAAY,QAAQ,EAEzDZ,EAA6Ba,UAAU,CACnCC,KAAMP,EACNQ,OAAQ,CAAA,EACRC,SAAUZ,sBAAsBY,SAASC,WACzCC,aAAc,CAAA,EACdC,IACI,mEAGJC,QAAS,CACL,CACIN,KAAM,GACK4C,eAAe5C,CAAI,CAElC,EACA,CACIA,KAAM,MACV,EACA,CACIA,KAAM,aACV,GAEJQ,MAAO,CACH,CAAC,EAAG,QAERC,WAAY,CACR,CACIC,QAAS,EACTC,YAAa,IACT7B,EAAE8B,CAAE,EAAElB,SAAS,wBAAwB,CAC3C,CACJ,GAEJqB,WAAY,CAACC,EAAKhB,KAEd,MAAM6C,EAAe1D,EAAmBkC,KAAK,EACvCyB,EAAW3B,SAAS0B,CAAY,EAAI,EAE1C1D,EAAmBkC,KAAKyB,CAAQ,EAEhChE,EAAEkC,CAAG,EACAtB,0DAA0DM,EAAK+C,gCAAgC/C,EAAKgD,cAAc,EAClHpB,KAAK,oBAAqB5B,EAAK+C,OAAO,EACtCnB,KAAK,mBAAoB5B,EAAKgD,YAAY,CACnD,CACJ,CAAC,GAGb,CAAC,EACAxD,KAAK,KACF,MAAMqC,EAAgB/C,EAAE,0BAA0B,EAGlD+C,EAAcC,WAAW,IACrBC,6BAA6B,WAAYjD,EAAEkD,EAAMC,aAAa,CAAC,CACnE,CAAC,EAAEC,WAAW,IACVC,gCAAgC,WAAYrD,EAAEkD,EAAMC,aAAa,CAAC,CACtE,CAAC,EAGDJ,EAAcO,MAAM,IACZtD,EAAEkD,EAAMK,MAAM,EAAEC,SAAS,2BAA2B,EACpDN,EAAMO,gBAAgB,EAEtBC,sCAAsC,WAAY1D,EAAEkD,EAAMC,aAAa,CAAC,CAEhF,CAAC,EAGDQ,iBAAiB,sCAAsC,CAC3D,CAAC,CACT,CAAC"}
1
+ {"version":3,"names":["$","settings","_getAaIntelToolJsSettings","elements","shipClassesTable","shipClassesMass","shipTypesTable","fleetcompositionTable","pilotsCount","fetchGet","url","getShipClasses","then","tableData","addClass","Object","keys","length","removeClass","DataTable","data","paging","language","dataTables","lengthChange","dom","columns","shipInfoPanel","order","columnDefs","targets","createdCell","td","width","visible","createdRow","row","currentMass","newMass","parseInt","mass","html","_numberFormatter","id","type_id","attr","initComplete","classTableRow","_toggleFleetcompStickyHighlight","element","type","bootstrapTooltip","selector","catch","error","console","getShipTypes","getFleetComposition","pilotInfoPanel","currentTotal","newTotal","ship_id","ship_type_id"],"sources":["aa-intel-tool-fleetcomposition.js"],"mappings":"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","ignoreList":[]}
@@ -1,17 +1,149 @@
1
- /* global aaIntelToolJsSettings, ClipboardJS, bootstrap */
1
+ /* global _getAaIntelToolJsSettings, ClipboardJS, bootstrap, addFleetcompositionHighlight, removeFleetcompositionHighlight, changeFleetcompositionStickyHighlight, addDscanHighlight, removeDscanHighlight, changeDscanStickyHighlight, addChatscanHighlight, removeChatscanHighlight, changeChatscanStickyHighlight */
2
2
 
3
3
  /* jshint -W097 */
4
4
  'use strict';
5
5
 
6
+ const aaIntelToolJsSettings = _getAaIntelToolJsSettings();
7
+
8
+ /**
9
+ * Toggle sticky highlight for scan results
10
+ *
11
+ * @param {jQuery|Element} element The element to attach the events to
12
+ * @param {string} type The type of the element (shipclass or shiptype)
13
+ * @param {string} scanType The scan type (fleetcomposition, dscan, or chatscan)
14
+ * @param {string} [excludeLinkElement=aa-intel-information-link] The class of the element to exclude from sticky toggle
15
+ * @param {boolean} [highlightOnly=false] Omit sticky toggle, only highlight on hover
16
+ * @returns {void}
17
+ * @private
18
+ */
19
+ const _toggleScanStickyHighlight = ({
20
+ element,
21
+ type,
22
+ scanType,
23
+ excludeLinkElement = 'aa-intel-information-link',
24
+ highlightOnly = false
25
+ }) => {
26
+ // Function name mappings for different scan types
27
+ const functionMappings = {
28
+ fleetcomposition: {
29
+ add: typeof addFleetcompositionHighlight === 'function' ? addFleetcompositionHighlight : null,
30
+ remove: typeof removeFleetcompositionHighlight === 'function' ? removeFleetcompositionHighlight : null,
31
+ change: typeof changeFleetcompositionStickyHighlight === 'function' ? changeFleetcompositionStickyHighlight : null
32
+ },
33
+ dscan: {
34
+ add: typeof addDscanHighlight === 'function' ? addDscanHighlight : null,
35
+ remove: typeof removeDscanHighlight === 'function' ? removeDscanHighlight : null,
36
+ change: typeof changeDscanStickyHighlight === 'function' ? changeDscanStickyHighlight : null
37
+ },
38
+ chatscan: {
39
+ add: typeof addChatscanHighlight === 'function' ? addChatscanHighlight : null,
40
+ remove: typeof removeChatscanHighlight === 'function' ? removeChatscanHighlight : null,
41
+ change: typeof changeChatscanStickyHighlight === 'function' ? changeChatscanStickyHighlight : null
42
+ }
43
+ };
44
+
45
+ const functions = functionMappings[scanType];
46
+
47
+ // Highlight
48
+ const highlightHandler = highlightOnly
49
+ ? (element) => element.addClass('aa-intel-highlight') // jshint ignore:line
50
+ : (element) => functions.add(type, element);
51
+
52
+ const unhighlightHandler = highlightOnly
53
+ ? (element) => element.removeClass('aa-intel-highlight') // jshint ignore:line
54
+ : (element) => functions.remove(type, element);
55
+
56
+ element
57
+ .mouseenter((event) => {
58
+ highlightHandler($(event.currentTarget));
59
+ })
60
+ .mouseleave((event) => {
61
+ unhighlightHandler($(event.currentTarget));
62
+ });
63
+
64
+ // Sticky
65
+ if (!highlightOnly) {
66
+ element.click((event) => {
67
+ if (!$(event.target).hasClass(excludeLinkElement)) {
68
+ functions.change(type, $(event.currentTarget));
69
+ } else {
70
+ event.stopPropagation();
71
+ }
72
+ });
73
+ }
74
+ };
75
+
76
+ /**
77
+ * Toggle sticky highlight for Fleet Composition
78
+ *
79
+ * @param {Object} params Parameters
80
+ * @param {jQuery|Element} params.element The element to attach the events to
81
+ * @param {string} params.type The type of the element (shipclass or shiptype)
82
+ * @param {string} [params.excludeLinkElement=aa-intel-information-link] The class of the element to exclude from sticky toggle
83
+ * @param {boolean} [params.highlightOnly=false] Omit sticky toggle, only highlight on hover
84
+ * @returns {void}
85
+ * @private
86
+ */
87
+ const _toggleFleetcompStickyHighlight = (params) => { // eslint-disable-line no-unused-vars
88
+ _toggleScanStickyHighlight({...params, scanType: 'fleetcomposition'});
89
+ };
90
+
91
+ /**
92
+ * Toggle sticky highlight for D-Scans
93
+ *
94
+ * @param {Object} params Parameters
95
+ * @param {jQuery|Element} params.element The element to attach the events to
96
+ * @param {string} params.type The type of the element (shipclass or shiptype)
97
+ * @param {string} [params.excludeLinkElement=aa-intel-information-link] The class of the element to exclude from sticky toggle
98
+ * @param {boolean} [params.highlightOnly=false] Omit sticky toggle, only highlight on hover
99
+ * @returns {void}
100
+ * @private
101
+ */
102
+ const _toggleDscanStickyHighlight = (params) => { // eslint-disable-line no-unused-vars
103
+ _toggleScanStickyHighlight({...params, scanType: 'dscan'});
104
+ };
105
+
106
+ /**
107
+ * Toggle sticky highlight for Chat Scans
108
+ *
109
+ * @param {Object} params Parameters
110
+ * @param {jQuery|Element} params.element The element to attach the events to
111
+ * @param {string} params.type The type of the element (shipclass or shiptype)
112
+ * @param {string} [params.excludeLinkElement=aa-intel-information-link] The class of the element to exclude from sticky toggle
113
+ * @param {boolean} [params.highlightOnly=false] Omit sticky toggle, only highlight on hover
114
+ * @returns {void}
115
+ * @private
116
+ */
117
+ const _toggleChatscanStickyHighlight = (params) => { // eslint-disable-line no-unused-vars
118
+ _toggleScanStickyHighlight({...params, scanType: 'chatscan'});
119
+ };
120
+
121
+ /**
122
+ * Number formatter
123
+ *
124
+ * @param {number} value The number to format
125
+ * @return {string} The formatted number
126
+ * @private
127
+ */
128
+ const _numberFormatter = (value) => { // eslint-disable-line no-unused-vars
129
+ return new Intl.NumberFormat(aaIntelToolJsSettings.language.django).format(value);
130
+ };
131
+
6
132
  /**
7
133
  * Bootstrap tooltip
8
134
  *
9
- * @param {string} selector The selector container for the tooltip
135
+ * @param {string} [selector=body] Selector for the tooltip elements, defaults to 'body'
136
+ * to apply to all elements with the data-bs-tooltip attribute.
137
+ * Example: 'body', '.my-tooltip-class', '#my-tooltip-id'
138
+ * If you want to apply it to a specific element, use that element's selector.
139
+ * If you want to apply it to all elements with the data-bs-tooltip attribute,
140
+ * use 'body' or leave it empty.
141
+ * @param {string} [namespace=aa-intel-tool] Namespace for the tooltip
142
+ * @returns {void}
10
143
  */
11
- const bootstrapTooltip = (selector = 'body') => { // eslint-disable-line no-unused-vars
12
- // Initialize Bootstrap tooltips
13
- [].slice.call(document.querySelectorAll(`${selector} [data-bs-tooltip="aa-intel-tool"]`))
14
- .map((tooltipTriggerEl) => {
144
+ const bootstrapTooltip = ({selector = 'body', namespace = 'aa-intel-tool'}) => { // eslint-disable-line no-unused-vars
145
+ document.querySelectorAll(`${selector} [data-bs-tooltip="${namespace}"]`)
146
+ .forEach((tooltipTriggerEl) => {
15
147
  return new bootstrap.Tooltip(tooltipTriggerEl);
16
148
  });
17
149
  };
@@ -19,156 +151,205 @@ const bootstrapTooltip = (selector = 'body') => { // eslint-disable-line no-unus
19
151
  /**
20
152
  * Get the image HTML string for an Eve portrait or logo
21
153
  *
22
- * @param {int} eveId
23
- * @param {string} eveName
24
- * @param {string} imageSource
25
- * @param {int} imageSize
154
+ * @param {int} eveId Eve ID of the entity
155
+ * @param {string} eveName Name of the entity
156
+ * @param {string} imageSource URL of the image
157
+ * @param {int} [imageSize=32] Size of the image (width and height)
26
158
  * @returns {`<img class='eve-image rounded' data-eveid='${int}' src='${string}' alt='${string}' title='${string}' data-bs-tooltip='aa-intel-tool' loading='lazy' width='${int}' height='${int}'>`}
159
+ * @private
27
160
  */
28
- const eveImageHtml = (eveId, eveName, imageSource, imageSize = 32) => {
161
+ const _eveImageHtml = ({eveId, eveName, imageSource, imageSize = 32}) => {
29
162
  return `<img class="eve-image rounded" data-eveid="${eveId}" src="${imageSource}" alt="${eveName}" title="${eveName}" data-bs-tooltip="aa-intel-tool" loading="lazy" width="${imageSize}" height="${imageSize}">`;
30
163
  };
31
164
 
32
165
  /**
33
- * Get the link HTML to EveWho for a pilot
34
166
  *
35
- * @param {string} href
36
- * @returns {`<a class='aa-intel-information-link' href='${string}' target='_blank' rel='noopener noreferer'>evewho <sup><small><i class='fa-solid fa-external-link-alt' aria-hidden='true'></i></small></sup></a>`}
167
+ * Get the link HTML for external services
168
+ *
169
+ * @param {string} serviceName Name of the external service
170
+ * @param {string} href URL of the external service
171
+ * @returns {`<a class='aa-intel-information-link' href='${string}' target='_blank' rel='noopener noreferer'>${string}</a>`} HTML string for the external service link
172
+ * @private
37
173
  */
38
- const eveWhoLinkHtml = (href) => {
39
- return `<a class="aa-intel-information-link" href="${href}" target="_blank" rel="noopener noreferer">evewho <sup><small><i class="fa-solid fa-external-link-alt" aria-hidden="true"></i></small></sup></a>`;
174
+ const _externalLinkHtml = ({serviceName, href}) => {
175
+ return `<a class="aa-intel-information-link" href="${href}" target="_blank" rel="noopener noreferer">${serviceName}</a>`;
40
176
  };
41
177
 
178
+ /**
179
+ * Get the link HTML to EveWho for a pilot
180
+ *
181
+ * @param {string} href URL of the external service
182
+ * @returns {`<a class='aa-intel-information-link' href='${string}' target='_blank' rel='noopener noreferer'>evewho</a>`} HTML string for the EveWho link
183
+ * @private
184
+ */
185
+ const _eveWhoLinkHtml = (href) => _externalLinkHtml({
186
+ serviceName: 'evewho',
187
+ href: href
188
+ });
189
+
42
190
  /**
43
191
  * Get the link HTML to zKillboard
44
192
  *
45
- * @param {string} href
46
- * @returns {`<a class='aa-intel-information-link' href='${string}' target='_blank' rel='noopener noreferer'>zkillboard <sup><small><i class='fa-solid fa-external-link-alt' aria-hidden='true'></i></small></sup></a>`}
193
+ * @param {string} href URL of the external service
194
+ * @returns {`<a class='aa-intel-information-link' href='${string}' target='_blank' rel='noopener noreferer'>zkillboard</a>`} HTML string for the zKillboard link
195
+ * @private
47
196
  */
48
- const zkillboardLinkHtml = (href) => {
49
- return `<a class="aa-intel-information-link" href="${href}" target="_blank" rel="noopener noreferer">zkillboard <sup><small><i class="fa-solid fa-external-link-alt" aria-hidden="true"></i></small></sup></a>`;
50
- };
197
+ const _zkillboardLinkHtml = (href) => _externalLinkHtml({
198
+ serviceName: 'zkillboard',
199
+ href: href
200
+ });
51
201
 
52
202
  /**
53
203
  * Get the link HTML to dotlan
54
204
  *
55
- * @param {string} href
56
- * @returns {`<a class='aa-intel-information-link' href='${string}' target='_blank' rel='noopener noreferer'>dotlan <sup><small><i class='fa-solid fa-external-link-alt' aria-hidden='true'></i></small></sup></a>`}
205
+ * @param {string} href URL of the external service
206
+ * @returns {`<a class='aa-intel-information-link' href='${string}' target='_blank' rel='noopener noreferer'>dotlan</a>`} HTML string for the dotlan link
207
+ * @private
57
208
  */
58
- const dotlanLinkHtml = (href) => {
59
- return `<a class="aa-intel-information-link" href="${href}" target="_blank" rel="noopener noreferer">dotlan <sup><small><i class="fa-solid fa-external-link-alt" aria-hidden="true"></i></small></sup></a>`;
60
- };
209
+ const _dotlanLinkHtml = (href) => _externalLinkHtml({
210
+ serviceName: 'dotlan',
211
+ href: href
212
+ });
61
213
 
62
214
  /**
63
215
  * Info panel for the datatable
64
216
  *
65
- * @param {string} imageData
66
- * @param {string} eveData
67
- * @param {string} additionalInfo
68
- * @param {boolean} logoOnly Returns only the logo
69
- * @returns {string} HTML construct for the info panel
217
+ * @param {string} imageData HTML for the image
218
+ * @param {string} eveData Name of the entity
219
+ * @param {string} [additionalInfo=''] Additional information (links etc.)
220
+ * @param {boolean} [logoOnly=false] Returns only the logo
221
+ * @returns {`<span class='aa-intel-eve-image-wrapper'>${string}</span>`|`<span class='aa-intel-eve-image-wrapper'>${string}</span><span class='aa-intel-eve-information-wrapper'><span class='aa-intel-eve-name-wrapper'>${string}</span><span class='aa-intel-additional-information-wrapper'><small>${string}</small></span></span>|<span class='aa-intel-eve-image-wrapper'>${string}</span>`} HTML construct for the info panel
222
+ * @private
70
223
  */
71
- const infoPanel = (
72
- imageData,
73
- eveData,
74
- additionalInfo = '',
75
- logoOnly = false
76
- ) => {
224
+ const _infoPanel = ({imageData, eveData, additionalInfo = '', logoOnly = false}) => {
77
225
  const imageDataHtml = `<span class="aa-intel-eve-image-wrapper">${imageData}</span>`;
78
226
 
79
227
  if (logoOnly) {
80
228
  return imageDataHtml;
81
229
  }
82
230
 
83
- let eveDataHtml = `<span class="aa-intel-eve-information-wrapper"><span class="aa-intel-eve-name-wrapper">${eveData}</span>`;
231
+ const nameWrapper = `<span class="aa-intel-eve-name-wrapper">${eveData}</span>`;
232
+ const additionalWrapper = additionalInfo
233
+ ? `<span class="aa-intel-additional-information-wrapper"><small>${additionalInfo}</small></span>` // jshint ignore:line
234
+ : '';
84
235
 
85
- if (additionalInfo) {
86
- eveDataHtml += `<span class="aa-intel-additional-information-wrapper"><small>${additionalInfo}</small></span>`;
87
- } else {
88
- eveDataHtml += `</span>`;
89
- }
90
-
91
- return imageDataHtml + eveDataHtml;
236
+ return `${imageDataHtml}<span class="aa-intel-eve-information-wrapper">${nameWrapper}${additionalWrapper}</span>`;
92
237
  };
93
238
 
94
239
  /**
95
240
  * Pilot info element in datatable
96
241
  *
97
- * @param {Object} pilotData
98
- * @returns {string} HTML construct for the pilot info
242
+ * @param {Object} pilotData Pilot data
243
+ * @param {int} pilotData.id Pilot ID
244
+ * @param {string} pilotData.name Pilot name
245
+ * @param {string} pilotData.portrait URL of the pilot portrait
246
+ * @param {string} pilotData.evewho URL to EveWho
247
+ * @param {string} pilotData.zkillboard URL to zKillboard
248
+ * @returns {`<span class='aa-intel-eve-image-wrapper'>${string}</span><span class='aa-intel-eve-information-wrapper'><span class='aa-intel-eve-name-wrapper'>${string}</span><span class='aa-intel-additional-information-wrapper'><small>${string} | ${string}</small></span></span>`} HTML construct for the pilot info
99
249
  */
100
250
  const pilotInfoPanel = (pilotData) => { // eslint-disable-line no-unused-vars
101
- const imageData = eveImageHtml(pilotData.id, pilotData.name, pilotData.portrait);
102
- const eveData = pilotData.name;
103
- const additionalInfo = `${eveWhoLinkHtml(pilotData.evewho)} | ${zkillboardLinkHtml(pilotData.zkillboard)}`;
251
+ const imageData = _eveImageHtml({
252
+ eveId: pilotData.id,
253
+ eveName: pilotData.name,
254
+ imageSource: pilotData.portrait
255
+ });
256
+ const additionalInfo = `${_eveWhoLinkHtml(pilotData.evewho)} | ${_zkillboardLinkHtml(pilotData.zkillboard)}`;
104
257
 
105
- return infoPanel(imageData, eveData, additionalInfo);
258
+ return _infoPanel({
259
+ imageData: imageData,
260
+ eveData: pilotData.name,
261
+ additionalInfo: additionalInfo
262
+ });
106
263
  };
107
264
 
108
265
  /**
109
266
  * Corporation info element in datatable
110
267
  *
111
- * @param {Object} corporationData
268
+ * @param {Object} corporationData Corporation data
269
+ * @param {int} corporationData.id Corporation ID
270
+ * @param {string} corporationData.name Corporation name
271
+ * @param {string} corporationData.logo URL of the corporation logo
272
+ * @param {string} corporationData.dotlan URL to dotlan
273
+ * @param {string} corporationData.zkillboard URL to zKillboard
112
274
  * @param {boolean} logoOnly Returns only the corporation logo
113
- * @returns {string} HTML construct for the corporation info
275
+ * @returns {`<span class='aa-intel-eve-image-wrapper'>${string}</span><span class='aa-intel-eve-information-wrapper'><span class='aa-intel-eve-name-wrapper'>${string}</span><span class='aa-intel-additional-information-wrapper'><small>${string}</small></span></span>|<span class='aa-intel-eve-image-wrapper'>${string}</span>`} HTML construct for the corporation info
114
276
  */
115
277
  const corporationInfoPanel = (corporationData, logoOnly = false) => { // eslint-disable-line no-unused-vars
116
- const imageData = eveImageHtml(corporationData.id, corporationData.name, corporationData.logo);
117
- const eveData = corporationData.name;
118
- let additionalInfo = '';
119
-
120
- if ((1000000 <= corporationData.id) && corporationData.id <= 2000000) {
121
- additionalInfo = `(${aaIntelToolJsSettings.translation.scanData.npcCorp})`;
122
- } else {
123
- additionalInfo = `${dotlanLinkHtml(corporationData.dotlan)} | ${zkillboardLinkHtml(corporationData.zkillboard)}`;
124
- }
278
+ const imageData = _eveImageHtml({
279
+ eveId: corporationData.id,
280
+ eveName: corporationData.name,
281
+ imageSource: corporationData.logo
282
+ });
283
+
284
+ const isNpcCorp = corporationData.id >= 1000000 && corporationData.id <= 2000000;
285
+ const additionalInfo = isNpcCorp
286
+ ? `(${aaIntelToolJsSettings.translation.scanData.npcCorp})` // jshint ignore:line
287
+ : `${_dotlanLinkHtml(corporationData.dotlan)} | ${_zkillboardLinkHtml(corporationData.zkillboard)}`;
125
288
 
126
- return infoPanel(imageData, eveData, additionalInfo, logoOnly);
289
+ return _infoPanel({
290
+ imageData: imageData,
291
+ eveData: corporationData.name,
292
+ additionalInfo: additionalInfo,
293
+ logoOnly: logoOnly
294
+ });
127
295
  };
128
296
 
129
297
  /**
130
298
  * Alliance info element in datatable
131
299
  *
132
- * @param {Object} allianceData {object}
300
+ * @param {Object} allianceData Alliance data
301
+ * @param {int} allianceData.id Alliance ID
302
+ * @param {string} allianceData.name Alliance name
303
+ * @param {string} allianceData.logo URL of the alliance logo
304
+ * @param {string} allianceData.dotlan URL to dotlan
305
+ * @param {string} allianceData.zkillboard URL to zKillboard
133
306
  * @param {boolean} logoOnly Returns only the alliance logo
134
- * @returns {string} HTML construct for the alliance info
307
+ * @returns {'' | `<span class='aa-intel-eve-image-wrapper'>${string}</span><span class='aa-intel-eve-information-wrapper'><span class='aa-intel-eve-name-wrapper'>${string}</span><span class='aa-intel-additional-information-wrapper'><small>${string}</small></span></span>|<span class='aa-intel-eve-image-wrapper'>${string}</span>`} HTML construct for the alliance info
135
308
  */
136
309
  const allianceInfoPanel = (allianceData, logoOnly = false) => { // eslint-disable-line no-unused-vars
137
- if (allianceData.name === '') {
138
- allianceData.name = aaIntelToolJsSettings.translation.scanData.unaffiliated;
139
- }
140
-
141
- const imageData = eveImageHtml(allianceData.id, allianceData.name, allianceData.logo);
142
- const eveData = allianceData.name;
143
- let additionalInfo = aaIntelToolJsSettings.translation.scanData.noAlliance;
310
+ const name = allianceData.name || aaIntelToolJsSettings.translation.scanData.unaffiliated;
144
311
 
145
- if (allianceData.id > 1) {
146
- additionalInfo = `${dotlanLinkHtml(allianceData.dotlan)} | ${zkillboardLinkHtml(allianceData.zkillboard)}`;
312
+ if (logoOnly && allianceData.id === 1) {
313
+ return '';
147
314
  }
148
315
 
149
- if (logoOnly) {
150
- if (allianceData.id === 1) {
151
- return '';
152
- }
153
- }
154
-
155
- return infoPanel(imageData, eveData, additionalInfo, logoOnly);
316
+ const imageData = _eveImageHtml({
317
+ eveId: allianceData.id,
318
+ eveName: name,
319
+ imageSource: allianceData.logo
320
+ });
321
+ const additionalInfo = allianceData.id > 1
322
+ ? `${_dotlanLinkHtml(allianceData.dotlan)} | ${_zkillboardLinkHtml(allianceData.zkillboard)}` // jshint ignore:line
323
+ : aaIntelToolJsSettings.translation.scanData.noAlliance;
324
+
325
+ return _infoPanel({
326
+ imageData: imageData,
327
+ eveData: name,
328
+ additionalInfo: additionalInfo,
329
+ logoOnly: logoOnly
330
+ });
156
331
  };
157
332
 
158
333
  /**
159
334
  * Ship/Item info element in datatable
160
335
  *
161
- * @param {Object} shipData
162
- * @returns {string} HTML construct for the ship info
336
+ * @param {Object} shipData Ship data
337
+ * @param {int} shipData.id Ship ID
338
+ * @param {string} shipData.name Ship name
339
+ * @param {string} shipData.image URL of the ship image
340
+ * @returns {`<span class='aa-intel-eve-image-wrapper'>${string}</span><span class='aa-intel-eve-information-wrapper'><span class='aa-intel-eve-name-wrapper'>${string}</span></span>`} HTML construct for the ship info
163
341
  */
164
342
  const shipInfoPanel = (shipData) => { // eslint-disable-line no-unused-vars
165
- const imageData = eveImageHtml(shipData.id, shipData.name, shipData.image);
166
- const eveData = shipData.name;
343
+ const imageData = _eveImageHtml({
344
+ eveId: shipData.id,
345
+ eveName: shipData.name,
346
+ imageSource: shipData.image
347
+ });
167
348
 
168
- return infoPanel(imageData, eveData);
349
+ return _infoPanel({imageData: imageData, eveData: shipData.name});
169
350
  };
170
351
 
171
- $(() => {
352
+ $(document).ready(() => {
172
353
  const elementCopyToClipboard = $('button#btn-copy-permalink-to-clipboard');
173
354
 
174
355
 
@@ -179,51 +360,73 @@ $(() => {
179
360
  elementCopyToClipboard.remove();
180
361
  }
181
362
 
182
-
183
363
  /**
184
364
  * Closing the message
185
365
  *
186
- * @param {string} element
187
- * @param {int} closeAfter Close Message after given time in seconds (Default: 10)
366
+ * @param {jQuery|HTMLElement} element The element to close
367
+ * @param {int} [closeAfter=10] Close Message after given time in seconds
368
+ * @return {void}
188
369
  */
189
- const closeMessageElement = (element, closeAfter = 10) => {
190
- $(element).fadeTo(closeAfter * 1000, 500).slideUp(500, () => {
191
- $(element).remove();
370
+ const closeMessageElement = ({element, closeAfter = 10}) => {
371
+ element.fadeTo(closeAfter * 1000, 500).slideUp(500, () => {
372
+ element.remove();
192
373
  });
193
374
  };
194
375
 
195
376
  /**
196
- * Show a message when copy action was successful
377
+ * Show a message (success or error)
197
378
  *
198
- * @param {string} message
199
- * @param {string} element
379
+ * @param {string} message The message to show
380
+ * @param {jQuery|HTMLElement} element The element to show the message in
381
+ * @param {string} type The message type (e.g.: 'success' or 'error')
382
+ * @return {void}
200
383
  */
201
- const showSuccess = (message, element) => {
202
- $(element).html(
203
- `<div class="alert alert-success alert-dismissible alert-message-success d-flex align-items-center fade show">${message}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>`
384
+ const showMessage = ({message, element, type}) => {
385
+ const alertClass = type === 'success' ? 'alert-success' : 'alert-danger';
386
+ const messageClass = `alert-message-${type}`;
387
+ const closeAfter = type === 'success' ? 10 : 9999;
388
+
389
+ element.html(
390
+ `<div class="alert ${alertClass} alert-dismissible ${messageClass} d-flex align-items-center fade show">${message}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>`
204
391
  );
205
392
 
206
- closeMessageElement('.alert-message-success');
393
+ closeMessageElement({
394
+ element: $(`.${messageClass}`),
395
+ closeAfter: closeAfter
396
+ });
207
397
  };
208
398
 
209
399
  /**
210
- * Show a message when copy action was not successful
400
+ * Show a success message
211
401
  *
212
- * @param {string} message
213
- * @param {string} element
402
+ * @param {string} message The message to show
403
+ * @param {jQuery|HTMLElement} element The element to show the message in
404
+ * @return {void}
214
405
  */
215
- const showError = (message, element) => {
216
- $(element).html(
217
- `<div class="alert alert-danger alert-dismissible alert-message-error d-flex align-items-center fade show">${message}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>`
218
- );
406
+ const showSuccess = ({message, element}) => showMessage({
407
+ message: message,
408
+ element: element,
409
+ type: 'success'
410
+ });
219
411
 
220
- closeMessageElement('.alert-message-error', 9999);
221
- };
412
+ /**
413
+ * Show an error message
414
+ *
415
+ * @param {string} message The message to show
416
+ * @param {jQuery|HTMLElement} element The element to show the message in
417
+ * @return {void}
418
+ */
419
+ const showError = ({message, element}) => showMessage({
420
+ message: message,
421
+ element: element,
422
+ type: 'error'
423
+ });
222
424
 
223
425
  /**
224
426
  * Copy the scan link to clipboard
225
427
  *
226
428
  * @param {string} elementId The HTML-element ID
429
+ * @return {void}
227
430
  */
228
431
  const copyScanLink = (elementId) => {
229
432
  /**
@@ -234,37 +437,35 @@ $(() => {
234
437
  const clipboardScanLink = new ClipboardJS(elementId);
235
438
 
236
439
  /**
237
- * Copy success
440
+ * Handle clipboard operation result
238
441
  *
239
- * @param {type} e
442
+ * @param {boolean} success Whether the operation was successful
443
+ * @param {Event} [e] The event object (for success case)
444
+ * @return {void}
240
445
  */
241
- clipboardScanLink.on('success', (e) => {
242
- showSuccess(
243
- aaIntelToolJsSettings.translation.copyToClipboard.permalink.text.success,
244
- '.aa-intel-copy-result'
245
- );
446
+ const handleClipboardResult = ({success, e}) => {
447
+ const messageType = success ? 'success' : 'error';
448
+ const message = aaIntelToolJsSettings.translation.copyToClipboard.permalink.text[messageType];
246
449
 
247
- e.clearSelection();
248
- clipboardScanLink.destroy();
249
- });
450
+ (success ? showSuccess : showError)({
451
+ message: message,
452
+ element: $('.aa-intel-copy-result')
453
+ });
250
454
 
251
- /**
252
- * Copy error
253
- */
254
- clipboardScanLink.on('error', () => {
255
- showError(
256
- aaIntelToolJsSettings.translation.copyToClipboard.permalink.text.error,
257
- '.aa-intel-copy-result'
258
- );
455
+ if (success && e) {
456
+ e.clearSelection();
457
+ }
259
458
 
260
459
  clipboardScanLink.destroy();
261
- });
460
+ };
461
+
462
+ clipboardScanLink
463
+ .on('success', (e) => handleClipboardResult({success: true, e: e}))
464
+ .on('error', () => handleClipboardResult({success: false}));
262
465
  };
263
466
 
264
- /**
265
- * Copy ping text
266
- */
467
+ // Copy ping text
267
468
  elementCopyToClipboard.click(() => {
268
- copyScanLink('#' + elementCopyToClipboard.attr('id'));
469
+ copyScanLink(`#${elementCopyToClipboard.attr('id')}`);
269
470
  });
270
471
  });