// ==UserScript==
// @id iitc-plugin-bookmarks@ZasoGD
// @name IITC plugin: Bookmarks for maps and portals
// @category Controls
// @version 0.1.55.@@DATETIMEVERSION@@
// @namespace https://github.com/jonatkins/ingress-intel-total-conversion
// @updateURL @@UPDATEURL@@
// @downloadURL @@DOWNLOADURL@@
// @description [@@BUILDNAME@@-@@BUILDDATE@@] Save your favorite Maps and Portals and move the intelmap view in a second. The ingress world just a click.
// @include https://www.ingress.com/intel*
// @include http://www.ingress.com/intel*
// @match https://www.ingress.com/intel*
// @match http://www.ingress.com/intel*
// ==/UserScript==
@@PLUGINSTART@@
// PLUGIN START ////////////////////////////////////////////////////////
// use own namespace for plugin
window.plugin.bookmarks = function() {};
window.plugin.bookmarks.bkmrk_portals = {};
window.plugin.bookmarks.bkmrk_maps = {};
window.plugin.bookmarks.disabledMessage;
window.plugin.bookmarks.contentStarHTML;
window.plugin.bookmarks.KEY_OTHER_BKMRK = 'idOthers';
window.plugin.bookmarks.LOCAL_STORAGE_status_box = 'plugin-bookmarks-status-box';
window.plugin.bookmarks.LOCAL_STORAGE_bkmrk_portals = 'plugin-bookmarks-portals-data';
window.plugin.bookmarks.LOCAL_STORAGE_bkmrk_maps = 'plugin-bookmarks-maps-data';
/*********************************************************************************************************************/
//---------------------------------------------------------------------------------------
// Append a 'star' flag in sidebar.
//---------------------------------------------------------------------------------------
window.plugin.bookmarks.addToSidebar = function(){
if(typeof(Storage) === "undefined"){ $('#portaldetails > .imgpreview').after(plugin.bookmarks.disabledMessage); return; }
$('#portaldetails > h3.title').before(plugin.bookmarks.contentStarHTML);
plugin.bookmarks.updateStarPortal();
}
//---------------------------------------------------------------------------------------
// Update the status of the star (when a portal is selected from the map/bookmarks-list)
//---------------------------------------------------------------------------------------
window.plugin.bookmarks.updateStarPortal = function(){
window.plugin.bookmarks.loadBookmarks('bkmrk_portals');
var guid = window.selectedPortal;
$('#bookmarkStar').removeClass('favorite');
$('.bkmrk a.bookmarksLink.selected').removeClass('selected');
//If current portal is into bookmarks: select bookmark portal from portals list and select the star
if(localStorage[window.plugin.bookmarks.LOCAL_STORAGE_bkmrk_portals].search(guid) != -1){
$('#bookmarkStar').addClass('favorite');
var list = plugin.bookmarks['bkmrk_portals'];
for(var idFolders in list){
for(var idBkmrk in list[idFolders]['bkmrk']){
var portalGuid = list[idFolders]['bkmrk'][idBkmrk]['guid'];
if(guid == portalGuid){
$('.bkmrk#'+idBkmrk+' a.bookmarksLink').addClass('selected');
}
}
}
}
}
//---------------------------------------------------------------------------------------
// Switch the status of the star
//---------------------------------------------------------------------------------------
window.plugin.bookmarks.switchStarPortal = function(){
var guid = window.selectedPortal;
//If portal is saved in bookmarks: Remove this bookmark
if($('#bookmarkStar').hasClass('favorite')){
var list = plugin.bookmarks['bkmrk_portals'];
for(var idFolders in list){
for(var idBkmrk in list[idFolders]['bkmrk']){
var portalGuid = list[idFolders]['bkmrk'][idBkmrk]['guid'];
if(guid == portalGuid){
delete list[idFolders]['bkmrk'][idBkmrk];
$('.bkmrk#'+idBkmrk+'').remove();
}
}
}
}
//If portal isn't saved in bookmarks: Add this bookmark
else{
// Get the bookmark data (name, coordinates, portal id) from the portal link
var linka = $('#portaldetails .linkdetails aside a:contains("Portal link")').attr('href');
var namePortal = $('#portaldetails h3').text();
var ID = window.plugin.bookmarks.generateID();
var spac = linka.split('pll=');
var latlng = spac[1] ;
// Add bookmark in the localStorage
plugin.bookmarks['bkmrk_portals'][plugin.bookmarks.KEY_OTHER_BKMRK]['bkmrk'][ID] = {"guid":guid,"latlng":latlng,"label":namePortal};
//Append the new bookmark to the map list
$('#bkmrk_portals li.othersBookmarks ul').append('
X'+namePortal+'');
}
window.plugin.bookmarks.storeBookmarks('bkmrk_portals');
window.plugin.bookmarks.updateStarPortal();
}
//---------------------------------------------------------------------------------------
// Save a bookmark map
//---------------------------------------------------------------------------------------
window.plugin.bookmarks.addBookmarkMap = function(elem){
// Get the coordinates and zoom level from the permalink
var mapLink = $(elem).attr('href');
var pars = new RegExp('[\\?&]ll=([^&#]*)[&]z=([^&#]*)').exec(mapLink);
var res = pars[1].split(',');
res[2] = pars[2];
var latlng = res[0]+','+res[1];
var zoom = res[2];
var ID = window.plugin.bookmarks.generateID();
//Get the label | Convert some characters | Set the input (empty)
var nameMap = $(elem).siblings('input').val();
nameMap = nameMap.replace(/\//g, '/').replace(/\\/g, '\').replace(/"/g, '"').replace(/"/g, ''');
$(elem).siblings('input').val('');
// Add bookmark in the localStorage
plugin.bookmarks['bkmrk_maps'][plugin.bookmarks.KEY_OTHER_BKMRK]['bkmrk'][ID] = {"label":nameMap,"latlng":latlng,"z":parseInt(zoom)};
plugin.bookmarks.storeBookmarks('bkmrk_maps');
//Append the new bookmark to the map list
if(nameMap==''){ nameMap = latlng+' ['+zoom+']'; }
$('#bkmrk_maps li.othersBookmarks ul').append('X'+nameMap+'');
}
/*********************************************************************************************************************/
//---------------------------------------------------------------------------------------
// Generate an ID for the bookmark (date time + random number)
//---------------------------------------------------------------------------------------
window.plugin.bookmarks.generateID = function(){
var d = new Date();
var ID = d.getTime()+(Math.floor(Math.random()*99)+1);
var ID = 'id'+ID.toString();
return ID;
}
//---------------------------------------------------------------------------------------
// Switch the status folder to open/close (in the localStorage)
//---------------------------------------------------------------------------------------
window.plugin.bookmarks.openFolder = function(elem){
var typeList = $(elem).parent().parent().parent().parent('div').attr('id');
var ID = $(elem).parent().parent('li').attr('id');
var newFlag;
var flag = plugin.bookmarks[typeList][ID]['state'];
if(flag){ newFlag = 0; }
else if(!flag){ newFlag = 1; }
window.plugin.bookmarks[typeList][ID]['state'] = newFlag;
window.plugin.bookmarks.storeBookmarks(typeList);
}
//---------------------------------------------------------------------------------------
// Switch the status folder to open/close (in the localStorage)
//---------------------------------------------------------------------------------------
window.plugin.bookmarks.addFolder = function(typeList){
var ID = window.plugin.bookmarks.generateID();
var input = '#'+typeList+' .addForm input';
//Get the label | Convert some characters | Set the input (empty)
var nameFolder = $(input).val();
nameFolder = nameFolder.replace(/\//g, '/').replace(/\\/g, '\').replace(/"/g, '"').replace(/"/g, ''');
if(nameFolder == ''){ nameFolder = 'Folder'; }
$(input).val('');
// Add new folder in the localStorage
plugin.bookmarks[typeList][ID] = {"label":nameFolder,"state":1,"bkmrk":{}};
plugin.bookmarks.storeBookmarks(typeList);
//Append the new folder to the list
$('#'+typeList+' li.othersBookmarks').before('X'+nameFolder+'');
}
//---------------------------------------------------------------------------------------
// Remove the bookmark (from the localStorage)
//---------------------------------------------------------------------------------------
window.plugin.bookmarks.deletBookmark = function(elem){
var typeList = $(elem).parent().parent().parent().parent().parent('div').attr('id');
var ID = $(elem).parent('li').attr('id');
var IDfold = $(elem).parent().parent().parent('li').attr('id');
delete window.plugin.bookmarks[typeList][IDfold]['bkmrk'][ID];
window.plugin.bookmarks.storeBookmarks(typeList);
if(typeList == 'bkmrk_portals'){ window.plugin.bookmarks.updateStarPortal(); }
}
//---------------------------------------------------------------------------------------
// Remove the folder (from the localStorage)
//---------------------------------------------------------------------------------------
window.plugin.bookmarks.deletFolder = function(elem){
var typeList = $(elem).parent().parent().parent().parent('div').attr('id');
var ID = $(elem).parent().parent('li').attr('id');
delete plugin.bookmarks[typeList][ID];
window.plugin.bookmarks.storeBookmarks(typeList);
if(typeList == 'bkmrk_portals'){ window.plugin.bookmarks.updateStarPortal(); }
}
//---------------------------------------------------------------------------------------
// Saved the new sort of the folders (in the localStorage)
//---------------------------------------------------------------------------------------
window.plugin.bookmarks.sortBookmarksFolder = function(typeList){
window.plugin.bookmarks.loadBookmarks(typeList);
var newArr = {};
$('#'+typeList+' li.bookmarkFolder').each(function(){
var idFold = $(this).attr('id');
newArr[idFold] = window.plugin.bookmarks[typeList][idFold];
});
window.plugin.bookmarks[typeList] = newArr;
window.plugin.bookmarks.storeBookmarks(typeList);
}
//---------------------------------------------------------------------------------------
// Saved the new sort of the bookmarks (in the localStorage)
//---------------------------------------------------------------------------------------
window.plugin.bookmarks.sortBookmarks = function(typeList){
window.plugin.bookmarks.loadBookmarks(typeList);
var list = window.plugin.bookmarks[typeList];
var newArr = {};
$('#'+typeList+' li.bookmarkFolder').each(function(){
var idFold = $(this).attr('id');
newArr[idFold] = window.plugin.bookmarks[typeList][idFold];
newArr[idFold].bkmrk = {};
});
$('#'+typeList+' li.bkmrk').each(function(){
window.plugin.bookmarks.loadBookmarks(typeList);
var idFold = $(this).parent().parent('li').attr('id');
var id = $(this).attr('id');
var list = window.plugin.bookmarks[typeList];
for(var idFoldersOrigin in list){
for(var idBkmrk in list[idFoldersOrigin]['bkmrk']){
if(idBkmrk == id){
newArr[idFold].bkmrk[id] = window.plugin.bookmarks[typeList][idFoldersOrigin].bkmrk[id];
}
}
}
});
window.plugin.bookmarks[typeList] = newArr;
window.plugin.bookmarks.storeBookmarks(typeList);
}
//---------------------------------------------------------------------------------------
// Update the localStorage
//---------------------------------------------------------------------------------------
window.plugin.bookmarks.storeBookmarks = function(typeList){
var bookmarksObject = {};
bookmarksObject[typeList] = plugin.bookmarks[typeList];
var bookmarksObjectJSON = JSON.stringify(bookmarksObject);
localStorage[plugin.bookmarks['LOCAL_STORAGE_'+typeList]] = bookmarksObjectJSON;
}
//---------------------------------------------------------------------------------------
// Load the localStorage
//---------------------------------------------------------------------------------------
window.plugin.bookmarks.loadBookmarks = function(typeList){
var bookmarksObjectJSON = localStorage[plugin.bookmarks['LOCAL_STORAGE_'+typeList]];
if(!bookmarksObjectJSON) return;
var bookmarksObject = JSON.parse(bookmarksObjectJSON);
plugin.bookmarks[typeList] = bookmarksObject[typeList];
}
//---------------------------------------------------------------------------------------
// Load the bookmarks
//---------------------------------------------------------------------------------------
window.plugin.bookmarks.loadList = function(typeList){
window.plugin.bookmarks.loadBookmarks(typeList);
var element = '';
var elementTemp = '';
var elementExc = '';
// For each folder
var list = window.plugin.bookmarks[typeList];
for(var idFolders in list){
var folders = list[idFolders];
var active = '';
// Create a label and a anchor for the sortable
var folderLabel = 'X';
folderLabel += ''+folders['label']+'';
if(folders['state']){ active = ' active'; }
if(idFolders == window.plugin.bookmarks.KEY_OTHER_BKMRK){
folderLabel = ''; active= ' othersBookmarks active';
}
// Create a folder
elementTemp = ''+folderLabel+'';
// For each bookmark
var fold = folders['bkmrk'];
for(var idBkmrk in fold){
var btn_link;
var btn_remove = 'X';
var bkmrk = fold[idBkmrk];
var label = bkmrk['label'];
var latlng = bkmrk['latlng'];
// If it's a map
if(typeList == 'bkmrk_maps'){
if(bkmrk['label']==''){ label = bkmrk['latlng']+' ['+bkmrk['z']+']'; }
btn_link = ''+label+'';
}
// If it's a portal
else if(typeList == 'bkmrk_portals'){
var guid = bkmrk['guid'];
var btn_link = ''+label+'';
}
// Create the bookmark
elementTemp += '- '+btn_remove+btn_link+'
';
}
elementTemp += '
';
//Add folder 'Others' in last position
if(idFolders != window.plugin.bookmarks.KEY_OTHER_BKMRK){ element += elementTemp; }
else{ elementExc = elementTemp; }
}
element += elementExc;
// Append all folders and bookmarks
$('#'+typeList+' ul').html(element);
}
/*********************************************************************************************************************/
//---------------------------------------------------------------------------------------
// Append the stylesheet
//---------------------------------------------------------------------------------------
window.plugin.bookmarks.setupCSS = function(){
$('