// ==UserScript== // @author Zaso // @name Link Prolongation // @category Layers // @version 0.1.2 // @description Create link prolongations. // @id link-prolongation@Zaso // @namespace https://github.com/IITC-CE/ingress-intel-total-conversion // @updateURL https://raw.githubusercontent.com/IITC-CE/Community-plugins/master/dist/Zaso/link-prolongation.meta.js // @downloadURL https://raw.githubusercontent.com/IITC-CE/Community-plugins/master/dist/Zaso/link-prolongation.user.js // @recommends draw-tools@breunigs|draw-tools-plus@zaso|bookmarks@ZasoGD|font-awesome@zaso // @match https://intel.ingress.com/* // @match https://intel-x.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() {}; //PLUGIN AUTHORS: writing a plugin outside of the IITC build environment? if so, delete these lines!! //(leaving them in place might break the 'About IITC' page or break update checks) plugin_info.buildName = 'ZasoItems'; plugin_info.dateTimeVersion = '2022-12-18-193146'; plugin_info.pluginId = 'link-prolongation'; //END PLUGIN AUTHORS NOTE // PLUGIN START //////////////////////////////////////////////////////// // history // 0.1.2 setup changed, code-style // 0.1.1 headers changed. Ready for IITC-CE // 0.1.0 Original script /* exported setup --eslint */ /* global L, dialog, map */ // use own namespace for plugin window.plugin.linkProlongation = function(){}; window.plugin.linkProlongation.storage = {}; window.plugin.linkProlongation.data = {}; window.plugin.linkProlongation.obj = {}; window.plugin.linkProlongation.dialog = {}; window.plugin.linkProlongation.ui = {}; window.plugin.linkProlongation.action = {}; window.plugin.linkProlongation.layer = {}; window.plugin.linkProlongation.bookmarks = {}; window.plugin.linkProlongation.obj.status = { dist:1, drawType:5, drawColor:{enabled:0, value:'#f66'}}; window.plugin.linkProlongation.obj.points = {}; window.plugin.linkProlongation.obj.supp = {}; // ----------------------------------- // STORAGE // ----------------------------------- window.plugin.linkProlongation.storage.NAME = 'plugin-linkProlongation'; window.plugin.linkProlongation.storage.save = function(){ window.localStorage[window.plugin.linkProlongation.storage.NAME] = JSON.stringify(window.plugin.linkProlongation.obj.status); }; window.plugin.linkProlongation.storage.load = function(){ window.plugin.linkProlongation.obj.status = JSON.parse(window.localStorage[window.plugin.linkProlongation.storage.NAME]); }; window.plugin.linkProlongation.storage.check = function(){ if (!window.localStorage[window.plugin.linkProlongation.storage.NAME]){ window.plugin.linkProlongation.storage.save(); } window.plugin.linkProlongation.storage.load(); }; // ----------------------------------- // DATA // ----------------------------------- window.plugin.linkProlongation.data.setDist = function(number){ var v = parseInt(number); if (Number.isInteger(v) === false){ window.plugin.linkProlongation.dialog.openBoxMessage(' Error: Insert a number!'); } else if (v < 1){ window.plugin.linkProlongation.dialog.openBoxMessage(' Not Saved. Use a number equal or greater than 1!'); } else if (v > 7000){ window.plugin.linkProlongation.dialog.openBoxMessage(' Not Saved. Use a smallest number!'); } else { var newDist = Math.round(number); var abs = Math.abs(number - newDist); if (abs !== 0 && abs !== 1){ window.plugin.linkProlongation.dialog.openBoxMessage(' The distance saved has been rounded to '+newDist); } window.plugin.linkProlongation.obj.status.dist = newDist; window.plugin.linkProlongation.storage.save(); $('.linkProlongationDialog input.dist').val(newDist); return window.plugin.linkProlongation.data.getDist(); } return false; }; window.plugin.linkProlongation.data.getDist = function(){ return window.plugin.linkProlongation.obj.status.dist; }; window.plugin.linkProlongation.data.setDrawType = function(number){ number = isNaN( parseInt(number))? 5 : parseInt(number); window.plugin.linkProlongation.obj.status.drawType = number; }; window.plugin.linkProlongation.data.getDrawType = function(){ return window.plugin.linkProlongation.obj.status.drawType; }; window.plugin.linkProlongation.data.setDrawColorStatus = function(status){ window.plugin.linkProlongation.obj.status.drawColor.enabled = status; }; window.plugin.linkProlongation.data.setDrawColorValue = function(color){ window.plugin.linkProlongation.obj.status.drawColor.value = color; }; window.plugin.linkProlongation.data.getDrawColor = function(){ return window.plugin.linkProlongation.obj.status.drawColor; }; window.plugin.linkProlongation.data.setPoint = function(number, LatLng){ // is coord array console.log(LatLng); try { if (Array.isArray(LatLng) === true && LatLng.length === 2){ var lat = parseFloat(LatLng[0].replace(',', '.')); var lng = parseFloat(LatLng[1].replace(',', '.')); var ll = new L.LatLng(lat, lng); window.plugin.linkProlongation.obj.points['p'+number] = ll; } // is coord obj else if (typeof LatLng === 'object' && LatLng.lat !== undefined && LatLng.lng !== undefined){ window.plugin.linkProlongation.obj.points['p'+number] = LatLng; } } catch (e) { window.plugin.linkProlongation.dialog.openBoxMessage(' Point not saved!'); return false; } window.plugin.linkProlongation.storage.save(); return window.plugin.linkProlongation.obj.points['p'+number]; }; window.plugin.linkProlongation.data.setPoint_1 = function(LatLng){ window.plugin.linkProlongation.data.setPoint(1, LatLng); }; window.plugin.linkProlongation.data.setPoint_2 = function(LatLng){ window.plugin.linkProlongation.data.setPoint(2, LatLng); }; window.plugin.linkProlongation.data.setPoints = function(LatLng1, LatLng2){ window.plugin.linkProlongation.data.setPoint_1(LatLng1); window.plugin.linkProlongation.data.setPoint_2(LatLng2); }; window.plugin.linkProlongation.data.getPoints = function(){ return window.plugin.linkProlongation.obj.points; }; window.plugin.linkProlongation.data.getCurrPortal = function(){ var guid = window.selectedPortal; if (guid === null){ window.plugin.linkProlongation.dialog.openBoxMessage(' Select a portal.'); } else { var p = window.portals[guid]; var ll = p.getLatLng(); return ll; } return false; }; window.plugin.linkProlongation.data.setP1fromPortal = function(){ var latLng = window.plugin.linkProlongation.data.getCurrPortal(); if (latLng !== false){ window.plugin.linkProlongation.data.setPoint_1(latLng); window.plugin.linkProlongation.ui.updateInput(); } }; window.plugin.linkProlongation.data.setP2fromPortal = function(){ var latLng = window.plugin.linkProlongation.data.getCurrPortal(); if (latLng !== false){ window.plugin.linkProlongation.data.setPoint_2(latLng); window.plugin.linkProlongation.ui.updateInput(); } }; window.plugin.linkProlongation.data.invertPoint = function(){ var pp = window.plugin.linkProlongation.data.getPoints(); var p1 = pp.p1; var p2 = pp.p2; window.plugin.linkProlongation.data.setPoints(p2, p1); window.plugin.linkProlongation.ui.updateInput(); }; window.plugin.linkProlongation.data.calcP3 = function(p1, p2, dist){ if (p1 === undefined || p2 === undefined){ window.plugin.linkProlongation.dialog.openBoxMessage(' Error. Select two portals.'); return false; } if (p1.equals(p2) === true){ window.plugin.linkProlongation.dialog.openBoxMessage(' Error. Insert two different portals LatLng.'); return false; } var vinInv = window.plugin.linkProlongation.thirdParty.vincenty_inverse(p1, p2); var newDist = vinInv.distance+dist; var initBear = vinInv.initialBearing; var finalBear = vinInv.finalBearing; var vinDir1 = window.plugin.linkProlongation.thirdParty.vincenty_direct(p1, initBear, newDist, true); var p3 = new L.LatLng(vinDir1.lat, vinDir1.lng); return p3; }; window.plugin.linkProlongation.data.getP1_P2_P3_P0 = function(){ var point = window.plugin.linkProlongation.data.getPoints(); var dist = window.plugin.linkProlongation.data.getDist()*1000; // delete window.plugin.linkProlongation.obj.points['p3']; try { var p1 = point.p1; var p2 = point.p2; if (p1.equals(p2) === true){ window.plugin.linkProlongation.dialog.openBoxMessage(' Error. Insert two different portals LatLng.'); return false; } var p0 = window.plugin.linkProlongation.data.calcP3(p2, p1, dist); var p3 = window.plugin.linkProlongation.data.calcP3(p1, p2, dist); // window.plugin.linkProlongation.obj.points['p3'] = p3; return {p1:p1, p2:p2, p3:p3, p0:p0}; } catch (error) { window.plugin.linkProlongation.dialog.openBoxMessage(' Error.'); return false; } }; // ----------------------------------- // ACTION // ----------------------------------- window.plugin.linkProlongation.action.setDrawType = function(number){ window.plugin.linkProlongation.data.setDrawType(number); window.plugin.linkProlongation.storage.save(); }; window.plugin.linkProlongation.action.setDrawColorStatus = function(status){ window.plugin.linkProlongation.data.setDrawColorStatus(status); window.plugin.linkProlongation.storage.save(); }; window.plugin.linkProlongation.action.setDrawColorValue = function(color){ window.plugin.linkProlongation.data.setDrawColorValue(color); window.plugin.linkProlongation.storage.save(); }; window.plugin.linkProlongation.action.drawFavoriteType = function(){ if (window.plugin.drawToolsPlus === undefined){ window.plugin.linkProlongation.dialog.openBoxMessage( ' Draw Tools and Draw Tools Plus plugins needed to draw.' ); return false; } window.plugin.linkProlongation.layer.drawFavoriteType(); window.plugin.linkProlongation.layer.clearPreview(); }; window.plugin.linkProlongation.action.drawPreview = function(){ window.plugin.linkProlongation.layer.clearPreview(); window.plugin.linkProlongation.layer.drawPreview(); }; // ----------------------------------- // LAYER // ----------------------------------- window.plugin.linkProlongation.layer.drawFavoriteType = function(){ if (window.plugin.drawToolsPlus === undefined){ window.plugin.linkProlongation.dialog.openBoxMessage( ' Draw Tools and Draw Tools Plus plugins needed to draw.' ); return false; } var pp = window.plugin.linkProlongation.data.getP1_P2_P3_P0(); if (pp === false) { return false; } var drawType = window.plugin.linkProlongation.data.getDrawType(); var drawColor = window.plugin.linkProlongation.data.getDrawColor(); var color = undefined; if (drawColor.enabled){ color = drawColor.value; } switch (drawType){ case 1: window.plugin.drawToolsPlus.drawPolyline([pp.p0, pp.p1], color); break; case 2: window.plugin.drawToolsPlus.drawPolyline([pp.p1, pp.p2], color); break; case 3: window.plugin.drawToolsPlus.drawPolyline([pp.p2, pp.p3], color); break; case 4: window.plugin.drawToolsPlus.drawPolyline([pp.p0, pp.p2], color); break; case 5: window.plugin.drawToolsPlus.drawPolyline([pp.p1, pp.p3], color); break; // ------------------------------- case 6: window.plugin.drawToolsPlus.drawPolyline([pp.p0, pp.p1, pp.p2]); break; case 7: window.plugin.drawToolsPlus.drawPolyline([pp.p1, pp.p2, pp.p3]); break; case 8: window.plugin.drawToolsPlus.drawPolyline([pp.p0, pp.p1, pp.p2, pp.p3]); break; // ------------------------------- case 9: window.plugin.drawToolsPlus.drawPolyline([pp.p0, pp.p1], color); window.plugin.drawToolsPlus.drawPolyline([pp.p2, pp.p3], color); break; case 10: window.plugin.drawToolsPlus.drawPolyline([pp.p0, pp.p1], color); window.plugin.drawToolsPlus.drawPolyline([pp.p2, pp.p3]); break; case 11: window.plugin.drawToolsPlus.drawPolyline([pp.p1, pp.p2]); window.plugin.drawToolsPlus.drawPolyline([pp.p2, pp.p3], color); break; case 12: window.plugin.drawToolsPlus.drawPolyline([pp.p0, pp.p1], color); window.plugin.drawToolsPlus.drawPolyline([pp.p1, pp.p2]); window.plugin.drawToolsPlus.drawPolyline([pp.p2, pp.p3], color); break; default: break; } }; window.plugin.linkProlongation.layer.clearPreview = function(){ window.plugin.linkProlongation.layer.layerGroup.clearLayers(); }; window.plugin.linkProlongation.layer.drawPreview = function(){ var pp = window.plugin.linkProlongation.data.getP1_P2_P3_P0(); if (pp === false){ return false; } var drawColor = window.plugin.linkProlongation.data.getDrawColor(); var opt = { color: drawColor.value, weight: 3 }; window.plugin.linkProlongation.layer.layerGroup.addLayer(new L.geodesicPolyline([pp.p1,pp.p2], opt)); opt.dashArray = [7,10,2,10]; window.plugin.linkProlongation.layer.layerGroup.addLayer(new L.geodesicPolyline([pp.p0,pp.p1], opt)); window.plugin.linkProlongation.layer.layerGroup.addLayer(new L.geodesicPolyline([pp.p2,pp.p3], opt)); }; // ----------------------------------- // BOOKMARKS // ----------------------------------- window.plugin.linkProlongation.dialog.openBookmarkChooser = function(point_number){ if (!window.plugin.linkProlongation.dialog.noBookmarksPlugin()){ return false; } if (parseInt(point_number) !== 1 && parseInt(point_number) !== 2){ return false; } var html = window.plugin.linkProlongation.bookmarks.getHTMLPortalsList(); dialog ({ html: '
You must select 1 portal!
' // + ''+e1+' | '; html += ''+p1+' (P1) | '; html += ''+p2+' (P2) | '; html += ''+e2+' | '; html += '
dist | dist |