v1.1.1 (#233)
* fixed #194 PHP 5.6 error * - closed #102 added "set waypoint/destination" context menu to route finder module - update "Select2" 4.0.0 -> 4.0.3 - update "Font Awesome" 4.6.1 -> 4.6.3 * - added *.js files for develop branch * - closed #195 fixed "BASE" dir for subDir installations - fixed "Home" menu link * - #195 improved js load path * - added "clear cache" function for manually cache clearing to /setup #200 #105 #158 - added cache size information to /setup - added current pathfinder "VERSION" to /setup - updated "requireJs" 2.1.20 ->2.2.0 - removed unnecessary page cache timings from static templates (page cache) * - added "document_root", "port", "protocol" and "PHP framework version" to /setup page - added new "shattered" wormhole types to "signature table", closed #182, #179 * - added new "delete old signatures" option to "signature reader" dialog, closed #95 * - added new housekeeping cronjob für cached files, closed #200 - added new cache size information to /setup page * - fixed signature groupId/typeId "overwriting" for already known signatures. closed #207 - improved system search dialog. Added trim(); before "api/signatures-> search" request * updated README.me * fixed PHP error "default object from empty value", closed #209 * reduced image file size * - added local storage (IndexedDB) - added local storage for map scroll position. closed #69 * - added "notice" panel for upcoming release information - improved layout for "release dialog" (GitHub API) - improved pagespeed (removed render blocking javascripts) - improved map scrollbar configuration - improved Chrome browser custom scrollbar layout - removed "sign up" buttons from "map panels", closed #214 * - fixed some session and cookie bugs * - added new requirement check for `max_input_vars` to /setup URL, closed #224 * - fixed isWormhole(); bug * -v1.1.1 added js build files
This commit is contained in:
@@ -25,6 +25,7 @@ requirejs.config({
|
||||
bootstrap: 'lib/bootstrap.min', // v3.3.0 Bootstrap js code - http://getbootstrap.com/javascript
|
||||
text: 'lib/requirejs/text', // v2.0.12 A RequireJS/AMD loader plugin for loading text resources.
|
||||
mustache: 'lib/mustache.min', // v1.0.0 Javascript template engine - http://mustache.github.io
|
||||
localForage: 'lib/localforage.min', // v1.4.2 localStorage library - https://mozilla.github.io/localForage
|
||||
velocity: 'lib/velocity.min', // v1.2.2 animation engine - http://julian.com/research/velocity
|
||||
velocityUI: 'lib/velocity.ui.min', // v5.0.4 plugin for velocity - http://julian.com/research/velocity/#uiPack
|
||||
slidebars: 'lib/slidebars', // v0.10 Slidebars - side menu plugin http://plugins.adchsm.me/slidebars
|
||||
@@ -44,7 +45,7 @@ requirejs.config({
|
||||
dragToSelect: 'lib/jquery.dragToSelect', // v1.1 Drag to Select - http://andreaslagerkvist.com/jquery/drag-to-select
|
||||
hoverIntent: 'lib/jquery.hoverIntent.minified', // v1.8.0 Hover intention - http://cherne.net/brian/resources/jquery.hoverIntent.html
|
||||
fullScreen: 'lib/jquery.fullscreen.min', // v0.5.0 Full screen mode - https://github.com/private-face/jquery.fullscreen
|
||||
select2: 'lib/select2.min', // v4.0.0 Drop Down customization - https://select2.github.io
|
||||
select2: 'lib/select2.min', // v4.0.3 Drop Down customization - https://select2.github.io
|
||||
validator: 'lib/validator.min', // v0.10.1 Validator for Bootstrap 3 - https://github.com/1000hz/bootstrap-validator
|
||||
lazylinepainter: 'lib/jquery.lazylinepainter-1.5.1.min', // v1.5.1 SVG line animation plugin - http://lazylinepainter.info
|
||||
blueImpGallery: 'lib/blueimp-gallery', // v2.15.2 Image Gallery - https://github.com/blueimp/Gallery
|
||||
|
||||
@@ -336,7 +336,8 @@ define(['jquery'], function($) {
|
||||
4: 'M001 - C4',
|
||||
5: 'C008 - C5',
|
||||
6: 'G008 - C6',
|
||||
7: 'Q003 - 0.0'
|
||||
7: 'Q003 - 0.0',
|
||||
8: 'A009 - (shattered)'
|
||||
},
|
||||
2: { // C2
|
||||
1: 'E004 - C1',
|
||||
@@ -345,7 +346,8 @@ define(['jquery'], function($) {
|
||||
4: 'M001 - C4',
|
||||
5: 'C008 - C5',
|
||||
6: 'G008 - C6',
|
||||
7: 'Q003 - 0.0'
|
||||
7: 'Q003 - 0.0',
|
||||
8: 'A009 - (shattered)'
|
||||
},
|
||||
3: { // C3
|
||||
1: 'E004 - C1',
|
||||
@@ -354,7 +356,8 @@ define(['jquery'], function($) {
|
||||
4: 'M001 - C4',
|
||||
5: 'C008 - C5',
|
||||
6: 'G008 - C6',
|
||||
7: 'Q003 - 0.0'
|
||||
7: 'Q003 - 0.0',
|
||||
8: 'A009 - (shattered)'
|
||||
},
|
||||
4: { // C4
|
||||
1: 'E004 - C1',
|
||||
@@ -363,7 +366,8 @@ define(['jquery'], function($) {
|
||||
4: 'M001 - C4',
|
||||
5: 'C008 - C5',
|
||||
6: 'G008 - C6',
|
||||
7: 'Q003 - 0.0'
|
||||
7: 'Q003 - 0.0',
|
||||
8: 'A009 - (shattered)'
|
||||
},
|
||||
5: { // C5
|
||||
1: 'E004 - C1',
|
||||
@@ -372,7 +376,8 @@ define(['jquery'], function($) {
|
||||
4: 'M001 - C4',
|
||||
5: 'C008 - C5',
|
||||
6: 'G008 - C6',
|
||||
7: 'Q003 - 0.0'
|
||||
7: 'Q003 - 0.0',
|
||||
8: 'A009 - (shattered)'
|
||||
},
|
||||
6: { // C6
|
||||
1: 'E004 - C1',
|
||||
@@ -381,7 +386,8 @@ define(['jquery'], function($) {
|
||||
4: 'M001 - C4',
|
||||
5: 'C008 - C5',
|
||||
6: 'G008 - C6',
|
||||
7: 'Q003 - 0.0'
|
||||
7: 'Q003 - 0.0',
|
||||
8: 'A009 - (shattered)'
|
||||
},
|
||||
13: { // Shattered Wormholes (some of them are static)
|
||||
1: 'E004 - C1',
|
||||
@@ -390,7 +396,8 @@ define(['jquery'], function($) {
|
||||
4: 'M001 - C4',
|
||||
5: 'C008 - C5',
|
||||
6: 'G008 - C6',
|
||||
7: 'Q003 - 0.0'
|
||||
7: 'Q003 - 0.0',
|
||||
8: 'A009 - (shattered)'
|
||||
}
|
||||
},
|
||||
// incoming wormholes
|
||||
|
||||
@@ -77,7 +77,8 @@ define([
|
||||
var d = new Date();
|
||||
d.setTime(d.getTime() + (exdays*24*60*60*1000));
|
||||
var expires = 'expires=' + d.toUTCString();
|
||||
document.cookie = cname + '=' + cvalue + '; ' + expires;
|
||||
var path = 'path=' + Util.getDocumentPath();
|
||||
document.cookie = cname + '=' + cvalue + '; ' + expires + '; ' + path;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -159,7 +160,7 @@ define([
|
||||
Gallery.prototype.textFactory = function (obj, callback) {
|
||||
var newSlideContent = $('<div>')
|
||||
.addClass('text-content')
|
||||
.attr('title', obj.title);
|
||||
.attr('imgTitle', obj.title);
|
||||
|
||||
var moduleConfig = {
|
||||
name: obj.href, // template name
|
||||
@@ -192,31 +193,31 @@ define([
|
||||
// initialize carousel ------------------------------------------------
|
||||
var carousel = new Gallery([
|
||||
{
|
||||
title: 'IGB',
|
||||
imgTitle: 'IGB',
|
||||
href: 'ui/map',
|
||||
type: 'text/html'
|
||||
},
|
||||
{
|
||||
href: 'public/img/landing/responsive.jpg',
|
||||
title: 'Responsive layout',
|
||||
imgTitle: 'Responsive layout',
|
||||
type: 'image/jpg',
|
||||
thumbnail: ''
|
||||
},
|
||||
{
|
||||
href: 'public/img/landing/pathfinder_1.jpg',
|
||||
title: 'Map view',
|
||||
imgTitle: 'Map view',
|
||||
type: 'image/jpg',
|
||||
thumbnail: ''
|
||||
},
|
||||
{
|
||||
href: 'public/img/landing/pathfinder_3.jpg',
|
||||
title: 'Map information',
|
||||
imgTitle: 'Map information',
|
||||
type: 'image/jpg',
|
||||
thumbnail: ''
|
||||
},
|
||||
{
|
||||
href: 'public/img/landing/pathfinder_2.jpg',
|
||||
title: 'System information',
|
||||
imgTitle: 'System information',
|
||||
type: 'image/jpg',
|
||||
thumbnail: ''
|
||||
}
|
||||
@@ -224,7 +225,7 @@ define([
|
||||
container: '#' + config.galleryCarouselId,
|
||||
carousel: true,
|
||||
startSlideshow: false,
|
||||
titleProperty: 'title',
|
||||
titleProperty: 'imgTitle',
|
||||
transitionSpeed: 600,
|
||||
slideshowInterval: 5000,
|
||||
onopened: function () {
|
||||
@@ -232,6 +233,9 @@ define([
|
||||
// and the initialization transition has been completed.
|
||||
// -> show "demo" map
|
||||
|
||||
// set title for first slide
|
||||
$( this.options.container ).find( this.options.titleElement).text('Browser view');
|
||||
|
||||
$('#' + config.headHeaderMapId).drawDemoMap(function(){
|
||||
|
||||
// zoom map SVGs
|
||||
@@ -655,12 +659,15 @@ define([
|
||||
|
||||
initCharacterSelect();
|
||||
|
||||
// init carousel
|
||||
initCarousel();
|
||||
|
||||
// init scrollspy
|
||||
initScrollspy();
|
||||
|
||||
// init page observer
|
||||
setPageObserver();
|
||||
|
||||
// init carousel
|
||||
initCarousel();
|
||||
|
||||
// init gallery
|
||||
initGallery();
|
||||
|
||||
@@ -678,8 +685,6 @@ define([
|
||||
}, false);
|
||||
}
|
||||
|
||||
setPageObserver();
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ define([
|
||||
'bootbox',
|
||||
'app/ccp',
|
||||
'app/map/magnetizing',
|
||||
'app/map/scrollbar',
|
||||
'dragToSelect',
|
||||
'select2',
|
||||
'app/map/contextmenu',
|
||||
@@ -65,6 +66,9 @@ define([
|
||||
systemDialogId: 'pf-system-dialog', // id for system dialog
|
||||
systemDialogSelectClass: 'pf-system-dialog-select', // class for system select Element
|
||||
|
||||
// local storage
|
||||
mapLocalStoragePrefix: 'map_', // prefix for map local storage key
|
||||
|
||||
// system security classes
|
||||
systemSec: 'pf-system-sec',
|
||||
systemSecHigh: 'pf-system-sec-highSec',
|
||||
@@ -2011,7 +2015,7 @@ define([
|
||||
case 'add_first_waypoint':
|
||||
case 'add_last_waypoint':
|
||||
systemData = system.getSystemData();
|
||||
setDestination(systemData, action);
|
||||
Util.setDestination(systemData, action);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2063,68 +2067,6 @@ define([
|
||||
system.singleDoubleClick(single, double);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* set new destination for a system
|
||||
* -> CREST request
|
||||
* @param systemData
|
||||
* @param type
|
||||
*/
|
||||
var setDestination = function(systemData, type){
|
||||
|
||||
var description = '';
|
||||
switch(type){
|
||||
case 'set_destination':
|
||||
description = 'Set destination';
|
||||
break;
|
||||
case 'add_first_waypoint':
|
||||
description = 'Set first waypoint';
|
||||
break;
|
||||
case 'add_last_waypoint':
|
||||
description = 'Set new waypoint';
|
||||
break;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: Init.path.setDestination,
|
||||
data: {
|
||||
clearOtherWaypoints: (type === 'set_destination') ? 1 : 0,
|
||||
first: (type === 'add_last_waypoint') ? 0 : 1,
|
||||
systemData: [{
|
||||
systemId: systemData.systemId,
|
||||
name: systemData.name
|
||||
}]
|
||||
},
|
||||
context: {
|
||||
description: description
|
||||
},
|
||||
dataType: 'json'
|
||||
}).done(function(responseData){
|
||||
if(
|
||||
responseData.systemData &&
|
||||
responseData.systemData.length > 0
|
||||
){
|
||||
for (var j = 0; j < responseData.systemData.length; j++) {
|
||||
Util.showNotify({title: this.description, text: 'System: ' + responseData.systemData[j].name, type: 'success'});
|
||||
}
|
||||
}
|
||||
|
||||
if(
|
||||
responseData.error &&
|
||||
responseData.error.length > 0
|
||||
){
|
||||
for(var i = 0; i < responseData.error.length; i++){
|
||||
Util.showNotify({title: this.description + ' error', text: 'System: ' + responseData.error[i].message, type: 'error'});
|
||||
}
|
||||
}
|
||||
|
||||
}).fail(function( jqXHR, status, error) {
|
||||
var reason = status + ' ' + error;
|
||||
Util.showNotify({title: jqXHR.status + ': ' + this.description, text: reason, type: 'warning'});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* mark a dom element (map, system, connection) as changed
|
||||
*/
|
||||
@@ -2883,9 +2825,6 @@ define([
|
||||
|
||||
var content = Mustache.render(template, data);
|
||||
|
||||
// disable modal focus event -> otherwise select2 is not working! -> quick fix
|
||||
$.fn.modal.Constructor.prototype.enforceFocus = function() {};
|
||||
|
||||
var systemDialog = bootbox.dialog({
|
||||
title: 'Add new system',
|
||||
message: content,
|
||||
@@ -3506,6 +3445,21 @@ define([
|
||||
function switchTabCallback( mapName, mapContainer ){
|
||||
Util.showNotify({title: 'Map initialized', text: mapName + ' - loaded', type: 'success'});
|
||||
|
||||
var mapWrapper = mapContainer.parents('.' + config.mapWrapperClass);
|
||||
|
||||
// auto scroll map to previous position
|
||||
var promiseStore = getMapData( mapContainer.data('id') );
|
||||
promiseStore.then(function(data) {
|
||||
// This code runs once the value has been loaded
|
||||
// from the offline store.
|
||||
if(
|
||||
data &&
|
||||
data.offsetX
|
||||
){
|
||||
mapWrapper.scrollToX(data.offsetX);
|
||||
}
|
||||
});
|
||||
|
||||
if( config.mapMagnetizer === true ){
|
||||
mapContainer.initMagnetizer();
|
||||
}
|
||||
@@ -3522,43 +3476,61 @@ define([
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* get stored map data from client cache (IndexedDB)
|
||||
* @param mapId
|
||||
* @returns {*} promise
|
||||
*/
|
||||
var getMapData = function(mapId){
|
||||
if(mapId > 0){
|
||||
var mapStorageKey = config.mapLocalStoragePrefix + mapId;
|
||||
return Util.localforage.getItem(mapStorageKey);
|
||||
}else{
|
||||
console.error('Map local storage requires mapId > 0');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* store local map config to client cache (IndexedDB)
|
||||
* @param mapId
|
||||
* @param key
|
||||
* @param value
|
||||
*/
|
||||
var storeMapData = function(mapId, key, value){
|
||||
if(mapId > 0){
|
||||
// get current map config
|
||||
var mapStorageKey = config.mapLocalStoragePrefix + mapId;
|
||||
Util.localforage.getItem(mapStorageKey).then(function(data) {
|
||||
// This code runs once the value has been loaded
|
||||
// from the offline store.
|
||||
data = (data === null) ? {} : data;
|
||||
// set/update value
|
||||
data[key] = value;
|
||||
Util.localforage.setItem(mapStorageKey, data);
|
||||
}).catch(function(err) {
|
||||
// This code runs if there were any errors
|
||||
console.error('Map local storage can not be accessed!');
|
||||
});
|
||||
}else{
|
||||
console.error('Map local storage requires mapId > 0');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* init scrollbar for Map element
|
||||
*/
|
||||
$.fn.initMapScrollbar = function(){
|
||||
// get Map Scrollbar
|
||||
var scrollableElement = $(this).find('.' + config.mapWrapperClass);
|
||||
initCustomScrollbar( scrollableElement );
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// add map overlays after scrollbar is initialized
|
||||
// because of its absolute position
|
||||
scrollableElement.initMapOverlays();
|
||||
};
|
||||
|
||||
/**
|
||||
* init a custom scrollbar
|
||||
* @param scrollableElement
|
||||
*/
|
||||
var initCustomScrollbar = function( scrollableElement ){
|
||||
|
||||
// prevent multiple initialization
|
||||
$(scrollableElement).mCustomScrollbar('destroy');
|
||||
|
||||
// init custom scrollbars
|
||||
$(scrollableElement).mCustomScrollbar({
|
||||
axis: 'x',
|
||||
theme: 'light-thick',
|
||||
scrollInertia: 300,
|
||||
autoExpandScrollbar: false,
|
||||
scrollButtons:{
|
||||
scrollAmount: 30,
|
||||
enable: true
|
||||
},
|
||||
callbacks:{
|
||||
onTotalScrollOffset: 0,
|
||||
onTotalScrollBackOffset: 0,
|
||||
alwaysTriggerOffsets:true,
|
||||
scrollableElement.initCustomScrollbar({
|
||||
callbacks: {
|
||||
onScroll: function(){
|
||||
// scroll complete
|
||||
var mapElement = $(this).find('.' + config.mapClass);
|
||||
// store new map scrollOffset -> localDB
|
||||
storeMapData( mapElement.data('id'), 'offsetX', Math.abs(this.mcs.left) );
|
||||
},
|
||||
onScrollStart: function(){
|
||||
// hide all open xEditable fields
|
||||
$(this).find('.editable').editable('hide');
|
||||
@@ -3572,34 +3544,13 @@ define([
|
||||
$(mapElement).data('scrollLeft', this.mcs.left);
|
||||
$(mapElement).data('scrollTop', this.mcs.top);
|
||||
}
|
||||
},
|
||||
|
||||
advanced: {
|
||||
updateOnBrowserResize: true,
|
||||
updateOnContentResize: true,
|
||||
autoExpandHorizontalScroll: true,
|
||||
autoScrollOnFocus: "div"
|
||||
},
|
||||
mouseWheel:{
|
||||
enable: false, // scroll weel currently disabled
|
||||
scrollAmount: 'auto',
|
||||
axis: 'x',
|
||||
preventDefault: true
|
||||
},
|
||||
scrollbarPosition: 'inside',
|
||||
autoDraggerLength: true
|
||||
//autoHideScrollbar: false
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* scroll to a specific position in the map
|
||||
* @returns {*} // string or id
|
||||
*/
|
||||
$.fn.scrollTo = function(position){
|
||||
return this.each(function(){
|
||||
$(this).mCustomScrollbar('scrollTo', position);
|
||||
});
|
||||
// ---------------------------------------------------------------------------
|
||||
// add map overlays after scrollbar is initialized
|
||||
// because of its absolute position
|
||||
scrollableElement.initMapOverlays();
|
||||
};
|
||||
|
||||
return {
|
||||
|
||||
75
js/app/map/scrollbar.js
Normal file
75
js/app/map/scrollbar.js
Normal file
@@ -0,0 +1,75 @@
|
||||
/**
|
||||
* Created by Exodus on 26.06.2016.
|
||||
*/
|
||||
define([
|
||||
'jquery',
|
||||
'app/init',
|
||||
'app/util'
|
||||
], function($, Init, Util) {
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* init map scrollbar
|
||||
* @param config
|
||||
* @returns {*}
|
||||
*/
|
||||
$.fn.initCustomScrollbar = function(config){
|
||||
|
||||
// default config -------------------------------------------------------------------------
|
||||
var defaultConfig = {
|
||||
axis: 'x',
|
||||
theme: 'light-thick',
|
||||
scrollInertia: 300,
|
||||
autoExpandScrollbar: false,
|
||||
scrollButtons:{
|
||||
scrollAmount: 30,
|
||||
enable: true
|
||||
},
|
||||
callbacks:{
|
||||
onTotalScrollOffset: 0,
|
||||
onTotalScrollBackOffset: 0,
|
||||
alwaysTriggerOffsets: true
|
||||
},
|
||||
|
||||
advanced: {
|
||||
updateOnBrowserResize: true,
|
||||
updateOnContentResize: true,
|
||||
autoExpandHorizontalScroll: true,
|
||||
autoScrollOnFocus: "div"
|
||||
},
|
||||
mouseWheel:{
|
||||
enable: false, // scroll weel currently disabled
|
||||
scrollAmount: 'auto',
|
||||
axis: 'x',
|
||||
preventDefault: true
|
||||
},
|
||||
scrollbarPosition: 'inside',
|
||||
autoDraggerLength: true
|
||||
//autoHideScrollbar: false
|
||||
};
|
||||
|
||||
// init -----------------------------------------------------------------------------------
|
||||
config = $.extend(true, {}, defaultConfig, config);
|
||||
|
||||
return this.each(function(){
|
||||
var scrollableElement = $(this);
|
||||
|
||||
// prevent multiple initialization
|
||||
scrollableElement.mCustomScrollbar('destroy');
|
||||
|
||||
// init custom scrollbars
|
||||
scrollableElement.mCustomScrollbar(config);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* scroll to a specific position in the map
|
||||
* demo: http://manos.malihu.gr/repository/custom-scrollbar/demo/examples/scrollTo_demo.html
|
||||
* @returns {*} // string or id
|
||||
*/
|
||||
$.fn.scrollToX = function(position){
|
||||
return this.each(function(){
|
||||
$(this).mCustomScrollbar('scrollTo', position);
|
||||
});
|
||||
};
|
||||
});
|
||||
@@ -26,6 +26,11 @@ define([
|
||||
// show app information in browser console
|
||||
Util.showVersionInfo();
|
||||
|
||||
// init local storage
|
||||
Util.localforage.config({
|
||||
name: 'Pathfinder local storage'
|
||||
});
|
||||
|
||||
// init logging
|
||||
Logging.init();
|
||||
|
||||
|
||||
@@ -722,9 +722,8 @@ define([
|
||||
var newMapId = $(e.relatedTarget).data('map-id');
|
||||
var oldMapId = $(e.target).data('map-id');
|
||||
|
||||
// disable map if new map is selected -> not "add button"
|
||||
// skip "add button"
|
||||
if(newMapId > 0){
|
||||
|
||||
var currentTabContentElement = $('#' + config.mapTabIdPrefix + oldMapId);
|
||||
|
||||
// disable scrollbar for map that will be hidden. "freeze" current state
|
||||
|
||||
@@ -132,7 +132,7 @@ define([
|
||||
}).append(
|
||||
$('<a>', {
|
||||
class: 'list-group-item',
|
||||
href: '#'
|
||||
href: '/'
|
||||
}).html(' Home').prepend(
|
||||
$('<i>',{
|
||||
class: 'fa fa-home fa-fw'
|
||||
@@ -367,6 +367,7 @@ define([
|
||||
return Mustache.render(TplLogo, {});
|
||||
},
|
||||
brandLogo: config.menuHeadMenuLogoClass,
|
||||
popoverTriggerClass: Util.config.popoverTriggerClass,
|
||||
userCharacterClass: config.headUserCharacterClass,
|
||||
userCharacterImageClass: config.userCharacterImageClass,
|
||||
userShipClass: config.headUserShipClass,
|
||||
|
||||
@@ -184,9 +184,6 @@ define([
|
||||
$('#' + config.dialogMapCreateContainerId, contentDialog).html(contentNewMap);
|
||||
$('#' + config.dialogMapEditContainerId, contentDialog).html(contentEditMap);
|
||||
|
||||
// disable modal focus event -> otherwise select2 is not working! -> quick fix
|
||||
$.fn.modal.Constructor.prototype.enforceFocus = function() {};
|
||||
|
||||
var mapInfoDialog = bootbox.dialog({
|
||||
title: dialogTitle,
|
||||
message: contentDialog,
|
||||
|
||||
@@ -51,12 +51,8 @@ define([
|
||||
stagger: 300,
|
||||
duration: 240,
|
||||
//display: 'auto',
|
||||
complete: function(){
|
||||
|
||||
}
|
||||
complete: function(){}
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
}).fail(function( jqXHR, status, error) {
|
||||
var reason = status + ' ' + jqXHR.status + ': ' + error;
|
||||
@@ -70,29 +66,19 @@ define([
|
||||
* show releases dialog
|
||||
*/
|
||||
$.fn.releasesDialog = function(){
|
||||
var content = '<ul class="timeline"></ul>';
|
||||
|
||||
requirejs(['text!templates/dialog/releases.html', 'mustache'], function(template, Mustache) {
|
||||
|
||||
var data = {
|
||||
test: 'blaBla'
|
||||
};
|
||||
|
||||
var content = Mustache.render(template, data);
|
||||
|
||||
var releasesDialog = bootbox.dialog({
|
||||
className: config.releasesDialogClass,
|
||||
title: 'Releases',
|
||||
size: 'large',
|
||||
message: content
|
||||
});
|
||||
|
||||
// after modal is shown =======================================================================
|
||||
releasesDialog.on('shown.bs.modal', function(e) {
|
||||
|
||||
loadDialogData(releasesDialog);
|
||||
});
|
||||
|
||||
var releasesDialog = bootbox.dialog({
|
||||
className: config.releasesDialogClass,
|
||||
title: 'Releases',
|
||||
size: 'large',
|
||||
message: content
|
||||
});
|
||||
|
||||
// after modal is shown =======================================================================
|
||||
releasesDialog.on('shown.bs.modal', function(e) {
|
||||
loadDialogData(releasesDialog);
|
||||
});
|
||||
};
|
||||
|
||||
});
|
||||
@@ -18,7 +18,7 @@ define([
|
||||
|
||||
$.when(
|
||||
selectElement.select2({
|
||||
dropdownParent: 'body',
|
||||
dropdownParent: selectElement.parents('.modal-body'),
|
||||
theme: 'pathfinder',
|
||||
maximumSelectionLength: 5
|
||||
})
|
||||
@@ -63,7 +63,7 @@ define([
|
||||
ajax: {
|
||||
url: function(params){
|
||||
// add params to URL
|
||||
return Init.path.searchSystem + '/' + params.term;
|
||||
return Init.path.searchSystem + '/' + params.term.trim();
|
||||
},
|
||||
dataType: 'json',
|
||||
delay: 250,
|
||||
@@ -78,8 +78,8 @@ define([
|
||||
return {
|
||||
results: data.map( function(item){
|
||||
|
||||
// "systemId" is the system name!
|
||||
var systemId = item[options.key];
|
||||
// "systemId" or "name"
|
||||
var id = item[options.key];
|
||||
var disabled = false;
|
||||
var trueSec = parseFloat(item.trueSec);
|
||||
var secClass = Util.getSecurityClassForSystem(item.security);
|
||||
@@ -89,7 +89,7 @@ define([
|
||||
// check if system is dialed
|
||||
if(
|
||||
options.disabledOptions &&
|
||||
options.disabledOptions.indexOf(parseInt(systemId, 10)) !== -1
|
||||
options.disabledOptions.indexOf(parseInt(id, 10)) !== -1
|
||||
){
|
||||
disabled = true;
|
||||
}
|
||||
@@ -105,8 +105,9 @@ define([
|
||||
}
|
||||
|
||||
return {
|
||||
id: systemId,
|
||||
id: id,
|
||||
text: item.name,
|
||||
systemId: parseInt(item.systemId),
|
||||
security: item.security,
|
||||
secClass: secClass,
|
||||
trueSec: trueSec.toFixed(1),
|
||||
@@ -127,7 +128,7 @@ define([
|
||||
|
||||
}
|
||||
},
|
||||
dropdownParent: 'body',
|
||||
dropdownParent: selectElement.parents('.modal-body'),
|
||||
theme: 'pathfinder',
|
||||
minimumInputLength: 2,
|
||||
templateResult: formatResultData,
|
||||
@@ -248,7 +249,7 @@ define([
|
||||
|
||||
}
|
||||
},
|
||||
dropdownParent: 'body',
|
||||
dropdownParent: selectElement.parents('.modal-body'),
|
||||
theme: 'pathfinder',
|
||||
minimumInputLength: 3,
|
||||
placeholder: '',
|
||||
|
||||
@@ -32,8 +32,7 @@ define([
|
||||
systemInfoRoutesTableClass: 'pf-system-route-table', // class for route tables
|
||||
mapSelectId: 'pf-route-dialog-map-select', // id for "map" select
|
||||
|
||||
sigTableActionCellClass: 'pf-table-action-cell' // class for "action" cells
|
||||
|
||||
dataTableActionCellClass: 'pf-table-action-cell' // class for "action" cells
|
||||
};
|
||||
|
||||
// cache for system routes
|
||||
@@ -56,7 +55,8 @@ define([
|
||||
var rowData = formatRouteData(routeData);
|
||||
|
||||
if(rowData.route){
|
||||
var cacheKey = routeData.systemFrom.toLowerCase() + '_' + routeData.systemTo.toLowerCase();
|
||||
var cacheKey = routeData.systemFromData.name.toLowerCase() +
|
||||
'_' + routeData.systemToData.name.toLowerCase();
|
||||
|
||||
// update route cache
|
||||
cache.systemRoutes[cacheKey] = {
|
||||
@@ -90,9 +90,9 @@ define([
|
||||
var animationStatus = 'changed';
|
||||
|
||||
// search for an existing row (e.g. on mass "table refresh" [all routes])
|
||||
// get rowIndex where column 0 (equals to "systemTo") matches rowData.systemTo
|
||||
// get rowIndex where column 0 (equals to "systemToData.name") matches rowData.systemToData.name
|
||||
var indexes = dataTable.rows().eq(0).filter( function (rowIdx) {
|
||||
return (dataTable.cell(rowIdx, 0 ).data() === rowData.systemTo);
|
||||
return (dataTable.cell(rowIdx, 0 ).data().name === rowData.systemToData.name);
|
||||
});
|
||||
|
||||
if(indexes.length > 0){
|
||||
@@ -129,21 +129,33 @@ define([
|
||||
moduleElement: moduleElement,
|
||||
dataTable: dataTable
|
||||
};
|
||||
|
||||
var routeData = [];
|
||||
dataTable.rows().every( function() {
|
||||
|
||||
var data = this.data();
|
||||
routeData.push({
|
||||
mapIds: data.mapIds,
|
||||
systemFrom: data.systemFrom,
|
||||
systemTo: data.systemTo
|
||||
});
|
||||
} );
|
||||
dataTable.rows().every( function() {
|
||||
routeData.push( getRouteRequestDataFromRowData( this.data() ));
|
||||
});
|
||||
|
||||
getRouteData({routeData: routeData}, context, callbackAddRouteRow);
|
||||
};
|
||||
|
||||
/**
|
||||
* format rowData for route search/update request
|
||||
* @param {Object} rowData
|
||||
* @returns {Object}
|
||||
*/
|
||||
var getRouteRequestDataFromRowData = function(rowData){
|
||||
return {
|
||||
mapIds: (rowData.hasOwnProperty('mapIds')) ? rowData.mapIds : [],
|
||||
systemFromData: (rowData.hasOwnProperty('systemFromData')) ? rowData.systemFromData : {},
|
||||
systemToData: (rowData.hasOwnProperty('systemToData')) ? rowData.systemToData : {},
|
||||
stargates: (rowData.hasOwnProperty('stargates')) ? rowData.stargates : 1,
|
||||
jumpbridges: (rowData.hasOwnProperty('jumpbridges')) ? rowData.jumpbridges : 1,
|
||||
wormholes: (rowData.hasOwnProperty('wormholes')) ? rowData.wormholes : 1,
|
||||
wormholesReduced: (rowData.hasOwnProperty('wormholesReduced')) ? rowData.wormholesReduced : 1,
|
||||
wormholesCritical: (rowData.hasOwnProperty('wormholesCritical')) ? rowData.wormholesCritical : 1
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* show route dialog. User can search for systems and jump-info for each system is added to a data table
|
||||
* @param dialogData
|
||||
@@ -165,7 +177,7 @@ define([
|
||||
id: config.routeDialogId,
|
||||
selectClass: config.systemDialogSelectClass,
|
||||
mapSelectId: config.mapSelectId,
|
||||
systemFrom: dialogData.systemFrom,
|
||||
systemFromData: dialogData.systemFromData,
|
||||
mapSelectOptions: mapSelectOptions
|
||||
};
|
||||
|
||||
@@ -173,9 +185,6 @@ define([
|
||||
|
||||
var content = Mustache.render(template, data);
|
||||
|
||||
// disable modal focus event -> otherwise select2 is not working! -> quick fix
|
||||
$.fn.modal.Constructor.prototype.enforceFocus = function() {};
|
||||
|
||||
var findRouteDialog = bootbox.dialog({
|
||||
title: 'Route finder',
|
||||
message: content,
|
||||
@@ -210,25 +219,36 @@ define([
|
||||
return false;
|
||||
}
|
||||
|
||||
var context = {
|
||||
moduleElement: dialogData.moduleElement,
|
||||
dataTable: dialogData.dataTable
|
||||
};
|
||||
// get all system data from select2
|
||||
var systemSelectData = form.find('.' + config.systemDialogSelectClass).select2('data');
|
||||
|
||||
var requestData = {
|
||||
routeData: [{
|
||||
mapIds: routeDialogData.mapIds,
|
||||
systemFrom: dialogData.systemFrom,
|
||||
systemTo: routeDialogData.systemTo,
|
||||
stargates: routeDialogData.hasOwnProperty('stargates') ? parseInt( routeDialogData.stargates ) : 0,
|
||||
jumpbridges: routeDialogData.hasOwnProperty('jumpbridges') ? parseInt( routeDialogData.jumpbridges ) : 0,
|
||||
wormholes: routeDialogData.hasOwnProperty('wormholes') ? parseInt( routeDialogData.wormholes ) : 0,
|
||||
wormholesReduced: routeDialogData.hasOwnProperty('wormholesReduced') ? parseInt( routeDialogData.wormholesReduced ) : 0,
|
||||
wormholesCritical: routeDialogData.hasOwnProperty('wormholesCritical') ? parseInt( routeDialogData.wormholesCritical ) : 0
|
||||
}]
|
||||
};
|
||||
if(
|
||||
systemSelectData &&
|
||||
systemSelectData.length === 1
|
||||
){
|
||||
var context = {
|
||||
moduleElement: dialogData.moduleElement,
|
||||
dataTable: dialogData.dataTable
|
||||
};
|
||||
|
||||
getRouteData(requestData, context, callbackAddRouteRow);
|
||||
var requestData = {
|
||||
routeData: [{
|
||||
mapIds: routeDialogData.mapIds,
|
||||
systemFromData: dialogData.systemFromData,
|
||||
systemToData: {
|
||||
systemId: systemSelectData[0].systemId,
|
||||
name: systemSelectData[0].text
|
||||
},
|
||||
stargates: routeDialogData.hasOwnProperty('stargates') ? parseInt( routeDialogData.stargates ) : 0,
|
||||
jumpbridges: routeDialogData.hasOwnProperty('jumpbridges') ? parseInt( routeDialogData.jumpbridges ) : 0,
|
||||
wormholes: routeDialogData.hasOwnProperty('wormholes') ? parseInt( routeDialogData.wormholes ) : 0,
|
||||
wormholesReduced: routeDialogData.hasOwnProperty('wormholesReduced') ? parseInt( routeDialogData.wormholesReduced ) : 0,
|
||||
wormholesCritical: routeDialogData.hasOwnProperty('wormholesCritical') ? parseInt( routeDialogData.wormholesCritical ) : 0
|
||||
}]
|
||||
};
|
||||
|
||||
getRouteData(requestData, context, callbackAddRouteRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -338,8 +358,8 @@ define([
|
||||
|
||||
// default row data (e.g. no route found)
|
||||
var tableRowData = {
|
||||
systemFrom: routeData.systemFrom,
|
||||
systemTo: routeData.systemTo,
|
||||
systemFromData: routeData.systemFromData,
|
||||
systemToData: routeData.systemToData,
|
||||
jumps: {
|
||||
value: 0,
|
||||
formatted: '---'
|
||||
@@ -481,7 +501,18 @@ define([
|
||||
targets: 0,
|
||||
orderable: true,
|
||||
title: 'system ',
|
||||
data: 'systemTo'
|
||||
class: Util.config.popoverTriggerClass,
|
||||
data: 'systemToData',
|
||||
render: {
|
||||
_: 'name',
|
||||
sort: 'name'
|
||||
},
|
||||
createdCell: function(cell, cellData, rowData, rowIndex, colIndex) {
|
||||
// init context menu
|
||||
$(cell).initSystemPopover({
|
||||
systemToData: rowData.systemToData
|
||||
});
|
||||
}
|
||||
},{
|
||||
targets: 1,
|
||||
orderable: true,
|
||||
@@ -508,25 +539,14 @@ define([
|
||||
targets: 3,
|
||||
orderable: false,
|
||||
title: 'route',
|
||||
data: 'route',
|
||||
createdCell: function(cell, cellData, rowData, rowIndex, colIndex) {
|
||||
|
||||
// init context menu
|
||||
/*
|
||||
console.log(cell);
|
||||
console.log(cellData);
|
||||
$(cell).find('i').on('click', function(){
|
||||
|
||||
});
|
||||
*/
|
||||
}
|
||||
data: 'route'
|
||||
},{
|
||||
targets: 4,
|
||||
title: '',
|
||||
orderable: false,
|
||||
searchable: false,
|
||||
width: '10px',
|
||||
class: ['text-center', config.sigTableActionCellClass].join(' '),
|
||||
class: ['text-center', config.dataTableActionCellClass].join(' '),
|
||||
data: 'reload',
|
||||
render: {
|
||||
_: 'button'
|
||||
@@ -547,8 +567,8 @@ define([
|
||||
var requestData = {
|
||||
routeData: [{
|
||||
mapIds: rowData.mapIds,
|
||||
systemFrom: rowData.systemFrom,
|
||||
systemTo: rowData.systemTo,
|
||||
systemFromData: rowData.systemFromData,
|
||||
systemToData: rowData.systemToData,
|
||||
stargates: rowData.stargates ? 1 : 0,
|
||||
jumpbridges: rowData.jumpbridges ? 1 : 0,
|
||||
wormholes: rowData.wormholes ? 1 : 0,
|
||||
@@ -566,7 +586,7 @@ define([
|
||||
orderable: false,
|
||||
searchable: false,
|
||||
width: '10px',
|
||||
class: ['text-center', config.sigTableActionCellClass].join(' '),
|
||||
class: ['text-center', config.dataTableActionCellClass].join(' '),
|
||||
data: 'clear',
|
||||
render: {
|
||||
_: 'button'
|
||||
@@ -622,6 +642,69 @@ define([
|
||||
return moduleElement;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* init system popover (e.g. for setWaypoints)
|
||||
* @param options
|
||||
*/
|
||||
$.fn.initSystemPopover = function(options){
|
||||
var elements = $(this);
|
||||
var eventNamespace = 'hideSystemPopup';
|
||||
var systemToData = options.systemToData;
|
||||
|
||||
requirejs(['text!templates/tooltip/system_popover.html', 'mustache'], function (template, Mustache) {
|
||||
var data = {
|
||||
systemToData: systemToData
|
||||
};
|
||||
|
||||
var content = Mustache.render(template, data);
|
||||
|
||||
elements.each(function() {
|
||||
var element = $(this);
|
||||
// destroy "popover" and remove "click" event for animation
|
||||
element.popover('destroy').off();
|
||||
|
||||
// init popover and add specific class to it (for styling)
|
||||
element.popover({
|
||||
html: true,
|
||||
title: systemToData.name,
|
||||
trigger: 'manual',
|
||||
placement: 'top',
|
||||
container: 'body',
|
||||
content: content
|
||||
}).data('bs.popover').tip().addClass('pf-popover');
|
||||
});
|
||||
|
||||
// set popup "close" observer
|
||||
elements.initPopoverClose(eventNamespace);
|
||||
|
||||
// set "open" trigger on "right click"
|
||||
// -> this is not supported by the "trigger" param in .popover();
|
||||
// -> therefore we need to set it up manually
|
||||
elements.on('contextmenu', function(e){
|
||||
e.preventDefault();
|
||||
$(this).popover('show');
|
||||
});
|
||||
|
||||
// set link observer "on shown" event
|
||||
elements.on('shown.bs.popover', function () {
|
||||
var popoverRoot = $(this);
|
||||
|
||||
popoverRoot.data('bs.popover').tip().find('a').on('click', function(){
|
||||
// hint: "data" attributes should be in lower case!
|
||||
var systemData = {
|
||||
name: $(this).data('name'),
|
||||
systemId: $(this).data('systemid')
|
||||
};
|
||||
Util.setDestination(systemData, 'set_destination');
|
||||
|
||||
// close popover
|
||||
popoverRoot.popover('hide');
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* init route module
|
||||
* -> request route path fore "default" trade hub systems
|
||||
@@ -631,8 +714,26 @@ define([
|
||||
*/
|
||||
var initModule = function(moduleElement, mapId, systemData){
|
||||
|
||||
var systemFrom = systemData.name;
|
||||
var systemsTo = ['Jita', 'Amarr', 'Rens', 'Dodixie'];
|
||||
var systemFromData = {
|
||||
name: systemData.name,
|
||||
systemId: systemData.systemId
|
||||
};
|
||||
|
||||
var systemsTo = [
|
||||
{
|
||||
name: 'Jita',
|
||||
systemId: 30000142
|
||||
},{
|
||||
name: 'Amarr',
|
||||
systemId: 30002187
|
||||
},{
|
||||
name: 'Rens',
|
||||
systemId: 30002510
|
||||
},{
|
||||
name: 'Dodixie',
|
||||
systemId: 30002659
|
||||
}
|
||||
];
|
||||
|
||||
var routesTableElement = moduleElement.find('.' + config.systemInfoRoutesTableClass);
|
||||
|
||||
@@ -648,7 +749,7 @@ define([
|
||||
var dialogData = {
|
||||
moduleElement: moduleElement,
|
||||
mapId: mapId,
|
||||
systemFrom: systemFrom,
|
||||
systemFromData: systemFromData,
|
||||
dataTable: routesTable
|
||||
};
|
||||
|
||||
@@ -660,10 +761,10 @@ define([
|
||||
var currentTimestamp = Util.getServerTime().getTime();
|
||||
|
||||
for(var i = 0; i < systemsTo.length; i++){
|
||||
var systemTo = systemsTo[i];
|
||||
var systemToData = systemsTo[i];
|
||||
|
||||
if(systemFrom !== systemTo){
|
||||
var cacheKey = 'route_' + mapId + '_' + systemFrom.toUpperCase() + '_' + systemTo.toUpperCase();
|
||||
if(systemFromData.name !== systemToData.name){
|
||||
var cacheKey = 'route_' + mapId + '_' + systemFromData.name.toUpperCase() + '_' + systemToData.name.toUpperCase();
|
||||
|
||||
if(
|
||||
cache.systemRoutes.hasOwnProperty(cacheKey) &&
|
||||
@@ -679,17 +780,13 @@ define([
|
||||
addRow(context, cache.systemRoutes[cacheKey].data);
|
||||
}else{
|
||||
// get route data
|
||||
|
||||
requestRouteData.push({
|
||||
var searchData = {
|
||||
mapIds: [mapId],
|
||||
systemFrom: systemFrom,
|
||||
systemTo: systemTo,
|
||||
stargates: 1,
|
||||
jumpbridges: 1,
|
||||
wormholes: 1,
|
||||
wormholesReduced: 1,
|
||||
wormholesCritical: 1
|
||||
});
|
||||
systemFromData: systemFromData,
|
||||
systemToData: systemToData
|
||||
};
|
||||
|
||||
requestRouteData.push( getRouteRequestDataFromRowData( searchData ));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -411,10 +411,12 @@ define([
|
||||
callback: function () {
|
||||
// get form Values
|
||||
var form = $('#' + config.signatureReaderDialogId).find('form');
|
||||
|
||||
var formData = $(form).getFormValues();
|
||||
|
||||
moduleElement.updateSignatureTableByClipboard(systemData, formData.clipboard);
|
||||
var signatureOptions = {
|
||||
deleteOld: (formData.deleteOld) ? 1 : 0
|
||||
};
|
||||
moduleElement.updateSignatureTableByClipboard(systemData, formData.clipboard, signatureOptions);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -422,6 +424,8 @@ define([
|
||||
|
||||
// dialog shown event
|
||||
signatureReaderDialog.on('shown.bs.modal', function(e) {
|
||||
signatureReaderDialog.initTooltips();
|
||||
|
||||
// set focus on sig-input textarea
|
||||
signatureReaderDialog.find('textarea').focus();
|
||||
});
|
||||
@@ -435,8 +439,9 @@ define([
|
||||
* -> Hint: copy&paste signature data (without any open dialog) will add signatures as well
|
||||
* @param systemData
|
||||
* @param clipboard data stream
|
||||
* @param options
|
||||
*/
|
||||
$.fn.updateSignatureTableByClipboard = function(systemData, clipboard){
|
||||
$.fn.updateSignatureTableByClipboard = function(systemData, clipboard, options){
|
||||
|
||||
// check if copy&paste is enabled
|
||||
if( !disableCopyFromClipboard ){
|
||||
@@ -455,7 +460,9 @@ define([
|
||||
disableCopyFromClipboard = true;
|
||||
|
||||
var requestData = {
|
||||
signatures: signatureData
|
||||
signatures: signatureData,
|
||||
deleteOld: (options.deleteOld) ? 1 : 0,
|
||||
systemId: parseInt(systemData.id)
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
@@ -745,7 +752,7 @@ define([
|
||||
$(e.target).prop('tagName').toLowerCase() !== 'textarea'
|
||||
){
|
||||
var clipboard = (e.originalEvent || e).clipboardData.getData('text/plain');
|
||||
moduleElement.updateSignatureTableByClipboard(systemData, clipboard);
|
||||
moduleElement.updateSignatureTableByClipboard(systemData, clipboard, {});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
115
js/app/util.js
115
js/app/util.js
@@ -7,6 +7,7 @@ define([
|
||||
'config/system_effect',
|
||||
'config/signature_type',
|
||||
'bootbox',
|
||||
'localForage',
|
||||
'app/ccp',
|
||||
'velocity',
|
||||
'velocityUI',
|
||||
@@ -17,7 +18,7 @@ define([
|
||||
'hoverIntent',
|
||||
'bootstrapConfirmation',
|
||||
'bootstrapToggle'
|
||||
], function($, Init, SystemEffect, SignatureType, bootbox, CCP) {
|
||||
], function($, Init, SystemEffect, SignatureType, bootbox, localforage, CCP) {
|
||||
|
||||
'use strict';
|
||||
|
||||
@@ -48,7 +49,10 @@ define([
|
||||
|
||||
// animation
|
||||
animationPulseSuccessClass: 'pf-animation-pulse-success', // animation class
|
||||
animationPulseWarningClass: 'pf-animation-pulse-warning' // animation class
|
||||
animationPulseWarningClass: 'pf-animation-pulse-warning', // animation class
|
||||
|
||||
// popover
|
||||
popoverTriggerClass: 'pf-popover-trigger' // class for "popover" trigger elements
|
||||
|
||||
};
|
||||
|
||||
@@ -590,9 +594,10 @@ define([
|
||||
title: 'select character',
|
||||
trigger: 'click',
|
||||
placement: 'bottom',
|
||||
container: 'body',
|
||||
content: content,
|
||||
animation: false
|
||||
}).data('bs.popover').tip().addClass('pf-character-info-popover');
|
||||
}).data('bs.popover').tip().addClass('pf-popover');
|
||||
|
||||
element.on('click', function(e) {
|
||||
e.preventDefault();
|
||||
@@ -617,20 +622,33 @@ define([
|
||||
}
|
||||
});
|
||||
|
||||
// hide popup on clicking "somewhere" outside
|
||||
$('body').off('click.' + eventNamespace).on('click.' + eventNamespace, function (e) {
|
||||
// set popup "close" observer
|
||||
elements.initPopoverClose(eventNamespace);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* set "popover" close action on clicking "somewhere" on the <body>
|
||||
* @param eventNamespace
|
||||
* @returns {*}
|
||||
*/
|
||||
$.fn.initPopoverClose = function(eventNamespace){
|
||||
return this.each(function() {
|
||||
$('body').off('click.' + eventNamespace).on('click.' + eventNamespace + ' contextmenu', function (e) {
|
||||
|
||||
$('.' + config.popoverTriggerClass).each(function () {
|
||||
var popoverElement = $(this);
|
||||
//the 'is' for buttons that trigger popups
|
||||
//the 'has' for icons within a button that triggers a popup
|
||||
if (
|
||||
!$(element).is(e.target) &&
|
||||
$(element).has(e.target).length === 0 &&
|
||||
if(
|
||||
!popoverElement.is(e.target) &&
|
||||
popoverElement.has(e.target).length === 0 &&
|
||||
$('.popover').has(e.target).length === 0
|
||||
){
|
||||
$(element).popover('hide');
|
||||
popoverElement.popover('hide');
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
};
|
||||
@@ -1677,6 +1695,67 @@ define([
|
||||
return userInfo;
|
||||
};
|
||||
|
||||
/**
|
||||
* set new destination for a system
|
||||
* -> CREST request
|
||||
* @param systemData
|
||||
* @param type
|
||||
*/
|
||||
var setDestination = function(systemData, type){
|
||||
|
||||
var description = '';
|
||||
switch(type){
|
||||
case 'set_destination':
|
||||
description = 'Set destination';
|
||||
break;
|
||||
case 'add_first_waypoint':
|
||||
description = 'Set first waypoint';
|
||||
break;
|
||||
case 'add_last_waypoint':
|
||||
description = 'Set new waypoint';
|
||||
break;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: Init.path.setDestination,
|
||||
data: {
|
||||
clearOtherWaypoints: (type === 'set_destination') ? 1 : 0,
|
||||
first: (type === 'add_last_waypoint') ? 0 : 1,
|
||||
systemData: [{
|
||||
systemId: systemData.systemId,
|
||||
name: systemData.name
|
||||
}]
|
||||
},
|
||||
context: {
|
||||
description: description
|
||||
},
|
||||
dataType: 'json'
|
||||
}).done(function(responseData){
|
||||
if(
|
||||
responseData.systemData &&
|
||||
responseData.systemData.length > 0
|
||||
){
|
||||
for (var j = 0; j < responseData.systemData.length; j++) {
|
||||
showNotify({title: this.description, text: 'System: ' + responseData.systemData[j].name, type: 'success'});
|
||||
}
|
||||
}
|
||||
|
||||
if(
|
||||
responseData.error &&
|
||||
responseData.error.length > 0
|
||||
){
|
||||
for(var i = 0; i < responseData.error.length; i++){
|
||||
showNotify({title: this.description + ' error', text: 'System: ' + responseData.error[i].message, type: 'error'});
|
||||
}
|
||||
}
|
||||
|
||||
}).fail(function( jqXHR, status, error) {
|
||||
var reason = status + ' ' + error;
|
||||
showNotify({title: jqXHR.status + ': ' + this.description, text: reason, type: 'warning'});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* set currentSystemData as "global" variable
|
||||
* @param systemData
|
||||
@@ -1745,6 +1824,19 @@ define([
|
||||
return dateString + ' ' + timeString;
|
||||
};
|
||||
|
||||
/**
|
||||
* get document path
|
||||
* -> www.pathfinder.com/pathfinder/ -> /pathfinder
|
||||
* @returns {string|string}
|
||||
*/
|
||||
var getDocumentPath = function(){
|
||||
var pathname = window.location.pathname;
|
||||
// replace file endings
|
||||
var r = /[^\/]*$/;
|
||||
var path = pathname.replace(r, '');
|
||||
return path || '/';
|
||||
};
|
||||
|
||||
/**
|
||||
* redirect
|
||||
* @param url
|
||||
@@ -1794,6 +1886,7 @@ define([
|
||||
|
||||
return {
|
||||
config: config,
|
||||
localforage: localforage,
|
||||
showVersionInfo: showVersionInfo,
|
||||
getCurrentTriggerDelay: getCurrentTriggerDelay,
|
||||
getServerTime: getServerTime,
|
||||
@@ -1835,9 +1928,11 @@ define([
|
||||
getCurrentSystemData: getCurrentSystemData,
|
||||
getCurrentUserInfo: getCurrentUserInfo,
|
||||
getCurrentCharacterLog: getCurrentCharacterLog,
|
||||
setDestination: setDestination,
|
||||
convertDateToString: convertDateToString,
|
||||
getOpenDialogs: getOpenDialogs,
|
||||
formatPrice: formatPrice,
|
||||
getDocumentPath: getDocumentPath,
|
||||
redirect: redirect,
|
||||
logout: logout
|
||||
};
|
||||
|
||||
7
js/lib/localforage.min.js
vendored
Normal file
7
js/lib/localforage.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -1,36 +1,36 @@
|
||||
/*
|
||||
RequireJS 2.1.20 Copyright (c) 2010-2015, The Dojo Foundation All Rights Reserved.
|
||||
Available via the MIT or new BSD license.
|
||||
see: http://github.com/jrburke/requirejs for details
|
||||
RequireJS 2.2.0 Copyright jQuery Foundation and other contributors.
|
||||
Released under MIT license, http://github.com/requirejs/requirejs/LICENSE
|
||||
*/
|
||||
var requirejs,require,define;
|
||||
(function(ba){function G(b){return"[object Function]"===K.call(b)}function H(b){return"[object Array]"===K.call(b)}function v(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function T(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));d-=1);}}function t(b,c){return fa.call(b,c)}function n(b,c){return t(b,c)&&b[c]}function A(b,c){for(var d in b)if(t(b,d)&&c(b[d],d))break}function U(b,c,d,e){c&&A(c,function(c,i){if(d||!t(b,i))e&&"object"===typeof c&&c&&!H(c)&&!G(c)&&!(c instanceof
|
||||
RegExp)?(b[i]||(b[i]={}),U(b[i],c,d,e)):b[i]=c});return b}function u(b,c){return function(){return c.apply(b,arguments)}}function ca(b){throw b;}function da(b){if(!b)return b;var c=ba;v(b.split("."),function(b){c=c[b]});return c}function B(b,c,d,e){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=e;d&&(c.originalError=d);return c}function ga(b){function c(a,j,b){var f,l,c,d,h,e,g,i,j=j&&j.split("/"),p=k.map,m=p&&p["*"];if(a){a=a.split("/");l=a.length-1;k.nodeIdCompat&&
|
||||
Q.test(a[l])&&(a[l]=a[l].replace(Q,""));"."===a[0].charAt(0)&&j&&(l=j.slice(0,j.length-1),a=l.concat(a));l=a;for(c=0;c<l.length;c++)if(d=l[c],"."===d)l.splice(c,1),c-=1;else if(".."===d&&!(0===c||1===c&&".."===l[2]||".."===l[c-1])&&0<c)l.splice(c-1,2),c-=2;a=a.join("/")}if(b&&p&&(j||m)){l=a.split("/");c=l.length;a:for(;0<c;c-=1){h=l.slice(0,c).join("/");if(j)for(d=j.length;0<d;d-=1)if(b=n(p,j.slice(0,d).join("/")))if(b=n(b,h)){f=b;e=c;break a}!g&&(m&&n(m,h))&&(g=n(m,h),i=c)}!f&&g&&(f=g,e=i);f&&(l.splice(0,
|
||||
e,f),a=l.join("/"))}return(f=n(k.pkgs,a))?f:a}function d(a){z&&v(document.getElementsByTagName("script"),function(j){if(j.getAttribute("data-requiremodule")===a&&j.getAttribute("data-requirecontext")===h.contextName)return j.parentNode.removeChild(j),!0})}function p(a){var j=n(k.paths,a);if(j&&H(j)&&1<j.length)return j.shift(),h.require.undef(a),h.makeRequire(null,{skipMap:!0})([a]),!0}function g(a){var j,c=a?a.indexOf("!"):-1;-1<c&&(j=a.substring(0,c),a=a.substring(c+1,a.length));return[j,a]}function i(a,
|
||||
j,b,f){var l,d,e=null,i=j?j.name:null,k=a,p=!0,m="";a||(p=!1,a="_@r"+(K+=1));a=g(a);e=a[0];a=a[1];e&&(e=c(e,i,f),d=n(q,e));a&&(e?m=d&&d.normalize?d.normalize(a,function(a){return c(a,i,f)}):-1===a.indexOf("!")?c(a,i,f):a:(m=c(a,i,f),a=g(m),e=a[0],m=a[1],b=!0,l=h.nameToUrl(m)));b=e&&!d&&!b?"_unnormalized"+(O+=1):"";return{prefix:e,name:m,parentMap:j,unnormalized:!!b,url:l,originalName:k,isDefine:p,id:(e?e+"!"+m:m)+b}}function r(a){var j=a.id,b=n(m,j);b||(b=m[j]=new h.Module(a));return b}function s(a,
|
||||
j,b){var f=a.id,c=n(m,f);if(t(q,f)&&(!c||c.defineEmitComplete))"defined"===j&&b(q[f]);else if(c=r(a),c.error&&"error"===j)b(c.error);else c.on(j,b)}function w(a,b){var c=a.requireModules,f=!1;if(b)b(a);else if(v(c,function(b){if(b=n(m,b))b.error=a,b.events.error&&(f=!0,b.emit("error",a))}),!f)e.onError(a)}function x(){R.length&&(v(R,function(a){var b=a[0];"string"===typeof b&&(h.defQueueMap[b]=!0);C.push(a)}),R=[])}function y(a){delete m[a];delete V[a]}function F(a,b,c){var f=a.map.id;a.error?a.emit("error",
|
||||
a.error):(b[f]=!0,v(a.depMaps,function(f,d){var e=f.id,h=n(m,e);h&&(!a.depMatched[d]&&!c[e])&&(n(b,e)?(a.defineDep(d,q[e]),a.check()):F(h,b,c))}),c[f]=!0)}function D(){var a,b,c=(a=1E3*k.waitSeconds)&&h.startTime+a<(new Date).getTime(),f=[],l=[],e=!1,i=!0;if(!W){W=!0;A(V,function(a){var h=a.map,g=h.id;if(a.enabled&&(h.isDefine||l.push(a),!a.error))if(!a.inited&&c)p(g)?e=b=!0:(f.push(g),d(g));else if(!a.inited&&(a.fetched&&h.isDefine)&&(e=!0,!h.prefix))return i=!1});if(c&&f.length)return a=B("timeout",
|
||||
"Load timeout for modules: "+f,null,f),a.contextName=h.contextName,w(a);i&&v(l,function(a){F(a,{},{})});if((!c||b)&&e)if((z||ea)&&!X)X=setTimeout(function(){X=0;D()},50);W=!1}}function E(a){t(q,a[0])||r(i(a[0],null,!0)).init(a[1],a[2])}function I(a){var a=a.currentTarget||a.srcElement,b=h.onScriptLoad;a.detachEvent&&!Y?a.detachEvent("onreadystatechange",b):a.removeEventListener("load",b,!1);b=h.onScriptError;(!a.detachEvent||Y)&&a.removeEventListener("error",b,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}
|
||||
function J(){var a;for(x();C.length;){a=C.shift();if(null===a[0])return w(B("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));E(a)}h.defQueueMap={}}var W,Z,h,L,X,k={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},m={},V={},$={},C=[],q={},S={},aa={},K=1,O=1;L={require:function(a){return a.require?a.require:a.require=h.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?q[a.map.id]=a.exports:a.exports=q[a.map.id]={}},
|
||||
module:function(a){return a.module?a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return n(k.config,a.map.id)||{}},exports:a.exports||(a.exports={})}}};Z=function(a){this.events=n($,a.id)||{};this.map=a;this.shim=n(k.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};Z.prototype={init:function(a,b,c,f){f=f||{};if(!this.inited){this.factory=b;if(c)this.on("error",c);else this.events.error&&(c=u(this,function(a){this.emit("error",a)}));
|
||||
this.depMaps=a&&a.slice(0);this.errback=c;this.inited=!0;this.ignore=f.ignore;f.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=b)},fetch:function(){if(!this.fetched){this.fetched=!0;h.startTime=(new Date).getTime();var a=this.map;if(this.shim)h.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],u(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?
|
||||
this.callPlugin():this.load()}},load:function(){var a=this.map.url;S[a]||(S[a]=!0,h.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,b,c=this.map.id;b=this.depExports;var f=this.exports,l=this.factory;if(this.inited)if(this.error)this.emit("error",this.error);else{if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(G(l)){if(this.events.error&&this.map.isDefine||e.onError!==ca)try{f=h.execCb(c,l,b,f)}catch(d){a=d}else f=h.execCb(c,l,b,f);this.map.isDefine&&
|
||||
void 0===f&&((b=this.module)?f=b.exports:this.usingExports&&(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=l;this.exports=f;if(this.map.isDefine&&!this.ignore&&(q[c]=f,e.onResourceLoad))e.onResourceLoad(h,this.map,this.depMaps);y(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=
|
||||
!0)}}else t(h.defQueueMap,c)||this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=i(a.prefix);this.depMaps.push(d);s(d,"defined",u(this,function(f){var l,d;d=n(aa,this.map.id);var g=this.map.name,P=this.map.parentMap?this.map.parentMap.name:null,p=h.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(g=f.normalize(g,function(a){return c(a,P,!0)})||""),f=i(a.prefix+"!"+g,this.map.parentMap),s(f,"defined",u(this,function(a){this.init([],function(){return a},
|
||||
null,{enabled:!0,ignore:!0})})),d=n(m,f.id)){this.depMaps.push(f);if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else d?(this.map.url=h.nameToUrl(d),this.load()):(l=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),l.error=u(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];A(m,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),l.fromText=u(this,function(f,c){var d=a.name,g=i(d),P=M;c&&(f=c);P&&
|
||||
(M=!1);r(g);t(k.config,b)&&(k.config[d]=k.config[b]);try{e.exec(f)}catch(m){return w(B("fromtexteval","fromText eval for "+b+" failed: "+m,m,[b]))}P&&(M=!0);this.depMaps.push(g);h.completeLoad(d);p([d],l)}),f.load(a.name,p,l,k))}));h.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){V[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,u(this,function(a,b){var c,f;if("string"===typeof a){a=i(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=
|
||||
n(L,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;s(a,"defined",u(this,function(a){this.undefed||(this.defineDep(b,a),this.check())}));this.errback?s(a,"error",u(this,this.errback)):this.events.error&&s(a,"error",u(this,function(a){this.emit("error",a)}))}c=a.id;f=m[c];!t(L,c)&&(f&&!f.enabled)&&h.enable(a,this)}));A(this.pluginMaps,u(this,function(a){var b=n(m,a.id);b&&!b.enabled&&h.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=
|
||||
[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};h={config:k,contextName:b,registry:m,defined:q,urlFetched:S,defQueue:C,defQueueMap:{},Module:Z,makeModuleMap:i,nextTick:e.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=k.shim,c={paths:!0,bundles:!0,config:!0,map:!0};A(a,function(a,b){c[b]?(k[b]||(k[b]={}),U(k[b],a,!0,!0)):k[b]=a});a.bundles&&A(a.bundles,function(a,b){v(a,
|
||||
function(a){a!==b&&(aa[a]=b)})});a.shim&&(A(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=h.makeShimExports(a);b[c]=a}),k.shim=b);a.packages&&v(a.packages,function(a){var b,a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(k.paths[b]=a.location);k.pkgs[b]=a.name+"/"+(a.main||"main").replace(ha,"").replace(Q,"")});A(m,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=i(b,null,!0))});if(a.deps||a.callback)h.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;
|
||||
a.init&&(b=a.init.apply(ba,arguments));return b||a.exports&&da(a.exports)}},makeRequire:function(a,j){function g(c,d,p){var k,n;j.enableBuildCallback&&(d&&G(d))&&(d.__requireJsBuild=!0);if("string"===typeof c){if(G(d))return w(B("requireargs","Invalid require call"),p);if(a&&t(L,c))return L[c](m[a.id]);if(e.get)return e.get(h,c,a,g);k=i(c,a,!1,!0);k=k.id;return!t(q,k)?w(B("notloaded",'Module name "'+k+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):q[k]}J();h.nextTick(function(){J();
|
||||
n=r(i(null,a));n.skipMap=j.skipMap;n.init(c,d,p,{enabled:!0});D()});return g}j=j||{};U(g,{isBrowser:z,toUrl:function(b){var d,e=b.lastIndexOf("."),j=b.split("/")[0];if(-1!==e&&(!("."===j||".."===j)||1<e))d=b.substring(e,b.length),b=b.substring(0,e);return h.nameToUrl(c(b,a&&a.id,!0),d,!0)},defined:function(b){return t(q,i(b,a,!1,!0).id)},specified:function(b){b=i(b,a,!1,!0).id;return t(q,b)||t(m,b)}});a||(g.undef=function(b){x();var c=i(b,a,!0),e=n(m,b);e.undefed=!0;d(b);delete q[b];delete S[c.url];
|
||||
delete $[b];T(C,function(a,c){a[0]===b&&C.splice(c,1)});delete h.defQueueMap[b];e&&(e.events.defined&&($[b]=e.events),y(b))});return g},enable:function(a){n(m,a.id)&&r(a).enable()},completeLoad:function(a){var b,c,d=n(k.shim,a)||{},e=d.exports;for(x();C.length;){c=C.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);E(c)}h.defQueueMap={};c=n(m,a);if(!b&&!t(q,a)&&c&&!c.inited){if(k.enforceDefine&&(!e||!da(e)))return p(a)?void 0:w(B("nodefine","No define call for "+a,null,[a]));E([a,
|
||||
d.deps||[],d.exportsFn])}D()},nameToUrl:function(a,b,c){var d,g,i;(d=n(k.pkgs,a))&&(a=d);if(d=n(aa,a))return h.nameToUrl(d,b,c);if(e.jsExtRegExp.test(a))d=a+(b||"");else{d=k.paths;a=a.split("/");for(g=a.length;0<g;g-=1)if(i=a.slice(0,g).join("/"),i=n(d,i)){H(i)&&(i=i[0]);a.splice(0,g,i);break}d=a.join("/");d+=b||(/^data\:|\?/.test(d)||c?"":".js");d=("/"===d.charAt(0)||d.match(/^[\w\+\.\-]+:/)?"":k.baseUrl)+d}return k.urlArgs?d+((-1===d.indexOf("?")?"?":"&")+k.urlArgs):d},load:function(a,b){e.load(h,
|
||||
a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||ia.test((a.currentTarget||a.srcElement).readyState))N=null,a=I(a),h.completeLoad(a.id)},onScriptError:function(a){var b=I(a);if(!p(b.id))return w(B("scripterror","Script error for: "+b.id,a,[b.id]))}};h.require=h.makeRequire();return h}var e,x,y,D,I,E,N,J,r,O,ja=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,ka=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,Q=/\.js$/,ha=/^\.\//;x=Object.prototype;var K=
|
||||
x.toString,fa=x.hasOwnProperty,z=!!("undefined"!==typeof window&&"undefined"!==typeof navigator&&window.document),ea=!z&&"undefined"!==typeof importScripts,ia=z&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,Y="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),F={},s={},R=[],M=!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(G(requirejs))return;s=requirejs;requirejs=void 0}"undefined"!==typeof require&&!G(require)&&(s=require,require=
|
||||
void 0);e=requirejs=function(b,c,d,p){var g,i="_";!H(b)&&"string"!==typeof b&&(g=b,H(c)?(b=c,c=d,d=p):b=[]);g&&g.context&&(i=g.context);(p=n(F,i))||(p=F[i]=e.s.newContext(i));g&&p.configure(g);return p.require(b,c,d)};e.config=function(b){return e(b)};e.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=e);e.version="2.1.20";e.jsExtRegExp=/^\/|:|\?|\.js$/;e.isBrowser=z;x=e.s={contexts:F,newContext:ga};e({});v(["toUrl","undef","defined","specified"],
|
||||
function(b){e[b]=function(){var c=F._;return c.require[b].apply(c,arguments)}});if(z&&(y=x.head=document.getElementsByTagName("head")[0],D=document.getElementsByTagName("base")[0]))y=x.head=D.parentNode;e.onError=ca;e.createNode=function(b){var c=b.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");c.type=b.scriptType||"text/javascript";c.charset="utf-8";c.async=!0;return c};e.load=function(b,c,d){var p=b&&b.config||{},g;if(z){g=e.createNode(p,
|
||||
c,d);if(p.onNodeCreated)p.onNodeCreated(g,p,c,d);g.setAttribute("data-requirecontext",b.contextName);g.setAttribute("data-requiremodule",c);g.attachEvent&&!(g.attachEvent.toString&&0>g.attachEvent.toString().indexOf("[native code"))&&!Y?(M=!0,g.attachEvent("onreadystatechange",b.onScriptLoad)):(g.addEventListener("load",b.onScriptLoad,!1),g.addEventListener("error",b.onScriptError,!1));g.src=d;J=g;D?y.insertBefore(g,D):y.appendChild(g);J=null;return g}if(ea)try{importScripts(d),b.completeLoad(c)}catch(i){b.onError(B("importscripts",
|
||||
"importScripts failed for "+c+" at "+d,i,[c]))}};z&&!s.skipDataMain&&T(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(I=b.getAttribute("data-main"))return r=I,s.baseUrl||(E=r.split("/"),r=E.pop(),O=E.length?E.join("/")+"/":"./",s.baseUrl=O),r=r.replace(Q,""),e.jsExtRegExp.test(r)&&(r=I),s.deps=s.deps?s.deps.concat(r):[r],!0});define=function(b,c,d){var e,g;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(ja,"").replace(ka,
|
||||
function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(M){if(!(e=J))N&&"interactive"===N.readyState||T(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return N=b}),e=N;e&&(b||(b=e.getAttribute("data-requiremodule")),g=F[e.getAttribute("data-requirecontext")])}g?(g.defQueue.push([b,c,d]),g.defQueueMap[b]=!0):R.push([b,c,d])};define.amd={jQuery:!0};e.exec=function(b){return eval(b)};e(s)}})(this);
|
||||
(function(ga){function ka(b,c,d,g){return g||""}function K(b){return"[object Function]"===Q.call(b)}function L(b){return"[object Array]"===Q.call(b)}function y(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function X(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));--d);}}function x(b,c){return la.call(b,c)}function e(b,c){return x(b,c)&&b[c]}function D(b,c){for(var d in b)if(x(b,d)&&c(b[d],d))break}function Y(b,c,d,g){c&&D(c,function(c,e){if(d||!x(b,e))!g||"object"!==
|
||||
typeof c||!c||L(c)||K(c)||c instanceof RegExp?b[e]=c:(b[e]||(b[e]={}),Y(b[e],c,d,g))});return b}function z(b,c){return function(){return c.apply(b,arguments)}}function ha(b){throw b;}function ia(b){if(!b)return b;var c=ga;y(b.split("."),function(b){c=c[b]});return c}function F(b,c,d,g){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=g;d&&(c.originalError=d);return c}function ma(b){function c(a,n,b){var h,k,f,c,d,l,g,r;n=n&&n.split("/");var q=p.map,m=q&&q["*"];
|
||||
if(a){a=a.split("/");k=a.length-1;p.nodeIdCompat&&U.test(a[k])&&(a[k]=a[k].replace(U,""));"."===a[0].charAt(0)&&n&&(k=n.slice(0,n.length-1),a=k.concat(a));k=a;for(f=0;f<k.length;f++)c=k[f],"."===c?(k.splice(f,1),--f):".."===c&&0!==f&&(1!==f||".."!==k[2])&&".."!==k[f-1]&&0<f&&(k.splice(f-1,2),f-=2);a=a.join("/")}if(b&&q&&(n||m)){k=a.split("/");f=k.length;a:for(;0<f;--f){d=k.slice(0,f).join("/");if(n)for(c=n.length;0<c;--c)if(b=e(q,n.slice(0,c).join("/")))if(b=e(b,d)){h=b;l=f;break a}!g&&m&&e(m,d)&&
|
||||
(g=e(m,d),r=f)}!h&&g&&(h=g,l=r);h&&(k.splice(0,l,h),a=k.join("/"))}return(h=e(p.pkgs,a))?h:a}function d(a){E&&y(document.getElementsByTagName("script"),function(n){if(n.getAttribute("data-requiremodule")===a&&n.getAttribute("data-requirecontext")===l.contextName)return n.parentNode.removeChild(n),!0})}function m(a){var n=e(p.paths,a);if(n&&L(n)&&1<n.length)return n.shift(),l.require.undef(a),l.makeRequire(null,{skipMap:!0})([a]),!0}function r(a){var n,b=a?a.indexOf("!"):-1;-1<b&&(n=a.substring(0,
|
||||
b),a=a.substring(b+1,a.length));return[n,a]}function q(a,n,b,h){var k,f,d=null,g=n?n.name:null,p=a,q=!0,m="";a||(q=!1,a="_@r"+(Q+=1));a=r(a);d=a[0];a=a[1];d&&(d=c(d,g,h),f=e(v,d));a&&(d?m=f&&f.normalize?f.normalize(a,function(a){return c(a,g,h)}):-1===a.indexOf("!")?c(a,g,h):a:(m=c(a,g,h),a=r(m),d=a[0],m=a[1],b=!0,k=l.nameToUrl(m)));b=!d||f||b?"":"_unnormalized"+(T+=1);return{prefix:d,name:m,parentMap:n,unnormalized:!!b,url:k,originalName:p,isDefine:q,id:(d?d+"!"+m:m)+b}}function u(a){var b=a.id,
|
||||
c=e(t,b);c||(c=t[b]=new l.Module(a));return c}function w(a,b,c){var h=a.id,k=e(t,h);if(!x(v,h)||k&&!k.defineEmitComplete)if(k=u(a),k.error&&"error"===b)c(k.error);else k.on(b,c);else"defined"===b&&c(v[h])}function A(a,b){var c=a.requireModules,h=!1;if(b)b(a);else if(y(c,function(b){if(b=e(t,b))b.error=a,b.events.error&&(h=!0,b.emit("error",a))}),!h)g.onError(a)}function B(){V.length&&(y(V,function(a){var b=a[0];"string"===typeof b&&(l.defQueueMap[b]=!0);G.push(a)}),V=[])}function C(a){delete t[a];
|
||||
delete Z[a]}function J(a,b,c){var h=a.map.id;a.error?a.emit("error",a.error):(b[h]=!0,y(a.depMaps,function(h,f){var d=h.id,g=e(t,d);!g||a.depMatched[f]||c[d]||(e(b,d)?(a.defineDep(f,v[d]),a.check()):J(g,b,c))}),c[h]=!0)}function H(){var a,b,c=(a=1E3*p.waitSeconds)&&l.startTime+a<(new Date).getTime(),h=[],k=[],f=!1,g=!0;if(!aa){aa=!0;D(Z,function(a){var l=a.map,e=l.id;if(a.enabled&&(l.isDefine||k.push(a),!a.error))if(!a.inited&&c)m(e)?f=b=!0:(h.push(e),d(e));else if(!a.inited&&a.fetched&&l.isDefine&&
|
||||
(f=!0,!l.prefix))return g=!1});if(c&&h.length)return a=F("timeout","Load timeout for modules: "+h,null,h),a.contextName=l.contextName,A(a);g&&y(k,function(a){J(a,{},{})});c&&!b||!f||!E&&!ja||ba||(ba=setTimeout(function(){ba=0;H()},50));aa=!1}}function I(a){x(v,a[0])||u(q(a[0],null,!0)).init(a[1],a[2])}function O(a){a=a.currentTarget||a.srcElement;var b=l.onScriptLoad;a.detachEvent&&!ca?a.detachEvent("onreadystatechange",b):a.removeEventListener("load",b,!1);b=l.onScriptError;a.detachEvent&&!ca||a.removeEventListener("error",
|
||||
b,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}function P(){var a;for(B();G.length;){a=G.shift();if(null===a[0])return A(F("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));I(a)}l.defQueueMap={}}var aa,da,l,R,ba,p={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},t={},Z={},ea={},G=[],v={},W={},fa={},Q=1,T=1;R={require:function(a){return a.require?a.require:a.require=l.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?
|
||||
v[a.map.id]=a.exports:a.exports=v[a.map.id]={}},module:function(a){return a.module?a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return e(p.config,a.map.id)||{}},exports:a.exports||(a.exports={})}}};da=function(a){this.events=e(ea,a.id)||{};this.map=a;this.shim=e(p.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};da.prototype={init:function(a,b,c,h){h=h||{};if(!this.inited){this.factory=b;if(c)this.on("error",c);else this.events.error&&
|
||||
(c=z(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=c;this.inited=!0;this.ignore=h.ignore;h.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=!0,--this.depCount,this.depExports[a]=b)},fetch:function(){if(!this.fetched){this.fetched=!0;l.startTime=(new Date).getTime();var a=this.map;if(this.shim)l.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],z(this,function(){return a.prefix?this.callPlugin():
|
||||
this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=this.map.url;W[a]||(W[a]=!0,l.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,b,c=this.map.id;b=this.depExports;var h=this.exports,k=this.factory;if(!this.inited)x(l.defQueueMap,c)||this.fetch();else if(this.error)this.emit("error",this.error);else if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(K(k)){if(this.events.error&&this.map.isDefine||g.onError!==
|
||||
ha)try{h=l.execCb(c,k,b,h)}catch(d){a=d}else h=l.execCb(c,k,b,h);this.map.isDefine&&void 0===h&&((b=this.module)?h=b.exports:this.usingExports&&(h=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",A(this.error=a)}else h=k;this.exports=h;if(this.map.isDefine&&!this.ignore&&(v[c]=h,g.onResourceLoad)){var f=[];y(this.depMaps,function(a){f.push(a.normalizedMap||a)});g.onResourceLoad(l,this.map,f)}C(c);
|
||||
this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}},callPlugin:function(){var a=this.map,b=a.id,d=q(a.prefix);this.depMaps.push(d);w(d,"defined",z(this,function(h){var k,f,d=e(fa,this.map.id),M=this.map.name,r=this.map.parentMap?this.map.parentMap.name:null,m=l.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(h.normalize&&(M=h.normalize(M,function(a){return c(a,r,!0)})||
|
||||
""),f=q(a.prefix+"!"+M,this.map.parentMap),w(f,"defined",z(this,function(a){this.map.normalizedMap=f;this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),h=e(t,f.id)){this.depMaps.push(f);if(this.events.error)h.on("error",z(this,function(a){this.emit("error",a)}));h.enable()}}else d?(this.map.url=l.nameToUrl(d),this.load()):(k=z(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),k.error=z(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];D(t,function(a){0===
|
||||
a.map.id.indexOf(b+"_unnormalized")&&C(a.map.id)});A(a)}),k.fromText=z(this,function(h,c){var d=a.name,f=q(d),M=S;c&&(h=c);M&&(S=!1);u(f);x(p.config,b)&&(p.config[d]=p.config[b]);try{g.exec(h)}catch(e){return A(F("fromtexteval","fromText eval for "+b+" failed: "+e,e,[b]))}M&&(S=!0);this.depMaps.push(f);l.completeLoad(d);m([d],k)}),h.load(a.name,m,k,p))}));l.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){Z[this.map.id]=this;this.enabling=this.enabled=!0;y(this.depMaps,z(this,function(a,
|
||||
b){var c,h;if("string"===typeof a){a=q(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=e(R,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;w(a,"defined",z(this,function(a){this.undefed||(this.defineDep(b,a),this.check())}));this.errback?w(a,"error",z(this,this.errback)):this.events.error&&w(a,"error",z(this,function(a){this.emit("error",a)}))}c=a.id;h=t[c];x(R,c)||!h||h.enabled||l.enable(a,this)}));D(this.pluginMaps,z(this,function(a){var b=e(t,a.id);
|
||||
b&&!b.enabled&&l.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){y(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};l={config:p,contextName:b,registry:t,defined:v,urlFetched:W,defQueue:G,defQueueMap:{},Module:da,makeModuleMap:q,nextTick:g.nextTick,onError:A,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");if("string"===typeof a.urlArgs){var b=
|
||||
a.urlArgs;a.urlArgs=function(a,c){return(-1===c.indexOf("?")?"?":"&")+b}}var c=p.shim,h={paths:!0,bundles:!0,config:!0,map:!0};D(a,function(a,b){h[b]?(p[b]||(p[b]={}),Y(p[b],a,!0,!0)):p[b]=a});a.bundles&&D(a.bundles,function(a,b){y(a,function(a){a!==b&&(fa[a]=b)})});a.shim&&(D(a.shim,function(a,b){L(a)&&(a={deps:a});!a.exports&&!a.init||a.exportsFn||(a.exportsFn=l.makeShimExports(a));c[b]=a}),p.shim=c);a.packages&&y(a.packages,function(a){var b;a="string"===typeof a?{name:a}:a;b=a.name;a.location&&
|
||||
(p.paths[b]=a.location);p.pkgs[b]=a.name+"/"+(a.main||"main").replace(na,"").replace(U,"")});D(t,function(a,b){a.inited||a.map.unnormalized||(a.map=q(b,null,!0))});(a.deps||a.callback)&&l.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ga,arguments));return b||a.exports&&ia(a.exports)}},makeRequire:function(a,n){function m(c,d,f){var e,r;n.enableBuildCallback&&d&&K(d)&&(d.__requireJsBuild=!0);if("string"===typeof c){if(K(d))return A(F("requireargs",
|
||||
"Invalid require call"),f);if(a&&x(R,c))return R[c](t[a.id]);if(g.get)return g.get(l,c,a,m);e=q(c,a,!1,!0);e=e.id;return x(v,e)?v[e]:A(F("notloaded",'Module name "'+e+'" has not been loaded yet for context: '+b+(a?"":". Use require([])")))}P();l.nextTick(function(){P();r=u(q(null,a));r.skipMap=n.skipMap;r.init(c,d,f,{enabled:!0});H()});return m}n=n||{};Y(m,{isBrowser:E,toUrl:function(b){var d,f=b.lastIndexOf("."),g=b.split("/")[0];-1!==f&&("."!==g&&".."!==g||1<f)&&(d=b.substring(f,b.length),b=b.substring(0,
|
||||
f));return l.nameToUrl(c(b,a&&a.id,!0),d,!0)},defined:function(b){return x(v,q(b,a,!1,!0).id)},specified:function(b){b=q(b,a,!1,!0).id;return x(v,b)||x(t,b)}});a||(m.undef=function(b){B();var c=q(b,a,!0),f=e(t,b);f.undefed=!0;d(b);delete v[b];delete W[c.url];delete ea[b];X(G,function(a,c){a[0]===b&&G.splice(c,1)});delete l.defQueueMap[b];f&&(f.events.defined&&(ea[b]=f.events),C(b))});return m},enable:function(a){e(t,a.id)&&u(a).enable()},completeLoad:function(a){var b,c,d=e(p.shim,a)||{},g=d.exports;
|
||||
for(B();G.length;){c=G.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);I(c)}l.defQueueMap={};c=e(t,a);if(!b&&!x(v,a)&&c&&!c.inited)if(!p.enforceDefine||g&&ia(g))I([a,d.deps||[],d.exportsFn]);else return m(a)?void 0:A(F("nodefine","No define call for "+a,null,[a]));H()},nameToUrl:function(a,b,c){var d,k,f,m;(d=e(p.pkgs,a))&&(a=d);if(d=e(fa,a))return l.nameToUrl(d,b,c);if(g.jsExtRegExp.test(a))d=a+(b||"");else{d=p.paths;k=a.split("/");for(f=k.length;0<f;--f)if(m=k.slice(0,f).join("/"),
|
||||
m=e(d,m)){L(m)&&(m=m[0]);k.splice(0,f,m);break}d=k.join("/");d+=b||(/^data\:|^blob\:|\?/.test(d)||c?"":".js");d=("/"===d.charAt(0)||d.match(/^[\w\+\.\-]+:/)?"":p.baseUrl)+d}return p.urlArgs&&!/^blob\:/.test(d)?d+p.urlArgs(a,d):d},load:function(a,b){g.load(l,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||oa.test((a.currentTarget||a.srcElement).readyState))N=null,a=O(a),l.completeLoad(a.id)},onScriptError:function(a){var b=O(a);if(!m(b.id)){var c=[];
|
||||
D(t,function(a,d){0!==d.indexOf("_@r")&&y(a.depMaps,function(a){if(a.id===b.id)return c.push(d),!0})});return A(F("scripterror",'Script error for "'+b.id+(c.length?'", needed by: '+c.join(", "):'"'),a,[b.id]))}}};l.require=l.makeRequire();return l}function pa(){if(N&&"interactive"===N.readyState)return N;X(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return N=b});return N}var g,B,C,H,O,I,N,P,u,T,qa=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,ra=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
|
||||
U=/\.js$/,na=/^\.\//;B=Object.prototype;var Q=B.toString,la=B.hasOwnProperty,E=!("undefined"===typeof window||"undefined"===typeof navigator||!window.document),ja=!E&&"undefined"!==typeof importScripts,oa=E&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,ca="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),J={},w={},V=[],S=!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(K(requirejs))return;w=requirejs;requirejs=void 0}"undefined"===typeof require||
|
||||
K(require)||(w=require,require=void 0);g=requirejs=function(b,c,d,m){var r,q="_";L(b)||"string"===typeof b||(r=b,L(c)?(b=c,c=d,d=m):b=[]);r&&r.context&&(q=r.context);(m=e(J,q))||(m=J[q]=g.s.newContext(q));r&&m.configure(r);return m.require(b,c,d)};g.config=function(b){return g(b)};g.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=g);g.version="2.2.0";g.jsExtRegExp=/^\/|:|\?|\.js$/;g.isBrowser=E;B=g.s={contexts:J,newContext:ma};g({});y(["toUrl",
|
||||
"undef","defined","specified"],function(b){g[b]=function(){var c=J._;return c.require[b].apply(c,arguments)}});E&&(C=B.head=document.getElementsByTagName("head")[0],H=document.getElementsByTagName("base")[0])&&(C=B.head=H.parentNode);g.onError=ha;g.createNode=function(b,c,d){c=b.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");c.type=b.scriptType||"text/javascript";c.charset="utf-8";c.async=!0;return c};g.load=function(b,c,d){var m=b&&b.config||
|
||||
{},e;if(E){e=g.createNode(m,c,d);e.setAttribute("data-requirecontext",b.contextName);e.setAttribute("data-requiremodule",c);!e.attachEvent||e.attachEvent.toString&&0>e.attachEvent.toString().indexOf("[native code")||ca?(e.addEventListener("load",b.onScriptLoad,!1),e.addEventListener("error",b.onScriptError,!1)):(S=!0,e.attachEvent("onreadystatechange",b.onScriptLoad));e.src=d;if(m.onNodeCreated)m.onNodeCreated(e,m,c,d);P=e;H?C.insertBefore(e,H):C.appendChild(e);P=null;return e}if(ja)try{setTimeout(function(){},
|
||||
0),importScripts(d),b.completeLoad(c)}catch(q){b.onError(F("importscripts","importScripts failed for "+c+" at "+d,q,[c]))}};E&&!w.skipDataMain&&X(document.getElementsByTagName("script"),function(b){C||(C=b.parentNode);if(O=b.getAttribute("data-main"))return u=O,w.baseUrl||-1!==u.indexOf("!")||(I=u.split("/"),u=I.pop(),T=I.length?I.join("/")+"/":"./",w.baseUrl=T),u=u.replace(U,""),g.jsExtRegExp.test(u)&&(u=O),w.deps=w.deps?w.deps.concat(u):[u],!0});define=function(b,c,d){var e,g;"string"!==typeof b&&
|
||||
(d=c,c=b,b=null);L(c)||(d=c,c=null);!c&&K(d)&&(c=[],d.length&&(d.toString().replace(qa,ka).replace(ra,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));S&&(e=P||pa())&&(b||(b=e.getAttribute("data-requiremodule")),g=J[e.getAttribute("data-requirecontext")]);g?(g.defQueue.push([b,c,d]),g.defQueueMap[b]=!0):V.push([b,c,d])};define.amd={jQuery:!0};g.exec=function(b){return eval(b)};g(w)}})(this);
|
||||
5
js/lib/select2.min.js
vendored
5
js/lib/select2.min.js
vendored
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user