Skip to content

Commit

Permalink
Multi-Project-Extension (#312)
Browse files Browse the repository at this point in the history
Added the Multi projects extension plugin (by ZasoGD) and integrated its support in the bookmarks and Draw tools plugins.

Co-authored-by: Alexander Danilov <[email protected]>
  • Loading branch information
MysticJay and modos189 committed Dec 6, 2020
1 parent 64a890d commit 940ff66
Show file tree
Hide file tree
Showing 3 changed files with 672 additions and 30 deletions.
91 changes: 74 additions & 17 deletions plugins/bookmarks.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
// @author ZasoGD
// @name Bookmarks for maps and portals
// @category Controls
// @version 0.3.0
// @description Save your favorite Maps and Portals and move the intel map with a click. Works with sync.
// @version 0.4.0
// @description Save your favorite Maps and Portals and move the intel map with a click. Works with sync. Supports Multi-Project-Extension


/***********************************************************************
/* **********************************************************************
HOOKS:
- pluginBkmrksEdit: fired when a bookmarks/folder is removed, added or sorted, also when a folder is opened/closed;
- pluginBkmrksOpenOpt: fired when the "Bookmarks Options" panel is opened (you can add new options);
- pluginBkmrksSyncEnd: fired when the sync is finished;
***********************************************************************/
********************************************************************** */

// use own namespace for plugin
window.plugin.bookmarks = function() {};
Expand All @@ -24,6 +23,7 @@
window.plugin.bookmarks.KEY_STATUS_BOX = 'plugin-bookmarks-box';

window.plugin.bookmarks.KEY = {key: window.plugin.bookmarks.KEY_STORAGE, field: 'bkmrksObj'};
window.plugin.bookmarks.IsDefaultStorageKey = true; // as default on startup
window.plugin.bookmarks.UPDATE_QUEUE = {key: 'plugin-bookmarks-queue', field: 'updateQueue'};
window.plugin.bookmarks.UPDATING_QUEUE = {key: 'plugin-bookmarks-updating-queue', field: 'updatingQueue'};

Expand Down Expand Up @@ -81,11 +81,12 @@
}
return result;
}

// Update the localStorage
window.plugin.bookmarks.saveStorage = function() {
localStorage[plugin.bookmarks.KEY_STORAGE] = JSON.stringify(window.plugin.bookmarks.bkmrksObj);
}

