// ==UserScript== // @author DanielOnDiordna // @name IITC plugin: Uniques add-on // @category Addon // @version 1.0.0.20230330.230000 // @updateURL https://softspot.nl/ingress/plugins/iitc-plugin-uniques-addon.meta.js // @downloadURL https://softspot.nl/ingress/plugins/iitc-plugin-uniques-addon.user.js // @description [danielondiordna-1.0.0.20230330.230000] Add-on for the Uniques plugin (required). Auto add captured and visited portals from history data to the Uniques plugin stored data. Uniques data can then be synced across your devices with your portal history details. // @id iitc-plugin-uniques-addon@danielondiordna // @namespace https://softspot.nl/ingress/ // @match https://intel.ingress.com/* // @grant none // ==/UserScript== function wrapper(plugin_info) { // ensure plugin framework is there, even if iitc is not yet loaded if(typeof window.plugin !== 'function') window.plugin = function() {}; // use own namespace for plugin window.plugin.uniquesAddon = function() {}; var self = window.plugin.uniquesAddon; self.id = 'uniquesAddon'; self.title = 'Uniques add-on'; self.version = '1.0.0.20230330.230000'; self.author = 'DanielOnDiordna'; self.changelog = ` Changelog: version 1.0.0.20230330.230000 - first release - monitor portalAdded details for history data - monitor portalDetailLoaded details history data `; self.namespace = 'window.plugin.' + self.id + '.'; self.pluginname = 'plugin-' + self.id; self.onportalAdded = function(data) { // data = {portal: marker, previousData: previousData} if (!data?.portal?.options?.data?.history) return; // no history available let guid = data.portal.options.guid; if (data.portal.options.data.history.visited) window.plugin.uniques.setPortalVisited(guid); if (data.portal.options.data.history.captured) window.plugin.uniques.setPortalCaptured(guid); }; self.onportalDetailLoaded = function(data) { // data = {guid:guid, success:success, details:dict, ent:ent} if (!data?.details?.history) return; let guid = data.guid; if (data.details.history.visited) window.plugin.uniques.setPortalVisited(guid); if (data.details.history.captured) window.plugin.uniques.setPortalCaptured(guid); }; self.setup = function() { if ('pluginloaded' in self) { console.log('IITC plugin already loaded: ' + self.title + ' version ' + self.version); return; } else { self.pluginloaded = true; } if (!('uniques' in window.plugin) || !('setPortalVisited' in window.plugin.uniques) || !('setPortalCaptured' in window.plugin.uniques)) { console.log('IITC plugin disabled: ' + self.title + ' version ' + self.version + ' - requires plugin Uniques'); return; } window.addHook('portalAdded', self.onportalAdded); window.addHook('portalDetailLoaded', self.onportalDetailLoaded); console.log('IITC plugin loaded: ' + self.title + ' version ' + self.version); }; var setup = function() { (window.iitcLoaded?self.setup():window.addHook('iitcLoaded',self.setup)); }; setup.info = plugin_info; //add the script info data to the function as a property if(!window.bootPlugins) window.bootPlugins = []; window.bootPlugins.push(setup); // if IITC has already booted, immediately run the 'setup' function if(window.iitcLoaded && typeof setup === 'function') setup(); } // wrapper end // inject code into site context var script = document.createElement('script'); var info = {}; if (typeof GM_info !== 'undefined' && GM_info && GM_info.script) info.script = { version: GM_info.script.version, name: GM_info.script.name, description: GM_info.script.description }; script.appendChild(document.createTextNode('('+ wrapper +')('+JSON.stringify(info)+');')); (document.body || document.head || document.documentElement).appendChild(script);