// ==UserScript==
// @author modkin
// @id multi_export@modkin
// @name Portal Multi Export
// @category Misc
// @version 0.11
// @namespace https://github.com/jonatkins/ingress-intel-total-conversion
// @updateURL https://raw.githubusercontent.com/IITC-CE/Community-plugins/master/dist/modkin/multi_export.meta.js
// @downloadURL https://raw.githubusercontent.com/IITC-CE/Community-plugins/master/dist/modkin/multi_export.user.js
// @description Export portals from bookmarks, current view or polygon
// @include http*://*intel.ingress.com/*
// @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() {};
window.plugin.multiexport = function() {};
/*********** MENUE ************************************************************/
window.plugin.multiexport.createmenu = function() {
var htmldata = "
Export from Current View , inside Polygon or Bookmarks to various formats by clicking the corresponding cell in the table.
"
+ " Please note that the first drawn polygon will be choosen to export from.
"
+ " BE AWARE: If you choose BKMRK all portals will be added to the default bookmarks folder.
"
+ " CSV TSV GPX Maxfield JSON BKMRK "
+ " Current View "
+ " XXX "
+ " XXX "
+ " XXX "
+ " XXX "
+ " XXX ";
if(plugin.bookmarks){
htmldata += " XXX ";
}
htmldata += " ";
if(plugin.drawTools) {
htmldata += " Polygon "
+ " XXX "
+ " XXX "
+ " XXX "
+ " XXX "
+ " XXX ";
if(plugin.bookmarks){
htmldata += " XXX ";
}
htmldata += " ";
}
if(plugin.bookmarks) {
htmldata += " Bookmarks "
+ " XXX "
+ " XXX "
+ " XXX "
+ " XXX "
+ " XXX "
+ " ";
}
window.dialog({
title: "Multi Export Options",
html: htmldata,
dialogClass: 'ui-dialog-multiExport'
});
};
/*********** HELPER FUNCTION ****************************************************/
window.plugin.multiexport.portalinpolygon = function(portal,LatLngsObjectsArray)
{
var portalCoords = portal.split(',');
var x = portalCoords[0], y = portalCoords[1];
var inside = false;
for (var i = 0, j = LatLngsObjectsArray.length - 1; i < LatLngsObjectsArray.length; j = i++) {
var xi = LatLngsObjectsArray[i]['lat'], yi = LatLngsObjectsArray[i]['lng'];
var xj = LatLngsObjectsArray[j]['lat'], yj = LatLngsObjectsArray[j]['lng'];
var intersect = ((yi > y) != (yj > y))
&& (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
if (intersect) inside = !inside;
}
return inside;
};
/*********** BOOKMARK MENUE ****************************************************/
window.plugin.multiexport.bkmrkmenu = function(type) {
var htmlcontent = '';
var bookmarks = JSON.parse(localStorage[plugin.bookmarks.KEY_STORAGE]);
for(var i in bookmarks.portals){
htmlcontent += "
" + bookmarks.portals[i].label + " ";
}
htmlcontent += '
';
window.dialog({
title: "Multi Export Options",
html: htmlcontent
}).parent();
};
/*********** ABSTRACT EXPORT FUNCTION ******************************************/
window.plugin.multiexport.export = function(type, source, bkmrkFolder)
{
console.log(type);
var o = [];
var portals;
var sourceTitle;
var windowTitle;
if(type === 'MF')
{
windowTitle = 'Maxfield Export';
} else {
windowTitle = type + ' Export';
}
if(localStorage['plugin-draw-tools-layer'])
{
var drawLayer = JSON.parse(localStorage['plugin-draw-tools-layer']);
}
if(source == 'BKMRK') {
var bookmarks = JSON.parse(localStorage[plugin.bookmarks.KEY_STORAGE]);
portals = bookmarks.portals[bkmrkFolder].bkmrk;
} else
{
portals = window.portals;
}
switch(type){
case 'GPX':
o.push("");
o.push("");
o.push(""
+" "
+" "
);
break;
case 'JSON':
o.push("[");
}
for(var i in portals){
var keys = 0;
if(source === 'BKMRK')
{
var name = bookmarks.portals[bkmrkFolder].bkmrk[i].label;
var latlng = bookmarks.portals[bkmrkFolder].bkmrk[i].latlng;
if(plugin.keys)
{
keys = plugin.keys.keys[bookmarks.portals[bkmrkFolder].bkmrk[i].guid];
}
}else
{
var p = window.portals[i];
var name = p.options.data.title;
var guid = p.options.guid;
var latlng = p._latlng.lat + ',' + p._latlng.lng;
var pimage = p.options.data.image;
if(source === 'VIEWFIL')
{
var portalInPolygon = false;
for(var dl in drawLayer){
if(drawLayer[dl].type === 'polygon'){
if(window.plugin.multiexport.portalinpolygon(latlng,drawLayer[dl].latLngs)){
portalInPolygon = true;
break;
}
}
}
if (!portalInPolygon){
continue;
}
}
if(plugin.keys){
keys = plugin.keys.keys[i];
}
var b = window.map.getBounds();
// skip if not currently visible
if (p._latlng.lat < b._southWest.lat || p._latlng.lng < b._southWest.lng || p._latlng.lat > b._northEast.lat || p._latlng.lng > b._northEast.lng) continue;
}
var lat = latlng.split(',')[0];
var lng = latlng.split(',')[1];
var iitcLink = "https://intel.ingress.com/intel?ll=" + latlng + "&z=16&pll=" + latlng;
var gmapLink = "https://google.com/maps/place/" + latlng;
switch(type){
case 'MF':
o.push(name + ";" + iitcLink + ";" + keys);
break;
case 'CSV':
o.push(guid + "," + JSON.stringify(name) + "," + lat + "," + lng
);
break;
case 'TSV':
o.push(guid + "\t" + JSON.stringify(name) + "\t" + lat + "\t" + lng
+ "\t" + iitcLink + "\t" + gmapLink + "\t" + pimage
);
break;
case 'GPX':
o.push(""
+"" + name + " "
+"\n\n" +
+ "Intel Link: " + iitcLink + "\n"
+ "GMap: " + gmapLink + "\n"
+ "guid: " + guid + "\n"
+ "image: " + pimage + "\n"
+" \n"
+" \n"
+" "
);
break;
case 'JSON':
var obj = { guid: guid,
title: name,
coordinates: {lat: lat,
lng: lng},
link: { intel: iitcLink, gmap: gmapLink },
image: pimage
};
o.push(JSON.stringify(obj) + ",");
break;
case 'BKMRK':
if(!window.plugin.bookmarks.findByGuid(guid)){
plugin.bookmarks.addPortalBookmark(guid, latlng, name);
}
break;
}
}
if(type == 'BKMRK'){
return;
}
var ostr = o.join("\n");
switch(type){
case 'GPX':
ostr += " ";
ostr = ostr.replace(/[&]/g, '');
break;
case 'JSON':
//remove the last ","
if (ostr.length > 1) {
ostr = ostr.slice(0, -1);
}
ostr += "]";
break;
}
var dialog = window.dialog({
title: windowTitle,
dialogClass: 'ui-dialog-maxfieldexport',
html: ''
+ 'Select all
'
}).parent();
dialog.css("width", 630).css({
"top": ($(window).height() - dialog.height()) / 2,
"left": ($(window).width() - dialog.width()) / 2
});
$("#idmExport").val(ostr);
};
/*********** PLUGIN SETUP *****************************************************/
// setup function called by IITC
var setup = function() {
$("#toolbox").append("Multi Export ");
$('head').append('');
};
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);