// ==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+''; //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(){ $('