diff --git a/js/app/ui/system_signature.js b/js/app/ui/system_signature.js index 036c2580..8544e6e5 100644 --- a/js/app/ui/system_signature.js +++ b/js/app/ui/system_signature.js @@ -11,7 +11,7 @@ define([ ], function($, Init, Util, Render, bootbox) { 'use strict'; - var config = { + let config = { // module info moduleClass: 'pf-module', // class for each module @@ -55,16 +55,16 @@ define([ }; // lock Signature Table update temporary (until. some requests/animations) are finished - var disableTableUpdate = true; + let disableTableUpdate = true; // disable "copy&paste" from clipboard (until request finished) - var disableCopyFromClipboard = false; + let disableCopyFromClipboard = false; // cache for dataTable object - var signatureTable = null; + let signatureTable = null; // empty signatureData object -> for "add row" table - var emptySignatureData = { + let emptySignatureData = { id: 0, name: '', groupId: 0, @@ -78,20 +78,20 @@ define([ } }; - var fullSignatureOptions = { + let fullSignatureOptions = { action: 'delete', actionClass: ['fa-close', 'txt-color', 'txt-color-redDarker'].join(' ') }; // empty signatureData row Options - var emptySignatureOptions = { + let emptySignatureOptions = { action: 'add', actionClass: ['fa-plus'].join(' ') }; - var sigNameCache = {}; // cache signature names + let sigNameCache = {}; // cache signature names - var validSignatureNames = [ // allowed signature type/names + let validSignatureNames = [ // allowed signature type/names 'Cosmic Anomaly', 'Cosmic Signature', 'Космическая аномалия', // == "Cosmic Anomaly" @@ -99,29 +99,29 @@ define([ ]; // some static signature data - var signatureGroupsLabels = Util.getSignatureGroupInfo('label'); - var signatureGroupsNames = Util.getSignatureGroupInfo('name'); + let signatureGroupsLabels = Util.getSignatureGroupInfo('label'); + let signatureGroupsNames = Util.getSignatureGroupInfo('name'); /** * collect all data of all editable fields in a signature table * @returns {Array} */ - var getSignatureTableData = function(){ - var signatureTableApi = signatureTable.api(); - var tableData = []; + let getSignatureTableData = function(){ + let signatureTableApi = signatureTable.api(); + let tableData = []; signatureTableApi.rows().eq(0).each(function(idx){ - var row = signatureTableApi.row(idx); + let row = signatureTableApi.row(idx); // default row data - var defaultRowData = row.data(); - var rowElement = row.nodes().to$(); + let defaultRowData = row.data(); + let rowElement = row.nodes().to$(); if(defaultRowData.id > 0){ // get all editable fields per row - var editableFields = rowElement.find('.editable'); + let editableFields = rowElement.find('.editable'); if(editableFields.length > 0){ - var values = $(editableFields).editable('getValue'); + let values = $(editableFields).editable('getValue'); if(values.name){ // convert to lower for better compare options @@ -151,13 +151,13 @@ define([ * @param cellIndex * @param data */ - var updateSignatureCell = function(rowElement, cellIndex, data){ + let updateSignatureCell = function(rowElement, cellIndex, data){ - var signatureTableApi = signatureTable.api(); - var rowIndex = signatureTableApi.row( rowElement ).index(); + let signatureTableApi = signatureTable.api(); + let rowIndex = signatureTableApi.row( rowElement ).index(); - var updateCell = signatureTableApi.cell( rowIndex, cellIndex ); - var updateCellElement = updateCell.nodes().to$(); + let updateCell = signatureTableApi.cell( rowIndex, cellIndex ); + let updateCellElement = updateCell.nodes().to$(); if(cellIndex === 6){ // clear existing counter interval @@ -187,37 +187,36 @@ define([ } // clone signature array because of further manipulation - var signatureData = $.extend([], signatureDataOrig); + let signatureData = $.extend([], signatureDataOrig); // disable update until function is ready; lockSignatureTable(); - var moduleElement = $(this); + let moduleElement = $(this); // get signature table API - var signatureTableApi = signatureTable.api(); + let signatureTableApi = signatureTable.api(); // get current system data - var currentSystemData = Util.getCurrentSystemData(); + let currentSystemData = Util.getCurrentSystemData(); - var tableData = getSignatureTableData(); + let tableData = getSignatureTableData(); - var notificationCounter = { + let notificationCounter = { added: 0, changed: 0, deleted: 0 }; - for(var i = 0; i < signatureData.length; i++){ - for(var j = 0; j < tableData.length; j++){ + for(let i = 0; i < signatureData.length; i++){ + for(let j = 0; j < tableData.length; j++){ if(signatureData[i].id === tableData[j].id){ // check if row was updated if(signatureData[i].updated.updated > tableData[j].updated.updated){ - // row element to remove - var currentRowElement = signatureTableApi.row(tableData[j].index).nodes().to$(); + let currentRowElement = signatureTableApi.row(tableData[j].index).nodes().to$(); // hide open editable fields on the row before removing them currentRowElement.find('.editable').editable('destroy'); @@ -226,7 +225,7 @@ define([ signatureTableApi.row(currentRowElement).remove().draw(); // and add "new" row - var changedRowElement = addSignatureRow(currentSystemData.systemData, signatureData[i], false); + let changedRowElement = addSignatureRow(currentSystemData.systemData, signatureData[i], false); // highlight changedRowElement.pulseTableRow('changed'); @@ -251,7 +250,7 @@ define([ if(deleteOutdatedSignatures === true){ // callback function after row deleted - var toggleTableRowCallback = function(tempRowElement){ + let toggleTableRowCallback = function(tempRowElement){ // hide open editable fields on the row before removing them tempRowElement.find('.editable').editable('destroy'); @@ -259,17 +258,17 @@ define([ signatureTableApi.row(tempRowElement).remove().draw(); }; - for(var l = 0; l < tableData.length; l++){ - var rowElement = signatureTableApi.row(tableData[l].index).nodes().to$(); + for(let l = 0; l < tableData.length; l++){ + let rowElement = signatureTableApi.row(tableData[l].index).nodes().to$(); rowElement.toggleTableRow(toggleTableRowCallback); notificationCounter.deleted++; } } // add new signatures ----------------------------------------------------------------------------------------- - for(var k = 0; k < signatureData.length; k++){ + for(let k = 0; k < signatureData.length; k++){ // and add "new" row - var newRowElement = addSignatureRow(currentSystemData.systemData, signatureData[k], false); + let newRowElement = addSignatureRow(currentSystemData.systemData, signatureData[k], false); // highlight newRowElement.pulseTableRow('added'); @@ -288,7 +287,7 @@ define([ moduleElement.updateScannedSignaturesBar({showNotice: true}); // show Notification - var notification = notificationCounter.added + ' added
'; + let notification = notificationCounter.added + ' added
'; notification += notificationCounter.changed + ' changed
'; notification += notificationCounter.deleted + ' deleted
'; Util.showNotify({title: 'Signatures updated', text: notification, type: 'success'}); @@ -304,7 +303,7 @@ define([ /** * lock system signature table for */ - var lockSignatureTable = function(){ + let lockSignatureTable = function(){ disableTableUpdate = true; }; @@ -313,7 +312,7 @@ define([ * -> make table "update-able" again * @param instant */ - var unlockSignatureTable = function(instant){ + let unlockSignatureTable = function(instant){ if(disableTableUpdate === true){ if(instant === true){ disableTableUpdate = false; @@ -331,25 +330,27 @@ define([ */ $.fn.updateScannedSignaturesBar = function(options){ - var moduleElement = $(this); + let moduleElement = $(this); // get progress bar - var progressBarWrapper = moduleElement.find('.' + config.signatureScannedProgressBarClass); - var progressBar = $(progressBarWrapper).find('.progress-bar'); - var progressBarLabel = $(progressBarWrapper).find('.progress-label-right'); + let progressBarWrapper = moduleElement.find('.' + config.signatureScannedProgressBarClass); + let progressBar = $(progressBarWrapper).find('.progress-bar'); + let progressBarLabel = $(progressBarWrapper).find('.progress-label-right'); - var tableData = getSignatureTableData(); + let tableData = getSignatureTableData(); - var percent = 0; - var progressBarType = 'progress-bar-danger'; + let sigCount = 0; + let percent = 0; + let sigIncompleteCount = 0; + let progressBarType = 'progress-bar-danger'; if(tableData){ - var sigCount = tableData.length; - var sigIncompleteCount = 0; + sigCount = tableData.length; + // check for signatures without "groupId" -> these are un scanned signatures - for(var i = 0; i < tableData.length; i++){ - var groupId = parseInt(tableData[i].groupId); + for(let i = 0; i < tableData.length; i++){ + let groupId = parseInt(tableData[i].groupId); if(groupId === 0){ sigIncompleteCount++; } @@ -375,7 +376,7 @@ define([ progressBar.attr('aria-valuenow', percent); progressBar.css({width: percent + '%'}); - var notification = (sigCount - sigIncompleteCount) + ' / ' + sigCount + ' (' + percent + '%) signatures scanned'; + let notification = (sigCount - sigIncompleteCount) + ' / ' + sigCount + ' (' + percent + '%) signatures scanned'; // show notifications if(options.showNotice !== false){ @@ -396,17 +397,17 @@ define([ */ $.fn.showSignatureReaderDialog = function(systemData){ - var moduleElement = $(this); + let moduleElement = $(this); - var data = { + let data = { id: config.signatureReaderDialogId }; requirejs(['text!templates/dialog/signature_reader.html', 'mustache'], function(template, Mustache) { - var content = Mustache.render(template, data); + let content = Mustache.render(template, data); - var signatureReaderDialog = bootbox.dialog({ + let signatureReaderDialog = bootbox.dialog({ title: 'Signature reader', message: content, buttons: { @@ -422,10 +423,10 @@ define([ className: 'btn-success', callback: function () { // get form Values - var form = $('#' + config.signatureReaderDialogId).find('form'); - var formData = $(form).getFormValues(); + let form = $('#' + config.signatureReaderDialogId).find('form'); + let formData = $(form).getFormValues(); - var signatureOptions = { + let signatureOptions = { deleteOld: (formData.deleteOld) ? 1 : 0 }; moduleElement.updateSignatureTableByClipboard(systemData, formData.clipboard, signatureOptions); @@ -454,15 +455,16 @@ define([ * @param options */ $.fn.updateSignatureTableByClipboard = function(systemData, clipboard, options){ + let moduleElement = $(this); - var requestData = function(){ + let saveSignatureData = function(signatureData){ // lock update function until request is finished lockSignatureTable(); // lock copy during request (prevent spamming (ctrl + c ) disableCopyFromClipboard = true; - var requestData = { + let requestData = { signatures: signatureData, deleteOld: (options.deleteOld) ? 1 : 0, systemId: parseInt(systemData.id) @@ -479,7 +481,7 @@ define([ // updates table with new/updated signature information moduleElement.updateSignatureTable(responseData.signatures, false); }).fail(function( jqXHR, status, error) { - var reason = status + ' ' + error; + let reason = status + ' ' + error; Util.showNotify({title: jqXHR.status + ': Update signatures', text: reason, type: 'warning'}); $(document).setProgramStatus('problem'); }).always(function() { @@ -490,35 +492,34 @@ define([ // check if copy&paste is enabled if( !disableCopyFromClipboard ){ - var moduleElement = $(this); // parse input stream - var signatureData = parseSignatureString(systemData, clipboard); + let signatureData = parseSignatureString(systemData, clipboard); if(signatureData.length > 0){ // valid signature data parsed // check if signatures will be added to a system where character is currently in // if user is not in any system -> id === undefined -> no "confirmation required - var currentLocationData = Util.getCurrentLocationData(); + let currentLocationData = Util.getCurrentLocationData(); if( currentLocationData.id && currentLocationData.id !== systemData.id ){ - var systemNameStr = (systemData.name === systemData.alias) ? '"' + systemData.name + '"' : '"' + systemData.alias + '" (' + systemData.name + ')'; + let systemNameStr = (systemData.name === systemData.alias) ? '"' + systemData.name + '"' : '"' + systemData.alias + '" (' + systemData.name + ')'; systemNameStr = '' + systemNameStr + ''; - var msg = ''; + let msg = ''; msg += 'Update signatures in ' + systemNameStr + ' ? This not your current location, "' + currentLocationData.name + '" !'; bootbox.confirm(msg, function(result) { if(result){ - requestData(); + saveSignatureData(signatureData); } }); }else{ // current system selected -> no "confirmation" required - requestData(); + saveSignatureData(signatureData); } } } @@ -530,29 +531,29 @@ define([ * @param clipboard * @returns {Array} */ - var parseSignatureString = function(systemData, clipboard){ - var signatureData = []; + let parseSignatureString = function(systemData, clipboard){ + let signatureData = []; if(clipboard.length){ - var signatureRows = clipboard.split(/\r\n|\r|\n/g); - var signatureGroupOptions = signatureGroupsNames; - var invalidSignatures = 0; + let signatureRows = clipboard.split(/\r\n|\r|\n/g); + let signatureGroupOptions = signatureGroupsNames; + let invalidSignatures = 0; - for(var i = 0; i < signatureRows.length; i++){ - var rowData = signatureRows[i].split(/\t/g); + for(let i = 0; i < signatureRows.length; i++){ + let rowData = signatureRows[i].split(/\t/g); if(rowData.length === 6){ // check if sig Type = anomaly or combat site if(validSignatureNames.indexOf( rowData[1] ) !== -1){ - var sigGroup = $.trim(rowData[2]).toLowerCase(); - var sigDescription = $.trim(rowData[3]); - var sigGroupId = 0; - var typeId = 0; + let sigGroup = $.trim(rowData[2]).toLowerCase(); + let sigDescription = $.trim(rowData[3]); + let sigGroupId = 0; + let typeId = 0; // get groupId by groupName - for (var prop in signatureGroupOptions) { + for (let prop in signatureGroupOptions) { if(signatureGroupOptions.hasOwnProperty(prop)){ if(signatureGroupOptions[prop] === sigGroup){ sigGroupId = parseInt( prop ); @@ -573,9 +574,9 @@ define([ } // map array values to signature Object - var signatureObj = { + let signatureObj = { systemId: systemData.id, - name: $.trim( rowData[0].substr(0, 3) ).toLowerCase(), + name: $.trim( rowData[0] ).toLowerCase(), groupId: sigGroupId, typeId: typeId, description: sigDescription @@ -591,7 +592,7 @@ define([ } if(invalidSignatures > 0){ - var notification = invalidSignatures + ' / ' + signatureRows.length + ' signatures invalid'; + let notification = invalidSignatures + ' / ' + signatureRows.length + ' signatures invalid'; Util.showNotify({title: 'Invalid signature(s)', text: notification, type: 'warning'}); } } @@ -599,14 +600,147 @@ define([ return signatureData; }; + /** + * format signature data array into dataTable structure + * @param systemData + * @param signatureData + * @param options + * @returns {Array} + */ + let formatSignatureData = function(systemData, signatureData, options){ + + let formattedData = []; + + // security check + if( + systemData && + systemData.id && + systemData.id > 0 + ){ + let systemTypeId = systemData.type.id; + + // areaId is required as a key for signature names + // if areaId is 0, no signature data is available for this system + let areaId = Util.getAreaIdBySecurity(systemData.security); + + for(let i = 0; i < signatureData.length; i++){ + let data = signatureData[i]; + + let tempData = {}; + + // set id --------------------------------------------------------------------------------------------- + let sigId = 0; + if(data.id > 0){ + sigId = data.id; + } + tempData.id = sigId; + + // set status ----------------------------------------------------------------------------------------- + let statusClass = ''; + if(data.updated.character !== undefined){ + statusClass = Util.getStatusInfoForCharacter(data.updated.character, 'class'); + } + let status = ''; + + tempData.status = { + status: status, + status_sort: statusClass + }; + + // set name ------------------------------------------------------------------------------------------- + let sigName = ' 0){ + sigName += 'data-pk="' + data.id + '" '; + } + sigName += '>' + data.name + ''; + + tempData.name = { + render: sigName, + name: data.name + }; + + // set group id --------------------------------------------------------------------------------------- + let sigGroup = ' 0){ + sigGroup += 'data-pk="' + data.id + '" '; + } + sigGroup += 'data-systemTypeId="' + systemTypeId + '" '; + sigGroup += 'data-areaId="' + areaId + '" '; + sigGroup += 'data-value="' + data.groupId + '" '; + sigGroup += '>'; + + tempData.group = { + group: sigGroup, + sort: signatureGroupsLabels[data.groupId], + filter: signatureGroupsLabels[data.groupId] + }; + + // set type id ---------------------------------------------------------------------------------------- + let sigType = ' 0){ + sigType += 'data-pk="' + data.id + '" '; + } + + // set disabled if sig type is not selected + if(data.groupId < 1){ + sigType += 'data-disabled="1" '; + } + + sigType += 'data-systemTypeId="' + systemTypeId + '" '; + sigType += 'data-areaId="' + areaId + '" '; + sigType += 'data-groupId="' + data.groupId + '" '; + sigType += 'data-value="' + data.typeId + '" '; + sigType += '>'; + + tempData.type = sigType; + + // set description ------------------------------------------------------------------------------------ + let sigDescription = ' 0){ + sigDescription += 'data-pk="' + data.id + '" '; + } + sigDescription += '>' + data.description + ''; + + tempData.description = sigDescription; + + // set created ---------------------------------------------------------------------------------------- + tempData.created = data.created; + + // set updated ---------------------------------------------------------------------------------------- + tempData.updated = data.updated; + + // info icon ------------------------------------------------------------------------------------------ + let infoButton = ''; + if(data.id > 0){ + infoButton = ''; + } + tempData.info = infoButton; + + // action icon ---------------------------------------------------------------------------------------- + + let actionButton = ''; + tempData.action = { + action: options.action, + button: actionButton + }; + + formattedData.push(tempData); + + } + + } + + return formattedData; + }; + /** * get a labeled button * @param options * @returns {*|jQuery} */ - var getLabledButton = function(options){ + let getLabledButton = function(options){ - var buttonClasses = ['btn', 'btn-sm', 'btn-labeled']; + let buttonClasses = ['btn', 'btn-sm', 'btn-labeled']; switch(options.type){ case 'default': @@ -626,7 +760,7 @@ define([ } - var buttonElement = $('