WME-JumpMaps

The script adds in the WME links to third party mapping systems (yandex/2gis/Here/bing/etc.)

  1. // ==UserScript==
  2. // @name WME-JumpMaps
  3. // @namespace https://gf.qytechs.cn/ru/scripts/19626-wme-jumpmaps
  4. // @description The script adds in the WME links to third party mapping systems (yandex/2gis/Here/bing/etc.)
  5. // @include https://*.waze.com/*editor*
  6. // @include https://n.maps.yandex.ru/*
  7. // @include /^https?://maps\.yandex\.(ru|by)/*$/
  8. // @include /^https?://yandex\.(ru|by)/maps.*$/
  9. // @include https://www.google.*/maps*
  10. // @include https://www.google.com.*/maps*
  11. // @include https://maps.google.*
  12. // @include http://maps.google.*
  13. // @include /^https?://2gis\.(ru|ua|kz|kg|ae|cl|com\.cy|cz|it)/.*$/
  14. // @include http://mapcam.info/speedcam/*
  15. // @include https://mapcam.info/speedcam/*
  16. // @include /^https?://.*\.rosreestr\.ru/.*$/
  17. // @include http://wikimapia.org/*
  18. // @include https://wikimapia.org/*
  19. // @include http://*.balticmaps.eu/*
  20. // @include https://*.balticmaps.eu/*
  21. // @include http://balticmaps.eu/*
  22. // @include https://balticmaps.eu/*
  23. // @include http://*.map.nca.by/*
  24. // @include https://*.map.nca.by/*
  25. // @include http://map.nca.by/*
  26. // @include https://map.nca.by/*
  27. // @include https://www.kadastrs.lv/map/*
  28. // @include http://www.openstreetmap.org/*
  29. // @include https://www.openstreetmap.org/*
  30. // @include http://map.land.gov.ua/kadastrova-karta*
  31. // @include http://maps.by/searchate*
  32. // @include https://www.mapillary.com/*
  33. // @include http://www.maps.lt/map/*
  34. // @match https://*.waze.com/*map-editor/*
  35. // @match https://*.waze.com/*editor*
  36. // @match https://*.waze.com/*beta_editor/*
  37. // @icon data:image/png;base64,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
  38. // @version 3.6.1.0
  39. // @author skirda
  40. // @grant none
  41. // ==/UserScript==
  42.  
  43. var wmeJM_version = "3.6.1.0";
  44. console.log("WME-JumpMaps (" + wmeJM_version + "): Start");
  45.  
  46. var wmeJM_IconWME='data:image/png;base64,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';
  47. //'
  48.  
  49. var wmeJM_countProbe=0;
  50. var wmeJM_countProbe2=0;
  51. var wmeJM_countProbeWM=0;
  52. var wmeJM_countProbeLOC=0;
  53. var wmeJM_debug=false;
  54. var wmeJM_restoreSelected=false;
  55. var wmeJM_around=false;
  56.  
  57. /*
  58. localStorage:
  59. WMEJumpMapsDebug = bool = "true" || "1" - enable debug
  60. WMEJumpMapsLink = JSON = links
  61. WMEJumpMapsRestoreSelected = bool = восстанавливать выделенные объекты после прыжка = "true" || "1" - restore
  62.  
  63. localStorage.getItem(Name)
  64. localStorage.setItem(Name,value)
  65. localStorage.removeItem(Name)
  66.  
  67.  
  68. localStorage.removeItem("WMEJumpMapsLink")
  69. localStorage.getItem("WMEJumpMapsLink")
  70. localStorage.setItem("WMEJumpMapsLink",)
  71.  
  72. localStorage.removeItem("WMEJumpMapsDebug")
  73. localStorage.setItem("WMEJumpMapsDebug","1")
  74. localStorage.getItem("WMEJumpMapsDebug")
  75. */
  76.  
  77. var wmeJM_Config={};
  78. var wmeJM_Config0 = {
  79. "_map_WME": {save:0, title:"Open in WME", name:"[WME]", template:'https://www.waze.com/editor/?env=row&zoom={{zoom}}&lat={{lat}}&lon={{lon}}'},
  80. "_map_WMEB": {save:0, title:"Open in WME Beta", name:"[WMEB]", template:'https://beta.waze.com/editor/?env=row&zoom={{zoom}}&lat={{lat}}&lon={{lon}}'},
  81. "_map_LI": {save:0, title:"Open in LiveMap", name:"[Live]", template:'https://www.waze.com/livemap/?zoom={{zoom}}&lon={{lon}}&lat={{lat}}'},
  82. //-------------------------------------
  83. "_map_2GIS": {save:1, title:"Open in 2GIS Map", name:"[2Gis]", template:'http://2gis.ru/{{city}}?queryState=center/{{lon}}%2C{{lat}}/zoom/{{zoom}}'},
  84. "_map_NM": {save:1, title:"Open in Yandex Narod", name:"[NYM]", template:'http://n.maps.yandex.ru/?ll={{lon}}%2C{{lat}}&z={{zoom}}&l=pmap'},
  85. "_map_SC": {save:1, title:"Open in mapcam.info", name:"[SC]", template:'http://mapcam.info/speedcam/?lng={{lon}}&lat={{lat}}&z={{zoom}}&t=OSM'},
  86. "_map_WM": {save:1, title:"Open in wikimapia.org", name:"[WM]", template:'http://wikimapia.org/#lang=ru&lat={{lat}}&lon={{lon}}&z={{zoom}}&m=b'},
  87. "_map_RE": {save:1, title:"Open in RosReestr", name:"[RE]", template:'http://pkk5.rosreestr.ru/#x={{lon}}&y={{lat}}&z={{zoom}}'},
  88. "_map_GM": {save:1, title:"Open in Google MapMaker", name:"[GMM]", template:'https://www.google.com/mapmaker?ll={{lat}},{{lon}}&z={{zoom}}&spn=0.01277,0.030212&lyt=large_map_v3'},
  89. "_map_BP": {save:1, title:"Open in benzin-price.ru", name:"[BP]", template:'http://www.benzin-price.ru/m/index.php?lat={{lat}}&lon={{lon}}&distance=1'},// distance=1 == 500m, 2 == 2km... 5km, 10km},
  90. "_map_NAVITEL":{save:1, title:"Open in Navitel", name:"[Navi]", template:'http://maps.navitel.su/?zoom={{zoom}}&lat={{lat}}&lon={{lon}}'},
  91. "_map_OSM": {save:1, title:"Open in OSM", name:"[OSM]", template:'http://www.openstreetmap.org/#map={{zoom}}/{{lat}}/{{lon}}'},
  92. "_map_SC2": {save:1, title:"Open in SpeedCamOnLine.ru", name:"[SCO]", template:'http://speedcamonline.ru/view/Rus/{{lat}}/{{lon}}/{{zoom}}'},
  93. "_map_YM": {save:1, title:"Open in Yandex Map", name:"[YM]", template:'http://maps.yandex.ru/?ll={{lon}}%2C{{lat}}&z={{zoom}}&l=pmap%2Cstv'},
  94. "_map_Google": {save:1, title:"Open in Google Map", name:"[G]", template:'http://www.google.com/maps/?ll={{lat}}%2C{{lon}}&z={{zoom}}&t=m'},
  95. "_map_BING": {save:1, title:"Open in Bing Map", name:"[Bing]", template:'http://www.bing.com/maps/?v=2&cp={{lat}}~{{lon}}&lvl={{zoom}}&dir=0&sty=h&form=LMLTEW'}, // sty: "h" - ariel, "r" - map
  96. "_map_HERE": {save:1, title:"Open in Here Map ", name:"[Here]", template:'https://www.here.com/?map={{lat}},{{lon}},{{zoom}},normal'}, // "hybrid.day" - ariel, "normal.day" - map
  97. "_map_BM": {save:1, title:"Open in Baltic Maps", name:"[BM]", template:'http://old.balticmaps.eu/?lang=lv&centerx={{lon}}&centery={{lat}}&zoom={{zoom}}&layer=map&ls=o'},
  98. "_map_KDL": {save:1, title:"Open in Kadastr LV", name:"[KDL]", template:'https://www.kadastrs.lv/map/di?xy={{lat}},{{lon}}&z={{zoom}}'},
  99. "_map_NCABY": {save:1, title:"Open in Kadastr BY", name:"[NCA]", template:'http://map.nca.by/map.html?xy={{lat}},{{lon}}&z={{zoom}}'},
  100. "_map_MRY": {save:1, title:"Open in mapillary.com", name:"[MRY]", template:'https://www.mapillary.com/app/?lat={{lat}}&lng={{lon}}&z={{zoom}}'},
  101. "_map_WMFLAB": {save:1, title:"Open in tools.wmflabs.org", name:"[WMF]", template:'https://tools.wmflabs.org/geohack/geohack.php?params={{lat}}_N_{{lon}}_E_scale:{{zoom}}'},
  102. "_map_OSV": {save:1, title:"Open in openstreetcam.org", name:"[OSV]", template:'http://openstreetcam.org/map/@{{lat}},{{lon}},{{zoom}}z'},
  103. "_map_AMR": {save:1, title:"Open in atlas.mos.ru", name:"[AMR]", template:'https://atlas.mos.ru/?lang=ru&z={{zoom}}&ll={{lon}}%2C{{lat}}'},
  104. "_map_VCUA": {save:1, title:"Open in maps.visicom.ua", name:"[VCUA]", template:'https://maps.visicom.ua/c/{{lon}},{{lat}},{{zoom}}?lang=uk'},
  105. "_map_MRUA": {save:1, title:"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'},
  106. "_map_KADUA": {save:1, title:"Open in Kadastr UA", name:"[KADUA]", template:'http://map.land.gov.ua/kadastrova-karta#map={{zoom}}//{{lon}}//{{lat}}'},
  107. "_map_MAPLT": {save:1, title:"Open in maps.lt", name:"[MAPLT]", template:'http://www.maps.lt/map/default.aspx?lang=lt#q={{lat}}%2C%20{{lon}}'}
  108. };
  109.  
  110.  
  111. 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}];
  112. 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}];
  113.  
  114. function cloneConfig(obj)
  115. {
  116. if (null === obj || "object" != typeof obj) return obj;
  117. var copy = obj.constructor();
  118. for (var attr in obj)
  119. {
  120. if (obj.hasOwnProperty(attr))
  121. {
  122. copy[attr] = cloneConfig(obj[attr]);
  123. }
  124. }
  125. return copy;
  126. }
  127.  
  128. function CreateID()
  129. {
  130. return 'WME-JumpMaps-' + wmeJM_version.replace(/\./g,"-");
  131. }
  132.  
  133. function WmeJM_Config2String()
  134. {
  135. // exclude private
  136. var jsn={};
  137. for(var i in wmeJM_Config)
  138. {
  139. if(wmeJM_Config[i].save === 1)
  140. {
  141. jsn[i]=wmeJM_Config[i];
  142. }
  143. }
  144. return JSON.stringify(jsn);//,function(key, value) { if (key === "save" && value === 1) {return undefined; } return value;});
  145. }
  146.  
  147.  
  148. function getElementsByClassName(classname, node)
  149. {
  150. if(!node)
  151. node = document.getElementsByTagName("body")[0];
  152. var a = [];
  153. var re = new RegExp('\\b' + classname + '\\b');
  154. var els = node.getElementsByTagName("*");
  155. for (var i=0,j=els.length; i<j; i++)
  156. if (re.test(els[i].className)) a.push(els[i]);
  157. return a;
  158. }
  159.  
  160. function wmer_generate_permalink() {
  161. var wcp=document.getElementsByClassName('WazeControlPermalink');
  162. for(var i=0; i < wcp.length; ++i)
  163. for (var j=0; j < wcp[i].getElementsByTagName('a').length;++j)
  164. {
  165. var href=wcp[i].getElementsByTagName('a')[j].href;
  166. if (href.indexOf(".waze.com/") > 0 && href.indexOf("/editor") > 0)
  167. {
  168. // kill "/ru/", kill "layers"
  169. href=href.replace("/ru/","/").replace(/layers=([0-9]+)\&/,"") + "&marker=yes";
  170. return href;
  171. }
  172. }
  173. return "";
  174. }
  175.  
  176. // где мы сейчас?
  177. function WmeJM_GetLocationType()
  178. {
  179. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_GetLocationType(), location.hostname=" + location.hostname + ", location.href=" + location.href);
  180.  
  181. if (location.hostname === "www.waze.com" || location.hostname === "editor-beta.waze.com" || location.hostname === "beta.waze.com")
  182. return "waze";
  183. if (location.hostname === "n.maps.yandex.ru")
  184. return "NM";
  185. if ((location.hostname === "yandex.ru" || location.hostname === "yandex.by") && location.pathname.indexOf("/maps/") >= 0)
  186. return "YM";
  187. if (location.hostname === "maps.google.com" || location.hostname.startsWith("www.google."))
  188. return "google";
  189. if (location.hostname === "2gis.ru" || location.hostname === "2gis.ua" || location.hostname === "2gis.kz" || location.hostname === "2gis.kg") //ae cl com.cy cz it
  190. return "2gis";
  191. if (location.hostname.indexOf(".rosreestr.ru") >= 0)
  192. return "re";
  193. if (location.hostname === "mapcam.info")
  194. return "sc";
  195. if (location.hostname === "wikimapia.org")
  196. return "wm";
  197. if (location.hostname === "balticmaps.eu")
  198. return "bm";
  199. if (location.hostname === "www.kadastrs.lv")
  200. return "kdl";
  201. if (location.hostname === "map.nca.by")
  202. return "ncaby";
  203. if (location.hostname === "www.openstreetmap.org")
  204. return "osm";
  205. if (location.hostname === "www.mapillary.com")
  206. return "mry";
  207. if (location.hostname === "tools.wmflabs.org")
  208. return "wmflab";
  209. if (location.hostname === "openstreetcam.org")
  210. return "osv";
  211. if (location.hostname === "atlas.mos.ru")
  212. return "amr";
  213. if (location.hostname === "maps.visicom.ua")
  214. return "vcua";
  215. if (location.hostname === "atu.minregion.gov.ua")
  216. return "mrua";
  217. if (location.hostname === "map.land.gov.ua")
  218. return "kadua";
  219. if (location.hostname === "maps.by" && location.pathname.indexOf("/searchate") >= 0)
  220. return "mapbys";
  221. if (location.hostname === "www.maps.lt" && location.pathname.indexOf("/map") >= 0)
  222. return "maplt";
  223. return "";
  224. }
  225.  
  226. function __getQueryString(link, name)
  227. {
  228. if (link.indexOf( name + '=' ) <= 0)
  229. return -1;
  230. var pos = link.indexOf( name + '=' ) + name.length + 1;
  231. var len = link.substr(pos).indexOf('&');
  232. return (len == -1)?link.substr(pos):link.substr(pos,len);
  233. }
  234.  
  235. // только получение координат и зума как есть (преобразования потом)
  236. function WmeJM_GetLLZ()
  237. {
  238. var lat=0;
  239. var lon=0;
  240. var zoom=0;
  241. var city='';
  242. var href=location.href;
  243. var locType=WmeJM_GetLocationType();
  244. switch(locType)
  245. {
  246. case "waze":
  247. {
  248. var urPos=new OpenLayers.LonLat(W.map.getCenter().lon,W.map.getCenter().lat);
  249. urPos.transform(new OpenLayers.Projection("EPSG:900913"),new OpenLayers.Projection("EPSG:4326"));
  250. zoom=W.map.getZoom();
  251. lat=urPos.lat;
  252. lon=urPos.lon;
  253. break;
  254. }
  255. case "NM":
  256. {
  257. zoom = parseInt(__getQueryString(href, 'z'));
  258. var ll = __getQueryString(href, 'll').split('%2C');
  259. lat=ll[1];
  260. lon=ll[0];
  261. break;
  262. }
  263. case "YM":
  264. {
  265. //if(wmeJM_debug) console.log("locType",locType)
  266. // https://yandex.ru/maps/?whatshere[point]=37.500278%2C56.130350&whatshere[zoom]=17&mode=whatshere
  267. //if(wmeJM_debug) console.log("href",href)
  268. var qll=__getQueryString(href, 'whatshere%5Bpoint%5D');
  269. var shortLink=false;
  270. if (qll === -1)
  271. {
  272. qll=__getQueryString(href, 'll');
  273. shortLink=true;
  274. }
  275. //if(wmeJM_debug) console.log("qll",qll)
  276. let lnk=href;
  277. if (qll == -1) // Грязный хак :-(
  278. lnk=document.getElementsByClassName("home-panel-content-view_has-panorama__link-nmaps")[0].href;
  279.  
  280. let ll = __getQueryString(lnk, (shortLink?'ll':'whatshere%5Bpoint%5D')).split('%2C');
  281. //if(wmeJM_debug) console.log("ll",ll)
  282. lat=ll[1];
  283. lon=ll[0];
  284. zoom = parseInt(__getQueryString(lnk, (shortLink?'z':'whatshere%5Bzoom%5D')));
  285. //if(wmeJM_debug) console.log("zoom",zoom)
  286. break;
  287. }
  288. case "google":
  289. {
  290. var i2=href.indexOf("@");
  291. if (i2 >= 0)
  292. {
  293. // https://www.google.com/maps/@51.70131,39.14356,18z
  294. var l=href.substr(i2+1).split(",");
  295. lat=l[0];
  296. lon=l[1];
  297. var re = /([0-9]+)([zm]+).*/;
  298. if (l[2].indexOf("/data") > -1)
  299. re = /([0-9]+)([zm]+)\/.*/;
  300. var zoomAttr = l[2].replace(re, '$1.$2').split(".");
  301. if (zoomAttr[1] === "m")
  302. {
  303. var ArrM2Z=new Array(
  304. {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},
  305. {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},
  306. {z:18,m:393},{z:19,m:196},{z:20,m:98},{z:21,m:49},{z:22,m:25},{z:23,m:12}
  307. );
  308. var z=parseInt(zoomAttr[0]);
  309. for(var i=0; i < ArrM2Z.length-1; ++i)
  310. {
  311. if(z <= ArrM2Z[i].m && z >= ArrM2Z[i+1].m)
  312. {
  313. zoom=ArrM2Z[i].z;
  314. break;
  315. }
  316. }
  317. }
  318. else
  319. zoom=zoomAttr[0];
  320. }
  321. else
  322. {
  323. // https://www.google.com/maps/?ll=51.70130999999983%2C39.143560000000086&z=18&t=m
  324. lat = __getQueryString(href, 'y');
  325. lon = __getQueryString(href, 'x');
  326. zoom = parseInt(__getQueryString(href, 'z'));
  327. }
  328. break;
  329. }
  330. case "2gis":
  331. {
  332. // http://2gis.ru/#!/voronezh/center/39.40487%2C51.621363/zoom/15/state/index
  333. // queryState=center%2F37.614634%2C55.627681%2Fzoom%2F16
  334. let ll="";
  335. if(href.indexOf("queryState=") > 0)
  336. ll = href.split('=')[1].split('%2F');
  337. else
  338. ll = href.split('/');
  339.  
  340. for (let i=0; i < ll.length; ++i)
  341. {
  342. if (ll[i] == "center")
  343. {
  344. var ll0=ll[i+1].split("%2C");
  345. if (ll0.length < 2)
  346. ll0=ll[i+1].split(",");
  347. if(wmeJM_debug) console.log(ll0.length);
  348. lon=ll0[0];
  349. lat=ll0[1];
  350. }
  351. else if (ll[i] == "zoom")
  352. zoom=parseInt(ll[i+1]);
  353. }
  354.  
  355. break;
  356. }
  357. case "re":
  358. {
  359. lat = __getQueryString(href, 'y');
  360. lon = __getQueryString(href, 'x');
  361. zoom = parseInt(__getQueryString(href, 'z'));
  362. /*
  363. if ((typeof extent) !== "undefined")
  364. {
  365. lon=extent.xmin+(extent.xmax-extent.xmin)/2;
  366. lat=extent.ymin+(extent.ymax-extent.ymin)/2;
  367. }
  368. */
  369.  
  370. /*
  371. if ((typeof esri) !== "undefined")
  372. {
  373. zoom=_map.getLevel();
  374. lon=_map.extent.getCenter().x;
  375. lat=_map.extent.getCenter().y;
  376. }
  377. */
  378. break;
  379. }
  380. case "sc":
  381. {
  382. lon=map.center.lng();
  383. lat=map.center.lat();
  384. zoom=map.getZoom();
  385. break;
  386. }
  387. case "wm":
  388. {
  389. lat = __getQueryString(href, 'lat');
  390. lon = __getQueryString(href, 'lon');
  391. zoom = parseInt(__getQueryString(href, 'z'));
  392. break;
  393. }
  394. case "bm":
  395. {
  396. lon=map.center.lng();
  397. lat=map.center.lat();
  398. zoom=map.getZoom();
  399. break;
  400. }
  401. case "kdl":
  402. {
  403. var frmap=null;
  404. for(var ii=0; ii < frames.length; ++ii)
  405. if(!(typeof (frames[ii].esri) === "undefined"))
  406. {
  407. frmap=frames[ii];
  408. break;
  409. }
  410. if(frmap)
  411. {
  412. // BUGBUG!!!
  413. frmap.document.getElementById("dijit_form_Button_14").click();
  414. var url=frmap.document.getElementById("dijit_Dialog_0").getElementsByTagName("textarea")[0].value;
  415. frmap.document.getElementsByClassName("dijitDialogCloseIcon")[0].click();
  416. // https://www.kadastrs.lv/map/di?xy=507833.2477552314,311378.4889039769&z=5000
  417.  
  418. let ll = __getQueryString(url, 'xy').split(',');
  419. lon=ll[0]; //???
  420. lat=ll[1]; //???
  421. zoom=parseInt(__getQueryString(url, 'z'));
  422. //if(wmejm_debug) console.log("z="+z)
  423. }
  424. break;
  425. }
  426. case "ncaby":
  427. {
  428. if (!(typeof esri === "undefined"))
  429. {
  430. zoom=map.getLevel();
  431. lon=map.extent.getCenter().x;
  432. lat=map.extent.getCenter().y;
  433. }
  434. break;
  435. }
  436. case "osm":
  437. {
  438. var xy=OSM.mapParams();
  439. lon=xy.lon;
  440. lat=xy.lat;
  441. zoom=xy.zoom;
  442. break;
  443. }
  444.  
  445. case "mry":
  446. {
  447. lat = __getQueryString(href, 'lat');
  448. lon = __getQueryString(href, 'lng');
  449. zoom = parseInt(__getQueryString(href, 'z'));
  450. break;
  451. }
  452.  
  453. case "wmflab":
  454. {
  455. break;
  456. }
  457.  
  458. case "osv":
  459. {
  460. break;
  461. }
  462. case "amr":
  463. {
  464. break;
  465. }
  466. case 'kadua':
  467. {
  468. //map.getCenter() ==> Object { lon: 3329565.9696268, lat: 6070332.4028958 }
  469. //map.getZoom()
  470. break;
  471. }
  472. case 'mapbys':
  473. {
  474. break;
  475. }
  476. case 'maplt':
  477. {
  478. break;
  479. }
  480. }
  481.  
  482. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_GetLLZ(): locType="+locType+": return {lat="+lat+",lon="+lon+",zoom="+zoom+"}");
  483.  
  484. return {lat:lat,lon:lon,zoom:zoom,city:city};
  485. }
  486.  
  487. // преобразование из "ихних" в "наши"
  488. function WmeJM_Convert_Other2WME(llz)
  489. {
  490. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_Convert_Other2WME("+JSON.stringify(llz)+")");
  491.  
  492. var locType=WmeJM_GetLocationType();
  493. if (locType != "waze")
  494. llz.zoom = llz.zoom - 12;
  495.  
  496. switch(locType)
  497. {
  498. case "waze":
  499. {
  500. break;
  501. }
  502. case "NM":
  503. {
  504. break;
  505. }
  506. case "YM":
  507. {
  508. break;
  509. }
  510. case "google":
  511. {
  512. break;
  513. }
  514. case "2gis":
  515. {
  516. break;
  517. }
  518. case "re":
  519. {
  520. if (typeof esri !== "undefined")
  521. {
  522. var webMercatorUtils=require("esri/geometry/webMercatorUtils");
  523. if(webMercatorUtils)
  524. {
  525. var g=webMercatorUtils.xyToLngLat(llz.lon, llz.lat);
  526. llz.lon=g[0];
  527. llz.lat=g[1];
  528. }
  529. }
  530. break;
  531. }
  532. case "sc":
  533. {
  534. break;
  535. }
  536. case "wm":
  537. {
  538. break;
  539. }
  540. case "bm":
  541. {
  542. if (!(typeof Kijs_Lks_2_LatLon === "undefined"))
  543. {
  544. let g=Kijs_Lks_2_LatLon(llz.lon,llz.lat); //??
  545. llz.lon=g.lon;
  546. llz.lat=g.lat;
  547. }
  548. for(var i=0; i < wmeJM_ArrW2B.length; ++i)
  549. {
  550. if(map.zoom_level == wmeJM_ArrW2B[i].b)
  551. {
  552. llz.zoom=wmeJM_ArrW2B[i].w;
  553. break;
  554. }
  555. }
  556. break;
  557. }
  558. case "kdl":
  559. {
  560. // function convert from https://gist.github.com/laacz/8654c9bb3f62e6a6c201b11075ad5905
  561. function LKSToLatLon(t,a){var o=function(t){return t/Math.PI*180;};var f=function(t){return t*Math.PI/180;};UTMScaleFactor=0.9996;sm_a=6378137;sm_b=6356752.314;sm_EccSquared=0.00669437999013;t-=5e5;a-=-6e6;t/=UTMScaleFactor;a/=UTMScaleFactor;lambda0=f(24);n=(sm_a-sm_b)/(sm_a+sm_b);alpha_=(sm_a+sm_b)/2*(1+Math.pow(n,2)/4+Math.pow(n,4)/64);y_=a/alpha_;beta_=3*n/2+-27*Math.pow(n,3)/32+269*Math.pow(n,5)/512;gamma_=21*Math.pow(n,2)/16+-55*Math.pow(n,4)/32;delta_=151*Math.pow(n,3)/96+-417*Math.pow(n,5)/128;epsilon_=1097*Math.pow(n,4)/512;phif=y_+beta_*Math.sin(2*y_)+gamma_*Math.sin(4*y_)+delta_*Math.sin(6*y_)+epsilon_*Math.sin(8*y_);ep2=(Math.pow(sm_a,2)-Math.pow(sm_b,2))/Math.pow(sm_b,2);cf=Math.cos(phif);nuf2=ep2*Math.pow(cf,2);Nf=Math.pow(sm_a,2)/(sm_b*Math.sqrt(1+nuf2));Nfpow=Nf;tf=Math.tan(phif);tf2=tf*tf;tf4=tf2*tf2;x1frac=1/(Nfpow*cf);Nfpow*=Nf;x2frac=tf/(2*Nfpow);Nfpow*=Nf;x3frac=1/(6*Nfpow*cf);Nfpow*=Nf;x4frac=tf/(24*Nfpow);Nfpow*=Nf;x5frac=1/(120*Nfpow*cf);Nfpow*=Nf;x6frac=tf/(720*Nfpow);Nfpow*=Nf;x7frac=1/(5040*Nfpow*cf);Nfpow*=Nf;x8frac=tf/(40320*Nfpow);x2poly=-1-nuf2;x3poly=-1-2*tf2-nuf2;x4poly=5+3*tf2+6*nuf2-6*tf2*nuf2-3*(nuf2*nuf2)-9*tf2*(nuf2*nuf2);x5poly=5+28*tf2+24*tf4+6*nuf2+8*tf2*nuf2;x6poly=-61-90*tf2-45*tf4-107*nuf2+162*tf2*nuf2;x7poly=-61-662*tf2-1320*tf4-720*(tf4*tf2);x8poly=1385+3633*tf2+4095*tf4+1575*(tf4*tf2);lat=phif+x2frac*x2poly*(t*t)+x4frac*x4poly*Math.pow(t,4)+x6frac*x6poly*Math.pow(t,6)+x8frac*x8poly*Math.pow(t,8);lon=lambda0+x1frac*t+x3frac*x3poly*Math.pow(t,3)+x5frac*x5poly*Math.pow(t,5)+x7frac*x7poly*Math.pow(t,7);return {lat:o(lat),lon:o(lon)};}
  562. let g=LKSToLatLon(llz.lon,llz.lat); // ???
  563. llz.lon=g.lon;
  564. llz.lat=g.lat;
  565.  
  566. for(let i=0; i < wmeJM_ArrW2KDL.length-1; ++i)
  567. {
  568. //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))
  569. if(llz.zoom >= wmeJM_ArrW2KDL[i+1].r && llz.zoom <= wmeJM_ArrW2KDL[i].r)
  570. {
  571. llz.zoom=wmeJM_ArrW2KDL[i].w;
  572. break;
  573. }
  574. }
  575. //zoom = zoom - 12; if (zoom < 0) zoom=0; //???
  576. break;
  577. }
  578. case 'mapbys':
  579. {
  580. break;
  581. }
  582. case "ncaby":
  583. {
  584. if (!(typeof esri === "undefined"))
  585. {
  586. var incoord={x:llz.lon,y:llz.lat};
  587. var inSR = new esri.SpatialReference({wkid: 900913});
  588. let geometry = new esri.geometry.Point(incoord.x,incoord.y,inSR);
  589. let g = esri.geometry.webMercatorToGeographic(geometry);
  590. llz.lon=g.x;
  591. llz.lat=g.y;
  592. }
  593. break;
  594. }
  595. case "osm":
  596. {
  597. break;
  598. }
  599. case "mry":
  600. {
  601. break;
  602. }
  603. case "wmflab":
  604. {
  605. break;
  606. }
  607. case "osv":
  608. {
  609. // TODO !!!
  610. break;
  611. }
  612. case "amr":
  613. {
  614. break;
  615. }
  616. case 'vcua':
  617. {
  618. break;
  619. }
  620. case 'mrua':
  621. {
  622. break;
  623. }
  624. case 'kadua':
  625. {
  626. // ...
  627. break;
  628. }
  629. case 'maplt':
  630. {
  631. break;
  632. }
  633. }
  634.  
  635. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_Convert_Other2WME(): return {lat="+llz.lat+",lon="+llz.lon+",zoom="+llz.zoom+"}");
  636. return llz;
  637. }
  638.  
  639. // преобразование из "наших" в "ихние"
  640. function WmeJM_Convert_WME2Other(id,llz)
  641. {
  642. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_Convert_WME2Other('"+id+"',"+JSON.stringify(llz)+")");
  643.  
  644. if (this.id == '_map_WME' || this.id == '_map_WMEB')
  645. ;// llz.zoom = llz.zoom - 12;
  646.  
  647. // W.Config.livemap.zoom_offset = 12
  648. // W.Config.livemap.max_zoom = 17
  649. var origzoom=llz.zoom;
  650. llz.zoom = this.id=='_map_LI' ? (llz.zoom >= 5 ? 17 : llz.zoom + 11) : (llz.zoom > 6 ? 19 : llz.zoom + 12);
  651. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_Convert_WME2Other: llz"+JSON.stringify(llz)+")");
  652.  
  653. switch(id)
  654. {
  655. case "_map_2GIS":
  656. {
  657. // границы проектов lon0-lat0 = лево-верх, lon1-lat1 = право-низ,
  658. var Arr2GisCity=new Array(
  659. {c:'abakan',t:'Абакан',lon0:91.148493,lat0:53.900164,lon1:91.822532,lat1:53.570522},
  660. {c:'almaty',t:'Алматы',lon0:76.720148,lat0:43.467339,lon1:77.104243,lat1:43.109829},
  661. {c:'almetevsk',t:'Альметьевск',lon0:52.198749,lat0:54.949952,lon1:52.475853,lat1:54.796869},
  662. {c:'astana',t:'Астана',lon0:71.122398,lat0:51.37162,lon1:71.837025,lat1:50.93447},
  663. {c:'armawir',t:'Армавир',lon0:40.856599,lat0:45.249437,lon1:41.319762,lat1:44.721796},
  664. {c:'arkhangelsk',t:'Архангельск',lon0:39.462275,lat0:64.828929,lon1:41.317017,lat1:64.285363},
  665. {c:'astrakhan',t:'Астрахань',lon0:47.867187,lat0:46.50974,lon1:48.18167,lat1:46.242946},
  666. {c:'barnaul',t:'Барнаул',lon0:83.449949,lat0:53.485245,lon1:84.083776,lat1:53.160058},
  667. {c:'belgorod',t:'Белгород',lon0:36.424588,lat0:50.699354,lon1:36.724468,lat1:50.491576},
  668. {c:'biysk',t:'Бийск',lon0:84.573055,lat0:52.645225,lon1:85.488328,lat1:51.901409},
  669. {c:'blagoveshensk',t:'Благовещенск',lon0:127.347707,lat0:50.600674,lon1:127.761741,lat1:50.224428},
  670. {c:'bratsk',t:'Братск',lon0:101.320597,lat0:56.405462,lon1:102.048297,lat1:55.997912},
  671. {c:'bryansk',t:'Брянск',lon0:34.119591,lat0:53.430104,lon1:34.600268,lat1:53.139985},
  672. {c:'v_novgorod',t:'Великий Новгород',lon0:31.135553,lat0:58.682364,lon1:31.510536,lat1:58.461694},
  673. {c:'vladivostok',t:'Владивосток',lon0:131.562748,lat0:43.614385,lon1:132.339527,lat1:42.805235},
  674. {c:'vladimir',t:'Владимир',lon0:40.169351,lat0:56.466473,lon1:40.691011,lat1:56.029602},
  675. {c:'volgograd',t:'Волгоград',lon0:43.973242,lat0:48.925678,lon1:44.92821,lat1:48.315128},
  676. {c:'vologda',t:'Вологда',lon0:39.61246,lat0:59.336048,lon1:40.073782,lat1:59.151771},
  677. {c:'voronezh',t:'Воронеж',lon0:38.989754,lat0:51.910993,lon1:39.611678,lat1:51.475593},
  678. {c:'gornoaltaysk',t:'Горно-Алтайск',lon0:85.488768,lat0:52.154998,lon1:86.454212,lat1:51.250738},
  679. {c:'dnepropetrovsk',t:'Днепропетровск',lon0:34.736329,lat0:48.613427,lon1:35.278999,lat1:48.341643},
  680. {c:'donetsk',t:'Донецк',lon0:37.514653,lat0:48.188299,lon1:38.242047,lat1:47.797406},
  681. {c:'ekaterinburg',t:'Екатеринбург',lon0:60.236538,lat0:57.034771,lon1:60.939082,lat1:56.600044},
  682. {c:'ivanovo',t:'Иваново',lon0:40.801743,lat0:57.088235,lon1:41.185247,lat1:56.892642},
  683. {c:'izhevsk',t:'Ижевск',lon0:52.934619,lat0:57.057068,lon1:53.492953,lat1:56.668377},
  684. {c:'irkutsk',t:'Иркутск',lon0:103.62301,lat0:52.648075,lon1:104.966649,lat1:51.711951},
  685. {c:'yoshkarola',t:'Йошкар-Ола',lon0:47.575103,lat0:56.760655,lon1:48.150626,lat1:56.508362},
  686. {c:'kazan',t:'Казань',lon0:48.295321,lat0:55.997169,lon1:49.531335,lat1:55.568003},
  687. {c:'kaliningrad',t:'Калининград',lon0:19.843247,lat0:55.054121,lon1:20.659358,lat1:54.535552},
  688. {c:'kaluga',t:'Калуга',lon0:35.903119,lat0:54.76571,lon1:36.47395,lat1:54.323868},
  689. {c:'k_uralskiy',t:'Каменск-Уральский',lon0:61.670208,lat0:56.575513,lon1:62.214718,lat1:56.275529},
  690. {c:'karaganda',t:'Караганда',lon0:72.858651,lat0:50.132622,lon1:73.409223,lat1:49.649931},
  691. {c:'kemerovo',t:'Кемерово',lon0:85.943609,lat0:55.534059,lon1:86.262256,lat1:55.262515},
  692. {c:'kirov',t:'Киров',lon0:49.035362,lat0:58.797004,lon1:49.946385,lat1:58.400486},
  693. {c:'komsomolsk',t:'Комсомольск-на-Амуре',lon0:136.771299,lat0:50.721413,lon1:137.257084,lat1:50.189817},
  694. {c:'kostroma',t:'Кострома',lon0:40.729746,lat0:57.921793,lon1:41.14355,lat1:57.678341},
  695. {c:'krasnodar',t:'Краснодар',lon0:38.652738,lat0:45.264319,lon1:39.375902,lat1:44.944625},
  696. {c:'krasnoyarsk',t:'Красноярск',lon0:92.131003,lat0:56.306914,lon1:93.595133,lat1:55.812773},
  697. {c:'kurgan',t:'Курган',lon0:65.153256,lat0:55.530273,lon1:65.48145,lat1:55.368658},
  698. {c:'kursk',t:'Курск',lon0:35.892024,lat0:51.841854,lon1:36.432691,lat1:51.557738},
  699. {c:'lenkuz',t:'Ленинск-Кузнецкий',lon0:85.748699,lat0:54.774251,lon1:86.501493,lat1:54.179407},
  700. {c:'lipetsk',t:'Липецк',lon0:39.37308,lat0:52.719876,lon1:39.821953,lat1:52.490548},
  701. {c:'magnitogorsk',t:'Магнитогорск',lon0:58.521718,lat0:53.623234,lon1:59.502817,lat1:53.229866},
  702. {c:'miass',t:'Миасс',lon0:59.5303,lat0:55.277446,lon1:60.250081,lat1:54.890992},
  703. {c:'moscow',t:'Москва',lon0:36.763166,lat0:56.108107,lon1:38.220866,lat1:55.105405},
  704. {c:'murmansk',t:'Мурманск',lon0:32.698349,lat0:69.06473,lon1:33.222506,lat1:68.761069},
  705. {c:'nabchelny',t:'Набережные Челны',lon0:51.710023,lat0:55.86518,lon1:52.626277,lat1:55.536676},
  706. {c:'nahodka',t:'Находка',lon0:132.748007,lat0:42.907327,lon1:133.036644,lat1:42.722126},
  707. {c:'nizhnevartovsk',t:'Нижневартовск',lon0:75.920854,lat0:61.190935,lon1:77.027174,lat1:60.851182},
  708. {c:'n_novgorod',t:'Нижний Новгород',lon0:43.301231,lat0:56.476065,lon1:44.250653,lat1:56.073596},
  709. {c:'ntagil',t:'Нижний Тагил',lon0:59.761784,lat0:58.091704,lon1:60.346479,lat1:57.749301},
  710. {c:'novokuznetsk',t:'Новокузнецк',lon0:86.509223,lat0:54.12147,lon1:87.462249,lat1:53.497556},
  711. {c:'novorossiysk',t:'Новороссийск',lon0:36.941617,lat0:45.220677,lon1:38.667966,lat1:44.308124},
  712. {c:'novosibirsk',t:'Новосибирск',lon0:82.510765,lat0:55.247648,lon1:83.392393,lat1:54.554446},
  713. {c:'norilsk',t:'Норильск',lon0:87.260832,lat0:69.562188,lon1:88.505768,lat1:69.24282},
  714. {c:'noyabrsk',t:'Ноябрьск',lon0:74.303375,lat0:63.879187,lon1:76.261961,lat1:63.018253},
  715. {c:'odessa',t:'Одесса',lon0:30.516309,lat0:46.655044,lon1:30.907145,lat1:46.255108},
  716. {c:'omsk',t:'Омск',lon0:72.887675,lat0:55.41625,lon1:73.767507,lat1:54.786527},
  717. {c:'orenburg',t:'Оренбург',lon0:54.924569,lat0:51.934474,lon1:55.492074,lat1:51.664988},
  718. {c:'orel',t:'Орёл',lon0:35.862453,lat0:53.100811,lon1:36.307015,lat1:52.841941},
  719. {c:'penza',t:'Пенза',lon0:44.799634,lat0:53.347629,lon1:45.354652,lat1:53.067028},
  720. {c:'perm',t:'Пермь',lon0:55.614632,lat0:58.24263,lon1:56.657883,lat1:57.687295},
  721. {c:'petrozavodsk',t:'Петрозаводск',lon0:34.097521,lat0:61.958332,lon1:34.704693,lat1:61.692627},
  722. {c:'p_kamchatskiy',t:'Петропавловск-Камчатский',lon0:158.192879,lat0:53.349661,lon1:159.022701,lat1:52.855709},
  723. {c:'pskov',t:'Псков',lon0:28.168843,lat0:57.887497,lon1:28.486188,lat1:57.728751},
  724. {c:'minvody',t:'Пятигорск (МКВ)',lon0:42.601023,lat0:44.303459,lon1:43.526522,lat1:43.809756},
  725. {c:'rostov',t:'Ростов-на-Дону',lon0:39.359282,lat0:47.36713,lon1:39.922182,lat1:47.054343},
  726. {c:'ryazan',t:'Рязань',lon0:39.437034,lat0:54.880683,lon1:39.98795,lat1:54.488756},
  727. {c:'samara',t:'Самара',lon0:49.780398,lat0:53.712492,lon1:50.5218,lat1:53.039959},
  728. {c:'spb',t:'Санкт-Петербург',lon0:29.413543,lat0:60.291813,lon1:31.025315,lat1:59.536028},
  729. {c:'saransk',t:'Саранск',lon0:44.865611,lat0:54.301903,lon1:45.510315,lat1:53.984632},
  730. {c:'saratov',t:'Саратов',lon0:45.734752,lat0:51.698298,lon1:46.310632,lat1:51.354685},
  731. {c:'smolensk',t:'Смоленск',lon0:31.759159,lat0:54.887908,lon1:32.264515,lat1:54.689285},
  732. {c:'sochi',t:'Сочи',lon0:38.939135,lat0:44.353733,lon1:40.485856,lat1:43.364347},
  733. {c:'stavropol',t:'Ставрополь',lon0:41.662292,lat0:45.267846,lon1:42.319957,lat1:44.894653},
  734. {c:'staroskol',t:'Старый Оскол',lon0:37.747518,lat0:51.376996,lon1:37.979511,lat1:51.247807},
  735. {c:'sterlitamak',t:'Стерлитамак',lon0:55.804271,lat0:53.736985,lon1:56.131425,lat1:53.302877},
  736. {c:'surgut',t:'Сургут',lon0:72.380354,lat0:61.408286,lon1:73.795756,lat1:60.977162},
  737. {c:'syktyvkar',t:'Сыктывкар',lon0:50.430121,lat0:61.92271,lon1:51.273671,lat1:61.570344},
  738. {c:'tambov',t:'Тамбов',lon0:41.274139,lat0:52.824738,lon1:41.596269,lat1:52.563152},
  739. {c:'tver',t:'Тверь',lon0:35.539365,lat0:57.014891,lon1:36.306018,lat1:56.668274},
  740. {c:'tobolsk',t:'Тобольск',lon0:68.02465,lat0:58.337205,lon1:68.627772,lat1:58.061143},
  741. {c:'togliatti',t:'Тольятти',lon0:48.960426,lat0:53.708123,lon1:49.795328,lat1:53.028213},
  742. {c:'tomsk',t:'Томск',lon0:84.767252,lat0:56.595693,lon1:85.245125,lat1:56.348027},
  743. {c:'tula',t:'Тула',lon0:37.418202,lat0:54.317121,lon1:38.417427,lat1:53.900976},
  744. {c:'tyumen',t:'Тюмень',lon0:65.211818,lat0:57.26989,lon1:66.689442,lat1:56.39768},
  745. {c:'ulanude',t:'Улан-Удэ',lon0:107.35702,lat0:52.056482,lon1:107.989383,lat1:51.691354},
  746. {c:'ulyanovsk',t:'Ульяновск',lon0:48.035268,lat0:54.469311,lon1:48.770267,lat1:54.10641},
  747. {c:'ussuriysk',t:'Уссурийск',lon0:131.747838,lat0:43.971874,lon1:132.140642,lat1:43.708082},
  748. {c:'ustkam',t:'Усть-Каменогорск',lon0:82.443429,lat0:50.059191,lon1:82.804309,lat1:49.857962},
  749. {c:'ufa',t:'Уфа',lon0:55.713687,lat0:54.923449,lon1:56.31101,lat1:54.478525},
  750. {c:'khabarovsk',t:'Хабаровск',lon0:134.87774,lat0:48.605492,lon1:135.254878,lat1:48.2902},
  751. {c:'kharkov',t:'Харьков',lon0:35.985546,lat0:50.125366,lon1:36.435986,lat1:49.835602},
  752. {c:'cheboksary',t:'Чебоксары',lon0:46.993754,lat0:56.340676,lon1:47.601603,lat1:55.982206},
  753. {c:'chelyabinsk',t:'Челябинск',lon0:61.189643,lat0:55.318442,lon1:61.740423,lat1:54.991858},
  754. {c:'chita',t:'Чита',lon0:113.10627,lat0:52.184623,lon1:113.635026,lat1:51.928002},
  755. {c:'yuzhnosakhalinsk',t:'Южно-Сахалинск',lon0:142.455994,lat0:47.512348,lon1:142.963443,lat1:46.586553},
  756. {c:'yakutsk',t:'Якутск',lon0:129.529959,lat0:62.186695,lon1:129.988145,lat1:61.801651},
  757. {c:'yaroslavl',t:'Ярославль',lon0:39.726128,lat0:57.773598,lon1:40.0046,lat1:57.521928},
  758. {c:'makhachkala',t:'Махачкала',lon0:47.044144,lat0:43.208304,lon1:47.678261,lat1:42.688871},
  759. {c:'bishkek',t:'Бишкек',lon0:74.21402,lat0:43.014815,lon1:74.914398,lat1:42.67398},
  760. {c:'pavlodar',t:'Павлодар',lon0:76.557198,lat0:52.529277,lon1:77.310448,lat1:51.903507},
  761. {c:'kiev',t:'Киев',lon0:30.045719,lat0:50.652889,lon1:30.679836,lat1:50.147921}
  762. );
  763.  
  764. if(llz.zoom > 18) llz.zoom = 18; //???
  765. for (i=0; i < Arr2GisCity.length; ++i)
  766. {
  767. if (llz.lon >= Arr2GisCity[i].lon0 && llz.lon <= Arr2GisCity[i].lon1 &&
  768. llz.lat >= Arr2GisCity[i].lat1 && llz.lat <= Arr2GisCity[i].lat0)
  769. {
  770. llz.city=Arr2GisCity[i].c;
  771. break;
  772. }
  773. }
  774. break;
  775. }
  776. case "_map_NM":
  777. {
  778. break;
  779. }
  780. case "_map_YM":
  781. {
  782. break;
  783. }
  784. case "_map_Google":
  785. {
  786. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_Convert_WME2Other(): location.href.indexOf('mapmaker')="+location.href.indexOf("mapmaker"));
  787. if(location.href.indexOf("mapmaker") > 0)
  788. llz.zoom=llz.zoom+1;
  789. break;
  790. }
  791. case "_map_SC":
  792. {
  793. break;
  794. }
  795. case "_map_SC2":
  796. {
  797. break;
  798. }
  799. case "_map_NAVITEL":
  800. {
  801. break;
  802. }
  803. case "_map_BING":
  804. {
  805. break;
  806. }
  807. case "_map_HERE":
  808. {
  809. break;
  810. }
  811. case "_map_LI":
  812. {
  813. break;
  814. }
  815. case "_map_WM":
  816. {
  817. break;
  818. }
  819. case "_map_OSM":
  820. {
  821. break;
  822. }
  823. case "_map_BP":
  824. {
  825. break;
  826. }
  827. case "_map_RE":
  828. {
  829. var urPos=new OpenLayers.LonLat(llz.lon,llz.lat);
  830. urPos.transform(new OpenLayers.Projection("EPSG:4326"),new OpenLayers.Projection("EPSG:900913"));
  831. llz.lat=urPos.lat;
  832. llz.lon=urPos.lon;
  833. break;
  834. }
  835. case "_map_GM":
  836. {
  837. break;
  838. }
  839. case "_map_BM":
  840. {
  841. var zoom = llz.zoom - 12;
  842. if (zoom > 7) zoom=7;
  843. //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}];
  844. for(var i=0; i < wmeJM_ArrW2B.length; ++i)
  845. {
  846. if(zoom == wmeJM_ArrW2B[i].w)
  847. {
  848. zoom=wmeJM_ArrW2B[i].b;
  849. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_Convert_WME2Other(): zoom("+i+")="+zoom+", llz.zoom="+llz.zoom);
  850. break;
  851. }
  852. }
  853. llz.zoom= zoom;
  854. // <function from http://balticmaps.eu>
  855. function Kijs_LatLon_2_Lks(c,r){c*=1;r*=1;var h;var n,W,t,B,G,w;var D,C,A,u;var S,Q,g,m,q,o,l,k,y,x;var s;var p;var b,a,Z,Y,O,X,U,T,H,e;var F,I,J,v,N,f,d;h=Math.PI/180;n=0.9996;W=6378137*n;t=6356752.3142*n;B=0;G=0;w=500000;D=(W-t)/(W+t);C=D*D;A=C*D;u=((W*W)-(t*t))/(W*W);S=c*h;Q=r*h;g=Math.sin(S);m=Math.cos(S);q=g/m;o=q*q;l=m*m;k=l*m;y=S-B;x=S+B;s=24;p=s*h;b=y*(1+D+1.25*(C+A));a=Math.sin(y)*Math.cos(x)*(3*(D+C+0.875*A));Z=Math.sin(2*y)*Math.cos(2*x)*(1.875*(C+A));Y=Math.sin(3*y)*Math.cos(3*x)*35/24*A;O=(b-a+Z-Y)*t;F=1-u*g*g;I=W/Math.sqrt(F);J=I*(1-u)/F;v=I/J-1;N=Q-p;f=N*N;d=f*f;b=O+G;a=I/2*g*m;Z=I/24*g*(k)*(5-(o)+9*v);Y=I/720*g*k*l*(61-58*(o)+o*o);H=b+f*a+d*Z+d*f*Y;X=I*m;U=I/6*k*(I/J-o);T=I/120*k*l;T=T*(5-18*o+o*o+14*v-58*o*v);e=w+N*X+f*N*U+d*N*T;return{x:e,y:H};}
  856. // </function from http://balticmaps.eu>
  857. let urPos=Kijs_LatLon_2_Lks(llz.lat,llz.lon);
  858. llz.lat=urPos.y;
  859. llz.lon=urPos.x;
  860. break;
  861. }
  862. case "_map_KDL":
  863. {
  864. // function convert from https://gist.github.com/laacz/8654c9bb3f62e6a6c201b11075ad5905
  865. function LatLonToLKS(a,o){function f(t){return sm_a=6378137,sm_b=6356752.31414,n=(sm_a-sm_b)/(sm_a+sm_b),alpha=(sm_a+sm_b)/2*(1+Math.pow(n,2)/4+Math.pow(n,4)/64),beta=-3*n/2+9*Math.pow(n,3)/16+-3*Math.pow(n,5)/32,gamma=15*Math.pow(n,2)/16+-15*Math.pow(n,4)/32,delta=-35*Math.pow(n,3)/48+105*Math.pow(n,5)/256,epsilon=315*Math.pow(n,4)/512,result=alpha*(t+beta*Math.sin(2*t)+gamma*Math.sin(4*t)+delta*Math.sin(6*t)+epsilon*Math.sin(8*t)),result;} function p(t){return t*Math.PI/180;}return LKS_UTM_SCALE_FACTOR=0.9996,a=p(a),o=p(o),sm_a=6378137,sm_b=6356752.31414,xy=[],phi=a,lambda=o,lambda0=p(24),ep2=(sm_a*sm_a-sm_b*sm_b)/sm_b/sm_b,nu2=ep2*Math.cos(phi)*Math.cos(phi),N=sm_a*sm_a/(sm_b*Math.sqrt(1+nu2)),t=Math.tan(phi),t2=t*t,l=lambda-lambda0,l3coef=1-t2+nu2,l4coef=5-t2+9*nu2+4*(nu2*nu2),l5coef=5-18*t2+t2*t2+14*nu2-58*t2*nu2,l6coef=61-58*t2+t2*t2+270*nu2-330*t2*nu2,l7coef=61-479*t2+179*(t2*t2)-t2*t2*t2,l8coef=1385-3111*t2+543*(t2*t2)-t2*t2*t2,xy[0]=N*Math.cos(phi)*l+N/6*Math.pow(Math.cos(phi),3)*l3coef*Math.pow(l,3)+N/120*Math.pow(Math.cos(phi),5)*l5coef*Math.pow(l,5)+N/5040*Math.pow(Math.cos(phi),7)*l7coef*Math.pow(l,7),xy[1]=f(phi)+t/2*N*Math.pow(Math.cos(phi),2)*Math.pow(l,2)+t/24*N*Math.pow(Math.cos(phi),4)*l4coef*Math.pow(l,4)+t/720*N*Math.pow(Math.cos(phi),6)*l6coef*Math.pow(l,6)+t/40320*N*Math.pow(Math.cos(phi),8)*l8coef*Math.pow(l,8),xy[0]=xy[0]*LKS_UTM_SCALE_FACTOR+5e5,xy[1]=xy[1]*LKS_UTM_SCALE_FACTOR-6e6,xy[1]<0&&(xy[1]=xy[1]+1e7),{x:xy[0],y:xy[1]};}
  866.  
  867. var p=LatLonToLKS(llz.lat,llz.lon);
  868. llz.lat=p.x;
  869. llz.lon=p.y;
  870.  
  871. let zoom = llz.zoom-12;
  872. if (zoom > 7) zoom=7;
  873.  
  874. for(let i=0; i < wmeJM_ArrW2KDL.length; ++i)
  875. {
  876. if(zoom == wmeJM_ArrW2KDL[i].w)
  877. {
  878. zoom=wmeJM_ArrW2KDL[i].r;
  879. break;
  880. }
  881. }
  882. llz.zoom= zoom;
  883. break;
  884. }
  885. case "_map_NCABY":
  886. {
  887. let urPos=new OpenLayers.LonLat(llz.lon,llz.lat);
  888. urPos.transform(new OpenLayers.Projection("EPSG:4326"),new OpenLayers.Projection("EPSG:900913"));
  889. llz.lat=urPos.lat;
  890. llz.lon=urPos.lon;
  891. break;
  892. }
  893. case "_map_MRY":
  894. {
  895. llz.zoom--; // TEMP!!!
  896. break;
  897. }
  898. case "_map_WMFLAB":
  899. {
  900. function convertd2dms(degrees)
  901. {
  902. var mydegrees = parseInt(degrees);
  903. var remaining = degrees - (mydegrees * 1.0);
  904. var minutes = remaining * 60.0;
  905. var myminutes = parseInt(minutes);
  906. remaining = minutes - (myminutes * 1.0);
  907. var myseconds = remaining * 60.0;
  908. myseconds = Math.round (myseconds * 10.0) / 10.0;
  909.  
  910. return {d:mydegrees,m:myminutes,s:myseconds};
  911. }
  912. var la=convertd2dms(llz.lat);
  913. llz.lat=la.d+'_'+la.m+'_'+la.s;
  914. var lo=convertd2dms(llz.lon);
  915. llz.lon=lo.d+'_'+lo.m+'_'+lo.s;
  916. llz.zoom = Math.pow(2, 12 - llz.zoom) * 100000; //??
  917. break;
  918. }
  919. case "_map_OSV":
  920. {
  921. if (llz.zoom > 18) llz.zoom=18;
  922. break;
  923. }
  924. case "_map_AMR":
  925. {
  926. //var ArrW2A=new Array({w:0,a:4},{w:1,a:5},{w:2,a:6},{w:3,a:7},{w:4,a:8},{w:5,a:9},{w:6,a:10});
  927. if (origzoom >= 7)
  928. llz.zoom=10;
  929. else
  930. llz.zoom=origzoom+4;
  931. break;
  932. }
  933. case '_map_VCUA':
  934. {
  935. break;
  936. }
  937. case '_map_MRUA':
  938. {
  939. break;
  940. }
  941. case '_map_KADUA':
  942. {
  943. // ZOOM!!!!
  944. break;
  945. }
  946. case '_map_MAPBYS':
  947. {
  948. break;
  949. }
  950. case '_map_MAPLT':
  951. {
  952. break;
  953. }
  954. }
  955. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_Convert_WME2Other(): return "+JSON.stringify(llz));
  956. return llz;
  957. }
  958.  
  959.  
  960. // дополнительно-принудительная обработка после прыжка "туда"
  961. function WmeJM_PostLoadOtherMaps()
  962. {
  963. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_PostLoadOtherMaps()");
  964. var waiting=false;
  965. var locType=WmeJM_GetLocationType();
  966. var llz=WmeJM_GetLLZ();
  967. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_PostLoadOtherMaps(): locType="+locType+": {lat="+llz.lat+",lon="+llz.lon+",zoom="+llz.zoom+"}");
  968.  
  969. switch(locType)
  970. {
  971. case "waze":
  972. {
  973. break;
  974. }
  975. case "NM":
  976. {
  977. break;
  978. }
  979. case "YM":
  980. {
  981. break;
  982. }
  983. case "google":
  984. {
  985. break;
  986. }
  987. case "2gis":
  988. {
  989. break;
  990. }
  991. case "re":
  992. {
  993. break;
  994. }
  995. case "sc":
  996. {
  997. break;
  998. }
  999. case "wm":
  1000. {
  1001. break;
  1002. }
  1003. case "bm":
  1004. {
  1005. break;
  1006. }
  1007. case "kdl":
  1008. {
  1009. break;
  1010. }
  1011. case "ncaby":
  1012. {
  1013. if (map)
  1014. {
  1015. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_PostLoadOtherMaps(): map.loaded="+map.loaded);
  1016. if (map.loaded)
  1017. {
  1018. // http://map.nca.by/map.html?xy=6878238.761035528,3451752.4686308377&z=17
  1019. var xy=__getQueryString(location.href, 'xy');
  1020. if(xy != -1)
  1021. {
  1022. var axy=xy.split(",");
  1023. llz.lon = parseFloat(axy[1]);
  1024. llz.lat = parseFloat(axy[0]);
  1025. llz.zoom = parseInt(__getQueryString(location.href, 'z'));
  1026. if(llz.zoom > 19) llz.zoom=19;
  1027. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_PostLoadOtherMaps(): locType="+locType+": map.centerAndZoom({x:"+llz.lon+",y:"+llz.lat+"},"+llz.zoom+")");
  1028. map.setZoom(llz.zoom).then(function() {
  1029. map.centerAt({x:llz.lon,y:llz.lat});
  1030. basemapGallery.select("google_satellite");
  1031. });
  1032. //basemapGallery.select("OpenStreetMap"); // google_satellite
  1033. //map.centerAndZoom({x:llz.lon,y:llz.lat}, llz.zoom);
  1034. }
  1035. }
  1036. else
  1037. waiting=true;
  1038. }
  1039. break;
  1040. }
  1041. case "osm":
  1042. {
  1043. break;
  1044. }
  1045. case "mry":
  1046. {
  1047. break;
  1048. }
  1049. case "wmflab":
  1050. {
  1051. break;
  1052. }
  1053. case "osv":
  1054. {
  1055. break;
  1056. }
  1057. case "amr":
  1058. {
  1059. break;
  1060. }
  1061. case 'vcua':
  1062. {
  1063. break;
  1064. }
  1065. case 'mrua':
  1066. {
  1067. break;
  1068. }
  1069. case 'kadua':
  1070. {
  1071. var re = new RegExp("\\bmap=(.*?)//(.*?)//(.*?)$");
  1072. var m = re.exec(document.location.hash);
  1073. if (m.length==4)
  1074. {
  1075. Proj4js.defs["EPSG:4284"] = '+proj=longlat+ellps=kras+towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12+no_defs';
  1076. //Proj4js.defs["EPSG:4326"] = '+proj=longlat+ellps=WGS84+datum=WGS84+no_defs+towgs84=0,0,0';
  1077. 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';
  1078.  
  1079. var point1 = new Proj4js.Point(m[2],m[3]);
  1080. //if(wmeJM_debug) console.log("RepositionKadastrUA:",m, point1);
  1081. Proj4js.transform(new Proj4js.Proj("EPSG:4284"), new Proj4js.Proj("EPSG:900913"), point1);
  1082.  
  1083. var new_response = point1.x + "," + point1.y + "," + point1.x + "," + point1.y;
  1084. var new_bounds_res = new OpenLayers.Bounds.fromString(new_response);
  1085. map.zoomToExtent(new_bounds_res);
  1086. var x = new_bounds_res.centerLonLat.lat;
  1087. var y = new_bounds_res.centerLonLat.lon;
  1088. map.setCenter(new OpenLayers.LonLat(y,x),m[1]);
  1089. map.setBaseLayer(tmsoverlay_orto);
  1090. }
  1091. break;
  1092. }
  1093. case 'mapbys':
  1094. {
  1095. break;
  1096. }
  1097. case 'maplt':
  1098. {
  1099. break;
  1100. }
  1101. }
  1102.  
  1103. if (waiting)
  1104. {
  1105. setTimeout(WmeJM_PostLoadOtherMaps,2000);
  1106. }
  1107. }
  1108.  
  1109.  
  1110.  
  1111. // обработчик мышиных кликов - собственно - прыгаем.
  1112. function WmeJM_clickJumpToMaps()
  1113. {
  1114. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_clickJumpToMaps("+this.id+")");
  1115.  
  1116. var savedSelectedItems=[];
  1117. if (wmeJM_restoreSelected && !(this.id === '_map_WME' || this.id.indexOf("_map_WME_") >= 0 || this.id === '_map_WMEB'))
  1118. {
  1119. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_clickJumpToMaps("+this.id+"): save selected");
  1120. for( var i=0; i < W.selectionManager.getSelectedFeatures().length; ++i)
  1121. savedSelectedItems.push(W.selectionManager.getSelectedFeatures()[i].model);
  1122. }
  1123.  
  1124. var llz=WmeJM_GetLLZ();
  1125. //if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_clickJumpToMaps("+this.id+"): llz={lat:"+llz.lat+",lon:"+llz.lon+",zoom:"+llz.zoom+"}");
  1126. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_clickJumpToMaps("+this.id+"): llz="+JSON.stringify(llz));
  1127.  
  1128. if (this.id == '_map_WME' || this.id == '_map_WMEB' || this.id.indexOf("_map_WME_") >= 0)
  1129. llz=WmeJM_Convert_Other2WME(llz);
  1130. else
  1131. llz=WmeJM_Convert_WME2Other(this.id,llz);
  1132.  
  1133. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_clickJumpToMaps("+this.id+"): wmeJM_Config["+this.id+"]="+JSON.stringify(wmeJM_Config[this.id]));
  1134.  
  1135. var template=(typeof wmeJM_Config[this.id] !== "undefined")?wmeJM_Config[this.id].template:"";
  1136. if (this.id.indexOf("_map_WME_") >= 0)
  1137. template=wmeJM_Config["_map_WME"].template;
  1138. 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":"");
  1139.  
  1140. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_clickJumpToMaps("+this.id+"): " + url + ', _url'+this.id);
  1141.  
  1142. if(wmeJM_restoreSelected && !(this.id == '_map_WME' || this.id.indexOf("_map_WME_") >= 0 || this.id == '_map_WMEB')) // restore selections
  1143. {
  1144. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_clickJumpToMaps("+this.id+"): restore selected");
  1145. setTimeout(function() {if (savedSelectedItems.length > 0){W.selectionManager.select(savedSelectedItems);savedSelectedItems.length=0;}},50);
  1146. }
  1147.  
  1148. if (this.id.indexOf("_map_WME_") >= 0) // если что-то эдакое, jmlink - киляем из урла латы/лонги/зумы...
  1149. {
  1150. if (this.getAttribute("jmfrom") === "mapbys") // если что-то эдакое, jmlink - киляем из урла латы/лонги/зумы...
  1151. {
  1152. window.open("http://map.nca.by/map.html?xy="+this.getAttribute("jmlink")+"&z=16",'_url_jm'+this.id);
  1153. }
  1154. url=url.split("&")[0]+"&jmlink="+this.getAttribute("jmlink");
  1155. }
  1156.  
  1157. window.open(url,'_url'+this.id);
  1158. }
  1159.  
  1160.  
  1161. function WmeJM_UpdateJumpStyle()
  1162. {
  1163. //if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_UpdateJumpStyle()");
  1164. var JumpTools=document.getElementById('WME.JumpMaps_' + wmeJM_version);
  1165. if (JumpTools)
  1166. {
  1167. var w=
  1168. document.getElementsByClassName("olControlScaleLine")[0].clientWidth+
  1169. document.getElementsByClassName("WazeControlMousePosition")[0].clientWidth+
  1170. document.getElementsByClassName("WazeControlPermalink")[0].clientWidth+
  1171. 50;
  1172.  
  1173. //if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_UpdateJumpStyle(): w="+w);
  1174. JumpTools.setAttribute('style','position:absolute;z-index:2003;float:right;font-size:10px; right: '+w+'px;');
  1175. //if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_UpdateJumpStyle(): style="+JumpTools.getAttribute('style'));
  1176.  
  1177. }
  1178. setTimeout(WmeJM_UpdateJumpStyle,300);
  1179. }
  1180.  
  1181.  
  1182. // добавить в WME
  1183. function WmeJM_InsertWMEIcon()
  1184. {
  1185. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertWMEIcon(): "+(document.getElementById('WME.JumpMaps_' + wmeJM_version)?"found":"none"));
  1186. var nod=document.getElementById('WME.JumpMaps_' + wmeJM_version);
  1187. if(nod)
  1188. {
  1189. // clear exist
  1190. nod.innerHTML="";
  1191. }
  1192. else
  1193. {
  1194. // create new
  1195. nod=document.createElement("div");
  1196. nod.setAttribute('id', 'WME.JumpMaps_' + wmeJM_version);
  1197. nod.setAttribute('unselectable', 'on');
  1198. }
  1199.  
  1200. nod.innerHTML="";
  1201.  
  1202. function IsJsonString(str) {
  1203. try {
  1204. JSON.parse(str);
  1205. } catch (e) {
  1206. return false;
  1207. }
  1208. return true;
  1209. }
  1210.  
  1211. var WMEJumpMapsLink=null;
  1212.  
  1213. if ("undefined" === typeof localStorage.WMEJumpMapsLink || !IsJsonString(localStorage.getItem('WMEJumpMapsLink')))
  1214. {
  1215. localStorage.setItem('WMEJumpMapsLink', WmeJM_Config2String());
  1216. WMEJumpMapsLink=localStorage.getItem("WMEJumpMapsLink");
  1217.  
  1218. //if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): use WMEJumpMapsLink0!!! ");
  1219. }
  1220. else
  1221. {
  1222. WMEJumpMapsLink=localStorage.getItem("WMEJumpMapsLink");
  1223. //if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): use custom WMEJumpMapsLink="+WMEJumpMapsLink);
  1224. }
  1225.  
  1226. var innerHTML="";
  1227. if (WMEJumpMapsLink)
  1228. {
  1229. var aLinks = JSON.parse(WMEJumpMapsLink);
  1230. // clear save
  1231. for(var i in wmeJM_Config)
  1232. wmeJM_Config[i].save = 0;
  1233.  
  1234. // set save & create labels
  1235. for (let i in aLinks)
  1236. {
  1237. if (["_map_WME","_map_WMEB","_map_LI"].indexOf(i) < 0)
  1238. {
  1239. //if(wmeJM_debug) console.log("process "+i +" typeof wmeJM_Config[i]="+(typeof wmeJM_Config[i])+ " " + JSON.stringify(wmeJM_Config[i]));
  1240. if (typeof wmeJM_Config[i] !== "undefined")
  1241. {
  1242. wmeJM_Config[i].save = 1;
  1243. wmeJM_Config[i].title = aLinks[i].title;
  1244. wmeJM_Config[i].name = aLinks[i].name;
  1245. wmeJM_Config[i].template = aLinks[i].template;
  1246.  
  1247. innerHTML += "<a id='" + i + "' style='font-size: 10px' title='" + aLinks[i].title + "'>" + aLinks[i].name + "</a>&nbsp;";
  1248. }
  1249. }
  1250. }
  1251. }
  1252.  
  1253. var main_site=location.hostname === "www.waze.com";
  1254. nod.innerHTML = innerHTML
  1255. + "<a id='_map_LI' style='font-size: 10px' title='Open in LiveMap'>[Live]</a>&nbsp;"
  1256. + "<a id='_map_AB' tp="+(main_site?'A':'B')+" href='' style='font-size: 12px' title='Open in "+(main_site?"Beta":"Main")+" editor' target='" +CreateID()+ (main_site?"b":"a")+"' id='__map_BETAALPA'>["+ (main_site?"&#946;":"&#945;")+"]</a>&nbsp;"
  1257. + "<a href='https://gf.qytechs.cn/ru/scripts/19626-wme-jumpmaps' title='WME-JumpMaps_" + wmeJM_version + "' style='font-size: 10px' target='_blank'>[?]</a>&nbsp;";
  1258.  
  1259. document.getElementsByClassName('olControlAttribution')[0].parentElement.appendChild(nod);
  1260.  
  1261. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertWMEIcon(): innerHTML="+document.getElementById('WME.JumpMaps_' + wmeJM_version).innerHTML);
  1262.  
  1263. {
  1264. //if(wmeJM_debug) console.log("call JSON.parse");
  1265. let aLinks = JSON.parse(WMEJumpMapsLink);
  1266. //if(wmeJM_debug) console.log("call JSON.parse - done");
  1267. for (let i in aLinks)
  1268. {
  1269. if (document.getElementById(i))
  1270. document.getElementById(i).onclick = WmeJM_clickJumpToMaps;
  1271. }
  1272. document.getElementById('_map_LI').onclick = WmeJM_clickJumpToMaps;
  1273. document.getElementById('_map_AB').onclick = function(){
  1274. var permalink="?"+wmer_generate_permalink().split("?")[1];
  1275. if(wmeJM_debug) console.log("_map_AB.click(), permalink=",permalink);
  1276. if(wmeJM_debug) console.log(this.getAttribute('tp'));
  1277. var main_site=this.getAttribute('tp')==='A';
  1278. this.href=(main_site?"https://beta.waze.com/editor":"https://www.waze.com/editor") + permalink;
  1279. if(wmeJM_debug) console.log(this.href);
  1280. //this.click();
  1281. //return false;
  1282. };
  1283. }
  1284.  
  1285. WmeJM_UpdateJumpStyle();
  1286. }
  1287.  
  1288. // вставка "ссылки" для прыжка
  1289. function WmeJM_InsertIcon()
  1290. {
  1291. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon()");
  1292. var locType=WmeJM_GetLocationType();
  1293. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): locType="+locType);
  1294.  
  1295. if(locType == "waze")
  1296. return true;
  1297.  
  1298. var result = false;
  1299.  
  1300. var nod=document.createElement(locType === "mry" || locType === "osm" || locType === "re" || locType === "2gis" || locType === "YM"?"div":(locType === "NM"?"div":"span"));
  1301. nod.setAttribute('id', 'WME.JumpMaps_' + wmeJM_version);
  1302. window.nod=nod;
  1303.  
  1304. var clsid=
  1305. {
  1306. //"NM" : {t:0,c:"nk-map-region-view__actions-and-path"},
  1307. "NM" : {t:0,c:"nk-button nk-button_theme_on-map nk-button_size_l nk-geolocation-view"},
  1308. //"NM" : {t:3,c:"body"},
  1309. "YM" : {t:2,c:"print-control"},
  1310. "google" : {t:0,c:"fineprint-item fineprint-padded fineprint-tld-escape-holder noprint"},
  1311. "2gis" : {t:0,c:"online__controlsItem _geoLocation"},
  1312. "sc" : {t:1,c:"Right_menu"},
  1313. "re" : {t:0,c:"logo"},
  1314. "wm" : {t:1,c:"wm-Add"},
  1315. "bm" : {t:0,c:"kijs_noprint"},
  1316. "kdl" : {t:1,c:"social_networks"},
  1317. "ncaby" : {t:1,c:"LocateButton"},
  1318. "osm" : {t:0,c:"control-layers leaflet-control"},
  1319. "mapbys" : {t:1,c:"search_td"},
  1320. "mry" : {t:0,c:"comments"} //
  1321. };
  1322.  
  1323. if(typeof clsid[locType] === 'undefined')
  1324. {
  1325. WmeJM_PostLoadOtherMaps();
  1326. return true;
  1327. }
  1328.  
  1329. var WazeControlAttribution = null;
  1330. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): clsid[locType]="+JSON.stringify(clsid[locType]));
  1331. if(clsid[locType])
  1332. 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));
  1333. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): WazeControlAttribution="+(typeof WazeControlAttribution),WazeControlAttribution);
  1334.  
  1335. var found00=false;
  1336. if (WazeControlAttribution)
  1337. {
  1338. if (!clsid[locType].t)
  1339. {
  1340. if (WazeControlAttribution.length > 0)
  1341. {
  1342. found00=true;
  1343. }
  1344. else
  1345. {
  1346. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): wait 1 ",locType,clsid[locType]);
  1347. setTimeout(function() {WmeJM_InsertIcon();},500,this);
  1348. return false;
  1349. }
  1350. }
  1351. else
  1352. {
  1353. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): found00=true;");
  1354. found00=true;
  1355. }
  1356.  
  1357. if (!found00)
  1358. {
  1359. if(document.readyState != 'complete' && ++wmeJM_countProbe2 < 5)
  1360. {
  1361. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): wait 2 ",locType,clsid[locType]);
  1362. setTimeout(function() {WmeJM_InsertIcon();},500,this);
  1363. return false;
  1364. }
  1365. }
  1366. }
  1367. else
  1368. {
  1369. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): wait 3 ",clsid[locType]);
  1370. setTimeout(function() {WmeJM_InsertIcon();},100,this);
  1371. return false;
  1372. }
  1373.  
  1374. if (found00)
  1375. {
  1376. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): found '", (clsid[locType].t?WazeControlAttribution:WazeControlAttribution[0]));
  1377. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InsertIcon(): document.readyState=" + document.readyState);
  1378.  
  1379. switch(locType)
  1380. {
  1381. case "NM":
  1382. {
  1383. //nod.setAttribute('class', 'button button_type_link button_theme_on-map button_view_dark button_size_l nk-tooltip nk-map-region-view__button nk-tooltip_for_button button__control i-bem button_js_inited');
  1384. //nod.setAttribute('data-bem', '{"button":{},"nk-tooltip":{"title":"Open to"}}');
  1385. nod.setAttribute('style', 'z-index:99999;width: 34px;height: 34px;;bottom: 320px;left: 19px;position: absolute;');
  1386. //nod.innerHTML = '<span class="nk-icon icon"><img id="_map_WME" style="cursor: pointer;" alt="Open to WME" src="'+wmeJM_IconWME+'" width="32px" height="32px"></span>';
  1387. nod.innerHTML = '<img id="_map_WME" style="cursor: pointer;" alt="Open to WME" src="'+wmeJM_IconWME+'" width="32px" height="32px">';
  1388. //WazeControlAttribution[0].innerHTML=WazeControlAttribution[0].innerHTML+nod.outerHTML;
  1389. WazeControlAttribution[0].outerHTML=WazeControlAttribution[0].outerHTML+nod.outerHTML;
  1390. /*
  1391. //nod.setAttribute('class', 'button button_type_link button_theme_on-map button_view_dark button_size_l nk-tooltip nk-map-region-view__button nk-tooltip_for_button button__control i-bem button_js_inited');
  1392. //nod.setAttribute('class', 'nk-button_theme_on-map');
  1393. //nod.setAttribute('data-bem', '{"button":{},"nk-tooltip":{"title":"Open to"}}');position: relative;
  1394. nod.setAttribute('style', 'z-index:9999;margin-right: 8px;margin-left: 8px; bottom: 320px; left: 9px;position: absolute;');
  1395. nod.innerHTML = '<span class="nk-icon icon" style="width: 32px; height: 32px;"><img id="_map_WME" style="cursor: pointer;" alt="Open to WME" src="'+wmeJM_IconWME+'" width="32px" height="32px"></span>';
  1396. WazeControlAttribution[0].parentNode.innerHTML=WazeControlAttribution[0].parentNode.innerHTML+nod.outerHTML;
  1397. console.dir (WazeControlAttribution[0])
  1398. */
  1399. break;
  1400. }
  1401. case "YM":
  1402. {
  1403. nod.setAttribute('style', 'background-color:#fff;width:40px');
  1404.  
  1405. if (1)
  1406. {
  1407. nod.setAttribute('class', 'controls-group__child');
  1408. nod.innerHTML = '<a id="_map_WME" style="cursor: pointer;width:32px;height:32px;" title="Open to WME"><img src="'+wmeJM_IconWME+'" class="button_basic-medium _checked _pin-left _pin-right" align="center"></a>';
  1409. WazeControlAttribution[0].parentElement.parentElement.insertBefore(nod, WazeControlAttribution[0].parentElement);
  1410. }
  1411. else
  1412. {
  1413. nod.setAttribute('class', 'controls-group__child'); // map-controls-view__control-layout
  1414. nod.innerHTML = '<a id="_map_WME" style="cursor: pointer;" title="Open to WME"><img src="'+wmeJM_IconWME+'" width="36px" height="36px"></a>';
  1415.  
  1416. setTimeout(function() {WmeJM_InsertIcon();
  1417. WazeControlAttribution[0].parentElement.parentElement.insertBefore(nod, WazeControlAttribution[0].parentElement);
  1418. document.getElementById('_map_WME').onclick = WmeJM_clickJumpToMaps;
  1419. },3000,this);
  1420. }
  1421. break;
  1422. }
  1423. case "google":
  1424. {
  1425. nod.innerHTML = "<a id='_map_WME' title='Open in WME'>[WME]</a>&nbsp;&nbsp;&nbsp;";
  1426. WazeControlAttribution[0].parentElement.insertBefore(nod, WazeControlAttribution[0]);
  1427. break;
  1428. }
  1429. case "2gis":
  1430. {
  1431. nod.setAttribute('class', 'online__controlsItem');
  1432. nod.setAttribute('style', 'margin-top:16px');
  1433. nod.innerHTML = "<div id='_map_WME' style='border:5px solid #3d3d3d;border-radius:50%;width:30px;height:30px' title='Open to WME'><img style='cursor: pointer;' width=30 height=30 src='"+wmeJM_IconWME+"'></div>";
  1434. WazeControlAttribution[0].parentElement.insertBefore(nod, WazeControlAttribution[0]);
  1435. break;
  1436. }
  1437. case "re":
  1438. {
  1439. nod.setAttribute("style","position: absolute; top: 15px; right: 32px; z-index:2003;");
  1440. nod.innerHTML = "<a id='_map_WME' title='Open to WME'><img style='cursor: pointer;' width=32 height=32 src='"+wmeJM_IconWME+"'></a>";
  1441. WazeControlAttribution[0].parentElement.insertBefore(nod, WazeControlAttribution[0]);
  1442. break;
  1443. }
  1444. case "sc":
  1445. {
  1446. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_FakeLoad(), WazeControlAttribution.innerHTML: " + WazeControlAttribution.innerHTML);
  1447. $("#Right_menu").append('<div id="_map_WMEB" class="butt" title="Open in WME BETA!">Waze Beta</div>');
  1448. break;
  1449. }
  1450. case "wm":
  1451. {
  1452. 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>';
  1453. break;
  1454. }
  1455. case "bm":
  1456. {
  1457. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): locType === bm");
  1458. var td=document.createElement("TD");
  1459. td.style="background: transparent none repeat scroll 0% 0%; padding: 0px; margin: 0px; border: 0px solid black;";
  1460.  
  1461. td.setAttribute('id', 'WME.JumpMaps_' + wmeJM_version);
  1462. td.innerHTML = "<a id='_map_WME' title='Open to WME'><img style='cursor: pointer; ' width=24 height=24 src='"+wmeJM_IconWME+"'></a>";
  1463.  
  1464. for(var i=0; i < WazeControlAttribution.length; ++i)
  1465. {
  1466. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WazeControlAttribution[i].tagName="+WazeControlAttribution[i].tagName);
  1467.  
  1468. if(WazeControlAttribution[i].tagName == "TABLE")
  1469. {
  1470. WazeControlAttribution[i].rows[0].appendChild(td);
  1471. break;
  1472. }
  1473. }
  1474. break;
  1475. }
  1476. case "kdl":
  1477. {
  1478. WazeControlAttribution.innerHTML=WazeControlAttribution.innerHTML+'<a id="_map_WME" class="waze" title="Open in WME"></a>';
  1479. document.styleSheets[0].insertRule("#social_networks a.waze { background:url("+wmeJM_IconWME+" );background-size: 100% 100%; right: 236px;}", 0);
  1480. break;
  1481. }
  1482. case "ncaby":
  1483. {
  1484. WazeControlAttribution.innerHTML=WazeControlAttribution.innerHTML+
  1485. '<div style="display: block; top: 340px;" widgetid="WazeButton" id="WazeButton" role="presentation">'+
  1486. '<a id="_map_WME" title="Open to WME"><img style="cursor: pointer; padding-left: 4px;" width=28 height=28 src="'+wmeJM_IconWME+'"></a></div>';
  1487. break;
  1488. }
  1489. case "osm":
  1490. {
  1491. nod.setAttribute('class', "leaflet-control");
  1492. 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>";
  1493. WazeControlAttribution[0].parentElement.insertBefore(nod, WazeControlAttribution[0]);
  1494. break;
  1495. }
  1496. case "mapbys":
  1497. {
  1498. var aArray=$("#search_td").find("a");
  1499. if(wmeJM_debug) console.log("aArray.length",aArray.length);
  1500. if (aArray.length > 0)
  1501. {
  1502. for(i=0; i < aArray.length;++i)
  1503. {
  1504. if (!document.getElementById('WME.JumpMaps_' + wmeJM_version))
  1505. {
  1506. nod.innerHTML="";
  1507. aArray[i].parentElement.insertBefore(nod, aArray[i]);
  1508. }
  1509.  
  1510. if(aArray[i].href.indexOf("maps.by/map/")>0)
  1511. {
  1512. if(wmeJM_debug) console.log("aArray["+i+"].href=",aArray[i].href);
  1513. var llll = __getQueryString(aArray[i].href, 'link').split(',');
  1514. let lon=parseFloat(llll[0])+(parseFloat(llll[2])-parseFloat(llll[0]))/2;
  1515. let lat=parseFloat(llll[1])+(parseFloat(llll[3])-parseFloat(llll[1]))/2;
  1516.  
  1517. var anod=document.createElement("a");
  1518. anod.setAttribute('id', '_map_WME_' + i); // !!! !!!
  1519. anod.setAttribute('jmlink', ""+lat+","+lon); // преобразовывать координаты будем "там" (в WME)
  1520. anod.setAttribute('jmfrom', 'mapbys'); // !!! !!!
  1521. anod.setAttribute('title','Open to WME');
  1522. anod.setAttribute('style','color:#2a4984;text-decoration: underline;cursor:pointer');
  1523. anod.innerHTML='<img style="cursor: pointer; padding-left: 8px;" align="top" width=18 height=18 src="'+wmeJM_IconWME+'">';
  1524.  
  1525. aArray[i].parentElement.insertBefore(anod, aArray[i]);
  1526. aArray[i].setAttribute('title',aArray[i].innerText);
  1527. aArray[i].innerHTML='<img style="cursor: pointer;" width=18 height=18 src="http://maps.by/img/logo_min.png">';
  1528.  
  1529. aArray[i].parentNode.insertBefore(aArray[i],aArray[i].parentNode.firstChild); // swap
  1530.  
  1531. document.getElementById('_map_WME_'+ i).onclick = WmeJM_clickJumpToMaps;
  1532. if(wmeJM_debug) console.log("anod=",document.getElementById('_map_WME_'+ i));
  1533. }
  1534. }
  1535. }
  1536. /*
  1537. for maps.by/map - обратка
  1538. WazeControlAttribution.parentElement.parentElement.innerHTML=
  1539. '<div id="WME.JumpMaps_' + wmeJM_version + '">' +
  1540. '<a id="_map_WME" title="Open to WME"><img style="cursor: pointer; padding-left: 4px;" width=28 height=28 src="'+wmeJM_IconWME+'"></a></div>' +
  1541. WazeControlAttribution.parentElement.parentElement.innerHTML;
  1542. */
  1543. break;
  1544. }
  1545. case "mry":
  1546. {
  1547. WazeControlAttribution[0].parentElement.parentElement.innerHTML=
  1548. '<div _ngcontent-yrv-39="" id="WME.JumpMaps_' + wmeJM_version + '" class="IconContainer bg-icon m1 mt2 relative cursor-pointer pointer-events-auto" dropup-control="" for="">' +
  1549. '<a id="_map_WME" title="Open to WME"><img style="cursor: pointer; padding-left: 4px;" width=28 height=28 src="'+wmeJM_IconWME+'"></a></div>' +
  1550. WazeControlAttribution[0].parentElement.parentElement.innerHTML;
  1551. break;
  1552. }
  1553. }
  1554.  
  1555. if (document.getElementById('_map_WME'))
  1556. {
  1557. document.getElementById('_map_WME').onclick = WmeJM_clickJumpToMaps;
  1558. result=true;
  1559. }
  1560. if (document.getElementById('_map_WMEB'))
  1561. {
  1562. document.getElementById('_map_WMEB').onclick = WmeJM_clickJumpToMaps;
  1563. result=true;
  1564. }
  1565. }
  1566. else
  1567. {
  1568. 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))+"]");
  1569. }
  1570.  
  1571. if (result)
  1572. WmeJM_PostLoadOtherMaps();
  1573.  
  1574. return result;
  1575. }
  1576.  
  1577. function WmeJM_InitConfig()
  1578. {
  1579. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InitConfig(): "+document.getElementById(CreateID()));
  1580. if(!document.getElementById(CreateID()))
  1581. {
  1582. var srsCtrl = document.createElement('section');
  1583. srsCtrl.id = CreateID();
  1584.  
  1585. var userTabs = document.getElementById('user-info');
  1586. if (typeof userTabs !== "undefined")
  1587. {
  1588. var navTabs = getElementsByClassName('nav-tabs', userTabs)[0];
  1589. if (typeof navTabs !== "undefined")
  1590. {
  1591. var tabContent = getElementsByClassName('tab-content', userTabs)[0];
  1592. if (typeof tabContent !== "undefined")
  1593. {
  1594. let newtab = document.createElement('li');
  1595. // fa ==> http://fontawesome.io/cheatsheet/
  1596. newtab.innerHTML = '<a href="#' + CreateID() + '" id="pwmejumpmaps" data-toggle="tab"><span class="fa fa-rocket"></span>&nbsp;JM</a>';
  1597. navTabs.appendChild(newtab);
  1598.  
  1599. //srsCtrl.id = "sidepanel-???";
  1600. var padding="padding:5px 9px";
  1601.  
  1602. // -------------------------------
  1603. var strFormCode = ''
  1604. +'<div class="side-panel-section">'
  1605. +'<h4>WME JumpMaps <sup>' + wmeJM_version + '</sup>&nbsp;<sub><a href="https://gf.qytechs.cn/ru/scripts/19626-wme-jumpmaps" target="_blank"><span class="fa fa-external-link"></span></a></sub></h4>'
  1606. +'<form class="attributes-form side-panel-section" action="javascript:return false;">'
  1607.  
  1608. +'<div class="form-group">'
  1609. +'<label class="control-label">Назначения:</label>'
  1610. +'<div class="controls">';
  1611. for(var i in wmeJM_Config)
  1612. {
  1613. if (["_map_WME","_map_WMEB","_map_LI"].indexOf(i) >= 0)
  1614. {
  1615. continue;
  1616. }
  1617. var id=i;
  1618. var title=wmeJM_Config[i].title;
  1619. var template=wmeJM_Config[i].template;
  1620. var save=wmeJM_Config[i].save;
  1621. strFormCode += ''
  1622. +'<div class="form-group">'
  1623. +'<label class="control-label">'
  1624. +'<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>'
  1625. +'</label>' + '&nbsp;<a style="display: inline;" class="__wmejm_cfg_editlab__" data="'+id+'"><i class="waze-icon-edit"></i></a>'
  1626. //+'<div class="controls" id="wmejm_inp_'+id+'_all" '+(save?'':'style="display: none;"')+'>'
  1627. +'<div class="controls" id="wmejm_inp_'+id+'_all" style="display: none;">'
  1628. +'Имя: <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>'
  1629. +'Заголовок: <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>'
  1630. +'Шаблон: <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>'
  1631. +'</div>'
  1632. +'</div>'
  1633. + '';
  1634. }
  1635.  
  1636. strFormCode += ''
  1637. +'</div>'
  1638. +'</div>';
  1639.  
  1640. // -------------------------------
  1641. strFormCode += ''
  1642. +'<div class="form-group">'
  1643. +'<label class="control-label">Прочие настройки:</label>'
  1644. +'<div class="controls">'
  1645. +'<input name="wmejm_cfg_savedsel" value="" id="wmejm_cfg_savedsel" type="checkbox"><label for="wmejm_cfg_savedsel" title="Восстанавливать выделенные объекты после прыжка">&nbsp;Restore selected</label>'
  1646. // +'<br>'
  1647. // +'<input name="wmejm_cfg_around" value="" id="wmejm_cfg_around" type="checkbox"><label for="wmejm_cfg_around" title="">&nbsp;Show link around</label>'
  1648. //wmeJM_around
  1649. +'<br>'
  1650. +'<input name="wmejm_cfg_debug" value="" id="wmejm_cfg_debug" type="checkbox"><label for="wmejm_cfg_debug" title="Включить логирование">&nbsp;Debug script</label>'
  1651. +'<br>'
  1652. +'<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>'
  1653. +'</div>'
  1654. +'</div>'
  1655.  
  1656. +'</form>'
  1657. +'</div>'
  1658. +'';
  1659.  
  1660. srsCtrl.className = "tab-pane";
  1661. srsCtrl.innerHTML=strFormCode;
  1662. tabContent.appendChild(srsCtrl);
  1663. }
  1664. else
  1665. {
  1666. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InitConfig(): 'tab-content' not found");
  1667. srsCtrl.id='';
  1668. }
  1669. }
  1670. else
  1671. {
  1672. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InitConfig(): 'nav-tabs' not found");
  1673. srsCtrl.id='';
  1674. }
  1675. }
  1676. else
  1677. {
  1678. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InitConfig(): 'user-info' not found");
  1679. srsCtrl.id='';
  1680. }
  1681.  
  1682. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InitConfig(): srsCtrl.id='"+srsCtrl.id+"'");
  1683. if(srsCtrl.id != '')
  1684. {
  1685. document.getElementById("wmejm_cfg_resetConfig").onclick = function(){
  1686. setTimeout(function() {
  1687. if(confirm("Reset config for WME-JumpMaps?"))
  1688. {
  1689. let d=document.getElementById(CreateID());
  1690. d.parentNode.removeChild(d);
  1691. d=document.getElementById("pwmejumpmaps");
  1692. d.parentNode.removeChild(d);
  1693.  
  1694. localStorage.removeItem("WMEJumpMapsLink");
  1695. for(var i in wmeJM_Config) { delete wmeJM_Config[i]; }
  1696. wmeJM_Config = cloneConfig(wmeJM_Config0);
  1697.  
  1698. localStorage.removeItem("WMEJumpMapsDebug");
  1699. wmeJM_debug=false;
  1700.  
  1701. WmeJM_InsertWMEIcon();
  1702. WmeJM_InitConfig();
  1703. }
  1704. },100,this);
  1705. return false;
  1706. };
  1707.  
  1708. document.getElementById("wmejm_cfg_debug").onclick = function(){wmeJM_debug=this.checked;localStorage.setItem("WMEJumpMapsDebug",wmeJM_debug?"1":"0");};
  1709. document.getElementById("wmejm_cfg_debug").checked = wmeJM_debug;
  1710.  
  1711. document.getElementById("wmejm_cfg_savedsel").onclick = function(){wmeJM_restoreSelected=this.checked;localStorage.setItem("WMEJumpMapsRestoreSelected",wmeJM_restoreSelected?"1":"0");};
  1712. document.getElementById("wmejm_cfg_savedsel").checked = wmeJM_restoreSelected;
  1713.  
  1714. var __wmejm_cfg_editlab__=document.getElementsByClassName("__wmejm_cfg_editlab__");
  1715. for(let i=0; i < __wmejm_cfg_editlab__.length; ++i)
  1716. {
  1717. __wmejm_cfg_editlab__[i].onclick= function(){
  1718. var id=this.getAttribute('data');
  1719. var dstyle=document.getElementById("wmejm_inp_"+id+"_all").style.display;
  1720. document.getElementById("wmejm_inp_"+id+"_all").style.display=(dstyle=="block")?"none":"block";
  1721. //document.getElementById("wmejm_inp_"+id+"_all").style.display="block";
  1722. //wmejm_cfg_'+id+'_val
  1723. };
  1724. }
  1725.  
  1726. var aLinks = JSON.parse(localStorage.getItem('WMEJumpMapsLink'));
  1727. for(let i in wmeJM_Config)
  1728. {
  1729. if (["_map_WME","_map_WMEB","_map_LI"].indexOf(i) >= 0)
  1730. continue;
  1731.  
  1732. document.getElementById("wmejm_cfg_"+i).checked = typeof aLinks[i] != "undefined"?true:false;
  1733. var name=wmeJM_Config[i].name;
  1734. if (name.length > 0)
  1735. document.getElementById("wmejm_cfg_"+i+"_val").value = name;
  1736. let title=wmeJM_Config[i].title;
  1737. if (title.length > 0)
  1738. {
  1739. document.getElementById("wmejm_cfg_"+i+"_tit").value = title;
  1740. document.getElementById("wmejm_cfg_"+i+"_chklab").innerHTML="&nbsp;"+title;
  1741. }
  1742. let template=wmeJM_Config[i].template;
  1743. if (template.length > 0)
  1744. {
  1745. document.getElementById("wmejm_cfg_"+i+"_templ").value = template;
  1746. }
  1747.  
  1748. // обработчик видимости
  1749. document.getElementById("wmejm_cfg_"+i).onchange = function(){
  1750. var id=this.getAttribute('data');
  1751. //document.getElementById("wmejm_inp_"+id+"_all").style.display=this.checked?"block":"none";
  1752. localStorage.setItem('WMEJumpMapsLink', WmeJM_Config2String());
  1753. WmeJM_InsertWMEIcon();
  1754. };
  1755.  
  1756. // обработчик имени
  1757. document.getElementById("wmejm_cfg_"+i+"_val").onchange = function(){
  1758. var id=this.getAttribute('data');
  1759. wmeJM_Config[id].name=this.value;
  1760. localStorage.setItem('WMEJumpMapsLink', WmeJM_Config2String());
  1761. WmeJM_InsertWMEIcon();
  1762. };
  1763.  
  1764. // обработчик заголовка
  1765. document.getElementById("wmejm_cfg_"+i+"_tit").onchange = function(){
  1766. var id=this.getAttribute('data');
  1767. wmeJM_Config[id].title=this.value;
  1768. document.getElementById("wmejm_cfg_"+id+"_chklab").innerHTML="&nbsp;"+this.value;
  1769. localStorage.setItem('WMEJumpMapsLink', WmeJM_Config2String());
  1770. WmeJM_InsertWMEIcon();
  1771. };
  1772.  
  1773. // обработчик шаблона
  1774. document.getElementById("wmejm_cfg_"+i+"_templ").onchange = function(){
  1775. var id=this.getAttribute('data');
  1776. wmeJM_Config[id].template=this.value;
  1777. localStorage.setItem('WMEJumpMapsLink', WmeJM_Config2String());
  1778. WmeJM_InsertWMEIcon();
  1779. };
  1780.  
  1781. // обработчик видимости на линейке прыгалки
  1782. document.getElementById("wmejm_cfg_"+i).onclick = function(){
  1783. var id=this.getAttribute('data');
  1784. wmeJM_Config[id].save=this.checked?1:0;
  1785. localStorage.setItem('WMEJumpMapsLink', WmeJM_Config2String());
  1786. WmeJM_InsertWMEIcon();
  1787. };
  1788. }
  1789.  
  1790.  
  1791.  
  1792. //WmeJM_InsertWMEIcon()
  1793. }
  1794. else
  1795. {
  1796. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InitConfig(): wait 500ms");
  1797. setTimeout(WmeJM_InitConfig,500);
  1798. }
  1799. }
  1800. else
  1801. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_InitConfig(): not found '"+CreateID()+"'");
  1802. }
  1803.  
  1804. //
  1805. function WmeJM_FakeLoad()
  1806. {
  1807. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): start WmeJM_FakeLoad(): this"+ this);
  1808. var loctype=WmeJM_GetLocationType();
  1809. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): start WmeJM_FakeLoad(): loctype="+loctype);
  1810.  
  1811. if(window.document.getElementById('WME.JumpMaps_' + wmeJM_version)) // если ЭТО есть, значит другие проверки пройдены
  1812. {
  1813. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_FakeLoad(): FOUND WME.JumpMaps_" + wmeJM_version + "!!!. Done");
  1814. return;
  1815. }
  1816.  
  1817. if (loctype === "waze")
  1818. {
  1819. if (typeof Waze === "undefined")
  1820. {
  1821. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_FakeLoad(): wait W. Wait 500ms");
  1822. setTimeout(WmeJM_FakeLoad,500);
  1823. return;
  1824. }
  1825. if (typeof W.selectionManager === "undefined")
  1826. {
  1827. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_FakeLoad(): wait W.selectionManager. Wait 500ms");
  1828. setTimeout(WmeJM_FakeLoad,500);
  1829. return;
  1830. }
  1831. if (document.getElementsByClassName('olControlAttribution')[0] === null)
  1832. {
  1833. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_FakeLoad(): wait waze olControlAttribution. Wait 500ms");
  1834. setTimeout(WmeJM_FakeLoad,500);
  1835. }
  1836. }
  1837.  
  1838. if (document.readyState != 'complete' && ++wmeJM_countProbe2 < 5)
  1839. {
  1840. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_FakeLoad(): document.readyState != 'complete', wmeJM_countProbe="+wmeJM_countProbe2+". Wait 3000ms");
  1841. setTimeout(WmeJM_FakeLoad,3000);
  1842. return;
  1843. }
  1844.  
  1845. // дальнейшая инициализация
  1846. if (loctype === "waze")
  1847. {
  1848. // а вдруг мы прыгнули "оттуда" и если в URL есть компонента "jmlink", то центрируем редактор по указанным координатам (EPSG:900913).
  1849. if (__getQueryString(location.href, "jmlink") != -1)
  1850. {
  1851. var jmlink=__getQueryString(location.href, "jmlink").split(",");
  1852. var urPos=new OpenLayers.LonLat(jmlink[1],jmlink[0]);
  1853. urPos.transform(new OpenLayers.Projection("EPSG:900913"),new OpenLayers.Projection("EPSG:4326"));
  1854. var xy = OpenLayers.Layer.SphericalMercator.forwardMercator(parseFloat(urPos.lon), parseFloat(urPos.lat));
  1855. W.map.setCenter(xy);
  1856. }
  1857. WmeJM_InsertWMEIcon();
  1858. WmeJM_InitConfig();
  1859. WmeJM_initBindKey();
  1860. }
  1861. else
  1862. {
  1863. // другие сервисы...
  1864. if(document.getElementById('WME.JumpMaps_' + wmeJM_version) === null && !WmeJM_InsertIcon())
  1865. {
  1866. if(++wmeJM_countProbe < 8) // 8 попыток
  1867. {
  1868. let cls="";
  1869. if(wmeJM_debug) console.log("WME-JumpMaps (" + wmeJM_version + "): not other found '"+cls+"'. wmeJM_countProbe="+wmeJM_countProbe+". Wait 5000ms");
  1870. setTimeout(WmeJM_FakeLoad,5000);
  1871. return;
  1872. }
  1873. }
  1874. //WmeJM_PostLoadOtherMaps();
  1875. }
  1876. }
  1877.  
  1878.  
  1879. function __GetLocalStorageItem(Name,Type,Def,Arr)
  1880. {
  1881. //if (wme2GIS_debug) console.log("__GetLocalStorageItem(): Name="+Name+",Type="+Type+",Def="+Def+",Arr="+Arr);
  1882. var tmp0=localStorage.getItem(Name);
  1883. if (tmp0)
  1884. {
  1885. switch(Type)
  1886. {
  1887. case 'string':
  1888. break;
  1889. case 'bool':
  1890. tmp0=(tmp0 === "true" || tmp0 === "1")?true:false;
  1891. break;
  1892. case 'int':
  1893. tmp0=!isNaN(parseInt(tmp0))?parseInt(tmp0):0;
  1894. break;
  1895. case 'arr':
  1896. if (tmp0.length > 0)
  1897. if(!Arr[tmp0])
  1898. tmp0=Def;
  1899. break;
  1900. }
  1901. }
  1902. else
  1903. tmp0=Def;
  1904. return tmp0;
  1905. }
  1906.  
  1907.  
  1908. // запускатор скрипта
  1909. function WmeJM_bootstrap()
  1910. {
  1911. console.log("WME-JumpMaps (" + wmeJM_version + "): WmeJM_bootstrap()");
  1912.  
  1913. wmeJM_Config = cloneConfig(wmeJM_Config0);
  1914.  
  1915. wmeJM_debug = __GetLocalStorageItem("WMEJumpMapsDebug",'bool',false);
  1916. wmeJM_restoreSelected = __GetLocalStorageItem("WMEJumpMapsRestoreSelected",'bool',false);
  1917. wmeJM_around = __GetLocalStorageItem("WMEJumpMapsAround",'bool',false);
  1918.  
  1919. setTimeout(function() {WmeJM_FakeLoad();},(WmeJM_GetLocationType() === "YM")?3000:500,this);
  1920. }
  1921.  
  1922. function WmeJM_clickJumpToMapsArg()
  1923. {
  1924. if ((typeof arguments[0]) === "object")
  1925. {
  1926. var o=document.getElementById(arguments[0].id);
  1927. if (typeof o !== "undefined")
  1928. {
  1929. if (arguments[0].save)
  1930. o.click();
  1931. }
  1932. }
  1933. }
  1934.  
  1935. function WmeJM_initBindKey()
  1936. {
  1937. if(wmeJM_debug) console.log("WmeJM_initBindKey()");
  1938. if(!W || !W.model || !I18n || !W.accelerators || !W.model.countries || !W.model.countries.top) {
  1939. setTimeout(WmeJM_initBindKey, 500);
  1940. return;
  1941. }
  1942.  
  1943. var Config =[];
  1944.  
  1945. for(let i in wmeJM_Config)
  1946. {
  1947. Config.push({handler: 'WME-JumpMaps'+i, title: wmeJM_Config[i].title, func: WmeJM_clickJumpToMapsArg, key:-1, arg:{id:i,save:wmeJM_Config[i].save}});
  1948. }
  1949.  
  1950. for(let i=0; i < Config.length; ++i)
  1951. {
  1952. WMEKSRegisterKeyboardShortcut('WME-JumpMaps', 'WME-JumpMaps', Config[i].handler, Config[i].title, Config[i].func, Config[i].key, Config[i].arg);
  1953. }
  1954.  
  1955. WMEKSLoadKeyboardShortcuts('WME-JumpMaps');
  1956.  
  1957. window.addEventListener("beforeunload", function() {
  1958. WMEKSSaveKeyboardShortcuts('WME-JumpMaps');
  1959. }, false);
  1960.  
  1961. }
  1962.  
  1963.  
  1964. WmeJM_bootstrap();
  1965. /*
  1966. a=$("#search_td").find("a")
  1967. for(i=0; i < a.length;++i){if(a[i].href.indexOf("maps.by/map/")>0)console.log(a[i].href)}
  1968. */
  1969.  
  1970.  
  1971. // from: https://gf.qytechs.cn/en/users/5920-rickzabel
  1972. /*
  1973. when adding shortcuts each shortcut will need a uniuque name
  1974. the command to add links is WMERegisterKeyboardShortcut(ScriptName, ShortcutsHeader, NewShortcut, ShortcutDescription, FunctionToCall, ShortcutKeysObj) {
  1975. ScriptName: This is the name of your script used to track all of your shortcuts on load and save.
  1976. ScriptName: replace 'WMEAwesome' with your scripts name such as 'SomeOtherScript'
  1977. ShortcutsHeader: this is the header that will show up in the keyboard editor
  1978. NewShortcut: This is the name of the shortcut and needs to be uniuque from all of the other shortcuts, from other scripts, and WME
  1979. ShortcutDescription: This wil show up as the text next to your shortcut
  1980. FunctionToCall: this is the name of your function that will be called when the keyboard shortcut is presses
  1981. ShortcutKeysObj: the is the object representing the keys watched set this to '-1' to let the users specify their own shortcuts.
  1982. 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'
  1983. */
  1984. 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)}
  1985. /* ********************************************************** */

QingJ © 2025

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