// Load the localStorage
window.plugin.bookmarks.loadStorage = function() {
window.plugin.bookmarks.bkmrksObj = JSON.parse(localStorage[plugin.bookmarks.KEY_STORAGE]);
Expand All @@ -94,7 +95,8 @@
window.plugin.bookmarks.saveStorageBox = function() {
localStorage[plugin.bookmarks.KEY_STATUS_BOX] = JSON.stringify(window.plugin.bookmarks.statusBox);
}
window.plugin.bookmarks.loadStorageBox = function() {

window.plugin.bookmarks.loadStorageBox = function() {
window.plugin.bookmarks.statusBox = JSON.parse(localStorage[plugin.bookmarks.KEY_STATUS_BOX]);
}

Expand Down Expand Up @@ -725,7 +727,7 @@
}

window.plugin.bookmarks.dialogLoadListFolders = function(idBox, clickAction, showOthersF, scanType/*0 = maps&portals; 1 = maps; 2 = portals*/) {
var list = JSON.parse(localStorage['plugin-bookmarks']);
var list = JSON.parse(localStorage[window.plugin.bookmarks.KEY_STORAGE]);
var listHTML = '';
var foldHTML = '';
var elemGenericFolder = '';
Expand Down Expand Up @@ -902,7 +904,7 @@
$('.ui-dialog-autodrawer .ui-dialog-buttonset .ui-button:not(:first)').hide();
}
else{
var portalsList = JSON.parse(localStorage['plugin-bookmarks']);
var portalsList = JSON.parse(localStorage[window.plugin.bookmarks.KEY_STORAGE]);
var element = '';
var elementTemp = '';
var elemGenericFolder = '';
Expand Down Expand Up @@ -957,7 +959,7 @@
/***************************************************************************************************************************************************************/
// Delay the syncing to group a few updates in a single request
window.plugin.bookmarks.delaySync = function() {
if(!window.plugin.bookmarks.enableSync) return;
if (!window.plugin.bookmarks.enableSync || !window.plugin.bookmarks.IsDefaultStorageKey) return;
clearTimeout(plugin.bookmarks.delaySync.timer);
window.plugin.bookmarks.delaySync.timer = setTimeout(function() {
window.plugin.bookmarks.delaySync.timer = null;
Expand All @@ -967,7 +969,7 @@

// Store the updateQueue in updatingQueue and upload
window.plugin.bookmarks.syncNow = function() {
if(!window.plugin.bookmarks.enableSync) return;
if (!window.plugin.bookmarks.enableSync || !window.plugin.bookmarks.IsDefaultStorageKey) return;
$.extend(window.plugin.bookmarks.updatingQueue, window.plugin.bookmarks.updateQueue);
window.plugin.bookmarks.updateQueue = {};
window.plugin.bookmarks.storeLocal(window.plugin.bookmarks.UPDATING_QUEUE);
Expand All @@ -979,7 +981,7 @@
// Call after IITC and all plugin loaded
window.plugin.bookmarks.registerFieldForSyncing = function() {
if(!window.plugin.sync) return;
window.plugin.sync.registerMapForSync('bookmarks', window.plugin.bookmarks.KEY.field, window.plugin.bookmarks.syncCallback, window.plugin.bookmarks.syncInitialed);
window.plugin.sync.registerMapForSync('bookmarks', window.plugin.bookmarks.KEY.field, window.plugin.bookmarks.syncCallback, window.plugin.bookmarks.syncInitialized);
}

// Call after local or remote change uploaded
Expand Down Expand Up @@ -1010,8 +1012,8 @@
}
}

// syncing of the field is initialed, upload all queued update
window.plugin.bookmarks.syncInitialed = function(pluginName, fieldName) {
// syncing of the field is initialized, upload all queued update
window.plugin.bookmarks.syncInitialized = function(pluginName, fieldName) {
if(fieldName === window.plugin.bookmarks.KEY.field) {
window.plugin.bookmarks.enableSync = true;
if(Object.keys(window.plugin.bookmarks.updateQueue).length > 0) {
Expand Down Expand Up @@ -1043,6 +1045,7 @@
window.plugin.bookmarks.storeLocal(window.plugin.bookmarks.UPDATE_QUEUE);

window.plugin.bookmarks.delaySync();
window.plugin.bookmarks.loadLocal(window.plugin.bookmarks.KEY); // switch back to active storage related to KEY
}

/***************************************************************************************************************************************************************/
Expand All @@ -1057,8 +1060,14 @@

window.plugin.bookmarks.highlightRefresh = function(data) {
if(_current_highlighter === 'Bookmarked Portals') {
if(data.action === 'sync' || data.target === 'portal' || (data.target === 'folder' && data.action === 'remove') || (data.target === 'all' && data.action === 'import') || (data.target === 'all' && data.action === 'reset')) {
window.resetHighlightedPortals();
if( data.action === 'sync'
|| data.target === 'portal'
|| (data.target === 'folder' && data.action === 'remove')
|| (data.target === 'all' && data.action === 'import')
|| (data.target === 'all' && data.action === 'reset')
|| (data.target === 'all' && data.action === 'MPEswitch'))
{
window.changePortalHighlights('Bookmarked Portals');
}
}
}
Expand Down Expand Up @@ -1236,6 +1245,49 @@
plugin.bookmarks.htmlSetbox = '<div id="bkmrksSetbox">' + actions + '</div>';
}

/***************************************************************************************************************************************************************/
window.plugin.bookmarks.initMPE = function(){
window.plugin.mpe.setMultiProjects({
namespace: 'bookmarks',
title: 'Bookmarks for Maps and Portals',
fa: 'fa-bookmark',
defaultKey: 'plugin-bookmarks',
func_setKey: function(newKey) {
window.plugin.bookmarks.KEY_STORAGE = newKey;
window.plugin.bookmarks.KEY.key = newKey;
},
func_pre: function() {
//disable sync
window.plugin.bookmarks.IsDefaultStorageKey = false;
},
func_post: function(){
// Delete all Markers (stared portals)
for (var guid in window.plugin.bookmarks.starLayers){
var starInLayer = window.plugin.bookmarks.starLayers[guid];
window.plugin.bookmarks.starLayerGroup.removeLayer(starInLayer);
delete window.plugin.bookmarks.starLayers[guid];
}
// Create Storage if not exist
window.plugin.bookmarks.createStorage();
// Load Storage
window.plugin.bookmarks.loadStorage();
// window.plugin.bookmarks.saveStorage();

// Delete and Regenerate Bookmark Lists
window.plugin.bookmarks.refreshBkmrks();

// Add Markers (stared portals)
window.plugin.bookmarks.addAllStars();

// Refresh Highlighter
window.plugin.bookmarks.highlightRefresh({"target": "all", "action": "MPEswitch"});

// enable sync if default storage
window.plugin.bookmarks.IsDefaultStorageKey = (this.defaultKey === this.currKey);
}
});
}

/***************************************************************************************************************************************************************/

var setup = function() {
Expand Down Expand Up @@ -1307,4 +1359,9 @@
if (window.plugin.portalslist) {
window.plugin.bookmarks.setupPortalsList();
}
}
// Initilaize MPE-Support only if MPE-Module is available
if(window.plugin.mpe !== undefined){
window.plugin.bookmarks.initMPE();
}

}
94 changes: 81 additions & 13 deletions plugins/draw-tools.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// @author breunigs
// @name Draw tools
// @category Draw
// @version 0.7.2
// @description Allow drawing things onto the current map so you may plan your next move.
// @version 0.8.0
// @description Allow drawing things onto the current map so you may plan your next move. Supports Multi-Project-Extension.


// HOOK: pluginDrawTools
Expand All @@ -11,6 +11,8 @@
// use own namespace for plugin
window.plugin.drawTools = function() {};

window.plugin.drawTools.KEY_STORAGE = 'plugin-draw-tools-layer';

window.plugin.drawTools.getMarkerIcon = function(color) {
if (!color) {
console.warn('Color is not set (default #a24ac3 will be used)');
Expand Down Expand Up @@ -201,15 +203,14 @@ window.plugin.drawTools.save = function() {

data.push(item);
});

localStorage['plugin-draw-tools-layer'] = JSON.stringify(data);
localStorage[window.plugin.drawTools.KEY_STORAGE] = JSON.stringify(data);

console.log('draw-tools: saved to localStorage');
}

window.plugin.drawTools.load = function() {
try {
var dataStr = localStorage['plugin-draw-tools-layer'];
var dataStr = localStorage[window.plugin.drawTools.KEY_STORAGE];
if (dataStr === undefined) return;

var data = JSON.parse(dataStr);
Expand Down Expand Up @@ -305,8 +306,19 @@ window.plugin.drawTools.optAlert = function(message) {
}

window.plugin.drawTools.optCopy = function() {
if (typeof android !== 'undefined' && android && android.shareString) {
android.shareString(localStorage['plugin-draw-tools-layer']);
if (window.localStorage[window.plugin.drawTools.KEY_STORAGE] === '' ||
window.localStorage[window.plugin.drawTools.KEY_STORAGE] === undefined)
{
dialog({
html: 'Error! The storage is empty or not exist. Before you try copy/export you draw something.',
width: 250,
dialogClass: 'ui-dialog-drawtools-message',
title: 'Draw Tools Message'
});
return;
}
if(typeof android !== 'undefined' && android && android.shareString){
android.shareString(window.localStorage[window.plugin.drawTools.KEY_STORAGE]);
} else {
var stockWarnings = {};
var stockLinks = [];
Expand Down Expand Up @@ -349,7 +361,7 @@ window.plugin.drawTools.optCopy = function() {
if (stockWarnings.unknown) stockWarnTexts.push('Warning: UNKNOWN ITEM TYPE');

var html = '<p><a onclick="$(\'.ui-dialog-drawtoolsSet-copy textarea\').select();">Select all</a> and press CTRL+C to copy it.</p>'
+'<textarea readonly onclick="$(\'.ui-dialog-drawtoolsSet-copy textarea\').select();">'+localStorage['plugin-draw-tools-layer']+'</textarea>'
+'<textarea readonly onclick="$(\'.ui-dialog-drawtoolsSet-copy textarea\').select();">'+window.localStorage[window.plugin.drawTools.KEY_STORAGE]+'</textarea>'
+'<p>or, export as a link for the standard intel map (for non IITC users)</p>'
+'<input onclick="event.target.select();" type="text" size="90" value="'+stockUrl+'"/>';
if (stockWarnTexts.length>0) {
Expand All @@ -367,8 +379,12 @@ window.plugin.drawTools.optCopy = function() {
}

window.plugin.drawTools.optExport = function() {
var data = localStorage['plugin-draw-tools-layer'];
window.saveFile(data, 'IITC-drawn-items.json', 'application/json');
if (window.localStorage[window.plugin.drawTools.KEY_STORAGE] === '' ||
window.localStorage[window.plugin.drawTools.KEY_STORAGE] === undefined)
{
var data = localStorage[window.plugin.drawTools.KEY_STORAGE];
window.saveFile(data, 'IITC-drawn-items.json', 'application/json');
}
}

window.plugin.drawTools.optPaste = function() {
Expand Down Expand Up @@ -474,7 +490,7 @@ window.plugin.drawTools.optImport = function() {
window.plugin.drawTools.optReset = function() {
var promptAction = confirm('All drawn items will be deleted. Are you sure?', '');
if(promptAction) {
delete localStorage['plugin-draw-tools-layer'];
localStorage[window.plugin.drawTools.KEY_STORAGE] = '[]';

This comment has been minimized.

Copy link
@johnd0e

johnd0e Dec 18, 2020

Contributor

Sorry I have not find time to review that before merge, but still..
As I understand that should mean (empty) string in square brackets to beautify it, right?

I do not feel that is good practice.

This comment has been minimized.

Copy link
@MysticJay

MysticJay Dec 18, 2020

Author Contributor

the string is neither undefined nor empty, it is <[]>

window.plugin.drawTools.drawnItems.clearLayers();
window.plugin.drawTools.load();
console.log('DRAWTOOLS: reset all drawn items');
Expand Down Expand Up @@ -643,9 +659,61 @@ window.plugin.drawTools.boot = function() {

}

// ---------------------------------------------------------------------------------
// MPE - MULTI PROJECTS EXTENSION
// ---------------------------------------------------------------------------------
window.plugin.drawTools.mpe = {};
window.plugin.drawTools.mpe.ui = {};

window.plugin.drawTools.mpe.boot = function(){
window.plugin.drawTools.mpe.initMPE();
};


window.plugin.drawTools.mpe.initMPE = function(){
// Not launch the code if the MPE plugin there isn't.
if(!window.plugin.mpe){ return; }

// The MPE function to set a MultiProjects type
window.plugin.mpe.setMultiProjects({
namespace: 'drawTools',
title: 'Draw Tools Layer',
// Font awesome css class
fa: 'fa-pencil',
// Function to change a localstorage key
func_setKey: function(newKey){
window.plugin.drawTools.KEY_STORAGE = newKey;
},
// Native value of localstorage key
defaultKey: 'plugin-draw-tools-layer',
// This function is run before the localstorage key change
func_pre: function(){},
// This function is run after the localstorage key change
func_post: function(){
window.plugin.drawTools.drawnItems.clearLayers();
window.plugin.drawTools.load();
console.log('DRAWTOOLS: reset all drawn items (func_post)');

if (window.plugin.crossLinks !== undefined && window.overlayStatus['Cross Links']) {
window.plugin.crossLinks.checkAllLinks();

if (window.plugin.destroyedLinks !== undefined && window.overlayStatus['Destroyed Links Simulator']){
window.plugin.destroyedLinks.cross.removeCrossAll();
}
}

// Code to:
// hide/remove elements from DOM, layers, variables, etc...
// load data from window.localStorage[window.plugin.myPlugin.KEY_STORAGE]
// show/add/draw elements in the DOM, layers, variables, etc...
}
});
}

function setup () {
loadExternals();
window.plugin.drawTools.boot();
loadExternals(); // initialize leaflet
window.plugin.drawTools.boot(); // initialize drawtools
window.plugin.drawTools.mpe.boot(); // register to MPE if available
}

function loadExternals () {
Expand Down
Loading

0 comments on commit 940ff66

Please sign in to comment.