WME JumpMaps

The script adds in the WME links to third party mapping systems (Google/Open Street Maps/HERE etc.)

目前为 2025-01-21 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name WME JumpMaps
  3. // @description The script adds in the WME links to third party mapping systems (Google/Open Street Maps/HERE etc.)
  4. // @license MIT
  5. // @match https://*.waze.com/*editor*
  6. // @match https://www.kadastrs.lv/map/*
  7. // @match https://kartes.lgia.gov.lv/*
  8. // @match https://*.balticmaps.eu/*
  9. // @match https://maps.google.*
  10. // @match https://maps.apple.*
  11. // @match https://wikimapia.org/*
  12. // @match https://www.openstreetmap.org/*
  13. // @match https://mapcam.info/speedcam/*
  14. // @match https://www.mapillary.com/*
  15. // @require https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.11.0/proj4.js
  16. // @require https://gf.qytechs.cn/scripts/24851-wazewrap/code/WazeWrap.js
  17. // @icon data:image/png;base64,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
  18. // @version 5.4a
  19. // @author skirda, alexletov, N190392
  20. // @namespace https://gf.qytechs.cn/en/scripts/481079-wme-jumpmaps
  21. // ==/UserScript==
  22.  
  23. /* global W, WazeWrap */
  24.  
  25. var wmeJM_version = "5.4a";
  26. console.log("WME-JumpMaps (" + wmeJM_version + "): Start");
  27.  
  28. var wmeJM_IconWME='data:image/png;base64,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';
  29. var wmeJM_countProbe=0;
  30. var wmeJM_countProbe2=0;
  31. var wmeJM_countProbeWM=0;
  32. var wmeJM_countProbeLOC=0;
  33. var wmeJM_debug=false;
  34. var wmeJM_restoreSelected=false;
  35. var wmeJM_around=false;
  36. var wmeJM_hideWindow = false;
  37. var wmeJM_leftOffset = wmeJM_defaultLeftOffset;
  38. var wmeJM_topOffset = wmeJM_defaultTopOffset;
  39. var wmeJM_defaultLeftOffset = '0px';
  40. var wmeJM_defaultTopOffset = '30px';
  41.  
  42. var wmeJM_Config={};
  43. var wmeJM_Config0 = {
  44. "_map_WME": {save:0, title:"Open in WME", name:"[WME]", template:'https://www.waze.com/editor/?env=row&zoomLevel={{zoom}}&lat={{lat}}&lon={{lon}}'},
  45. "_map_LI": {save:0, title:"Open in LiveMap", name:"[Live]", template:'https://www.waze.com/livemap/?zoom={{zoom}}&lon={{lon}}&lat={{lat}}'},
  46. //-------------------------------------
  47. "_map_OSM": {save:1, title:"Open in OpenStreetMap", name:"OpenStreetMap", template:'http://www.openstreetmap.org/#map={{zoom}}/{{lat}}/{{lon}}', icon:'https://i.imgur.com/nILagGi.png'},
  48. "_map_Google": {save:1, title:"Open in Google Maps", name:"Google", template:'http://www.google.com/maps/?ll={{lat}}%2C{{lon}}&z={{zoom}}&t=m', icon:'https://i.imgur.com/4OYmgan.png'},
  49. "_map_BING": {save:1, title:"Open in Bing Maps", name:"Bing", template:'http://www.bing.com/maps/?v=2&cp={{lat}}~{{lon}}&lvl={{zoom}}&dir=0&sty=h&form=LMLTEW', icon:'https://i.imgur.com/0z4Ksmp.png'}, // sty: "h" - ariel, "r" - map
  50. "_map_HERE": {save:1, title:"Open in HERE WeGo", name:"Here", template:'https://wego.here.com/?map={{lat}},{{lon}},{{zoom}},normal', icon:'https://wego.here.com/favicon.png'}, // "hybrid.day" - ariel, "normal.day" - map
  51. // "_map_APPLE": {save:1, title:"Open in Apple Maps", name:"Apple", template:'https://maps.apple.com/?ll={{lat}},{{lon}}&q=WME%20JumpMaps', icon:'https://i.imgur.com/w0U6EuC.png'},
  52. "_map_APPLE": {save:1, title:"Open in Apple Maps", name:"Apple", template:'https://beta.maps.apple.com/?ll={{lat}},{{lon}}&spn=0.0038614715299516433%2C0.010368359444299813', icon:'https://imgur.com/fNyoDc9.png'},
  53. "_map_MRY": {save:1, title:"Open in Mapillary", name:"Mapillary", template:'https://www.mapillary.com/app/?lat={{lat}}&lng={{lon}}&z={{zoom}}', icon:'https://i.imgur.com/SpfT4kc.png'},
  54. "_map_WM": {save:1, title:"Open in Wikimapia", name:"Wikimapia", template:'http://wikimapia.org/#lang=ru&lat={{lat}}&lon={{lon}}&z={{zoom}}&m=b', icon:'https://i.imgur.com/pqP0dEk.png'},
  55. "_map_SC": {save:1, title:"Open in MapCam.info", name:"MapCam", template:'http://mapcam.info/speedcam/?lng={{lon}}&lat={{lat}}&z={{zoom}}&t=OSM', icon:'https://i.imgur.com/L8Tm2WD.png'},
  56. "_map_WMFLAB": {save:1, title:"Open in GeoHack", name:"GeoHack", template:'https://tools.wmflabs.org/geohack/geohack.php?params={{lat}}_N_{{lon}}_E_scale:{{zoom}}'},
  57. "_map_OSV": {save:1, title:"Open in KartaView", name:"KartaView", template:'http://openstreetcam.org/map/@{{lat}},{{lon}},{{zoom}}z', icon:'https://i.imgur.com/ENo4OwP.png'},
  58. "_map_RBASE": {save:1, title:"Open in RadarBase.info", name:"RadarBase", template:'https://radarbase.info/map/actual/{{lat}}/{{lon}}/{{zoom}}', icon:'https://radarbase.info/meta/apple-touch-icon.png'},
  59. "_map_SPRO": {save:1, title:"Open in satellites.pro", name:"SatPRO", template:'https://satellites.pro/#{{lat}},{{lon}},{{zoom}}', icon:'https://i.imgur.com/M1sVNRv.png'},
  60. "_map_BM": {save:1, title:"[LV] Open in Baltic Maps", name:"BalticMaps", template:'https://balticmaps.eu/lv/c___{{lon}}-{{lat}}-{{zoom}}/bl___cl', icon:'https://i.imgur.com/oMqclPL.png'},
  61. "_map_LGIA": {save:1, title:"[LV] Open in LĢIA", name:"LĢIA", template:'https://kartes.lgia.gov.lv/karte/?x={{lat}}&y={{lon}}&zoom={{zoom}}', icon:'https://i.imgur.com/bxA0T5X.png'},
  62. "_map_KDL": {save:1, title:"[LV] Open in kadastrs.lv", name:"KDLV", template:'https://www.kadastrs.lv/map/di?xy={{lat}},{{lon}}&z={{zoom}}', icon:'https://i.imgur.com/eCddG4q.png'},
  63. "_map_LVM": {save:1, title:"[LV] Open in LVM GEO", name:"LVM", template:'https://lvmgeo.lvm.lv/?loc={{lat}};{{lon}};{{zoom}}', icon:'https://i.imgur.com/l0PQRW0.png'},
  64. "_map_DODLV": {save:1, title:"[LV] Open in Dodies.lv", name:"Dodies", template:'https://vesture.dodies.lv/#m={{zoom}}/{{lat}}/{{lon}}&l=J'},
  65. "_map_MAPLT": {save:1, title:"[LT] Open in Maps.lt", name:"Maps.lt", template:'http://www.maps.lt/map/default.aspx?lang=lt#q={{lat}}%2C%20{{lon}}'},
  66. "_map_REGLT": {save:1, title:"[LT] Open in Regia", name:"Regia", template:'https://www.regia.lt/map/?x={{lat}}&y={{lon}}&scale={{zoom}}'},
  67. "_map_KADUA": {save:1, title:"[UA] Open in Kadastr UA", name:"KADUA", template:'http://map.land.gov.ua/?cc={{lon}},{{lat}}&z={{zoom}}&l=kadastr'},
  68. "_map_KLIVE": {save:1, title:"[UA] Open in kadastr.live", name:"KLIVE", template:'https://kadastr.live/#{{zoom}}/{{lat}}/{{lon}}'},
  69. "_map_MRUA": {save:1, title:"[UA] Open in atu.minregion.gov.ua", name:"MRUA", template:'http://atu.minregion.gov.ua/ua/karta#map={{zoom}}//{{lat}}//{{lon}}&&layer=10615838328233625-v:1%7Cop:1//8906587737484582-v:0%7Cop:1//8894715282779406-v:1%7Cop:1'},
  70. "_map_VCUA": {save:1, title:"[UA] Open in maps.visicom.ua", name:"VCUA", template:'https://maps.visicom.ua/c/{{lon}},{{lat}},{{zoom}}?lang=uk'},
  71. };
  72.  
  73.  
  74. var wmeJM_ArrW2B=[{w:7,b:-2},{w:6,b:-1},{w:5,b:0},{w:4,b:1},{w:3,b:2},{w:2,b:3},{w:1,b:4},{w:0,b:5}];
  75. var wmeJM_ArrW2KDL=[{w:0,r:75000},{w:1,r:50000},{w:2,r:15000},{w:3,r:10000},{w:4,r:5000},{w:5,r:3000},{w:6,r:1000},{w:7,r:750},{w:8,r:500},{w:9,r:200}];
  76.  
  77. function cloneConfig(obj)
  78. {
  79. if (null === obj || "object" != typeof obj) return obj;
  80. var copy = obj.constructor();
  81. for (var attr in obj)
  82. {
  83. if (obj.hasOwnProperty(attr))
  84. {
  85. copy[attr] = cloneConfig(obj[attr]);
  86. }
  87. }
  88. return copy;
  89. }
  90.  
  91. function CreateID()
  92. {
  93. return 'WME-JumpMaps-' + wmeJM_version.replace(/\./g,"-");
  94. }
  95.  
  96. function WmeJM_Config2String()
  97. {
  98. // Exclude private
  99. var jsn={};
  100. for(var i in wmeJM_Config)
  101. {
  102. if(wmeJM_Config[i].save === 1)
  103. {
  104. jsn[i]=wmeJM_Config[i];
  105. }
  106. }
  107. return JSON.stringify(jsn);//,function(key, value) { if (key === "save" && value === 1) {return undefined; } return value;});
  108. }
  109.  
  110.  
  111. function getElementsByClassName(classname, node)
  112. {
  113. if(!node)
  114. node = document.getElementsByTagName("body")[0];
  115. var a = [];
  116. var re = new RegExp('\\b' + classname + '\\b');
  117. var els = node.getElementsByTagName("*");
  118. for (var i=0,j=els.length; i<j; i++)
  119. if (re.test(els[i].className)) a.push(els[i]);
  120. return a;
  121. }
  122.  
  123. function wmer_generate_permalink() {
  124. var wcp=document.getElementsByClassName('WazeControlPermalink');
  125. for(var i=0; i < wcp.length; ++i)
  126. for (var j=0; j < wcp[i].getElementsByTagName('a').length;++j)
  127. {
  128. var href=wcp[i].getElementsByTagName('a')[j].href;
  129. if (href.indexOf(".waze.com/") > 0 && href.indexOf("/editor") > 0)
  130. {
  131. // kill "/ru/", kill "layers"
  132. href=href.replace("/ru/","/").replace(/layers=([0-9]+)\&/,"") + "&marker=yes";
  133. return href;
  134. }
  135. }
  136. return "";
  137. }
  138.  
  139. // On what site are we now?
  140. function WmeJM_GetLocationType()
  141. {
  142. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_GetLocationType(), location.hostname=" + location.hostname + ", location.href=" + location.href);
  143.  
  144. if (location.hostname === "www.waze.com" || location.hostname === "editor-beta.waze.com" || location.hostname === "beta.waze.com")
  145. return "waze";
  146. if (location.hostname === "apple.com")
  147. return "apple";
  148. if (location.hostname === "maps.google.com" || location.hostname.startsWith("www.google."))
  149. return "google";
  150. if (location.hostname === "mapcam.info")
  151. return "sc";
  152. if (location.hostname === "wikimapia.org")
  153. return "wm";
  154. if (location.hostname === "balticmaps.eu")
  155. return "balticmaps";
  156. if (location.hostname === "kartes.lgia.gov.lv")
  157. return "lgia";
  158. if (location.hostname === "www.kadastrs.lv")
  159. return "kdlv";
  160. if (location.hostname === "www.openstreetmap.org")
  161. return "osm";
  162. if (location.hostname === "www.mapillary.com")
  163. return "mry";
  164. if (location.hostname === "tools.wmflabs.org")
  165. return "wmflab";
  166. if (location.hostname === "openstreetcam.org")
  167. return "osv";
  168. if (location.hostname === "maps.visicom.ua")
  169. return "vcua";
  170. if (location.hostname === "atu.minregion.gov.ua")
  171. return "mrua";
  172. if (location.hostname === "map.land.gov.ua")
  173. return "kadua";
  174. if (location.hostname === "www.maps.lt" && location.pathname.indexOf("/map") >= 0)
  175. return "maplt";
  176. if (location.hostname === "www.regia.lt" && location.pathname.indexOf("/map") >= 0)
  177. return "reglt";
  178. if (location.hostname === "kadastr.live")
  179. return "klive";
  180. return "";
  181. }
  182.  
  183. function __getQueryString(link, name)
  184. {
  185. if (link.indexOf( name + '=' ) <= 0)
  186. return -1;
  187. var pos = link.indexOf( name + '=' ) + name.length + 1;
  188. var len = link.substr(pos).indexOf('&');
  189. return (len == -1)?link.substr(pos):link.substr(pos,len);
  190. }
  191.  
  192. // Only getting coordinates and zoom as it is (transformation then)
  193. function WmeJM_GetLLZ()
  194. {
  195. var lat=0;
  196. var lon=0;
  197. var zoom=0;
  198. var city='';
  199. var href=location.href;
  200. var locType=WmeJM_GetLocationType();
  201. switch(locType)
  202. {
  203. case "waze":
  204. {
  205. var urPos=new OpenLayers.LonLat(W.map.getCenter().lon,W.map.getCenter().lat);
  206. urPos.transform(new OpenLayers.Projection("EPSG:900913"),new OpenLayers.Projection("EPSG:4326"));
  207. zoom=W.map.getZoom();
  208. lat=urPos.lat;
  209. lon=urPos.lon;
  210. break;
  211. }
  212. case "google":
  213. {
  214. var i2=href.indexOf("@");
  215. if (i2 >= 0)
  216. {
  217. // https://www.google.com/maps/@51.70131,39.14356,18z
  218. var l=href.substr(i2+1).split(",");
  219. lat=l[0];
  220. lon=l[1];
  221. var re = /([0-9]+)([zm]+).*/;
  222. if (l[2].indexOf("/data") > -1)
  223. re = /([0-9]+)([zm]+)\/.*/;
  224. var zoomAttr = l[2].replace(re, '$1.$2').split(".");
  225. if (zoomAttr[1] === "m")
  226. {
  227. var ArrM2Z=new Array(
  228. {z:1,m:51510000},{z:2,m:25755000},{z:3,m:12877500},{z:4,m:6438750},{z:5,m:3219375},{z:6,m:1609687},{z:7,m:804844},{z:8,m:402422},
  229. {z:9,m:201211},{z:10,m:100605},{z:11,m:50303},{z:12,m:25151},{z:13,m:12576},{z:14,m:6288},{z:15,m:3144},{z:16,m:1572},{z:17,m:786},
  230. {z:18,m:393},{z:19,m:196},{z:20,m:98},{z:21,m:49},{z:22,m:25},{z:23,m:12}
  231. );
  232. var z=parseInt(zoomAttr[0]);
  233. for(var i=0; i < ArrM2Z.length-1; ++i)
  234. {
  235. if(z <= ArrM2Z[i].m && z >= ArrM2Z[i+1].m)
  236. {
  237. zoom=ArrM2Z[i].z;
  238. break;
  239. }
  240. }
  241. }
  242. else
  243. zoom=zoomAttr[0];
  244. }
  245. else
  246. {
  247. // https://www.google.com/maps/?ll=51.70130999999983%2C39.143560000000086&z=18&t=m
  248. lat = __getQueryString(href, 'y');
  249. lon = __getQueryString(href, 'x');
  250. zoom = parseInt(__getQueryString(href, 'z'));
  251. }
  252. break;
  253. }
  254. case "sc":
  255. {
  256. lat = __getQueryString(href, 'lat');
  257. lon = __getQueryString(href, 'lng');
  258. zoom = parseInt(__getQueryString(href, 'z'));
  259. break;
  260. }
  261. case "wm":
  262. {
  263. lat = __getQueryString(href, 'lat');
  264. lon = __getQueryString(href, 'lon');
  265. zoom = parseInt(__getQueryString(href, 'z'));
  266. break;
  267. }
  268. case "balticmaps":
  269. {
  270. var res = Array.from(href.matchAll(/http(s){0,1}\:\/\/balticmaps\.eu\/\S+\/c___(\d+(\.\d+){0,1})-(\d+(\.\d+){0,1})-(\d+)\/.*/g));
  271. lon=res[0][4];
  272. lat=res[0][2];
  273. zoom=res[0][6];
  274. break;
  275. }
  276. case "lgia":
  277. {
  278. var resp = Array.from(href.matchAll(/https:\/\/kartes\.lgia\.gov\.lv\/karte\/\?x=([0-9]*\.[0-9]+)&y=([0-9]*\.[0-9]+)&zoom=([0-9]+)/g));
  279. lat=resp[0][1];
  280. lon=resp[0][2];
  281. zoom=resp[0][3];
  282. break;
  283. }
  284. case "kdlv":
  285. {
  286. var frmap=null;
  287. for(var ii=0; ii < frames.length; ++ii)
  288. if(!(typeof (frames[ii].esri) === "undefined"))
  289. {
  290. frmap=frames[ii];
  291. break;
  292. }
  293. if(frmap)
  294. {
  295. // BUGBUG!!!
  296. frmap.document.getElementById("dijit_form_Button_15").click();
  297. var urlKdl=frmap.document.getElementById("dijit_Dialog_0").getElementsByTagName("textarea")[0].value;
  298. frmap.document.getElementsByClassName("dijitDialogCloseIcon")[0].click();
  299. // https://www.kadastrs.lv/map/di?xy=507833.2477552314,311378.4889039769&z=5000
  300.  
  301. let ll = __getQueryString(urlKdl, 'xy').split(',');
  302. lon=ll[0]; //???
  303. lat=ll[1]; //???
  304. zoom=parseInt(__getQueryString(urlKdl, 'z'));
  305. //if(wmejm_debug) console.log("z="+z)
  306. }
  307. break;
  308. }
  309. case "osm":
  310. {
  311. var xy=OSM.mapParams();
  312. lon=xy.lon;
  313. lat=xy.lat;
  314. zoom=xy.zoom;
  315. break;
  316. }
  317. case "mry":
  318. {
  319. lat = __getQueryString(href, 'lat');
  320. lon = __getQueryString(href, 'lng');
  321. zoom = parseInt(__getQueryString(href, 'z'));
  322. break;
  323. }
  324.  
  325. case "wmflab":
  326. {
  327. break;
  328. }
  329.  
  330. case "osv":
  331. {
  332. break;
  333. }
  334. case 'kadua':
  335. {
  336. let ll = __getQueryString(href, 'cc').split(',');
  337. lon=ll[1];
  338. lat=ll[0];
  339. zoom=parseInt(__getQueryString(href, 'z'));
  340. break;
  341. }
  342. case 'maplt':
  343. {
  344. break;
  345. }
  346. case 'reglt':
  347. {
  348. break;
  349. }
  350. }
  351.  
  352. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_GetLLZ(): locType="+locType+": return {lat="+lat+",lon="+lon+",zoom="+zoom+"}");
  353.  
  354. return {lat:lat,lon:lon,zoom:zoom,city:city};
  355. }
  356.  
  357. // Transformation from external to Waze coordinate system...
  358. function WmeJM_Convert_Other2WME(llz)
  359. {
  360. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_Convert_Other2WME("+JSON.stringify(llz)+")");
  361.  
  362. var locType=WmeJM_GetLocationType();
  363. /*if (locType != "waze" && locType != "re" && locType != '2gis')
  364. llz.zoom = llz.zoom - 12;*/
  365.  
  366. switch(locType)
  367. {
  368. case "waze":
  369. {
  370. break;
  371. }
  372. case "apple":
  373. {
  374. break;
  375. }
  376. case "google":
  377. {
  378. break;
  379. }
  380. case "sc":
  381. {
  382. break;
  383. }
  384. case "wm":
  385. {
  386. break;
  387. }
  388. case "balticmaps":
  389. {
  390. break;
  391. }
  392. case "lgia":
  393. {
  394. var lgia = proj4(proj4("+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"),proj4('EPSG:4326'),[parseFloat(llz.lon), parseFloat(llz.lat)]);
  395. llz.lon=lgia[0];
  396. llz.lat=lgia[1];
  397. llz.zoom = parseInt(llz.zoom, 10) + 7;
  398. break;
  399. }
  400. case "kdlv":
  401. {
  402. var kdl = proj4(proj4("+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"),proj4('EPSG:4326'),[parseFloat(llz.lon), parseFloat(llz.lat)]);
  403. llz.lon=kdl[0];
  404. llz.lat=kdl[1];
  405. llz.zoom = 17
  406.  
  407. break;
  408. }
  409. case "lvm":
  410. {
  411. break;
  412. }
  413. case "Dodies":
  414. {
  415. break;
  416. }
  417. case "osm":
  418. {
  419. break;
  420. }
  421. case "mry":
  422. {
  423. break;
  424. }
  425. case "wmflab":
  426. {
  427. break;
  428. }
  429. case "osv":
  430. {
  431. // TODO !!!
  432. break;
  433. }
  434. case 'vcua':
  435. {
  436. break;
  437. }
  438. case 'mrua':
  439. {
  440. break;
  441. }
  442. case 'kadua':
  443. {
  444. var cua = proj4(proj4('EPSG:900913'),proj4('EPSG:4326'),[parseFloat(llz.lat), parseFloat(llz.lon)]);
  445. llz.lon=cua[0];
  446. llz.lat=cua[1];
  447. break;
  448. }
  449. case 'maplt':
  450. {
  451. break;
  452. }
  453. case 'reglt':
  454. {
  455. var reglt = proj4(proj4('EPSG:3346'),proj4('EPSG:4326'),[parseFloat(llz.lon), parseFloat(llz.lat)]);
  456. llz.lon=reglt[0];
  457. llz.lat=reglt[1];
  458.  
  459. for(let i=0; i < wmeJM_ArrW2KDL.length-1; ++i)
  460. {
  461. //if(wmejm_debug) console.log(i+") z="+z+", ["+wmeJM_ArrW2KDL[i].r+", "+wmeJM_ArrW2KDL[i+1].r+"] = " + (z >= wmeJM_ArrW2KDL[i+1].r && z <= wmeJM_ArrW2KDL[i].r))
  462. if(llz.zoom >= wmeJM_ArrW2KDL[i+1].r && llz.zoom <= wmeJM_ArrW2KDL[i].r)
  463. {
  464. llz.zoom=wmeJM_ArrW2KDL[i].w;
  465. break;
  466. }
  467. }
  468. //zoom = zoom - 12; if (zoom < 0) zoom=0; //???
  469. break;
  470. break;
  471. }
  472. }
  473.  
  474. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_Convert_Other2WME(): return {lat="+llz.lat+",lon="+llz.lon+",zoom="+llz.zoom+"}");
  475. return llz;
  476. }
  477.  
  478. // Transformation from Waze to external coordinate system...
  479. function WmeJM_Convert_WME2Other(id,llz)
  480. {
  481. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_Convert_WME2Other('"+id+"',"+JSON.stringify(llz)+")");
  482.  
  483. if (this.id == '_map_WME' || this.id == '_map_WMEB')
  484. ;// llz.zoom = llz.zoom - 12;
  485.  
  486. // W.Config.livemap.zoom_offset = 12
  487. // W.Config.livemap.max_zoom = 17
  488. var origzoom=llz.zoom;
  489. llz.zoom = this.id=='_map_LI' ? llz.zoom - 1: llz.zoom;// : (llz.zoom > 6 ? 19 : llz.zoom + 12);
  490. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_Convert_WME2Other: llz"+JSON.stringify(llz)+")");
  491.  
  492. switch(id)
  493. {
  494. case "_map_Apple":
  495. {
  496. break;
  497. }
  498. case "_map_Google":
  499. {
  500. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_Convert_WME2Other(): location.href.indexOf('mapmaker')="+location.href.indexOf("mapmaker"));
  501. if(location.href.indexOf("mapmaker") > 0)
  502. llz.zoom=llz.zoom+1;
  503. break;
  504. }
  505. case "_map_SC":
  506. {
  507. break;
  508. }
  509. case "_map_BING":
  510. {
  511. break;
  512. }
  513. case "_map_HERE":
  514. {
  515. break;
  516. }
  517. case "_map_LI":
  518. {
  519. break;
  520. }
  521. case "_map_WM":
  522. {
  523. break;
  524. }
  525. case "_map_OSM":
  526. {
  527. break;
  528. }
  529. case "_map_AM":
  530. {
  531. break;
  532. }
  533. case "_map_DODLV":
  534. {
  535. break;
  536. }
  537. case "_map_BM":
  538. {
  539. let urPos=new OpenLayers.LonLat(llz.lon,llz.lat);
  540. urPos.transform(new OpenLayers.Projection("EPSG:4326"),new OpenLayers.Projection("EPSG:3857"));
  541. llz.lat=urPos.lat;
  542. llz.lon=urPos.lon;
  543. break;
  544. }
  545. case "_map_LGIA":
  546. {
  547. // EPSG:4326 -> EPSG:3059 (LKS92)
  548. var lgia = proj4(proj4("+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),proj4("+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"),[parseFloat(llz.lon), parseFloat(llz.lat)]);
  549. llz.lon=lgia[0];
  550. llz.lat=lgia[1];
  551. llz.zoom=9;
  552. break;
  553. }
  554. case "_map_KDL":
  555. {
  556. // EPSG:4326 -> EPSG:3059 (LKS92)
  557. var kdl = proj4(proj4("EPSG:4326"),proj4("+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"),[parseFloat(llz.lon), parseFloat(llz.lat)]);
  558. llz.lon=kdl[1];
  559. llz.lat=kdl[0];
  560.  
  561. let zoom = llz.zoom-12;
  562. if (zoom > 7) zoom=7;
  563.  
  564. for(let i=0; i < wmeJM_ArrW2KDL.length; ++i)
  565. {
  566. if(zoom == wmeJM_ArrW2KDL[i].w)
  567. {
  568. zoom=wmeJM_ArrW2KDL[i].r;
  569. break;
  570. }
  571. }
  572. llz.zoom= zoom;
  573. break;
  574. }
  575. case "_map_LVM":
  576. {
  577. // EPSG:4326 -> EPSG:3059 (LKS92)
  578. var lvm = proj4(proj4("+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),proj4("+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"),[parseFloat(llz.lon), parseFloat(llz.lat)]);
  579. llz.lat=lvm[0];
  580. llz.lon=lvm[1];
  581. llz.zoom=14;
  582. break;
  583. }
  584. case "_map_MRY":
  585. {
  586. llz.zoom--; // TEMP!!!
  587. break;
  588. }
  589. case "_map_WMFLAB":
  590. {
  591. function convertd2dms(degrees)
  592. {
  593. var mydegrees = parseInt(degrees);
  594. var remaining = degrees - (mydegrees * 1.0);
  595. var minutes = remaining * 60.0;
  596. var myminutes = parseInt(minutes);
  597. remaining = minutes - (myminutes * 1.0);
  598. var myseconds = remaining * 60.0;
  599. myseconds = Math.round (myseconds * 10.0) / 10.0;
  600.  
  601. return {d:mydegrees,m:myminutes,s:myseconds};
  602. }
  603. var la=convertd2dms(llz.lat);
  604. llz.lat=la.d+'_'+la.m+'_'+la.s;
  605. var lo=convertd2dms(llz.lon);
  606. llz.lon=lo.d+'_'+lo.m+'_'+lo.s;
  607. llz.zoom = Math.pow(2, 12 - llz.zoom) * 100000; //??
  608. break;
  609. }
  610. case "_map_OSV":
  611. {
  612. if (llz.zoom > 18) llz.zoom=18;
  613. break;
  614. }
  615. case '_map_VCUA':
  616. {
  617. break;
  618. }
  619. case '_map_MRUA':
  620. {
  621. break;
  622. }
  623. case '_map_KADUA':
  624. {
  625. let urPos=new OpenLayers.LonLat(llz.lon,llz.lat);
  626. urPos.transform(new OpenLayers.Projection("EPSG:4326"),new OpenLayers.Projection("EPSG:900913"));
  627. llz.lat=urPos.lat;
  628. llz.lon=urPos.lon;
  629. break;
  630. }
  631. case '_map_MAPLT':
  632. {
  633. break;
  634. }
  635. case '_map_REGLT':
  636. {
  637. var reglt = proj4(proj4('EPSG:4326'),proj4('EPSG:3346'),[parseFloat(llz.lon), parseFloat(llz.lat)]);
  638. llz.lon=reglt[1];
  639. llz.lat=reglt[0];
  640.  
  641. let zoom = llz.zoom-12;
  642. if (zoom > 7) zoom=7;
  643.  
  644. for(let i=0; i < wmeJM_ArrW2KDL.length; ++i)
  645. {
  646. if(zoom == wmeJM_ArrW2KDL[i].w)
  647. {
  648. zoom=wmeJM_ArrW2KDL[i].r;
  649. break;
  650. }
  651. }
  652. llz.zoom= zoom;
  653. break;
  654. break;
  655. }
  656. case '_map_KLIVE':
  657. {
  658. break;
  659. }
  660. case '_map_RBASE':
  661. {
  662. break;
  663. }
  664. case "_map_SPRO":
  665. {
  666. break;
  667. }
  668. }
  669. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_Convert_WME2Other(): return "+JSON.stringify(llz));
  670. return llz;
  671. }
  672.  
  673.  
  674. // Additional forced processing after jumping to external site...
  675. function WmeJM_PostLoadOtherMaps()
  676. {
  677. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_PostLoadOtherMaps()");
  678. var waiting=false;
  679. var locType=WmeJM_GetLocationType();
  680. var llz=WmeJM_GetLLZ();
  681. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_PostLoadOtherMaps(): locType="+locType+": {lat="+llz.lat+",lon="+llz.lon+",zoom="+llz.zoom+"}");
  682.  
  683. switch(locType)
  684. {
  685. case "waze":
  686. {
  687. break;
  688. }
  689. case "apple":
  690. {
  691. break;
  692. }
  693. case "google":
  694. {
  695. break;
  696. }
  697. case "sc":
  698. {
  699. break;
  700. }
  701. case "wm":
  702. {
  703. break;
  704. }
  705. case "balticmaps":
  706. {
  707. break;
  708. }
  709. case "lgia":
  710. {
  711. break;
  712. }
  713. case "dodies":
  714. {
  715. break;
  716. }
  717. case "kdlv":
  718. {
  719. break;
  720. }
  721. case "osm":
  722. {
  723. break;
  724. }
  725. case "mry":
  726. {
  727. break;
  728. }
  729. case "wmflab":
  730. {
  731. break;
  732. }
  733. case "osv":
  734. {
  735. break;
  736. }
  737. case 'vcua':
  738. {
  739. break;
  740. }
  741. case 'mrua':
  742. {
  743. break;
  744. }
  745. case 'kadua':
  746. {
  747. /*var re = new RegExp("\\bmap=(.*?)//(.*?)//(.*?)$");
  748. var m = re.exec(document.location.hash);
  749. if (m.length==4)
  750. {
  751. Proj4js.defs["EPSG:4284"] = '+proj=longlat+ellps=kras+towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12+no_defs';
  752. //Proj4js.defs["EPSG:4326"] = '+proj=longlat+ellps=WGS84+datum=WGS84+no_defs+towgs84=0,0,0';
  753. Proj4js.defs["EPSG:900913"] = '+proj=merc+a=6378137+b=6378137+lat_ts=0.0+lon_0=0.0+x_0=0.0+y_0=0+k=1.0+units=m+nadgrids=@null+wktext+over+no_defs';
  754.  
  755. var point1 = new Proj4js.Point(m[2],m[3]);
  756. //if(wmeJM_debug) console.log("RepositionKadastrUA:",m, point1);
  757. Proj4js.transform(new Proj4js.Proj("EPSG:4284"), new Proj4js.Proj("EPSG:900913"), point1);
  758.  
  759. var new_response = point1.x+ "," + point1.y + "," + point1.x + "," + point1.y;
  760. var new_bounds_res = new OpenLayers.Bounds.fromString(new_response);
  761. map.zoomToExtent(new_bounds_res);
  762. var x = new_bounds_res.centerLonLat.lat;
  763. var y = new_bounds_res.centerLonLat.lon;
  764. map.setCenter(new OpenLayers.LonLat(y,x),m[1]);
  765. map.setBaseLayer(tmsoverlay_orto);
  766. }*/
  767. break;
  768. }
  769. case 'maplt':
  770. {
  771. break;
  772. }
  773. case 'reglt':
  774. {
  775. break;
  776. }
  777. case 'klive':
  778. {
  779. break;
  780. }
  781. }
  782.  
  783. if (waiting)
  784. {
  785. setTimeout(WmeJM_PostLoadOtherMaps,2000);
  786. }
  787. }
  788.  
  789.  
  790.  
  791. // Mouse click handler - jumping mechanism
  792. function WmeJM_clickJumpToMaps()
  793. {
  794. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_clickJumpToMaps("+this.id+")");
  795.  
  796. var savedSelectedItems=[];
  797. if (wmeJM_restoreSelected && !(this.id === '_map_WME' || this.id.indexOf("_map_WME_") >= 0 || this.id === '_map_WMEB'))
  798. {
  799. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_clickJumpToMaps("+this.id+"): save selected");
  800. for( var i=0; i < W.selectionManager.getSelectedFeatures().length; ++i)
  801. savedSelectedItems.push(W.selectionManager.getSelectedFeatures()[i].model);
  802. }
  803.  
  804. var llz=WmeJM_GetLLZ();
  805. //if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_clickJumpToMaps("+this.id+"): llz={lat:"+llz.lat+",lon:"+llz.lon+",zoom:"+llz.zoom+"}");
  806. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_clickJumpToMaps("+this.id+"): llz="+JSON.stringify(llz));
  807.  
  808. if (this.id == '_map_WME' || this.id == '_map_WMEB' || this.id.indexOf("_map_WME_") >= 0)
  809. llz=WmeJM_Convert_Other2WME(llz);
  810. else
  811. llz=WmeJM_Convert_WME2Other(this.id,llz);
  812.  
  813. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_clickJumpToMaps("+this.id+"): wmeJM_Config["+this.id+"]="+JSON.stringify(wmeJM_Config[this.id]));
  814.  
  815. var template=(typeof wmeJM_Config[this.id] !== "undefined")?wmeJM_Config[this.id].template:"";
  816. if (this.id.indexOf("_map_WME_") >= 0)
  817. template=wmeJM_Config["_map_WME"].template;
  818. var url=template.replace("{{city}}",llz.city).replace("{{lon}}",llz.lon).replace("{{lat}}",llz.lat).replace("{{zoom}}",llz.zoom) + ((this.id == '_map_WME' || this.id.indexOf("_map_WME_") >= 0 || this.id == '_map_WMEB')?"&marker=yes":"");
  819.  
  820. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_clickJumpToMaps("+this.id+"): " + url + ', _url'+this.id);
  821.  
  822. if(wmeJM_restoreSelected && !(this.id == '_map_WME' || this.id.indexOf("_map_WME_") >= 0 || this.id == '_map_WMEB')) // restore selections
  823. {
  824. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_clickJumpToMaps("+this.id+"): restore selected");
  825. setTimeout(function() {if (savedSelectedItems.length > 0){W.selectionManager.select(savedSelectedItems);savedSelectedItems.length=0;}},50);
  826. }
  827.  
  828. if (this.id.indexOf("_map_WME_") >= 0) // If it's something like that, jmlink - we kilay from the url of lats/longs/zooms...
  829. {
  830. if (this.getAttribute("jmfrom") === "mapbys") // If it's something like that, jmlink - we kilay from the url of lats/longs/zooms...
  831. {
  832. window.open("http://map.nca.by/map.html?xy="+this.getAttribute("jmlink")+"&z=16",'_url_jm'+this.id);
  833. }
  834. url=url.split("&")[0]+"&jmlink="+this.getAttribute("jmlink");
  835. }
  836.  
  837. window.open(url,'_url'+this.id);
  838. }
  839.  
  840.  
  841. // Add JumpMaps floating menu to WazeMapEditor
  842. function WmeJM_InsertWMEIcon()
  843. {
  844. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertWMEIcon(): "+(document.getElementById('WME.JumpMaps_' + wmeJM_version)?"found":"none"));
  845. var nod=document.getElementById('WME.JumpMaps_' + wmeJM_version);
  846. if(nod)
  847. {
  848. // clear exist
  849. nod.innerHTML="";
  850. }
  851. else
  852. {
  853. // Create new template
  854. nod=document.createElement("div");
  855. nod.setAttribute('id', 'WME.JumpMaps_' + wmeJM_version);
  856. nod.setAttribute('unselectable', 'on');
  857. var leftPos = wmeJM_leftOffset;
  858. var topPos = wmeJM_topOffset;
  859. nod.setAttribute('style', ' font-size: 12px; color: #fff; padding-left: 20px; position:absolute; top:' + topPos + '; left:' + leftPos + '; display:block; background-color:rgba(0,0,0,.7); visibility:' + (wmeJM_hideWindow ? "hidden":"visible") + ';cursor:pointer;');
  860. }
  861.  
  862. nod.innerHTML="";
  863.  
  864. function IsJsonString(str) {
  865. try {
  866. JSON.parse(str);
  867. } catch (e) {
  868. return false;
  869. }
  870. return true;
  871. }
  872.  
  873. var WMEJumpMapsLink=null;
  874.  
  875. if ("undefined" === typeof localStorage.WMEJumpMapsLink || !IsJsonString(localStorage.getItem('WMEJumpMapsLink')))
  876. {
  877. localStorage.setItem('WMEJumpMapsLink', WmeJM_Config2String());
  878. WMEJumpMapsLink=localStorage.getItem("WMEJumpMapsLink");
  879.  
  880. //if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): use WMEJumpMapsLink0!!! ");
  881. }
  882. else
  883. {
  884. WMEJumpMapsLink=localStorage.getItem("WMEJumpMapsLink");
  885. //if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): use custom WMEJumpMapsLink="+WMEJumpMapsLink);
  886. }
  887.  
  888. var innerHTML="";
  889. if (WMEJumpMapsLink)
  890. {
  891. var aLinks = JSON.parse(WMEJumpMapsLink);
  892. // clear save
  893. for(var i in wmeJM_Config)
  894. wmeJM_Config[i].save = 0;
  895.  
  896. // set save & create labels
  897. for (let i in aLinks)
  898. {
  899. if (["_map_WME","_map_WMEB","_map_LI"].indexOf(i) < 0)
  900. {
  901. //if(wmeJM_debug) console.log("process "+i +" typeof wmeJM_Config[i]="+(typeof wmeJM_Config[i])+ " " + JSON.stringify(wmeJM_Config[i]));
  902. if (typeof wmeJM_Config[i] !== "undefined")
  903. {
  904. wmeJM_Config[i].save = 1;
  905. wmeJM_Config[i].title = aLinks[i].title;
  906. wmeJM_Config[i].name = aLinks[i].name;
  907. wmeJM_Config[i].template = aLinks[i].template;
  908. wmeJM_Config[i].icon = aLinks[i].icon;
  909.  
  910. // Create icon HTML if icon exists
  911. let iconHTML = wmeJM_Config[i].icon ? `<img src="${wmeJM_Config[i].icon}" style="width: 12px; height: 12px; vertical-align: middle; margin-right: 4px;">` : '';
  912.  
  913. // Append icon and name to innerHTML
  914. innerHTML += `<a id="${i}" style="color: #fff; font-size: 11px" title="${aLinks[i].title}">${iconHTML}${aLinks[i].name}</a>&nbsp;<span style="opacity:0.4;">|</span>&nbsp;`;
  915.  
  916. //console.log("aLinks[i]:", aLinks[i]); // Confirm each entry has an `icon` field
  917.  
  918. }
  919. }
  920. }
  921. }
  922.  
  923. var main_site=location.hostname === "www.waze.com";
  924. nod.innerHTML = '<div>JumpMaps ' + wmeJM_version + '</div>'
  925. + innerHTML
  926. + "<a id='_map_LI' style='color: #fff; font-size: 10px' title='Open in LiveMap'>[Live]</a>&nbsp;"
  927. + "<a id='_map_AB' tp="+(main_site?'A':'B')+" href='' style='color: #fff; font-size: 10px' title='Open in "+(main_site?"Beta":"Main")+" editor' target='" +CreateID()+ (main_site?"b":"a")+"' id='__map_BETAALPA'>["+ (main_site?"&#946;":"&#945;")+"]</a>&nbsp;"
  928. + "<a href='https://gf.qytechs.cn/en/scripts/481079-wme-jumpmaps' title='WME-JumpMaps_" + wmeJM_version + "' style='color: #fff; font-size: 10px' target='_blank'>[?]</a>&nbsp;";
  929.  
  930. document.getElementById('waze-map-container').parentElement.appendChild(nod);
  931. // document.getElementById("chat-overlay").parentElement.insertBefore(nod, document.getElementById("chat-overlay"));
  932.  
  933. //Comment for no drag
  934. // var drag = new Object();
  935. // drag.obj = nod; //document.getElementById('WME.JumpMaps_' + wmeJM_version);
  936. //
  937. // drag.obj.addEventListener('mousedown', function(e)
  938. // {
  939. // drag.top = parseInt(drag.obj.offsetTop);
  940. // drag.left = parseInt(drag.obj.offsetLeft);
  941. // drag.oldx = drag.x;
  942. // drag.oldy = drag.y;
  943. // drag.drag = true;
  944. // });
  945. //
  946. // window.addEventListener('mouseup', function()
  947. // {
  948. // drag.drag = false;
  949. // localStorage.setItem("WMEJumpMapsTopOffset", drag.obj.style.top);
  950. // localStorage.setItem("WMEJumpMapsLeftOffset", drag.obj.style.left);
  951. // });
  952. //
  953. // window.addEventListener('mousemove', function(e)
  954. // {
  955. // drag.x = e.clientX;
  956. // drag.y = e.clientY;
  957. // var diffw = drag.x - drag.oldx;
  958. // var diffh = drag.y - drag.oldy;
  959. //
  960. // if (drag.drag)
  961. // {
  962. // drag.obj.style.left = drag.left + diffw + 'px';
  963. // drag.obj.style.top = drag.top + diffh + 'px';
  964. // e.preventDefault();
  965. // }
  966. // });
  967.  
  968.  
  969. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertWMEIcon(): innerHTML="+document.getElementById('WME.JumpMaps_' + wmeJM_version).innerHTML);
  970.  
  971. {
  972. //if(wmeJM_debug) console.log("call JSON.parse");
  973. let aLinks = JSON.parse(WMEJumpMapsLink);
  974. //if(wmeJM_debug) console.log("call JSON.parse - done");
  975. for (let i in aLinks)
  976. {
  977. if (document.getElementById(i))
  978. document.getElementById(i).onclick = WmeJM_clickJumpToMaps;
  979. }
  980. document.getElementById('_map_LI').onclick = WmeJM_clickJumpToMaps;
  981. document.getElementById('_map_AB').onclick = function(){
  982. var permalink="?"+wmer_generate_permalink().split("?")[1];
  983. if(wmeJM_debug) console.log("_map_AB.click(), permalink=",permalink);
  984. if(wmeJM_debug) console.log(this.getAttribute('tp'));
  985. var main_site=this.getAttribute('tp')==='A';
  986. this.href=(main_site?"https://beta.waze.com/editor":"https://www.waze.com/editor") + permalink;
  987. if(wmeJM_debug) console.log(this.href);
  988. //this.click();
  989. //return false;
  990. };
  991. }
  992.  
  993. //WmeJM_UpdateJumpStyle();
  994. }
  995.  
  996. // Insert button for for jumping to Waze
  997. function WmeJM_InsertIcon()
  998. {
  999. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon()");
  1000. var locType=WmeJM_GetLocationType();
  1001. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): locType="+locType);
  1002.  
  1003. if(locType == "waze")
  1004. return true;
  1005.  
  1006. var result = false;
  1007.  
  1008. var nod=document.createElement(locType === "mry" || locType === "osm" || locType === "google"?"div":(locType === "NM"|| locType === "kadua"?"button":"span"));
  1009. nod.setAttribute('id', 'WME.JumpMaps_' + wmeJM_version);
  1010. window.nod=nod;
  1011.  
  1012. var clsid=
  1013. {
  1014. "google" : {t:1,c:"mylocation"},
  1015. "sc" : {t:1,c:"map_right_menu"},
  1016. "wm" : {t:1,c:"wm-Add"},
  1017. "balticmaps" : {t:1,c:"map_mb"},
  1018. "lgia" : {t:1,c:"top-menu"},
  1019. "kdlv" : {t:1,c:"social_networks"},
  1020. "kadua" : {t:1,c:"interfaceGuide"},
  1021. "osm" : {t:0,c:"control-layers leaflet-control"},
  1022. "mry" : {t:0,c:"comments"} //
  1023. };
  1024.  
  1025. if(typeof clsid[locType] === 'undefined')
  1026. {
  1027. WmeJM_PostLoadOtherMaps();
  1028. return true;
  1029. }
  1030.  
  1031. var WazeControlAttribution = null;
  1032. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): clsid[locType]="+JSON.stringify(clsid[locType]));
  1033. if(clsid[locType])
  1034. WazeControlAttribution = clsid[locType].t == 1?document.getElementById(clsid[locType].c):(clsid[locType].t == 0 || clsid[locType].t == 2?document.getElementsByClassName(clsid[locType].c):document.getElementsByTagName(clsid[locType].c));
  1035. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): WazeControlAttribution="+(typeof WazeControlAttribution),WazeControlAttribution);
  1036.  
  1037. var found00=false;
  1038. if (WazeControlAttribution)
  1039. {
  1040. if (!clsid[locType].t)
  1041. {
  1042. if (WazeControlAttribution.length > 0)
  1043. {
  1044. found00=true;
  1045. }
  1046. else
  1047. {
  1048. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): wait 1 ",locType,clsid[locType]);
  1049. setTimeout(function() {WmeJM_InsertIcon();},500,this);
  1050. return false;
  1051. }
  1052. }
  1053. else
  1054. {
  1055. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): found00=true;");
  1056. found00=true;
  1057. }
  1058.  
  1059. if (!found00)
  1060. {
  1061. if(document.readyState != 'complete' && ++wmeJM_countProbe2 < 5)
  1062. {
  1063. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): wait 2 ",locType,clsid[locType]);
  1064. setTimeout(function() {WmeJM_InsertIcon();},500,this);
  1065. return false;
  1066. }
  1067. }
  1068. }
  1069. else
  1070. {
  1071. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): wait 3 ",clsid[locType]);
  1072. setTimeout(function() {WmeJM_InsertIcon();},100,this);
  1073. return false;
  1074. }
  1075.  
  1076. if (found00)
  1077. {
  1078. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): found '", (clsid[locType].t?WazeControlAttribution:WazeControlAttribution[0]));
  1079. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): document.readyState=" + document.readyState);
  1080.  
  1081. switch(locType)
  1082. {
  1083. case "google":
  1084. {
  1085. nod.setAttribute('class', 'app-vertical-item');
  1086. nod.innerHTML = "<div id='_map_WME' style='cursor: pointer;' title='Open to WME'><img width=29 height=29 src='"+wmeJM_IconWME+"'></div>";
  1087. WazeControlAttribution.parentElement.insertBefore(nod, WazeControlAttribution);
  1088. break;
  1089. }
  1090. case "sc":
  1091. {
  1092. WazeControlAttribution.innerHTML=WazeControlAttribution.innerHTML+'<div id="_map_WME" class="btn-mc">Waze</div>';
  1093. break;
  1094. }
  1095. case "wm":
  1096. {
  1097. WazeControlAttribution.innerHTML=WazeControlAttribution.innerHTML+'<div class="butt" id="_map_WME" title="Open in WME"><img style="cursor: pointer; padding-top: 0px;" width=39 height=39 src="'+wmeJM_IconWME+'"></div>';
  1098. break;
  1099. }
  1100. case "balticmaps":
  1101. {
  1102. nod.setAttribute('style', 'margin-top:11px; margin-right:5px; position:absolute; top:0px; left:558px; z-index:1; border-radius:20px; box-shadow: 0px 1px 8px 0px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 3px 3px -2px rgba(0, 0, 0, 0.12);');
  1103. nod.innerHTML = "<div id='_map_WME' style='cursor: pointer;' title='Open to WME'><img width=40 height=40 src='"+wmeJM_IconWME+"'></div>";
  1104. WazeControlAttribution.parentElement.insertBefore(nod, WazeControlAttribution.nextSibling);
  1105. break;
  1106. }
  1107. case "lgia":
  1108. {
  1109. WazeControlAttribution.children[1].insertAdjacentHTML('afterbegin', '<a id="_map_WME" class="blue icon item waze" title="Open in WME"></a>');
  1110. document.styleSheets[0].insertRule("a.waze { background:url("+wmeJM_IconWME+" ) no-repeat !important; background-size: contain !important; right:10px;}", 0);
  1111. break;
  1112. }
  1113. case "kdlv":
  1114. {
  1115. WazeControlAttribution.insertAdjacentHTML('afterbegin', '<a id="_map_WME" class="waze" target="_blank" title="Open in WME"></a>');
  1116. document.styleSheets[0].insertRule("#social_networks a.waze { background:url("+wmeJM_IconWME+" );background-size: 100% 100%; right: 356px}", 0);
  1117. break;
  1118. }
  1119. case "osm":
  1120. {
  1121. nod.setAttribute('class', "leaflet-control");
  1122. nod.innerHTML = "<a id='_map_WME' title='Open to WME'><img style='cursor: pointer; padding-top: 0px;' width=39 height=39 src='"+wmeJM_IconWME+"'></a>";
  1123. WazeControlAttribution[0].parentElement.insertBefore(nod, WazeControlAttribution[0]);
  1124. break;
  1125. }
  1126. case "kadua":
  1127. {
  1128. nod.innerHTML = "<a id='_map_WME' class='icon' title='Open to WME'><img style='cursor: pointer; padding-top: 0px;' width=20 height=20 src='"+wmeJM_IconWME+"'></a>";
  1129. WazeControlAttribution.parentElement.insertBefore(nod, WazeControlAttribution.nextSibling);
  1130. break;
  1131. }
  1132. case "mry":
  1133. {
  1134. WazeControlAttribution[0].parentElement.parentElement.innerHTML=
  1135. '<div _ngcontent-yrv-39="" id="WME.JumpMaps_' + wmeJM_version + '" class="IconContainer bg-icon m1 mt2 relative cursor-pointer pointer-events-auto" dropup-control="" for="">' +
  1136. '<a id="_map_WME" title="Open to WME"><img style="cursor: pointer; padding-left: 4px;" width=28 height=28 src="'+wmeJM_IconWME+'"></a></div>' +
  1137. WazeControlAttribution[0].parentElement.parentElement.innerHTML;
  1138. break;
  1139. }
  1140. }
  1141.  
  1142. if (document.getElementById('_map_WME'))
  1143. {
  1144. document.getElementById('_map_WME').onclick = WmeJM_clickJumpToMaps;
  1145. result=true;
  1146. }
  1147. if (document.getElementById('_map_WMEB'))
  1148. {
  1149. document.getElementById('_map_WMEB').onclick = WmeJM_clickJumpToMaps;
  1150. result=true;
  1151. }
  1152. }
  1153. else
  1154. {
  1155. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): ELSE typeof WazeControlAttribution="+(typeof WazeControlAttribution)+", clsid[locType].t="+clsid[locType].t +", WazeControlAttribution.length="+WazeControlAttribution.length+" ["+(WazeControlAttribution && (clsid[locType].t || WazeControlAttribution.length >= 1))+"]");
  1156. }
  1157.  
  1158. if (result)
  1159. WmeJM_PostLoadOtherMaps();
  1160.  
  1161. return result;
  1162. }
  1163.  
  1164. function WmeJM_onWazeTabReady()
  1165. {
  1166.  
  1167. document.getElementById("wmejm_cfg_resetConfig").onclick = function(){
  1168. setTimeout(function() {
  1169. if(confirm("Reset config for WME-JumpMaps?"))
  1170. {
  1171. let d=document.getElementById(CreateID());
  1172. d.parentNode.removeChild(d);
  1173. d=document.getElementById("pwmejumpmaps");
  1174. d.parentNode.removeChild(d);
  1175.  
  1176. localStorage.removeItem("WMEJumpMapsLink");
  1177. for(var i in wmeJM_Config) { delete wmeJM_Config[i]; }
  1178. wmeJM_Config = cloneConfig(wmeJM_Config0);
  1179.  
  1180. localStorage.removeItem("WMEJumpMapsDebug");
  1181. wmeJM_debug=false;
  1182.  
  1183. WmeJM_InsertWMEIcon();
  1184. WmeJM_InitConfig();
  1185. }
  1186. },100,this);
  1187. return false;
  1188. };
  1189.  
  1190. document.getElementById("wmejm_cfg_debug").onclick = function(){wmeJM_debug=this.checked;localStorage.setItem("WMEJumpMapsDebug",wmeJM_debug?"1":"0");};
  1191. document.getElementById("wmejm_cfg_debug").checked = wmeJM_debug;
  1192.  
  1193. document.getElementById("wmejm_cfg_savedsel").onclick = function(){
  1194. wmeJM_restoreSelected=this.checked;
  1195. localStorage.setItem("WMEJumpMapsRestoreSelected",wmeJM_restoreSelected?"1":"0");
  1196. };
  1197. document.getElementById("wmejm_cfg_savedsel").checked = wmeJM_restoreSelected;
  1198.  
  1199. document.getElementById("wmejm_cfg_window_hide").onclick = function(){
  1200. wmeJM_hideWindow=this.checked;
  1201. localStorage.setItem("WMEJumpMapsHideWindow",wmeJM_hideWindow?"1":"0");
  1202. document.getElementById('WME.JumpMaps_' + wmeJM_version).style.visibility = wmeJM_hideWindow ? "hidden":"visible";
  1203. };
  1204. document.getElementById("wmejm_cfg_window_hide").checked = wmeJM_hideWindow;
  1205.  
  1206. document.getElementById("wmejm_cfg_resetWPos").onclick = function(){
  1207. localStorage.setItem("WMEJumpMapsTopOffset", wmeJM_defaultTopOffset);
  1208. localStorage.setItem("WMEJumpMapsLeftOffset", wmeJM_defaultLeftOffset);
  1209.  
  1210. document.getElementById('WME.JumpMaps_' + wmeJM_version).style.left = wmeJM_defaultLeftOffset;
  1211. document.getElementById('WME.JumpMaps_' + wmeJM_version).style.top = wmeJM_defaultTopOffset;
  1212.  
  1213. wmeJM_topOffset = wmeJM_defaultTopOffset;
  1214. wmeJM_leftOffset = wmeJM_defaultLeftOffset;
  1215. };
  1216.  
  1217. var __wmejm_cfg_editlab__=document.getElementsByClassName("__wmejm_cfg_editlab__");
  1218. for(let i=0; i < __wmejm_cfg_editlab__.length; ++i)
  1219. {
  1220. __wmejm_cfg_editlab__[i].onclick= function(){
  1221. var id=this.getAttribute('data');
  1222. var dstyle=document.getElementById("wmejm_inp_"+id+"_all").style.display;
  1223. document.getElementById("wmejm_inp_"+id+"_all").style.display=(dstyle=="block")?"none":"block";
  1224. //document.getElementById("wmejm_inp_"+id+"_all").style.display="block";
  1225. //wmejm_cfg_'+id+'_val
  1226. };
  1227. }
  1228.  
  1229. var aLinks = JSON.parse(localStorage.getItem('WMEJumpMapsLink'));
  1230. for(let i in wmeJM_Config)
  1231. {
  1232. if (["_map_WME","_map_WMEB","_map_LI"].indexOf(i) >= 0)
  1233. continue;
  1234.  
  1235. document.getElementById("wmejm_cfg_"+i).checked = typeof aLinks[i] != "undefined"?true:false;
  1236. var name=wmeJM_Config[i].name;
  1237. if (name.length > 0)
  1238. {
  1239. document.getElementById("wmejm_cfg_"+i+"_val").value = name;
  1240. }
  1241. let title=wmeJM_Config[i].title;
  1242. if (title.length > 0)
  1243. {
  1244. document.getElementById("wmejm_cfg_"+i+"_tit").value = title;
  1245. document.getElementById("wmejm_cfg_"+i+"_chklab").innerHTML="&nbsp;"+title;
  1246. }
  1247. let template=wmeJM_Config[i].template;
  1248. if (template.length > 0)
  1249. {
  1250. document.getElementById("wmejm_cfg_"+i+"_templ").value = template;
  1251. }
  1252. let icon=wmeJM_Config[i].icon;
  1253.  
  1254. // Visibility handler
  1255. document.getElementById("wmejm_cfg_"+i).onchange = function(){
  1256. var id=this.getAttribute('data');
  1257. //document.getElementById("wmejm_inp_"+id+"_all").style.display=this.checked?"block":"none";
  1258. localStorage.setItem('WMEJumpMapsLink', WmeJM_Config2String());
  1259. WmeJM_InsertWMEIcon();
  1260. };
  1261.  
  1262. // Name handler
  1263. document.getElementById("wmejm_cfg_"+i+"_val").onchange = function(){
  1264. var id=this.getAttribute('data');
  1265. wmeJM_Config[id].name=this.value;
  1266. localStorage.setItem('WMEJumpMapsLink', WmeJM_Config2String());
  1267. WmeJM_InsertWMEIcon();
  1268. };
  1269.  
  1270. // Header handler
  1271. document.getElementById("wmejm_cfg_"+i+"_tit").onchange = function(){
  1272. var id=this.getAttribute('data');
  1273. wmeJM_Config[id].title=this.value;
  1274. document.getElementById("wmejm_cfg_"+id+"_chklab").innerHTML="&nbsp;"+this.value;
  1275. localStorage.setItem('WMEJumpMapsLink', WmeJM_Config2String());
  1276. WmeJM_InsertWMEIcon();
  1277. };
  1278.  
  1279. // Template handler
  1280. document.getElementById("wmejm_cfg_"+i+"_templ").onchange = function(){
  1281. var id=this.getAttribute('data');
  1282. wmeJM_Config[id].template=this.value;
  1283. localStorage.setItem('WMEJumpMapsLink', WmeJM_Config2String());
  1284. WmeJM_InsertWMEIcon();
  1285. };
  1286.  
  1287. // Visibility handler on jumping bar
  1288. document.getElementById("wmejm_cfg_"+i).onclick = function(){
  1289. var id=this.getAttribute('data');
  1290. wmeJM_Config[id].save=this.checked?1:0;
  1291. localStorage.setItem('WMEJumpMapsLink', WmeJM_Config2String());
  1292. WmeJM_InsertWMEIcon();
  1293. };
  1294. }
  1295. //WmeJM_InsertWMEIcon()
  1296.  
  1297. }
  1298.  
  1299. function WmeJM_InitConfig()
  1300. {
  1301. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InitConfig(): "+document.getElementById(CreateID()));
  1302. if(!document.getElementById(CreateID()))
  1303. {
  1304. var srsCtrl = document.createElement('section');
  1305. srsCtrl.id = CreateID();
  1306.  
  1307.  
  1308. var padding="padding:5px 9px";
  1309.  
  1310. // -------------------------------
  1311. var strFormCode = ''
  1312. +'<div class="side-panel-section">'
  1313. +'<h4>WME JumpMaps <sup>' + wmeJM_version + '</sup>&nbsp;<sub><a href="https://gf.qytechs.cn/en/scripts/481079-wme-jumpmaps" target="_blank"><span class="fa fa-external-link"></span></a></sub></h4>'
  1314. +'<form class="attributes-form side-panel-section" action="javascript:return false;">'
  1315.  
  1316. +'<div class="form-group">'
  1317. +'<label class="control-label">Map services:</label>'
  1318. +'<div class="controls">';
  1319. for(var i in wmeJM_Config)
  1320. {
  1321. if (["_map_WME","_map_WMEB","_map_LI"].indexOf(i) >= 0)
  1322. {
  1323. continue;
  1324. }
  1325. var id=i;
  1326. var title=wmeJM_Config[i].title;
  1327. var template=wmeJM_Config[i].template;
  1328. var save=wmeJM_Config[i].save;
  1329. strFormCode += ''
  1330. +'<div class="form-group">'
  1331. +'<label class="control-label">'
  1332. +'<input data="'+id+'" name="wmejm_cfg_'+id+'" id="wmejm_cfg_'+id+'" type="checkbox"><label id="wmejm_cfg_'+id+'_chklab" for="wmejm_cfg_'+id+'">&nbsp;'+title+'</label>'
  1333. +'</label>' + '&nbsp;<a style="display: inline;" class="__wmejm_cfg_editlab__" data="'+id+'"><i class="waze-icon-edit"></i></a>'
  1334. //+'<div class="controls" id="wmejm_inp_'+id+'_all" '+(save?'':'style="display: none;"')+'>'
  1335. +'<div class="controls" id="wmejm_inp_'+id+'_all" style="display: none;">'
  1336. +'Name: <input data="'+id+'" type="text" class="form-control" autocomplete="off" id="wmejm_cfg_'+id+'_val" name="wmejm_cfg_'+id+'_val" value="'+wmeJM_Config[id].name+'" size="13"/></label><br>'
  1337. +'Title: <input data="'+id+'" type="text" class="form-control" autocomplete="off" id="wmejm_cfg_'+id+'_tit" name="wmejm_cfg_'+id+'_tit" value="'+title+'" size="13"/></label><br>'
  1338. +'Template: <input data="'+id+'" type="text" class="form-control" autocomplete="off" id="wmejm_cfg_'+id+'_templ" name="wmejm_cfg_'+id+'_templ" value="'+template+'" size="13" title="Подстановочные знаки: {{city}}, {{lon}}, {{lat}}, {{zoom}}"/></label><br>'
  1339. +'</div>'
  1340. +'</div>'
  1341. + '';
  1342. }
  1343.  
  1344. strFormCode += ''
  1345. +'</div>'
  1346. +'</div>';
  1347.  
  1348. // -------------------------------
  1349. strFormCode += ''
  1350. +'<div class="form-group">'
  1351. +'<label class="control-label">Other settings:</label>'
  1352. +'<div class="controls">'
  1353. +'<input name="wmejm_cfg_savedsel" value="" id="wmejm_cfg_savedsel" type="checkbox"><label for="wmejm_cfg_savedsel" title="Восстанавливать выделенные объекты после прыжка">&nbsp;Restore selected</label>'
  1354. // +'<br>'
  1355. // +'<input name="wmejm_cfg_around" value="" id="wmejm_cfg_around" type="checkbox"><label for="wmejm_cfg_around" title="">&nbsp;Show link around</label>'
  1356. //wmeJM_around
  1357. +'<br>'
  1358. +'<input name="wmejm_cfg_debug" value="" id="wmejm_cfg_debug" type="checkbox"><label for="wmejm_cfg_debug" title="Включить логирование">&nbsp;Debug script</label>'
  1359. +'<br>'
  1360. +'<button id="wmejm_cfg_resetConfig" class="btn btn-default" style="font-size:9px;'+padding+'" title="Reset config!"><i class="fa fa-recycle"></i>&nbsp;Reset config</button>'
  1361. +'<br>'
  1362. +'<button id="wmejm_cfg_resetWPos" class="btn btn-default" style="font-size:9px;'+padding+'" title="Reset window position!"><i class="fa fa-recycle"></i>&nbsp;Reset window position</button>'
  1363. +'<input name="wmejm_cfg_window_hide" value="" id="wmejm_cfg_window_hide" type="checkbox"><label for="wmejm_cfg_window_hide" title="Hide Window">&nbsp;Hide Window</label>'
  1364. +'<br>'
  1365. +'</div>'
  1366. +'</div>'
  1367.  
  1368. +'</form>'
  1369. +'</div>'
  1370. +'';
  1371.  
  1372. srsCtrl.className = "tab-pane";
  1373. srsCtrl.innerHTML = strFormCode;
  1374. WazeWrap.Interface.Tab('JumpMaps', strFormCode, WmeJM_onWazeTabReady);
  1375. }
  1376. else
  1377. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InitConfig(): not found '"+CreateID()+"'");
  1378. }
  1379.  
  1380. function WmeJM_FakeLoad()
  1381. {
  1382. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): start WmeJM_FakeLoad(): this"+ this);
  1383. var loctype=WmeJM_GetLocationType();
  1384. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): start WmeJM_FakeLoad(): loctype="+loctype);
  1385.  
  1386. if(window.document.getElementById('WME.JumpMaps_' + wmeJM_version)) // if THIS is there, then the other checks have passed
  1387. {
  1388. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_FakeLoad(): FOUND WME.JumpMaps_" + wmeJM_version + "!!!. Done");
  1389. return;
  1390. }
  1391.  
  1392. if (loctype === "waze")
  1393. {
  1394. if (typeof Waze === "undefined")
  1395. {
  1396. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_FakeLoad(): wait W. Wait 500ms");
  1397. setTimeout(WmeJM_FakeLoad,500);
  1398. return;
  1399. }
  1400. if (typeof W.selectionManager === "undefined")
  1401. {
  1402. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_FakeLoad(): wait W.selectionManager. Wait 500ms");
  1403. setTimeout(WmeJM_FakeLoad,500);
  1404. return;
  1405. }
  1406. if (document.getElementsByClassName('olControlAttribution')[0] === null)
  1407. {
  1408. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_FakeLoad(): wait waze olControlAttribution. Wait 500ms");
  1409. setTimeout(WmeJM_FakeLoad,500);
  1410. }
  1411. if (!WazeWrap?.Ready) {
  1412. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_FakeLoad(): wait WazeWrap. Wait 500ms");
  1413. setTimeout(WmeJM_FakeLoad,500);
  1414. return;
  1415. }
  1416. }
  1417.  
  1418. if (document.readyState != 'complete' && ++wmeJM_countProbe2 < 5)
  1419. {
  1420. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_FakeLoad(): document.readyState != 'complete', wmeJM_countProbe="+wmeJM_countProbe2+". Wait 3000ms");
  1421. setTimeout(WmeJM_FakeLoad,3000);
  1422. return;
  1423. }
  1424.  
  1425. // Further Initialization
  1426. if (loctype === "waze")
  1427. {
  1428. // What if we jumped from external and if there is a "jmlink" component in the URL, then center the editor at the specified coordinates (EPSG:900913).
  1429. if (__getQueryString(location.href, "jmlink") != -1)
  1430. {
  1431. var jmlink=__getQueryString(location.href, "jmlink").split(",");
  1432. var urPos=new OpenLayers.LonLat(jmlink[1],jmlink[0]);
  1433. urPos.transform(new OpenLayers.Projection("EPSG:900913"),new OpenLayers.Projection("EPSG:4326"));
  1434. var xy = OpenLayers.Layer.SphericalMercator.forwardMercator(parseFloat(urPos.lon), parseFloat(urPos.lat));
  1435. W.map.setCenter(xy);
  1436. }
  1437. WmeJM_InsertWMEIcon();
  1438. WmeJM_InitConfig();
  1439. WmeJM_initBindKey();
  1440. }
  1441. else
  1442. {
  1443. // Other services...
  1444. if(document.getElementById('WME.JumpMaps_' + wmeJM_version) === null && !WmeJM_InsertIcon())
  1445. {
  1446. if(++wmeJM_countProbe < 8) // 8 attempts
  1447. {
  1448. let cls="";
  1449. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): not other found '"+cls+"'. wmeJM_countProbe="+wmeJM_countProbe+". Wait 5000ms");
  1450. setTimeout(WmeJM_FakeLoad,5000);
  1451. return;
  1452. }
  1453. }
  1454. //WmeJM_PostLoadOtherMaps();
  1455. }
  1456. }
  1457.  
  1458.  
  1459. function __GetLocalStorageItem(Name,Type,Def,Arr)
  1460. {
  1461. //if (wme2GIS_debug) console.log("__GetLocalStorageItem(): Name="+Name+",Type="+Type+",Def="+Def+",Arr="+Arr);
  1462. var tmp0=localStorage.getItem(Name);
  1463. if (tmp0)
  1464. {
  1465. switch(Type)
  1466. {
  1467. case 'string':
  1468. break;
  1469. case 'bool':
  1470. tmp0=(tmp0 === "true" || tmp0 === "1")?true:false;
  1471. break;
  1472. case 'int':
  1473. tmp0=!isNaN(parseInt(tmp0))?parseInt(tmp0):0;
  1474. break;
  1475. case 'arr':
  1476. if (tmp0.length > 0)
  1477. if(!Arr[tmp0])
  1478. tmp0=Def;
  1479. break;
  1480. }
  1481. }
  1482. else
  1483. tmp0=Def;
  1484. return tmp0;
  1485. }
  1486.  
  1487.  
  1488. // Script launcher
  1489. function WmeJM_bootstrap()
  1490. {
  1491. console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_bootstrap()");
  1492.  
  1493. wmeJM_Config = cloneConfig(wmeJM_Config0);
  1494.  
  1495. wmeJM_debug = __GetLocalStorageItem("WMEJumpMapsDebug",'bool',false);
  1496. wmeJM_restoreSelected = __GetLocalStorageItem("WMEJumpMapsRestoreSelected",'bool',false);
  1497. wmeJM_around = __GetLocalStorageItem("WMEJumpMapsAround",'bool',false);
  1498. wmeJM_hideWindow = __GetLocalStorageItem("WMEJumpMapsHideWindow",'bool',false);
  1499. wmeJM_topOffset = __GetLocalStorageItem("WMEJumpMapsTopOffset",'string', wmeJM_defaultTopOffset);
  1500. wmeJM_leftOffset = __GetLocalStorageItem("WMEJumpMapsLeftOffset",'string', wmeJM_defaultLeftOffset);
  1501.  
  1502. setTimeout(function() {WmeJM_FakeLoad();},(WmeJM_GetLocationType() === "YM")?3000:500,this);
  1503. }
  1504.  
  1505. function WmeJM_clickJumpToMapsArg()
  1506. {
  1507. if ((typeof arguments[0]) === "object")
  1508. {
  1509. var o=document.getElementById(arguments[0].id);
  1510. if (typeof o !== "undefined")
  1511. {
  1512. if (arguments[0].save)
  1513. o.click();
  1514. }
  1515. }
  1516. }
  1517.  
  1518. function WmeJM_initBindKey()
  1519. {
  1520. if(wmeJM_debug) console.log("WmeJM_initBindKey()");
  1521. if(!W || !W.model || !I18n || !W.accelerators || !W.model.countries || !W.model.countries.top) {
  1522. setTimeout(WmeJM_initBindKey, 500);
  1523. return;
  1524. }
  1525.  
  1526. var Config =[];
  1527.  
  1528. for(let i in wmeJM_Config)
  1529. {
  1530. Config.push({handler: 'WME-JumpMaps'+i, title: wmeJM_Config[i].title, func: WmeJM_clickJumpToMapsArg, key:-1, arg:{id:i,save:wmeJM_Config[i].save}});
  1531. }
  1532.  
  1533. for(let i=0; i < Config.length; ++i)
  1534. {
  1535. WMEKSRegisterKeyboardShortcut('WME-JumpMaps', 'WME-JumpMaps', Config[i].handler, Config[i].title, Config[i].func, Config[i].key, Config[i].arg);
  1536. }
  1537.  
  1538. WMEKSLoadKeyboardShortcuts('WME-JumpMaps');
  1539.  
  1540. window.addEventListener("beforeunload", function() {
  1541. WMEKSSaveKeyboardShortcuts('WME-JumpMaps');
  1542. }, false);
  1543.  
  1544. }
  1545.  
  1546.  
  1547. WmeJM_bootstrap();
  1548. /*
  1549. a=$("#search_td").find("a")
  1550. for(i=0; i < a.length;++i){if(a[i].href.indexOf("maps.by/map/")>0)console.log(a[i].href)}
  1551. */
  1552. /*
  1553. const faviconLink = document.querySelector('link[rel*="icon"]') || document.querySelector('link[rel="shortcut icon"]');
  1554. console.log(faviconLink ? faviconLink.href : 'No favicon found');
  1555. */
  1556.  
  1557.  
  1558. // from: https://gf.qytechs.cn/en/users/5920-rickzabel
  1559. /*
  1560. when adding shortcuts each shortcut will need a uniuque name
  1561. the command to add links is WMERegisterKeyboardShortcut(ScriptName, ShortcutsHeader, NewShortcut, ShortcutDescription, FunctionToCall, ShortcutKeysObj) {
  1562. ScriptName: This is the name of your script used to track all of your shortcuts on load and save.
  1563. ScriptName: replace 'WMEAwesome' with your scripts name such as 'SomeOtherScript'
  1564. ShortcutsHeader: this is the header that will show up in the keyboard editor
  1565. NewShortcut: This is the name of the shortcut and needs to be uniuque from all of the other shortcuts, from other scripts, and WME
  1566. ShortcutDescription: This wil show up as the text next to your shortcut
  1567. FunctionToCall: this is the name of your function that will be called when the keyboard shortcut is presses
  1568. ShortcutKeysObj: the is the object representing the keys watched set this to '-1' to let the users specify their own shortcuts.
  1569. ShortcutKeysObj: The alt, shift, and ctrl keys are A=alt, S=shift, C=ctrl. for short cut to use "alt shift ctrl and l" the object would be 'ASC+l'
  1570. */
  1571. function WMEKSRegisterKeyboardShortcut(e,r,t,a,o,s,c){try{I18n.translations[I18n.locale].keyboard_shortcuts.groups[e].members.length}catch(n){W.accelerators.Groups[e]=[],W.accelerators.Groups[e].members=[],I18n.translations[I18n.locale].keyboard_shortcuts.groups[e]=[],I18n.translations[I18n.locale].keyboard_shortcuts.groups[e].description=r,I18n.translations[I18n.locale].keyboard_shortcuts.groups[e].members=[]}if(o&&"function"==typeof o){I18n.translations[I18n.locale].keyboard_shortcuts.groups[e].members[t]=a,W.accelerators.addAction(t,{group:e});var l="-1",i={};i[l]=t,W.accelerators._registerShortcuts(i),null!==s&&(i={},i[s]=t,W.accelerators._registerShortcuts(i)),W.accelerators.events.register(t,null,function(){o(c)})}else alert("The function "+o+" has not been declared")}function WMEKSLoadKeyboardShortcuts(e){if(localStorage[e+"KBS"])for(var r=JSON.parse(localStorage[e+"KBS"]),t=0;t<r.length;t++)W.accelerators._registerShortcuts(r[t])}function WMEKSSaveKeyboardShortcuts(e){var r=[];for(var t in W.accelerators.Actions){var a="";if(W.accelerators.Actions[t].group==e){W.accelerators.Actions[t].shortcut?(W.accelerators.Actions[t].shortcut.altKey===!0&&(a+="A"),W.accelerators.Actions[t].shortcut.shiftKey===!0&&(a+="S"),W.accelerators.Actions[t].shortcut.ctrlKey===!0&&(a+="C"),""!==a&&(a+="+"),W.accelerators.Actions[t].shortcut.keyCode&&(a+=W.accelerators.Actions[t].shortcut.keyCode)):a="-1";var o={};o[a]=W.accelerators.Actions[t].id,r[r.length]=o}}localStorage[e+"KBS"]=JSON.stringify(r)}
  1572. /* ********************************************************** */

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址