define([ 'jquery', 'app/init', 'app/util', 'app/render', 'bootbox', 'morris', //'datatables', 'datatablesTableTools', 'xEditable', 'app/map/map', 'app/counter' ], function($, Config, Util, Render, bootbox, Morris) { 'use strict'; var currentMapData = []; // current map data var config = { dynamicElementWrapperId: 'pf-dialog-wrapper', // parent Element for dynamic content (dialogs,..) mapTabElementId: 'pf-map-tab-element', // id for map tab element (tabs + content) mapTabBarId: 'pf-map-tabs', // id for map tab bar mapTabIdPrefix: 'pf-map-tab-', // id prefix for a map tab mapTabClass: 'pf-map-tab', // class for a map tab mapTabLinkTextClass: 'nav-tabs-link', // class for span elements in a tab mapTabContentClass: 'pf-map-tab-content', // class for tab content container mapTabContentSystemInfoClass: 'pf-map-tab-content-system', mapWrapperClass: 'pf-map-wrapper', // scrollable mapClass: 'pf-map', // class for each map // dialogs newMapDialogId: 'pf-map-new-dialog', // id for system dialog signatureReaderDialogId: 'pf-signature-reader-dialog', // id for signature reader dialog // TabContentStructure mapTabContentRow: 'pf-map-content-row', // main row for Tab content (grid) mapTabContentCell: 'pf-map-content-col', // column mapTabContentCellFirst: 'pf-map-content-col-first', // first column mapTabContentCellSecond: 'pf-map-content-col-second', // second column // module info moduleClass: 'pf-module', // class for each module // system info module systemInfoModuleClass: 'pf-system-info-module', // module wrapper systemInfoRoutesClass: 'pf-system-info-routes', // wrapper for trade hub routes systemInfoGraphsClass: 'pf-system-info-graphs', // wrapper for graphs systemInfoGraphKillsClass: 'pf-system-info-graph-kills', // class for system kill graph systemInfoTableClass: 'pf-system-info-table', // class for system info table systemInfoTableEffectRowClass: 'pf-system-info-effect-row', // class for system info table effect row systemInfoRoutesTableClass: 'pf-system-route-table', // class for route tables systemInfoRoutesTableRowPrefix: 'pf-system-info-routes-row-', // prefix class for a row in the route table systemSecurityClassPrefix: 'pf-system-security-', // prefix class for system security level (color) systemInfoProgressScannedClass: 'pf-system-progress-scanned', // progress bar scanned signatures // sig table module sigTableModuleClass: 'pf-sig-table-module', // module wrapper sigTableToolsClass: 'pf-sig-table-tools', // table toolbar sigTableToolsActionClass: 'pf-sig-table-tools-action', // table toolbar action sigTableClass: 'pf-sig-table', // Table class for all Signature Tables sigTableMainClass: 'pf-sig-table-main', // Table class for main sig table sigTableEditText: 'pf-sig-table-edit-text', // class for editable fields (text) sigTableEditSigNameInput: 'pf-sig-table-edit-name-input', // class for editable fields (input) sigTableEditSigTypeSelect: 'pf-sig-table-edit-type-select', // class for editable fields (select) sigTableEditSigNameSelect: 'pf-sig-table-edit-name-select', // class for editable fields (select) sigTableCounterClass: 'pf-sig-table-counter', // class for signature table counter // map scopes mapScopes: [ {scope: 'wormhole', label: 'W-Space'} ] }; var cache = { systemRoutes: {}, // jump information between solar systems systemKillsGraphData: {} // data for system kills info graph }; var mapTabChangeBlocked = false; // flag for preventing map tab switch /** * get all maps for a maps module * @param mapModule * @returns {*} */ $.fn.getMaps = function(){ var maps = $(this).find('.' + config.mapClass); return maps; }; /** * get the current active map for * @returns {*} */ $.fn.getActiveMap = function(){ var map = $(this).find('.active.' + config.mapTabContentClass + ' .' + config.mapClass); if(map.length === 0){ map = false; } return map; }; /** * get all TabElements in this map module * @returns {*} */ var getTabElements = function(){ return $('#' + config.mapTabBarId).find('a'); }; /** * set Tab Observer, events are triggered within map.js * @param mapContentModule */ $.fn.setTabContentObserver = function(){ return this.each(function(){ // update Tab Content with system data information $(this).on('pf:updateSystemData', function(e, mapData){ // collect all relevant data for SystemInfoElement var systemInfoData = { systemId: parseInt( $( mapData.system).data('id') ), mapId: parseInt( $( mapData.system).attr('data-mapid') ) }; drawSystemInfoElement($( e.target ), systemInfoData); }); }); }; /** * open "signature reader" dialog for signature table */ $.fn.showSignatureReaderDialog = function(systemData){ var moduleElement = $(this); var data = { id: config.signatureReaderDialogId }; requirejs(['text!templates/modules/signature_reader_dialog.html', 'mustache'], function(template, Mustache) { var content = Mustache.render(template, data); var signatureReaderDialog = bootbox.dialog({ title: 'Signature reader', message: content, buttons: { close: { label: 'cancel', className: 'btn-default', callback: function(){ $(signatureReaderDialog).modal('hide'); } }, success: { label: 'update signatures', className: 'btn-primary', callback: function () { // get form Values var form = $('#' + config.signatureReaderDialogId).find('form'); var formData = $(form).getFormValues(); moduleElement.updateSignatureTableByClipboard(systemData, formData.clipboard); } } } }); }); }; /** * updates * @param systemData * @param clipboard data stream */ $.fn.updateSignatureTableByClipboard = function(systemData, clipboard){ var moduleElement = $(this); // parse input stream var signatureData = parseSignatureString(systemData, clipboard); // TODO save data and get date with ID updatedBy names etc. // updates table with new signature information moduleElement.updateSignatureTable(signatureData); }; /** * parses a copy&paste string from ingame scanning window and parses it * @param systemData * @param clipbaord * @returns {Array} */ var parseSignatureString = function(systemData, clipbaord){ var signatureData = []; var signatureRows = clipbaord.split('\r\n'); var signatureGroupOptions = Util.getSignatureGroupInfo('name'); for(var i = 0; i < signatureRows.length; i++){ var rowData = signatureRows[i].split('\t'); if(rowData.length === 6){ // check if sig Type = anomaly or combat site if( rowData[1] === 'Cosmic Anomaly' || rowData[1] === 'Cosmic Signature' ){ var sigGroup = rowData[2].trim().toLowerCase(); var sigGroupId = 0; // get groupId by groupName for (var prop in signatureGroupOptions) { if(signatureGroupOptions.hasOwnProperty(prop)){ if(signatureGroupOptions[prop] === sigGroup){ sigGroupId = parseInt( prop ); break; } } } var typeId = Util.getSignatureTypeIdByName( systemData, sigGroupId, rowData[3].trim() ); // map array values to signature Object var signatureObj = { name: rowData[0].substr(0, 3).trim().toLowerCase(), groupId: sigGroupId, typeId: typeId }; signatureData.push(signatureObj); } } } return signatureData; }; /** * draw signature table toolbar (add signature button, scan progress bar * @param systemData * @param emptySignatureData */ $.fn.drawSignatureTableToolbar = function(systemData, emptySignatureData){ var moduleElement = $(this); // add toolbar buttons for table ------------------------------------- var tableToolbar = $('
', { class: config.sigTableToolsClass }).append( $('