WME Bookmarks

Bookmark, share your favourite places

目前为 2018-08-15 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name WME Bookmarks
  3. // @description Bookmark, share your favourite places
  4. // @namespace https://gf.qytechs.cn/fr/scripts/4515-wme-bookmarks
  5. // @version 0.75
  6. // @icon data:image/png;base64,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
  7. // @include https://www.waze.com/editor*
  8. // @include https://www.waze.com/*/editor*
  9. // @include https://beta.waze.com*
  10. // @exclude https://www.waze.com/user/*editor/*
  11. // @exclude https://www.waze.com/*/user/*editor/*
  12. // @connect 4bphotoabbatienne.fr
  13. // @grant GM_xmlhttpRequest
  14. // @author Sebiseba
  15. // @copyright Sebiseba 2014-2017
  16. // ==/UserScript==
  17. /* jshint -W097 */
  18. 'use strict';
  19.  
  20. // Thanks
  21. // All beta testers
  22. // Bellhouse for German translation
  23.  
  24. // **********************************
  25. // ** DOWNLOAD HELPER BY DUMMYD2 **
  26. // **********************************
  27.  
  28. /******** AUTO INJECTED PART ***************/
  29.  
  30. function BKMdownloadHelperInjected() {
  31. window.BKMDownloadHelper = {
  32. jobs: [], _waitForData: function (id)
  33. {
  34. if (this.jobs.length <= id) {
  35. this.jobs[id].callback({
  36. url: null,
  37. data: null,
  38. callback: this.jobs[id].callback,
  39. status: 'error',
  40. error: 'Request not found'
  41. });
  42. }
  43. else
  44. {
  45. if (this.jobs[id].status == 'success' || this.jobs[id].status == 'error')
  46. this.jobs[id].callback(this.jobs[id]);
  47. else
  48. {
  49. if (this.jobs[id].status == 'downloading' && this.jobs[id].progressCallback) {
  50. this.jobs[id].progressCallback(this.jobs[id]);
  51. }
  52. var _this = this;
  53. window.setTimeout(function () {
  54. _this._waitForData(id);
  55. }, 500);
  56. }
  57. }
  58. },
  59. add: function (params, callback, progressCallback)
  60. {
  61. this.jobs.push({
  62. params: params,
  63. data: null,
  64. callback: callback,
  65. progressCallback: progressCallback,
  66. status: 'added',
  67. progression: 0,
  68. error: ''
  69. });
  70. var id = this.jobs.length - 1;
  71. var _this = this;
  72. window.setTimeout(function () { _this._waitForData(id); }, 500);
  73. }
  74. };
  75. }
  76. var BKMdownloadHelperInjectedScript = document.createElement('script');
  77. BKMdownloadHelperInjectedScript.textContent = '' + BKMdownloadHelperInjected.toString() + ' \n' + 'BKMdownloadHelperInjected();';
  78. BKMdownloadHelperInjectedScript.setAttribute('type', 'application/javascript');
  79. document.body.appendChild(BKMdownloadHelperInjectedScript);
  80. if (typeof unsafeWindow === "undefined") {
  81. unsafeWindow = function() {
  82. var dummyElem = document.createElement("p");
  83. dummyElem.setAttribute("onclick", "return window;");
  84. return dummyElem.onclick();
  85. }();
  86. }
  87. /******** SANDBOX PART ***************/
  88.  
  89. function lookFordownloadHelperJob() {
  90. for (var i = 0; i < unsafeWindow.BKMDownloadHelper.jobs.length; i++) {
  91. if (unsafeWindow.BKMDownloadHelper.jobs[i].status == 'added') {
  92. unsafeWindow.BKMDownloadHelper.jobs[i].status = cloneInto('downloading', unsafeWindow.BKMDownloadHelper.jobs[i]);
  93. var f = function () {
  94. var job = i;
  95. GM_xmlhttpRequest({
  96. method: unsafeWindow.BKMDownloadHelper.jobs[job].params.method,
  97. headers: unsafeWindow.BKMDownloadHelper.jobs[job].params.headers,
  98. data: unsafeWindow.BKMDownloadHelper.jobs[job].params.data,
  99. synchronous: false,
  100. timeout: 3000,
  101. url: unsafeWindow.BKMDownloadHelper.jobs[job].params.url,
  102. //job: i,
  103. onerror: function (r) { unsafeWindow.BKMDownloadHelper.jobs[job].status = cloneInto('error', unsafeWindow.BKMDownloadHelper.jobs[job]); },
  104. ontimeout: function (r) { unsafeWindow.BKMDownloadHelper.jobs[job].status = cloneInto('error', unsafeWindow.BKMDownloadHelper.jobs[job]); },
  105. onload: function (r) {
  106. unsafeWindow.BKMDownloadHelper.jobs[job].status = cloneInto('success', unsafeWindow.BKMDownloadHelper.jobs[job]);
  107. unsafeWindow.BKMDownloadHelper.jobs[job].data = cloneInto(r.responseText, unsafeWindow.BKMDownloadHelper.jobs[job]);
  108. },
  109. onprogress: function (r) { unsafeWindow.BKMDownloadHelper.jobs[job].progression = cloneInto(r.total == 0 ? 0 : (r.loaded / r.total), unsafeWindow.BKMDownloadHelper.jobs[job]); }
  110. });
  111. }();
  112. }
  113. }
  114. window.setTimeout(lookFordownloadHelperJob, 2000);
  115. }
  116. window.setTimeout(lookFordownloadHelperJob);
  117.  
  118. /******** NOW BOOKMARKS ***********/
  119.  
  120. function runBKM() {
  121. var BKMversion = '0.75', timer, link={}, countries=[], countriesS=[], count = 0, debug = ''; // Script variables
  122. var lang, text1, text2, text3, tset; // Language variables
  123. var BKMusername, BKMcountryActive, BKMhandle, BKMhandleClass, BKMhandleClass2, BKMmapSearch; // DOM variables
  124. var BKMsettingsLayers, BKMsettingsPasteLayers, BKMsettingsServer, BKMsettingsSort, BKMsettingsSynchro, BKMsettingsZoom, BKMsettingsBck, BKMsettingsClic; // settings variables
  125.  
  126. // *************
  127. // ** ICONS **
  128. // *************
  129.  
  130. // icons from ©iconza (https://www.iconfinder.com/iconsets/iconza)
  131. // icons from ©Sketchdock (https://www.iconfinder.com/iconsets/sketchdock-ecommerce-icons)
  132. var di = 'data:image/png;base64,';
  133. var iconAddLinkMap = di + 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAO4SURBVHjarJVbTBx1FMZ/MzvsbheXQEthy02DNPVlpUpKmgj2sgaykkrbUGolJqaYlIcaE9OGtighGtN6SV80xhgftGkffFAiTcEaaIwmNlqKdgtJoaQsl3Ip2AuwLOzuzPFhBhVlKS3+k8n/zMw53/edL/M/AytdL4qbCsmhVDQAdsmC1+qKCXTeeOxx+nFxHAQalf+XQBGMrFTwP8shdvE+CJTLCgnmbSiTFJwUBnphPASb8jlMBYfZZ+X55SHA59U9LxuUffJj5ZciaSdE8Il4G0SeqhOhSD5ARAFQHqqDUim0pdBYU0XGuSEIDgDjwCXI88E6FX46z0kCHFqcYIfA2TjcZbLRlcHPr5SzqikIQ0EgDNwCgkB/BG+lnelh6LtObfwOyuQoIXSEERRGmKEDF3s9G/nEvxWagzA2CkxZ4KOAgJYCsZ5JVq99hNvXh5awqELk1d0wK0SvdBMZHSOUlc7qZ7agne6Au7eBSWDMuuZAyQIJTII7qZjA+SBrnpT4BH7xr0rlbEUltow1kJ0Ed8LwXhtM37PA55VPAZnAkAFOtZxflCZKBL5X4nTwgkCTAltlr93DmWI/togDIhG4FYK+a8BNS/kUkAPKoCEyrR5nM29yE+GCCX3/r8gvfpuT5i07YTxmdjE8CMZF4B6QCspEBJnUfqDPtu3f5UscNJ+5tSgteg8nLn4LbmAuDOockA44wRYBuSu/02fbRu5/LV+CoA0Ah+Oruny6j+SGmWz/hqhHB6cKig2e2Ax630QXHsd2AG4oskwCU72mnTpWW1v59kefbcA1MZyktl8OXT1j8KgdEgwgCnhSe3EQjjcW1EVtoQ1V/Xx/Tc3L7+6pRG1uBs1hR/7omsGp7u9qnIrlrYUEQLFRwA3ctDzAUNC0U8cOHhS51CFSVy/yXOmM5OUFAvBSJgDr5qpI79Xzq0WcPpkiecSzDNgcACUh4XRdfb3oVztNcF/JtKxf3zkCmzIXpHulnOSAOAtmBXt79n3AC6z948IDB0Q6O0WOHDWVm+AkL7CwyPK7QHbg7u0mbSJtWdZ4vb3XBgdFGt4xwXNzrwT+Vu5bmFy07Fn/unnilE9PtraKtLaJUVI6I9nZv/aAL2tR8Adfe56urpbpgQGRqiqZhQ8b/vlXXAmyBijp6a/tNgwSi4svf9ff/9YX0PIbeLwQ04EYYIAWg1jUHMp6BMJzZkwMdN2KDYiKFf+lTnG5vk5KTExxj49vv2MeH08c1TGrUBcIG9ZDMe/n4+iCij8HAJTXkX9j47cVAAAAAElFTkSuQmCC';
  134. var iconBookmarks = di + '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';
  135. var iconNoBookmarks = di + 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3goJCQQUoj+qIgAAA/ZJREFUSMetlE1sG0UYht+Z3Z3dteP4h6SNY6ex8wfJpUKiatRUKVFAtELNhSs5JKgSEqUHJJBAoAqJK+JYcSVwQ4pEegbJuFQqcYmEE0tpErt2bOP/v3i9jnc9HEqiVE1CouaT5jCj+eb5vnfmHeAUwTmXCvmCk3MunDSHngaQzeXulKvVYC5fmDhTQKVSBQDk84U5mbGxbDb7zpkC7PZOaFrjEqW07/z5c7BarTdK5bL9TCWKJ+KXnA6HTRRFCILw+tZWTK5UKmcD4JwzSuhkZ6eNAACTRPR5e2ftdvvLAzRNQyKxbWcym2KMAQA6OjqgaY0PAaBcLr8cwGKxgFI6QCk9R+mz7arFgp16fYhz3u9wOM5Eoq9URQUh5FkSIbBarUgmU5/9Xy5ZXYv0GYYR55zvH/BCFZRieGgIssz21+qahvX1JxCEwz3XbrchimKT/B1edQqU/sZkdtHT6waTFfB2+8VKCAHn/Mj5wWLq9TrS6X/QMoxFwjnHRnRDIm36fSaTmRt5dQT2zk6YponThiRJSKVSSCS20dPTc8vtdi8QAIhGY8Tv9/FCsfh2OLz6k9fj6e7u7jqyysO6M00T8XgCxWLx6bVrk+8RQkLRaAz7oldrNXTabMjl8oORSOQugNmBwQGoinIsRBAEFIpFJJNJMMa+G798+QtCiF4sFuFyuUCO+jWXl0NvFQqFn719XovDbj8SkkqlUa3VikNDgzd9/f0PCSG81WpBkiQAgHhYUrPZbKmq8lBi7KkoCKONRuMYeQCLqm75fb4/qrXa/l3sxaEARVEQDAYvNDRtVNf1556voijQdf3AXMbG5uYbnPMOQsjOiY2mKMrHAKDrOjRNg67rkGUZ6XQaoihC0zRomoZmcxeiICIUevz1qZy8thb5gDGGRqMB0zRBKMWjR38a4fDqxtpahDPGYBgGdnZ24HQ5sRwKvXtiQDaXvVmpVIggUFgsKkrlMsLhcN7j6b1z+/ZHw4xJ3zx+vLLfFQFB2zR7o7HY+LGAUqkEALi/dP9Tl8sJq9WKUOgvlEvljampqfHp6el7ADAzM3N3bGx0JB5PmNFoDFarBTZbh23pl6UrhwL2LtHpdIJz3pVIbL/m8XoRfPCg7R/w/zg7+/6w3+fbPGAsPjFx5cn8/BzTNO3XlZUV7na7oSjym5xz5aAB6X/vHoQQAYC6uLg43Wq1ugOBgE4Jvrxx/frnqqr2CoLQLQiCfW+IovgKIaRrYeGHW83d3Xu/B4NoNPTx+fn5fkqpAoBwzp+TqA2gmUwmlzKZzIU2bw9sbm59CyBnGEYeQBlA/cCoSpJUDgQCycmrVz8xDKMvl8tdXF9fjwLYBcAB4F+Gkb6o+TjnqgAAAABJRU5ErkJggg==';
  136. var iconShare = di + 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALpSURBVHjatFZNSFRRFP7emxnvzGiPEUf784fKzIqCCDIlCje2iUCwNiER1SIigshdaLoJaldECyGohDZGJYFltFEIx5AiWpSW4A+mY86M8//evJ/ufb6ZZnRmHJM5cLhz7nv3O/ec75zzhtM0DfkUHnmWvDswJxtVl11suU21YwOYnQxjsrtutYM4+KGaMpQ67OtGXvCF8XnM3ZGEBS6ZZBqBFgd3+5WMQOxMNBqFoijgeR5WK6GrSX825Q7C4/GCRsCli8AAlzG/JGd0EAyGYOOjuHt+J+prBUzMi7jT58P4nARCyNoks6DYLdMpu7UoimhpKEXjAQesFh77ym24cEJIvJOR5GyiqhoikTBCoTBKBELBi1Oe2wm/dhUl59jvD0CWZT2/TBiwYDfh+ukqnDtegnmfjJ9zIqq3EHiCCnqGlpCuadM6YCmwQMLN5u3YX2HHK5cHxOrAlaYy0EDQ/cGLvtEACgmH2m0E054Yfnvl3CNQVRW3zlTi7LFS3T66R9BJfzrow8tPfoix5ZvSIDA8Hs690eJiMplwcEdhyt7rEQ96Br36sw2PCovFjHdfgv/KMqqiua4YnS1ObN0k0wgVyk+Mkh6BJEmMtRWaA8lP6G3dAQW7NhO8/xqguddw9aQTz2/sRt/IIh72z6LEYUZDbREmF1W4fonrqSJAoWy+GV1K2b/2eAb1NYW42FiM3ra9cBSZKdHLKevqncMLly/3abrcbKv1448QWu9P4NtUOAHO5NRhIfFODg60rFpQYMHQ92DKibFZMTsHHMeh8tKwPhE1jcNaX7q3tAgqnH9wpNqOCbeERwML+hnWnJk4oKhqFx237TabDWZz9ikSpb3woN+dssfAWWUxHHphNqm1xLimNktXQXnrQBdPhLb//dqoov/ezLOmdvpTotjqSgfs2jY2u6gSwzYZyutRphKlUlUMZblhRLDWjjB7pQMYAHySckkrl6UaVGNV4rZmAHP5/tvyV4ABABHEe0sJhQEUAAAAAElFTkSuQmCC';
  137. var iconNoShare = di + 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKWSURBVHjatFbdThpREJ6FpQsuFhRaMQoxRBIbk8YbvTG98NKkL+EDeNlbab3tpQ/gS/QNeAFjook/CRFEQP5/dlnYXU7PTBe6IOC2hpNMYM7Z/b6Zb2YOCIwxmOdywZzX3AlEu3N+nsKP79ySb8D8gRhHR19eEgzAt7ejEAr5/xm5UmnD1VU2acN6QTAEV1VtKlC/z6DV0kDXTXC7XbC46AVRdIHPJ0I0ugTZbC05jYDAFUUjmxWponRhfz8Bq6tBIstkKrQny15nRcb2nWSGYUK73YXNzRVYX1+mDILBBVhbWxo+M7XI4+DjstTrKpksS1yK5ZFzt1uASTMlTtP4+bkF3a7B9ZVor1pVQZJE2N2NQzz+ATRN55lo4Pd7odczuO5Ves8Rgar2yHZ2YlSTdLrE5QjB1lYEMMiHhwoUCg2rwBJ0OjoRvjoHg2UYfdjbi0MisUJ+JBLg2ei8kFXI52vDSE3T5AXXnQ/aYHk8bgiHR+cgnS7zyMt09uarArVGCf5mZMLGRphnFKHeRx8zajQ6JOV4pznqolyuyiXo8yJKUCw2aS8e/wgHB58om8vLLAWC8iEpFtyxRH86CeDpqT6yd3GRoaLHYiE4PPxMBAPJrq9z8PhYcyYRZomFnGSlUgtSqVuaZns9cKIHzzggYDPN6/VAqdwceafZ1CbWYEggCMLwnnmNhJ9CmWdyf1+EWk2hIbu7K9DZ+DzYayAw1j/l1+1JIOAjfWct02Rwc5Mf2cPJx85CHB4wx2NMGKTEfczm3dnZr1NZfv/tf39tFKX58/j46wn/2uPY/XECDNvHbQHHwfLdluG5YC8VNhsmY5mBSeBNw62D/jgBWAAumwm2T2FSP9iImEVEPrOAhXn/bfktwAC4/bsJgXSBjQAAAABJRU5ErkJggg==';
  138. var iconHisto = di + 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3goJDAkkN4MmKAAABFZJREFUSMftlVtsFGUUx/8zO7vT2e6tFAot0G4LhRatBEQkCAUSMfAgCAQTEmMiGhpJ1PBiNGIIiSa+qC9ErfGBqCRGHyQxkcQs2psBWRJiK6VtKAW3dWt3drez3Zn5vpnv4kORSxSIl0dO8j2d75zfOSc55w/ct/9idZ399/wT/PDSXf3KPTM8M9LUWpHfOB/ufF3hYSEgJmVFftSv/MX5bHX3vcKVv6vIf7EVALD64NnOJp3tbkkm4ssXVQUTRghQgBlCxUhm2hm4UryaMiOHrM9XpeZ1DiDX0fZXwI5X+gKc88X9LGZmPlpVBoDaAxcaH4p46famSPVjbQ1QAgFYhMNhApRJBFQFcT0AQ/roHriG1K/sjTNF410cX0FrO39GtmPlDYAmfLZoYU14TLHcrsxz43taxdjCB+Okd8ej9fFEVQJ5KuALHwDgcwkqJByf44rlAQCamxuwsMp8O5ieWtO7Ue7Ndij81g40MA9BYx72rIhtZqdHzumGTvZtWhJ3FR3TlEGVABUSlEtQKUGYgMcAIgDiCfTNECQTCRzYpO1i/Mc3z9TLo/KEIm8AJKWYMG0sbV6A/U8sXZKzXLhKEJRxSCnh/pnYE6C+nH2QIETMgn2J3pyLNXUhtCfDR8oXT3/ZDwxqmgbGGFTquNCFj6vZMoKVUbQmazFDfJSph4LroVimKFgERZvCnCEolAmsEp31lwjMaQcuoUgNlzB3XgzVuvIFAGz3Z8eqea4D7lGEAwJZy8W4lLApB+WzVRIpQDwBwgT0QACUCdCyDSiAETIAVWLKdGF5HF26gXV1Wlt6z/fPfqMonwKA5hMX3KPwiIeCLeH5AoQKeELAvQ5yKUelKjExlkHJnCpIBMqScalogapodXW0cX6NMsol+gZMtD9egxU/nX31HHAd4LtgroeyTaAKBsIEXJ/PztzjsAlHwlBxbWRM5hz/aH9y6wl8UH8ZACpfGHhk8cTFrXMLw4cXJWIGCceQGiph/fKa5Hl+sl2knurRmHTAHIKS5YBR7bbkhAuENBV03MRkzjx2sevgUSg3d9P+pC09BKRXbjtxLJ+zhhvD9gIrWItoMl7ZQLvWjgE9KhcUzPNglVwUimUU8mUUCzaKlo18bgbSp6ibE4KmqM3Kzp5qAKh467vbtrWkqjMZHm3K5q0rkbKJ3yyGhtjiTdh93tCYJPB9F7nfpxHUFDAmQDkH9SUIY7g6ZaKipQ57NyzZRrvTXw0fkU+Tw4p5K2Ds230SgDu6/esng5NDZ+OhQDQa1tdGpy5EVS5dEEJQlwhhQSSE2oSO+qowGucYWDY3graaOMxpBxlPx0s7125pTr1+6k6HzT61a/BS9cMvW+ODMHy3JuKNhDSuGn6OjppTQ4P2zQsoAUW9LXgiI3BKSkVTY+6dAOF3foDz2pbjlzd/3NFSzK4LIFvxr3Ri/fNddz3ziW0nGx7YcOj9Zev3z/nfRUp7L31fqf+Z/QFgv2hBV+ff4AAAAABJRU5ErkJggg==';
  139. var iconNoHisto = di + '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';
  140. var iconBackup = di + 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAM6SURBVHjatFW9UxNBFH97d8nl4iUcBwTMjEDjjI2tH52VtaWlhZY2lloAzmjpjGOphaWlfwFjJzZ2lhaiE0kIISSBfHC5c39vby+XEEAKdubNXva9/b2v39uIKIroMpdxnsHKk2/rUqJTdBH0Z90XOoO7a9tjikrlLy6uZbNZKhaLVK/XqVy+Kr5uLLOt1EeLiyXa32/SYDDAlQ2pH3MG2xMZABiXJfBaqVSiQqFAQXAsd5dBY5tobs6nMAzJ8zxaWlok2OM8DuxkBnGqHLHvz9JwOJyQkAH7/T6DCiHIMES8G8m+t9dIMvr1/vY6O0AtNTB+a9AgGEpQBY5zCC573gxik6DEwEIY7Ew7gmhHlk5ldtZLItUOAI6ow1ABh/0O9doNEsc+RRk3doQFG0Eohs4Kwe7sVMdKFKWdKGBVEg08uXIFnwzbTUqWLtvubp1kiUSSARiCJuXzeQbu9XqnAuvFOimwgyMEiEwajX3GG2tymttBt0WDw+aFhyp7xSPLKXLkU+fgohlMliqXy3Gjj46OkpmxUvxP9UCQ4zgU2jZfPK8HNuwMg8U0DS6VmpllkdAUU4nI/4dFTtEnkXUxXAk9DcOU4FqUs2q1NsoAIw9qKWPFhiAAI4ZMQ0QZAdBWwJo1Cswkyxo5wDkanTx2aIqMcAO8hSPLslgyGSv+NpMh4sbFU4vzcTuL7wMHeJM0xVPB7xAMEKXit57OIbXbXbbFbOBtUhFbvDebyaOXUPTU5/r+rVXyXJtqtZoEbcvIMnLv0Pz8HOtvXi/zb3XeZjtko/XplWSw9XKF9+XHW7yXfJcCqe52u/xUoz9oOBaIgd84d5wcf/ODEetBz2kZIC0TH5vf/0gQxSaUamammDBLOVA6nEOvda1WW/fIFHHDJh1ktj/cWegfVN7++FmlTucwpu1IVKTR2BnsDg5ahHu4D5wYbzTJAt1UJXOk5KXY5Yefn1nu0lM0ETTFwpTeWF2g7dohN5uf9c7Ou8qnB2/Qf5hIARsCiR2mHegsjJTw72uPvrwQVu45qIk66z0Keq9/f7z3igdFVk7KMN7DKAae9tid9ezwvx7+reLvqUvy/+Rf5mWtfwIMAKOeQJT4XFj9AAAAAElFTkSuQmCC';
  141. var iconNoBackup = di + 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJWSURBVHja7JW9T9tQEMDPzncgVBAZ0oCcVhQlCxJiYUDp2D+hO0wsXSqxtIPboV2QKlVd2Nj5EzpSITEjoarqgBRVNCgKddI4xl/PvXvNi+yQOGmrbD3p9Gy/e/d7d+/uWfJ9H6YpMkxZpg6ID344OvoUZf8KVUN93XseKjs71T+OgJz5MzMpbWvrEeRyGYL4UZBJAdxxNpvUtrfLsL6ugmnaoKoLUKncB/o+DiRHOc5kklq1WoHNzYfQ6ZjQbhsIsMC2XfA8BsvL87C2tgRkNwoUH+Lcj8VkoB1TCbfbXbAsF9UZGWahcI+PtVpTQzDBpCgArKwswMnJZ8Ccw8bGA0inPWi1DHAcF9W7Y99sGmAYFihKDhqNn2MjgFJJgWJxHq6ufsDp6RcOWl1dAkmSMDU+uC4DxhhCzb7jUinP104EIKGdKspcH3R+XuOgxcU50HUDzyTseOI+CEq3e4uVkg6BLi8b/FlV8//WyXTAjPm8eggkIiIhgBCyCerEERCASpHEw3OlQ04kYqEU/tVVEdyZ64adiHcaB+fGpogqhFQIVYvjsDsaNSfmR0UgCeDZ2Vfs0MLIXVKJDpu7uTHEZimXDNPsywOAxO7uY+X6+vv7i4tv2ECdfjqCaRHpE0p29XoLaB2tJz+imyXxR0Oq3Isog5pFTR0cHD/P5wvP4vEYzM6muJ2ud6FcLqIznffCb0D9w/7+03c4bVF1o5p0VOibBQHBNAnl74eHH18mk+kXdEdRZYnRtm/f7u09eUNB9S47rzfy9IQimNYPR/r/0x8nvwQYAHt+Zlz7MOT0AAAAAElFTkSuQmCC';
  142. var iconSettings = di + 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAASySURBVHjatJXLi2XVFcZ/+zzuua+6t6rrpd1Gu7Uhg0QQTJQ8ps6FEPoPyCg4iMNgICAZiwgJiPgHhCSTkIzEgSghOlBotYWYapXuarr61uvce+45++znyuDcsqvjuDds1t7r23xrrf36lIjwMFvCQ24PPYD6+e9DMpb48vZIfjvthdH5DRNA/Z99oJ0B3AcVsHBJfavJXy0T9adMovrN07u8dvFqThzkZAko1XWRrkdWNoIoiKEjlJU/CMSVdQG2LcONW+GP7x8n8+yJvn1l56mCfA2GGQyLbmGIoGJHfjZPEnAOYtbNZeWPgERoXTdfpLB+KeH7lf1DMsntmk27jMZjWDSCBMgyiElHLrEr/+gkkKgVabyfuXUwXwT6OfTSLolSKaaZu5g4ITjpnLNb8I9/nrD3ac3+TTi4BwsDcw21hfc+rEkkUtYwb1Zdw+E88snnS/p9KFswDpoALkafxShYgcMvNb/8aZ/nrq1RZAm9HD74uOHLMmN8oQcKvIKlhXnbVXSW/clcWNaBwxO4eyJIqihSiCaQSRSMQHWnZNrsMsh76CUMehBnS46yIXHUQyIYG9EtlHUXwJnImvV8L/NM1hvW6yk7reU/Vcpks0dmDFkMgdZAnY/4yzszKl2xMSgQSdirwD+5QVmtDtEEag1lBSqB4zsN165ofvXiNvPlEG+g1T1+8fo35JOnGHlHFqxH1xB3J1xvM67vG56/OuBUBsRhQUFOU3YX3BhH08i3AeY68PXNiusfTKhqhwTFUmvmy5aphsI4Mm8dUcOihfFgSL42pZgWqDDAaKirbq8lgdYJTZtw2nS3LmRr/H2/5K+ff0FhSy5dvMQXsxqz8SibjTBxgSw4jzUwr8AaqGuH1imnDdRtd8dN61mcLCjvzti/0Ofmbcfa+hjShDB9hHqwybY5xF+5zIwaiZ668Yh1ZME6mgZOK6HpKWrtaJuC0ypQtYHGeH6Qz3jz1ztoe5lxr6C1PV5++xtutNtQpATrWBeDrg2uqUGEaHsEZ8mCc9RaOKoa8jRl3mi0HnJvoVkaT123/LB/yPMblykXoFvYHEGhS7wZg+qBtaAC4hzYFhSo4AjOkQXjqbXjeNmgsgxnHNYKpW5pjQMRrs88L73xGeIadkZjDmrDV8ceJhGcBe8gceA9BNsdkHNdBeIs1lq8MRACuJYkBpRzEBwIHBZbvHVjCdUxP3t6i3/t1TDZAvHgBLwjSS1p8N3LUwLBEr0lC951ZM4AAZRwXLdEt1p89gevTyhyT+iPYOI7EmtWL86jBebLpqtAugrEG5UF06Y7YkkkElsNxZCP9hcd69kvt5JVkw74cO+gk6kzcZDuWz2wGQe3Z6A6eDcarJeY3GH4743lET/a6jNKhDwGcgU5kVzFlZXOSiBP6fAzDFnhgTwRRgn8eGvIej3j1uji39R04yfPPv7M7/785OajV5N+juec0gAKQUQ6RVv5hPP4/QoBMiLeeL46uvvf2zdeu6b6JFfSjed2h6OrL2T1vdF9XRQeHMm323VeOhXnZHOFu7XHSq333pXjj05Uj+yCpGNJ0vGucjp7QGcfkF9ZZct3A5wbiID0Rlbi8p7yVfq/AQB2JwwGH05xBAAAAABJRU5ErkJggg==';
  143. var iconNoSettings = di + 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAQoSURBVHjatJVNbxxFEIaf7umd3fVudteJvY5NTCB/gCg5khMSvwcOHBA3xJkb/AcicSDADQgXBOScXKI4WiJw4i95P7w709/NYbyT2FYQl7TUUqurpt63umreEikl3uSSvOH1xgHU9z/8KEMIH+eNxqcyyzr/6b18TfH6+5QgRr+IIX2eNbKvFfBRp9P58u3tbdrtFkKIi3FP63S+XufvU0rEGDHGrDx/vveV83YqU0qfbV97i05nBSkljUYDpRRSygtbKYUQoibxKhkhBCklUkrkec7GxhDvwxdSCHEpz3NijDSbTYwxxBjrYK+yOzk5qc/LDRBjZLFYkGUZQghCCOR5AwFbEghCCGKMHBwc8ODBA3Z2dnjx4gWz2YwYI845Uko8fvyYGCPee0IIeO/x3qO15unTp2RZVttSSsSUvIoxAjAajbi2vc17N2+SyQzVUDz76xmXLnUZDAZ472t23vuafQiBxWKBtZaiKM5k4qxDpVSlvL+/z2D1CpnKsLZASsnh4RFSQLfbJYRQB9daA+C9Zz6fE0IAYDweM5/PSSkxWF3FWouKsUqz3W7z6OFDFuWCPG+SCYn3jq3NDcqyJKWEtRZjDFprpJTs7++hVM6t27fRWuO9Z7Bq+eXnn7h96xbOWZRzDq01m5ubDAYFO092GK5dodnMyTKFkJLFYoEQogYoyxIpJVobprMj8lYbrTUxJqyt7NY5rHMoY6qPrLV0Ol16/T79fp9Go4G1lrIs69ZcFnXZaXmeY3TJn7//xnw+Z2tri+l0ynA4pCiK6omcs3Ug5xxFUaC1xhiDMaZmPplM2N3dpdvtMh6P6fV6KKUYDocMBgOm0yk3btzg8PCQEEKVhTEoZx3WGoqiQClVB1+2Z9UdJXfuvI82hkajQYyRX+/fp9Vq1ZkaU8UoioIYI+12G+/9yxqcB7DW4r2nKApmsxl5s01IYLSh2WoxmUwZ9FNNxHuPcw5jzGmH1TUwaF2hZ1lWB9daY60lhsDJyZx7977DGEOn06EsS4qyoN/v4ZyrAZYgKaXq3jqk965GXu4QAtZanHOElBgM+swmY3b/+RspYDadMOj3az9jTA3y8hzw3qKsrd7ZWotSCqAG8t7XYtbr90lAu92m1+sBYK0lpYT3vtaj5V9ujcVYK5Q2Jls6lGXJysoKR0dHZ9RxKXB5nrO7u3tGrpd2IQR7e3u1zVWaFGWr2fzjeDyh2+3WvX5eMWOMpBhZ6hZcVNOlTQhBv9/n+PiY9bX1b7PRaPTo6tXND0hcrkRKvqLz4vQnkwgpT88gRIaUlU3KjCyr5kWWZYBgsSg5PDx4cvfuN58I4N3r19/ZWF9f/3A8HncuzsFqDL5kfn5WijO+AGtra5Ojo6OfR6PRsQAuN5vNlDebG0Yb9fpB/P9Xq9Wy1tp9rXX27wBOE0kcmOQyhQAAAABJRU5ErkJggg==';
  144. var iconComment = di + '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';
  145. var iconNoComment = di + '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';
  146. var iconRelocate = di + 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3goPCgAbccGTMgAAAiBJREFUOMu9ks9Lk3Ecx1/f53nms2dzYGqgSHToVApSQuJljh2C6MdBIiSLaIq0Y/QHOA916tCpwGdsFw+CXoQ6dMk5I0JBOsS0tUj8UTvMGrPt2Zx7vh2atpURXvqePnz5vF/vzy/4ny8SiR892TRjPVPTS9KcmBs7MiQaXfBOTi1aH59MymfzKWmasdA/IbXOk1OL1sbzeTvd0CQTgXtyemZJhsP1EPE3Z4ehv+gtp53u0Ts0trZQKVhsXh4gORTk23p6fGTEF4pE4qi1zrOzUUwz1qO7jbl+j6Xrt24IT3sbiqqiNzfR+DqOYuXJdZ71Xbx02x4e9saVfUAg4CUaXfAaHter3nLaqV4bEI2tLQhAc+pohoFQFGwJsqbagxbC4dhJp8v53ufONyiD14WnvQ0BqE4dh9tNMbNNss9PcihI/ktmfHikPxSJxDmooFyuHO/qOqFns98FgKJpaFVxYWWFZJ+f1Ss368SBgPcXAEBWbHbOdLP28DG5rc9ohkExs03q6iDJoSBWvlQnBuoBqqrw7u3acqL51PKnR0/5upr8w3li4uWBGEDbD2xbApKOjmPnCoVddjo6Sd0fY6PXT25988Hd4IWQrhva6Kjf5uccZS1AlEo5I5HYAqBSsSmms2ROn+fD4ptwaDwwI4ToLpWsMlACckAWKIuabShVqrsKdlT/XUIIh5SyAuwBu0AeKAB7h12i+H3F+zM+LP4BGsLvw/41mgUAAAAASUVORK5CYII=';
  147. var iconNoRelocate = di + 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAgtJREFUeNqkk79PE2EYxz/ve+9xFGyhpdeyQChhMSFxcjYxpv+RgyYKZZANNycJiYRE0c0J40B1YmUwBEIgsNCCSY/r1Tvu7n1dDhsUCQnf6R2e9/vj+SGMMdwFkjtCXT5WVr5fW5Akul4sDr3rdqO3xpgXgLm1gzhOH7tufnVyslwdGxt+rrWZu3WEJNFPKpXCh2p1pHJ8/BNAuO69Oa3NPCBuJMiU1yqVkXKr5TEzU8VxbOI4pVgcemlM34m8SbnV6jA1Vca2FbVahVIpT5oakc/n5oBnxjAu/6d8cuJRq7kMDCiEEFiWhZQCY/T1U9DaPHDdwkfXLZTOzs6Zni6jlEIIiePYHBy0abc9LEsa3/+1YFnW4pUIWuuZiYmxUkaGlBKlrD+fT089LEsQhsnC8HC+EYY9ej2/70BKSZpqHMdCa83u7gmzsxMcHrZptzsMDuaMMQML3e7R/ObmZ9bX3xAE532CIPAB2NtrNeM4oVDIPdrePgIMo6Mlms0vjY2N9w3f77C//+PfHqyuvhb1+ifGxy8eel6PQiFHtxsCtmk2vy4uLT1txHEks9g620ij+uMLxc7OIVEUWFGU0Ol0IqVstbX1bWV5+dVaHEf3s9IQ8AEPSMXlNSqlhqS0S8YYRwihhEABIk2TIE0TkW1fAlwAAdC7QiCEEH8fSoYc4GS2dUaSAClgfg8AI1f2jUShF+IAAAAASUVORK5CYII=';
  148. var iconSynchro = di + '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';
  149. var iconValid = di + 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAXtJREFUeNrE00+ojFEYBvDfOd93ZsyMf7Owv2XLQpKFsuDewppSitKwQnbSLYnolp2yRAl1N7KwUMK1sLFVdla6Fkq5E2aGufPZnLmNP7G4C0+9PYu385z3ec9zQlVVVoNolQjuosIQBRJq6GEJIffHPLJbsFdyWWn45wkqlFiPJupoZGEOio6q7LQs/l2giTUrU0U1c0qnRVOS69pakwJbseEnkVFm6LmEc+oodSVXTPk8FphReCG4ke/8ddUXJbMCkq7kmMoDQ1UpWCe6irbgCLo4k9dKMKtwQYHgKzoGHkpYS+GQocJbpf2ilmgHNqosCM6K5hSCwhelE0bmNfEBrwluZecN03ruizZl30+xK1v6rtSR3PEJj7CARYI69mEPtpuxZN5IeyIpfS2nvHfTK9zOJn9DE9O454BnPnqi8tzQYyd1sPlfiRznsI7jDntp0TXn88PWcqWckCKfEXLVctYaK5nbZos33hnoYxl9DCZ4gG/hv//GHwMAMsZhpxGCLcoAAAAASUVORK5CYII=';
  150. var iconCancel = di + 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3ggcCi8VvAktSQAAAZhJREFUOMvFk89qE1EUh797z4xp0Qb/DBOLpCiCrotC49sUWxB8Al1NBNE3cCFx6a4v4cZYSougC6UgJdrSigkFUeNk5hwXncRJiOnSCwcu9/D97u+ccy/87+WmHS6tvxnmljutxs4sAT8N7rQaqFpixvZpDvw0eHH1dbNeqybnz1X+CRYu/5ZQhpdvxEll/ixvP3zhdzrYBKTEini38fnFnScjgTJ89XI1qcUX2e+lxNUQ8YaqkueKqgHGp/0eu89uuzEHV+62n966GT/w4TyHx4ORPdWcLMuKUFRzfvX77D1fcQDByJd3vN87JooE70501YxcQW0YhpqNDc+XSng4SNNH3W9dzOwk6T0iHhFBRAgCIQjCsWYGAJ1WYyjSrK+16XZ7SRRd4ujoK2maFk10FMbEObcxczT1tXbz+v1tu3Zvy04b4+Sr9L6yIAD11VePl9Y3hwJngLBw7MtNkBI8B8SWpzVwi9/fvfzovLT7B1sOiIEIuAAsFNwAUFcSCIvk3MRtAAYokAEp8AP4CWRuxgebzNm0/R+R3aag7ETr7wAAAABJRU5ErkJggg==';
  151. var iconDelete = di + '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';
  152. var iconServer = di + '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';
  153. var iconHome = di + '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';
  154. var iconInfo = di + 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3ggcCiUhZ1IxdgAAAaVJREFUOMvFkj1rVEEUhp9zP/bmakiCBoKaaCUopLILphbsBftgbWVjYX6H/0BBEAR/QkCRdHYqEd1CTDaim2zuZu6957W46364G1sHBg7DzDPPe2bgf42rD94aQPJnYXXrza08S3azVmz/OihBryh3BHeAYgjIs2R3Y/2SFVWMARhEZgiQawKy9627+f3gx0vg7hCQtWIryojPB33MIJyWLKbHLM3P8bM6TxF8CEizHEnLANEsTQMsjnn2aJ1Xj29yfSVt1gZTGhklfyVEcoShuuL2k0/UMpYXWiRjrXH32QAJvBZEcHmh5vnDawjYfnHI3n4Y7oui6GwDl4Mb3ZAyn8esXszI0sMJ7XGDaNJAyB3Jae8f0emWAPRDjeS417g3ddONKUBDl8TahYgbV84BsH1vheOiai6QcHfMZkUw0ECxsjm2nn5FLtLEaCU2FsOmexDKWt3eqSEhoNevef/lZJTVGkOAEPoAnQnAUae9+aH0nTgavJfZ7H8MVKF4d/Lx9f1xFxvABOSDOh3rkYAaqIAAhGRxjepXu7IzPuJk0BFkqv4NL9LKlyfSx2sAAAAASUVORK5CYII=';
  155.  
  156. // *********************
  157. // ** HELPER FUNCTION **
  158. // *********************
  159.  
  160. function getId(node) { return document.getElementById(node); }
  161. function getElementsByClassName(classname, node) {
  162. node || (node = document.getElementsByTagName('body') [0]);
  163. for (var a = [], re = new RegExp('\\b' + classname + '\\b'), els = node.getElementsByTagName('*'), i = 0, j = els.length; i < j; i++) { re.test(els[i].className) && a.push(els[i]); }
  164. return a;
  165. }
  166. function getLink(pl) {
  167. var a=pl.split('?'), b=a[1].split('&');
  168. link.MP="0", link.UR="0", link.MC="0";
  169. for (var i = 0; b[i]; i++) {
  170. var e = b[i].split('=');
  171. switch(e[0]){
  172. case 'env': link.env = e[1]; break;
  173. case "lat": link.lat = e[1]; break;
  174. case 'lon': link.lon = e[1]; break;
  175. case 'zoom': link.zoom = e[1]; break;
  176. case "layers": link.layers = e[1]; break; // old format
  177. case "s": link.layers = e[1]; break; // new format
  178. case 'mapProblem': link.MP = e[1]; break;
  179. case 'mapUpdateRequest': link.UR = e[1]; break;
  180. case 'mapComments': link.MC = e[1]; break;
  181. case 'segments': link.segments = e[1]; break;
  182. case 'nodes': link.nodes = e[1]; break;
  183. case 'venues': link.venues = e[1]; break;
  184. default: break;
  185. }
  186. }
  187. //Object.keys(link).sort();
  188. }
  189. function getName() {
  190. var name, topCity = W.model.segments.topCityID;
  191. if (topCity == null) { name = lang[16]; }
  192. else {
  193. var name = W.model.cities.getObjectById(topCity);
  194. if (name === undefined) { name = lang[16]; }
  195. else { name = W.model.cities.getObjectById(topCity).attributes.name; }
  196. }
  197. return name;
  198. }
  199. function isJsonString(str) {
  200. try { JSON.parse(str); }
  201. catch (e) { return false; }
  202. return true;
  203. }
  204. function loadSettings() {
  205. var settings = JSON.parse(localStorage.WMEBookmarksSettings);
  206. BKMsettingsSort = settings.sort;
  207. BKMsettingsZoom = settings.zoom;
  208. BKMsettingsLayers = settings.layers;
  209. BKMsettingsPasteLayers = settings.layersPaste;
  210. BKMsettingsServer = settings.server;
  211. BKMsettingsSynchro = settings.synchro;
  212. BKMsettingsBck = settings.backup;
  213. BKMsettingsClic = settings.lclic;
  214. }
  215.  
  216. // ****************
  217. // ** MAIN HTML **
  218. // ****************
  219.  
  220. function BKMinit() {
  221. // Waze object needed
  222. if (typeof (W) === 'undefined') { setTimeout(BKMinit, 500); return; }
  223. if (typeof (W.location) == 'undefined') { setTimeout(BKMinit, 500); return; }
  224. if (typeof (W.map) == 'undefined') { setTimeout(BKMinit, 500); return; }
  225. if (typeof (I18n) == 'undefined') { setTimeout(BKMinit, 500); return; }
  226. if (typeof (OL) === 'undefined') { setTimeout(BKMinit, 500); return; }
  227. if (W.loginManager.user == null) { setTimeout(BKMinit, 500); return; }
  228. BKMusername = W.loginManager.user.userName;
  229. if(typeof(W.model.countries.top) === 'undefined' || W.model.countries.top === null) { setTimeout(BKMinit, 500); return; }
  230. BKMcountryActive = W.model.countries.top.name;
  231. if (typeof (BKMusername) == 'undefined') { setTimeout(BKMinit, 500); return; }
  232.  
  233. // Waze GUI needed
  234. BKMhandle = getId('user-info');
  235. if (typeof (BKMhandle) === 'undefined') { if (debug) { console.info('WME Bookmarks - BKMhandle : NOK'); } setTimeout(BKMinit, 500); return; }
  236. BKMhandleClass = getElementsByClassName('nav-tabs', BKMhandle) [0];
  237. if (typeof (BKMhandleClass) === 'undefined') { if (debug) { console.info('WME Bookmarks - BKMhandleClass : NOK'); } return; }
  238. BKMhandleClass2 = getElementsByClassName('tab-content', BKMhandle) [0];
  239. if (typeof (BKMhandleClass2) === 'undefined') { if (debug) { console.info('WME Bookmarks - BKMhandleClass2 : NOK'); } setTimeout(BKMinit, 500); return; }
  240. BKMmapSearch = getElementsByClassName('search-query', getId('search')) [0];
  241. if (typeof (BKMmapSearch) === 'undefined') { if (debug) { console.info('WME Bookmarks - BKMmapSearch : NOK'); } setTimeout(BKMinit, 500); return; }
  242.  
  243. // Verify localStorages
  244. if ('undefined' === typeof localStorage.WMEBookmarks || !isJsonString(localStorage.WMEBookmarks)) { localStorage.setItem('WMEBookmarks', '[]'); }
  245. if ('undefined' === typeof localStorage.WMEBookmarksShared || !isJsonString(localStorage.WMEBookmarksShared)) { localStorage.setItem('WMEBookmarksShared', '[]'); }
  246. if ('undefined' === typeof localStorage.WMEHistoric || !isJsonString(localStorage.WMEHistoric)) { localStorage.setItem('WMEHistoric', '[]'); }
  247. if ('undefined' === typeof localStorage.WMEBookmarksSettings || !isJsonString(localStorage.WMEBookmarksSettings)) { localStorage.setItem('WMEBookmarksSettings', '{"version":'+null+',"zoom":true,"layers":true,"server":false,"synchro":true,"backup":"ins"}'); }
  248. BMKcheckStorage();
  249. loadSettings();
  250.  
  251. // Translation
  252. var BKMLang = I18n.locale;
  253. if (BKMLang == 'fr') {
  254. lang = new Array('Favoris', 'Partage des amis', 'Partage ', 'Historique', 'Sauvegarde / Restauration', 'Synchroniser', 'Nom', 'Serveur', 'Valider', 'Annuler', 'Ajouter', 'Supprimer', 'Partager', 'Relocaliser', 'Commentaire', 'Changer', 'Sans Nom', 'Chercher une adresse, un lieu, ID ou permalien', 'C\'est parti !', 'Erreur', 'Réussi !', 'Stop', 'Paramètres', 'Pseudos');
  255. text1 = ' Copiez ces données dans un fichier TXT pour les conserver.<br/>Collez vos données pour les restaurer.';
  256. text2 = ' Écrivez les pseudos avec qui vous souhaitez partager le favoris. Le séparateur se mettra automatiquement.';
  257. text3 = ' Lorsque vous êtes synchronisé avec le serveur, le script envoie des données à celui-ci.<br>Les données sont: Pseudo, coordonnées, pays, nom du favoris, commentaires et pseudo des partages.<br>Effacer les données serveur du script supprime toutes traces de votre profil.';
  258. tset = new Array('Appliquer le zoom', 'Appliquer les calques (depuis les favoris)', 'Changement auto de serveur (usa/intl)', 'Synchroniser avec le serveur du script', 'Effacer les données locales', 'Effacer les données serveur du script', 'Tri : Favoris le plus récent en haut','Appliquer les calques (depuis la recherche)','Effacer l\'historique','Nouveau','Ajouter','Coloriser le dernier lien visité');
  259. }
  260. else if (BKMLang == 'de') {
  261. lang = new Array('Favoriten', 'Mit Freunden geteilt', 'Teilen ', 'Verlauf', 'Sichern / Wiederherstellen', 'Synchronisieren', 'Name', 'Server', 'Abschicken', 'Abbrechen', 'Hinzufügen', 'Löschen', 'Teilen', 'Ort aktualisieren', 'Kommentar', 'Ändern', '(ohne Namen)', 'Adresse, Ort, ID oder Permalink suchen', 'Auf geht\'s!', 'Fehler', 'Erfolgreich!', 'Stop', 'Einstellungen', 'Usernamen');
  262. text1 = ' Daten zur Sicherung in eine TXT-Datei sichern.<br/>Zur Wiederherstellung Daten hier einfügen.';
  263. text2 = ' Usernamen des Users eintragen, mit dem du den Favoriten teilen willst. Trennzeichen werden automatisch eingefügt.';
  264. text3 = ' Beim Synchronisieren mit dem Server werden folgende Daten übermittelt:<br>Username, Koordinaten, Land, Name des Favoriten, Kommentare und Usernamen, mit denen geteilt wurde.<br>Server-Daten löschen entfernt alle deiner Spuren auf dem Server.';
  265. tset = new Array('Zoomstufe sichern', 'Ebenen sichern (da favoriten)', 'Server automatisch wechseln (US/ROW)', 'Mit Server synchronisieren', 'Lokale Daten löschen', 'Server-Daten löschen', 'Sortieren : Letzte Favoriten oben', 'Ebenen sichern (da suchleiste)','Verlauf löschen','Neue','Hinzufügen','Markiere den zuletzt besuchten Link');
  266. }
  267. else {
  268. lang = new Array('Bookmarks', 'Friends\'s Sharing', 'Sharing ', 'Historic', 'Backup / Restore', 'Synchronization', 'Name', 'Server', 'Submit', 'Cancel', 'Add', 'Delete', 'Share', 'Relocate', 'Comment', 'Change', 'Unnamed', 'Search for an address, place, ID or permalink', 'Let\'s Go !', 'Error', 'Success !', 'Stop', 'Settings', 'Nicknames');
  269. text1 = ' Copy data into a TXT file to preserve them.<br/>Paste your data to restore them.';
  270. text2 = ' Write the nick you want to share the bookmark. The separator will be inserted automatically';
  271. text3 = ' When you are synchronized with the server, the script sends data to it <br>Data is: Nickname, coordinates, country, name of bookmarks, comments and nicknames shares <br> Clear script data server deletes all traces of your profile.';
  272. tset = new Array('Apply Zoom', 'Apply Layers (from bookmarks)', 'Auto change Server (usa/intl)', 'Synchro with script server', 'Clear local storage data', 'Clear script server data', 'Sort : Bookmark more recent on top', 'Apply Layers (from searchbar)','Clear historic','New','Add','Highlight last visited link');
  273. }
  274. // Then running
  275.  
  276. enhancedSearch();
  277. BKMtableCountries();
  278. BKMcss();
  279. W.map.events.register('moveend', W.map, mapLoaded);
  280. W.model.actionManager.events.register("afterclearactions", null, enhancedSearch);
  281.  
  282. function enhancedSearch(){
  283. setTimeout(function () {
  284. BKMmapSearch = getElementsByClassName('search-query', getId('search')) [0];
  285. if (typeof (BKMmapSearch) === 'undefined') { if (debug) { console.info('WME Bookmarks - BKMmapSearch : NOK'); } setTimeout(enhancedSearch, 500); return; }
  286. BKMmapSearch.placeholder = lang[17];
  287. BKMmapSearch.removeEventListener('paste', BKMPastePerma, false);
  288. BKMmapSearch.addEventListener('paste', BKMPastePerma, false);
  289. }, 100);
  290. //MajkiiTelini's hack about Search layers
  291. for (var i = W.map.getLayersByName("Search").length - 2; i >= 0 ; i--) { W.map.getLayersByName("Search")[i].destroy(); }
  292. }
  293. }
  294. function BKMtableCountries() {
  295. if (localStorage.WMEBookmarks) {
  296. var a = JSON.parse(localStorage.WMEBookmarks);
  297. for (var p in a) {
  298. if(!a.hasOwnProperty(p)) continue;
  299. var pays = a[p].country;
  300. if (pays && pays.length > 0) {
  301. if (countries.indexOf(pays) == - 1) { countries.push(pays); }
  302. }
  303. }
  304. if (debug) { console.log('WME Bookmarks : Mains Countries listed', countries); }
  305. select(countries, 'selectCountry');
  306. }
  307. if (localStorage.WMEBookmarksShared) {
  308. var b = JSON.parse(localStorage.WMEBookmarksShared);
  309. for (var p in b) {
  310. if(!b.hasOwnProperty(p)) continue;
  311. var pays = b[p].country;
  312. if (pays && pays.length > 0) {
  313. if (countriesS.indexOf(pays) == - 1) { countriesS.push(pays); }
  314. }
  315. }
  316. if (debug) { console.log('WME Bookmarks : Shared Countries listed', countriesS); }
  317. select(countriesS, 'selectCountryS');
  318. }
  319. }
  320. function BKMcss() {
  321. var Scss = document.createElement('style');
  322. Scss.type = 'text/css';
  323. var css = '.BKMbutton2 {padding:2px;margin-top:48px;height:30px;width:30px;background-color:rgba(0,0,0,0.6);border-radius:5px;cursor:pointer;}';
  324. css += '.BKMbutton2new {padding:2px;height:30px;width:30px;cursor:pointer;}';
  325. css += '#BKMbutton2Icon {height:30px;opacity:0.75;background:url(' + iconAddLinkMap + ') no-repeat 0 0;}';
  326. css += '#divContent {box-shadow: 0 4px 10px #aaa;}';
  327. css += '.BKMbuttonSync {font-size:12px;font-weight:bold;text-align:center;padding:6px 8px;border-radius:5px;border:2px solid #C2C2C2;background-color:#CBCBCB;cursor:pointer;}';
  328. css += '.BKMbuttonSync:hover {background-color:#93C4D3;}';
  329. css += '.divHead {clear:both;height:28px;padding-left:5px;font-weight:bold;background-color:#CBCBCB;}';
  330. css += '.divHeadName {float:left;text-align:left;vertical-align:bottom;}';
  331. css += '.divHeadCountry {float:right;}';
  332. css += '#selectCountry, #selectCountryS {height:22px;background-color:#CBCBCB;border:0;}';
  333. css += '.divBKM {clear:both;line-height:21px;height:24px;border:1px solid #ededed;border-top:0;background-color:#ffffff;}';
  334. css += '.divName {float:left;text-align:left;padding-left:5px;}';
  335. css += '.divName a {text-decoration:none;}';
  336. css += '.divSuppr {float:right;width:20px;}';
  337. css += '.divSuppr img {height:16px;}';
  338. css += '#BKMedit {clear:both;display:none;margin-bottom:10px;height:133px;border:2px solid #C2C2C2;box-shadow: 0 4px 10px #aaa;}';
  339. css += '#divEditTitre {line-height:24px;height:24px;border-bottom:1px solid #C2C2C2;}';
  340. css += '#divEdit {float:left;width:50px;height:23px;text-align:left;padding-left:5px;font-weight:bold;background-color:#CBCBCB;}';
  341. css += '#divEditName {float:left;width:195px;height:23px;padding:0;padding-left:5px;border:0;margin:0;}';
  342. css += '#divComm {float:left;width:100%;line-height:24px;height:23px;padding-left:5px;text-align:left;font-weight:bold;background-color:#CBCBCB;border-bottom:1px solid #C2C2C2;}';
  343. css += '#divCommEdit {float:left;width:100%;height:81px;border:0;margin:0;padding:2px;resize:none;}';
  344. css += '#divBackupTxt, #divSettingsContent {width:279px;min-height:150px;margin:2px 0 10px;resize:none;border:2px solid #C2C2C2;}';
  345. css += '#divShareTxt {float:left;width:100%;height:118px;resize:none;margin-bottom:5px;border:0;border-bottom:1px solid #C2C2C2;}';
  346. css += '.divComment {clear:both;position:relative;display:none;padding:1px 0 3px 20px;text-align:left;background:#CBCBCB url(' + iconComment + ') no-repeat left 2px;border-bottom:1px solid #C2C2C2;}';
  347. css += '.BKMsync {padding: 5px 2px 25px;}';
  348. css += '.BKMsync img {height:16px;}';
  349. css += '#divBackup p, #BKMedit p, #divSettings p {margin:0;line-height:20px;text-align:justify;padding:5px;font-size:11px;}';
  350. Scss.innerHTML = css;
  351. document.body.appendChild(Scss);
  352. BKMmainHtml();
  353. }
  354. function BKMmainHtml() {
  355. //Create content in favorite's tab
  356. var newTab = document.createElement('li');
  357. newTab.innerHTML = '<a href="#sidepanel-bookmarks" data-toggle="tab" id="tabBKM"><span class="fa fa-star" title="Bookmarks"></span></a>';
  358. BKMhandleClass.appendChild(newTab);
  359. var addon = document.createElement('section');
  360. addon.id = 'bookmarks-addon';
  361. // Bookmarks header
  362. var content = '<div style="float:left;margin-left:5px;"><b><a href="https://gf.qytechs.cn/scripts/4515-wme-bookmarks" target="_blank"><u>WME Bookmarks</u></a></b> v' + BKMversion + '</div>';
  363. content += '<div style="clear:both;float:left;width:100%;margin:5px;">';
  364. content += '<div style="float:left;width:34px;"><img id="iconBookmarks" title="' + lang[0] + '" src="' + iconBookmarks + '" /></div>';
  365. content += '<div id="shareButton" style="float:left;width:34px;"><img id="iconShare" title="' + lang[1] + '" src="' + iconNoShare + '" /></div>';
  366. content += '<div style="float:left;width:34px;"><img id="iconHisto" title="' + lang[3] + '" src="' + iconNoHisto + '" /></div>';
  367. content += '<div style="float:left;width:34px;"><img id="iconBackup" title="' + lang[4] + '" src="' + iconNoBackup + '" /></div>';
  368. content += '<div style="float:left;width:34px;"><img id="iconSettings" title="' + lang[22] + '" src="' + iconNoSettings + '" /></div>';
  369. content += '</div><div style="clear:both;"></div><div id="BKMedit"></div>'; // Edit and Share containers
  370. content += '<div id="divContent">'; // Principal container
  371. // Bookmarks tab
  372. content += '<div id="divBookmarks" style="margin-bottom:10px;visibility:hidden;"><div class="divHead" id="divBookmarksHead">';
  373. content += '<div class="divHeadName"><img style="padding-right:3px;height:18px;" src="' + iconBookmarks + '" />' + lang[6] + 's</div>';
  374. content += '<div class="divHeadCountry"><select type="text" name="Country" id="selectCountry"></select></div>';
  375. content += '</div><div id="divBookmarksContent"></div></div>';
  376. // Friends Share tab
  377. content += '<div id="divShare" style="margin-bottom:10px;visibility:hidden;"><div class="divHead" id="divShareHead">';
  378. content += '<div class="divHeadName"><img style="padding:3px 3px 0 0;height:18px;" src="' + iconShare + '" />' + lang[1] + '</div>';
  379. content += '<div class="divHeadCountry"><select type="text" name="Country" id="selectCountryS"></select></div>';
  380. content += '</div><div id="divShareContent"></div></div>';
  381. // Historic tab
  382. content += '<div id="divHisto" style="margin-bottom:10px;visibility:hidden;"><div class="divHead">';
  383. content += '<div class="divHeadName"><img style="padding:3px 3px 0 0;height:18px;" src="' + iconHisto + '" />' + lang[3] + '</div>';
  384. content += '</div><div id="divHistoContent"></div></div>';
  385. // Backup tab
  386. content += '<div id="divBackup" style="margin-bottom:10px;visibility:hidden;"><div class="divHead">';
  387. content += '<div class="divHeadName"><img style="padding:3px 3px 0 0;height:18px;" src="' + iconBackup + '" />' + lang[4] + '</div>';
  388. content += '<div class="divSuppr"><a href="#"><img id="backupValid" title="' + lang[4] + '" src="' + iconValid + '" /></a></div></div>';
  389. content += '<input type="radio" id="bckNew" name="typeBck" ' + (BKMsettingsBck=="new" ? ' checked' : '') + ' value="new" style="margin-left: 40px;" /> '+ tset[9];
  390. content += '<input type="radio" id="bckAdd" name="typeBck" ' + (BKMsettingsBck=="add" ? ' checked' : '') + ' value="add" style="margin-left: 40px;" /> '+ tset[10];
  391. content += '<textarea id="divBackupTxt"></textarea><p><img title="Info" src="' + iconInfo + '" />' + text1 + '</p></div>';
  392. // Settings tab
  393. content += '<div id="divSettings" style="margin-bottom:10px;visibility:hidden;"><div class="divHead">';
  394. content += '<div class="divHeadName"><img style="padding:3px 3px 0 0;height:22px;" src="' + iconSettings + '" />' + lang[22] + '</div>';
  395. content += '</div><div id="divSettingsContent" style="padding:3px;line-height:22px;">';
  396. content += '<input type="checkbox" id="chkSort" ' + (BKMsettingsSort ? ' checked' : '') + ' /> ' + tset[6] + '<br />';
  397. content += '<input type="checkbox" id="chkZoom" ' + (BKMsettingsZoom ? ' checked' : '') + ' /> ' + tset[0] + '<br />';
  398. content += '<input type="checkbox" id="chkLayers" ' + (BKMsettingsLayers ? ' checked' : '') + ' /> ' + tset[1] + '<br />';
  399. content += '<input type="checkbox" id="chkLayersPaste" ' + (BKMsettingsPasteLayers ? ' checked' : '') + ' /> ' + tset[7] + '<br />';
  400. content += '<input type="checkbox" id="chkServer" ' + (BKMsettingsServer ? ' checked' : '') + ' /> ' + tset[2] + '<br />';
  401. content += '<input type="checkbox" id="chkSynchro" ' + (BKMsettingsSynchro ? ' checked' : '') + ' /> ' + tset[3] + '<br />';
  402. content += '<input type="checkbox" id="chkLastClic" ' + (BKMsettingsClic ? ' checked' : '') + ' /> ' + tset[11] + '<br />';
  403. content += '<input type="button" id="razButton1" value="" style="height: 13px;" /> ' + tset[4] + '<br />';
  404. content += '<input type="button" id="razButton2" value="" style="height: 13px;" /> ' + tset[5] + '<br />';
  405. content += '<input type="button" id="razButton3" value="" style="height: 13px;" /> ' + tset[8] + '<br />';
  406. content += '</div><p><img title="Info" src="' + iconInfo + '" />' + text3 + '</p></div></div>';
  407. addon.innerHTML = content;
  408. addon.id = 'sidepanel-bookmarks';
  409. addon.className = 'tab-pane';
  410. BKMhandleClass2.appendChild(addon);
  411. // Tabs actions
  412. select(countries, 'selectCountry');
  413. select(countriesS, 'selectCountryS');
  414. bookmarksToggle();
  415. getId('iconBookmarks').onclick = (function () { bookmarksToggle(); });
  416. getId('iconShare').onclick = (function () { shareToggle(); });
  417. getId('iconHisto').onclick = (function () { histoToggle(); });
  418. getId('iconBackup').onclick = (function () { backupToggle(); });
  419. getId('iconSettings').onclick = (function () { settingsToggle(); });
  420. // Buttons actions
  421. getId('bckNew').onclick = (function () {
  422. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  423. a.backup="new";
  424. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  425. loadSettings();
  426. });
  427. getId('bckAdd').onclick = (function () {
  428. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  429. a.backup="add";
  430. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  431. loadSettings();
  432. });
  433. getId('chkSort').onclick = (function () {
  434. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  435. (getId('chkSort').checked ? a.sort=true : a.sort=false)
  436. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  437. loadSettings();
  438. });
  439. getId('chkZoom').onclick = (function () {
  440. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  441. (getId('chkZoom').checked ? a.zoom=true : a.zoom=false)
  442. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  443. loadSettings();
  444. });
  445. getId('chkLayers').onclick = (function () {
  446. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  447. (getId('chkLayers').checked ? a.layers=true : a.layers=false)
  448. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  449. loadSettings();
  450. });
  451. getId('chkLayersPaste').onclick = (function () {
  452. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  453. (getId('chkLayersPaste').checked ? a.layersPaste=true : a.layersPaste=false)
  454. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  455. loadSettings();
  456. });
  457. getId('chkServer').onclick = (function () {
  458. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  459. (getId('chkServer').checked ? a.server=true : a.server=false)
  460. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  461. loadSettings();
  462. });
  463. getId('chkSynchro').onclick = (function () {
  464. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  465. if (getId('chkSynchro').checked) {
  466. a.synchro=true;
  467. $('#iconShare').animate({ width: '24px' }, 200);
  468. $('#shareButton').animate({ width: '34px' }, 250);
  469. } else {
  470. a.synchro=false;
  471. $('#iconShare').animate({ width: '0' }, 200);
  472. $('#shareButton').animate({ width: '0' }, 250);
  473. }
  474. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  475. loadSettings();
  476. });
  477. getId('chkLastClic').onclick = (function () {
  478. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  479. (getId('chkLastClic').checked ? a.lclic=true : a.lclic=false)
  480. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  481. loadSettings();
  482. });
  483. getId('razButton1').onclick = (function () {
  484. var answer = window.confirm(tset[4] + ' ?');
  485. if (answer) {
  486. localStorage.setItem('WMEBookmarks', '[]');
  487. BKMtableCountries();
  488. select(countries, 'selectCountry');
  489. }
  490. });
  491. getId('razButton2').onclick = (function () {
  492. var answer = window.confirm(tset[5] + ' ?');
  493. if (answer) { initBookmarks(); }
  494. });
  495. getId('razButton3').onclick = (function () {
  496. var answer = window.confirm(tset[8] + ' ?');
  497. if (answer) { localStorage.setItem('WMEHistoric', '[]'); }
  498. });
  499. if (debug) { console.info('WME Bookmarks HTML loaded'); }
  500. // Button on the map
  501. setTimeout(function () {
  502. var addNodeButton = document.createElement('div');
  503. addNodeButton.id = 'addNodeButton';
  504. addNodeButton.className = 'BKMbutton2new';
  505. addNodeButton.innerHTML = '<div id="BKMbutton2Icon"></div>';
  506. addNodeButton.onclick = BKMinsertPermalink;
  507. getElementsByClassName('topbar') [0].appendChild(addNodeButton);
  508. getElementsByClassName('topbar') [0].style.padding = '0 10px';
  509. getElementsByClassName('location-info') [0].style.marginLeft = '35px';
  510. if (getElementsByClassName('location-info') [0].innerHTML === '') { getElementsByClassName('area-managers-region') [0].style.marginLeft = '35px'; }
  511. addNodeButton.onmouseover = (function () { getId('BKMbutton2Icon').style.opacity = '1'; });
  512. addNodeButton.onmouseout = (function () { getId('BKMbutton2Icon').style.opacity = '0.6'; });
  513. }, 1000);
  514.  
  515. if (BKMsettingsSynchro === false) {
  516. $('#iconShare').animate({ width: '0' }, 200);
  517. $('#shareButton').animate({ width: '0' }, 250);
  518. }
  519. BMKcheckAutoSave();
  520. BKMaddButtonIfLoad();
  521. timer = setTimeout(BKMcheckActiveCountry, 5000);
  522. }
  523.  
  524. // ***************
  525. // ** BOOKMARKS **
  526. // ***************
  527.  
  528. function initBookmarks() {
  529. if (debug) { console.log('WME Bookmarks: Send: ' + BKMusername + ' to init'); }
  530. var params = {
  531. url: 'http://4bphotoabbatienne.fr/bkm.php?initbookmarks=' + BKMusername,
  532. headers: { "Content-Type": "application/x-www-form-urlencoded" },
  533. data: null,
  534. method: 'POST'
  535. };
  536. BKMDownloadHelper.add(params, function (data) {
  537. if (debug) { console.log('WME Bookmarks: Server Response: ', data); }
  538. if (data.status == 'success') {
  539. if (data.data != 'Check') {
  540. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><img style="padding:3px 3px 0 0; height:18px;" src="' + iconSynchro + '" /><span style="color:red;">' + lang[19] + '</span></div>';
  541. setTimeout(Getbookmarks, 1000);
  542. } else {
  543. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><img style="padding:3px 3px 0 0; height:18px;" src="' + iconSynchro + '" /><span style="color:darkgreen;">' + lang[20] + '</span></div>';
  544. BKMaddButtonIfLoad();
  545. setTimeout(reloadHtmlBookmarks, 1000);
  546. }
  547. }
  548. });
  549. }
  550. function getBookmarks() {
  551. var listFav = localStorage.WMEBookmarks;
  552. var params = {
  553. url: 'http://4bphotoabbatienne.fr/bkm.php?getbookmarks=' + BKMusername,
  554. headers: { "Content-Type": "application/x-www-form-urlencoded" },
  555. data: null,
  556. method: 'GET'
  557. };
  558. BKMDownloadHelper.add(params, function (data) {
  559. if (data.status == 'success') {
  560. if (isJsonString(data.data)) {
  561. if (_.isEqual(JSON.parse(listFav), JSON.parse(data.data.replace(/\\/g, ""))) !== true && data.data && BKMsettingsSynchro === true) {
  562. if (debug) { console.log('WME Bookmarks: From Server: ', data.data.replace(/\\/g, "")); }
  563. if (debug) { console.log('WME Bookmarks: From local : ', listFav); }
  564. clearTimeout(timer);
  565. $('#BKMbutton2Icon').hide();
  566. $('addNodeButton').hide();
  567. getId('addNodeButton').style.height='0';
  568. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><img style="padding:3px 3px 0 0; height:18px;" src="' + iconSynchro + '" />' + lang[5] + '</div><div class="divSuppr"><img id="SyncCancel" title="' + lang[9] + '" src="' + iconCancel + '" /></div>';
  569. if (data.data != '[]') {
  570. var servToPC = '<div id="serv2Loc" class="BKMbuttonSync" style="float:left;"><img src="'+ iconServer +'" alt="" /> '+ lang[7] +' > PC <img src="'+ iconHome +'" alt="" /></div>';
  571. } else { var servToPC = ''; }
  572. if (listFav != '[]') {
  573. var PCToServ = '<div id="loc2Serv" class="BKMbuttonSync" style="float:right;"><img src="'+ iconHome +'" alt="" /> PC > '+ lang[7] +' <img src="'+ iconServer +'" alt="" /></div>';
  574. } else { var PCToServ = ''; }
  575. getId('divBookmarksContent').innerHTML = '<div class="BKMsync" style="clear:both; padding-bottom:20px;"><div class="BKMsync">'+ servToPC + PCToServ +'</div>';
  576. if (getId('serv2Loc')) getId('serv2Loc').onclick = (function(){serv2Loc(data.data);});
  577. if (getId('loc2Serv')) getId('loc2Serv').onclick = (function(){loc2Serv();});
  578. }
  579. else {
  580. reloadHtmlBookmarks();
  581. if (debug) { console.log('WME Bookmarks: Bookmarks Sync !'); }
  582. }
  583. } else {
  584. if (debug) { console.log('WME Bookmarks: Server not responding or data corrupted'); }
  585. clearTimeout(timer);
  586. $('#BKMbutton2Icon').hide();
  587. $('addNodeButton').hide();
  588. getId('addNodeButton').style.height='0';
  589. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><img style="padding:3px 3px 0 0; height:18px;" src="' + iconSynchro + '" />' + lang[5] + '</div><div class="divSuppr"><a href="#"><img id="SyncCancel" title="' + lang[9] + '" src="' + iconCancel + '" /></a></div>';
  590. getId('divBookmarksContent').innerHTML = '<div class="BKMsync" style="padding-bottom:20px;"><div id="servhs" class="BKMbuttonSync" style="background-color:#F77;"><span style="color:red;">Error</span> <span style="font-size:10px;">Server not responding or data corrupted<br/>Click me for desync</span></div></div>';
  591. getId('servhs').onclick = (function () {
  592. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  593. a.synchro=false;
  594. $('#iconShare').animate({ width: '0' }, 200);
  595. $('#shareButton').animate({ width: '0' }, 250);
  596. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  597. reloadHtmlBookmarks();
  598. getId('chkSynchro').checked=false;
  599. });
  600. }
  601. }
  602. }, null);
  603. function serv2Loc(data) {
  604. localStorage.setItem('WMEBookmarks', data);
  605. BKMaddButtonIfLoad();
  606. reloadHtmlBookmarks();
  607. }
  608. function loc2Serv() {
  609. getId('divBookmarksContent').innerHTML = '';
  610. BKMaddButtonIfLoad();
  611. BKMpostBookmarks();
  612. }
  613. }
  614. function reloadHtmlBookmarks() {
  615. var content = '<div class="divHeadName"><img style="padding-right:3px; height:18px;" src="' + iconBookmarks + '" />' + lang[6] + 's</div>';
  616. content += '<div class="divHeadCountry"><select type="text" name="Country" id="selectCountry"></select></div>';
  617. getId('divBookmarksHead').innerHTML = content;
  618. select(countries, 'selectCountry');
  619. getId('selectCountry').onchange = (function () {
  620. clearTimeout(timer);
  621. BKMcheckActiveCountry();
  622. BKMcountryActive = getId('selectCountry').value;
  623. getId('divBookmarksContent').innerHTML = '';
  624. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  625. });
  626. getId('divBookmarksContent').innerHTML = '';
  627. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  628. BKMtableCountries();
  629. }
  630.  
  631. // ***************
  632. // ** SHARED **
  633. // ***************
  634.  
  635. function getShared() {
  636. var listFav = localStorage.WMEBookmarksShared;
  637. var params = {
  638. url: 'http://4bphotoabbatienne.fr/bkm.php?getshared='+ BKMusername,
  639. headers: { "Content-Type": "application/x-www-form-urlencoded" },
  640. data: null,
  641. method: 'GET'
  642. };
  643. BKMDownloadHelper.add(params, function (data) {
  644. if (data.status == 'success') {
  645. if (_.isEqual(JSON.parse(listFav), JSON.parse(data.data.replace(/\\/g, ""))) !== true && data.data && BKMsettingsSynchro === true) {
  646. if (debug) { console.log('WME Bookmarks: From Server: ', JSON.parse(data.data)); }
  647. if (debug) { console.log('WME Bookmarks: From local: ', JSON.parse(listFav)); }
  648. localStorage.setItem('WMEBookmarksShared', data.data);
  649. reloadHtmlShared();
  650. } else {
  651. reloadHtmlShared();
  652. if (debug) { console.log('WME Bookmarks: Shared Sync !'); }
  653. }
  654. }
  655. }, null);
  656. }
  657. function BKMedit(data) { //Show Share DIV
  658. clearTimeout(timer);
  659. $('#BKMedit').slideDown(200);
  660. $('#divContent').slideUp(1000);
  661. var content1 = '<div id="divEditTitre"><div id="divEdit" style="width:80px;">' + lang[6] + '</div><input type="text" id="divEditName" style="width:165px;" value="'+ data.name.replace(/"/g, '&quot;') +'" readonly /><input type="hidden" id="permalink" value="' + data.perma.lon +'|'+ data.perma.lat + '" />';
  662. content1 += '<div class="divSuppr"><a href="#"><img id="shareValid" margin-top:3px;" title="' + lang[8] + '" src="' + iconValid + '" /></a></div>';
  663. content1 += '</div><textarea id="divShareTxt"></textarea><p><img title="Info" src="' + iconInfo + '" />' + text2 + '</p>';
  664. getId('BKMedit').innerHTML = content1;
  665. if (!data.share) {
  666. data.share = lang[23];
  667. getId('divShareTxt').style.color = '#aaa';
  668. }
  669. getId('divShareTxt').onclick = (function () {
  670. if (getId('divShareTxt').value == lang[23]) {
  671. getId('divShareTxt').value = '';
  672. getId('divShareTxt').style.color = '#000';
  673. }
  674. });
  675. getId('divShareTxt').innerHTML = data.share;
  676. getId('divShareTxt').onkeyup = (function () {
  677. var t = getId('divShareTxt').value;
  678. if (t === '') { getId('divShareTxt').innerHTML = data.share; }
  679. getId('divShareTxt').value = t.replace(',', ';').replace(' ', ';').replace(';;', ';');
  680. });
  681. getId('shareValid').onclick = (function () {
  682. data.share = getId('divShareTxt').value;
  683. if (data.share !== lang[23]) {
  684. var toSave=[];
  685. var a = JSON.parse(localStorage.WMEBookmarks);
  686. for (var p in a) {
  687. if(!a.hasOwnProperty(p)) continue;
  688.  
  689. //Redo Bookmark
  690. var bNew={};
  691. bNew.country=a[p].country;
  692. bNew.name=a[p].name;
  693. bNew.perma=a[p].perma;
  694. bNew.comm=a[p].comm;
  695. if (getId('permalink').value == a[p].perma.lon+'|'+a[p].perma.lat) {
  696. bNew.share=data.share;
  697. if (BKMsettingsSynchro === true) {
  698. if (debug) { console.log('WME Bookmarks: SHARE', BKMusername, bNew); }
  699. BKMupdateBookmarks('SHARE', BKMusername, bNew, '');
  700. }
  701. } else { bNew.share=a[p].share; }
  702. //Store Bookmark
  703. toSave.push(bNew);
  704. }
  705. localStorage.setItem('WMEBookmarks', JSON.stringify(toSave));
  706. }
  707. $('#divContent').slideDown(1000);
  708. $('#BKMedit').slideUp(500);
  709. });
  710. BKMcheckActiveCountry();
  711. getId('divBookmarksContent').innerHTML = '';
  712. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  713. }
  714. function reloadHtmlShared() {
  715. var content = '<div class="divHeadName"><img style="padding:3px 3px 0 0; height:18px;" src="' + iconShare + '" />' + lang[1] + '</div>';
  716. content += '<div class="divHeadCountry"><select type="text" name="Country" id="selectCountryS"></select></div>';
  717. getId('divShareHead').innerHTML = content;
  718. select(countriesS, 'selectCountryS');
  719. getId('selectCountryS').onchange = (function () {
  720. clearTimeout(timer);
  721. BKMcheckActiveCountry();
  722. BKMcountryActive = getId('selectCountryS').value;
  723. getId('divShareContent').innerHTML = '';
  724. loadBookmarks('WMEBookmarksShared', 'divShareContent');
  725. });
  726. getId('divShareContent').innerHTML = '';
  727. loadBookmarks('WMEBookmarksShared', 'divShareContent');
  728. }
  729.  
  730. // ***************
  731. // ** BACKUP **
  732. // ***************
  733.  
  734. function BKMbackup() {
  735. var a = localStorage.WMEBookmarks, toshow = '';
  736. getId('divBackupTxt').value='';
  737. if (a) {
  738. a = JSON.parse(a);
  739. for (var p in a) {
  740. if(!a.hasOwnProperty(p)) continue;
  741. var permalink = a[p].perma.lon +"|"+ a[p].perma.lat;
  742. if (typeof(a[p].perma.zoom) !== 'undefined') { permalink += "|"+ a[p].perma.zoom; } else { permalink += "|"; }
  743. if (typeof(a[p].perma.layers) !== 'undefined') { permalink += "|"+ a[p].perma.layers; } else { permalink += "|"; }
  744. // Objects
  745. if (typeof(a[p].perma.segments) !== 'undefined') { permalink += "|s:"+ a[p].perma.segments; }
  746. else if (typeof(a[p].perma.nodes) !== 'undefined') { permalink += "|n:"+ a[p].perma.nodes; }
  747. else if (typeof(a[p].perma.venues) !== 'undefined') { permalink += "|v:"+ a[p].perma.venues; }
  748. else { permalink += "|"; }
  749. // New filters
  750. if (typeof(a[p].perma.env) !== 'undefined') { permalink += "|"+ a[p].perma.env; } else { permalink += "|"; }
  751. if (typeof(a[p].perma.MP) !== 'undefined') { permalink += "|"+ a[p].perma.MP; } else { permalink += "|"; }
  752. if (typeof(a[p].perma.UR) !== 'undefined') { permalink += "|"+ a[p].perma.UR; } else { permalink += "|"; }
  753. if (typeof(a[p].perma.MC) !== 'undefined') { permalink += "|"+ a[p].perma.MC; } else { permalink += "|"; }
  754.  
  755. if (typeof(a[p].comm) !== 'undefined') { permalink += ";"+ a[p].comm; } else { permalink += ";"; }
  756. if (typeof(a[p].share) !== 'undefined') { permalink += ";"+ a[p].share; } else { permalink += ";"; }
  757.  
  758. //Push to generate CSV
  759. toshow += a[p].country +";"+ a[p].name +";"+ permalink +"\n";
  760. }
  761. getId('divBackupTxt').value=toshow;
  762. getId('divBackupTxt').onclick=(function () {
  763. getId('divBackupTxt').focus();
  764. getId('divBackupTxt').select();
  765. });
  766. }
  767. getId('backupValid').onclick = backup;
  768. function backup() {
  769. if (getId('bckAdd').checked===true) {
  770. var lStorage=JSON.parse(localStorage.WMEBookmarks);
  771. } else { //bckNew
  772. localStorage.setItem('WMEBookmarks', '[]');
  773. var lStorage=[];
  774. }
  775. var a = getId('divBackupTxt').value;
  776. var b = a.split('\n');
  777.  
  778. for (var i=0; b[i]; i++){
  779. var c = b[i].split(';');
  780. var bNew ={};
  781. bNew.country = c[0];
  782. bNew.name = c[1];
  783. bNew.perma=BKMconvertPermalink(c[2]);
  784. bNew.comm = c[3];
  785. bNew.share = c[4];
  786. if (lStorage.map(function(e) { return e.perma.lon; }).indexOf(bNew.perma.lon) == -1 && lStorage.map(function(e) { return e.perma.lat; }).indexOf(bNew.perma.lat) == -1) { lStorage.push(bNew); } //Add new entry only
  787. }
  788. localStorage.setItem('WMEBookmarks', JSON.stringify(lStorage));
  789. BKMtableCountries();
  790. bookmarksToggle();
  791. if (BKMsettingsSynchro === true) { BKMpostBookmarks(); }
  792. }
  793. }
  794.  
  795. // ***************************
  796. // ** ACTIONS WITH BOOKMARK **
  797. // ****************************
  798.  
  799. function BKMhtmlEditName(container, data) { //Show Edit DIV
  800. clearTimeout(timer);
  801. $('#BKMedit').slideDown(200);
  802. if (container == 'divBookmarksContent') { getId('BKMedit').style.height = '133px'; }
  803. var content1 = '<div id="divEditTitre"><div id="divEdit">' + lang[6] + '</div><input type="text" id="divEditName" value="' + data.name + '" /><input type="hidden" id="permalink" value="' + data.perma.lon +'|'+ data.perma.lat + '" />';
  804. content1 += '<div class="divSuppr"><a href="#"><img id="EditValid" margin-top:3px;" title="' + lang[8] + '" src="' + iconValid + '" /></a></div>';
  805. content1 += '</div><div id="divComm">' + lang[14] + '</div></div><textarea id="divCommEdit">';
  806. if (data.comm === '') { content1 += ''; } else { content1 += data.comm; }
  807. content1 += '</textarea>';
  808. getId('BKMedit').innerHTML = content1;
  809. getId('divEditName').focus();
  810. getId('divEditName').select();
  811. getId('EditValid').onclick = (function(){ BKMeditName(container,data); });
  812. }
  813. function BKMeditName(container, data) { //Action after editing name or comment (DB)
  814. $('#BKMedit').slideUp(200);
  815. var toSave=[];
  816.  
  817. //Bookmarks list update
  818. if (container === 'divBookmarksContent') {
  819. var a = JSON.parse(localStorage.WMEBookmarks);
  820. for (var p in a) {
  821. if(!a.hasOwnProperty(p)) continue;
  822.  
  823. //Redo Bookmark
  824. var bNew={};
  825. bNew.country=a[p].country;
  826. bNew.name=a[p].name;
  827. bNew.perma=a[p].perma;
  828. bNew.comm=a[p].comm;
  829. bNew.share=a[p].share;
  830. if (getId('permalink').value == a[p].perma.lon+'|'+a[p].perma.lat) {
  831. bNew.name=getId('divEditName').value;
  832. bNew.comm=getId('divCommEdit').value;
  833. if (BKMsettingsSynchro === true) {
  834. if (debug) { console.log('WME Bookmarks: UPDATE', BKMusername, bNew); }
  835. BKMupdateBookmarks('UPDATE',BKMusername, bNew, '');
  836. }
  837. }
  838. //Store Bookmark
  839. toSave.push(bNew);
  840. }
  841. localStorage.setItem('WMEBookmarks', JSON.stringify(toSave));
  842. }
  843.  
  844. //Sharing list update
  845. else {
  846. var a = JSON.parse(localStorage.WMEBookmarksShared);
  847. for (var p in a) {
  848. if(!a.hasOwnProperty(p)) continue;
  849.  
  850. //Redo Bookmark
  851. var bNew={};
  852. bNew.owner=a[p].owner;
  853. bNew.country=a[p].country;
  854. bNew.name=a[p].name;
  855. bNew.perma=a[p].perma;
  856. bNew.comm=a[p].comm;
  857. bNew.share=a[p].share;
  858. if (getId('permalink').value == a[p].perma.lon+'|'+a[p].perma.lat) {
  859. bNew.name=getId('divEditName').value;
  860. bNew.comm=getId('divCommEdit').value;
  861. if (BKMsettingsSynchro === true) {
  862. if (debug) { console.log('WME Bookmarks: UPDATE', a[p].owner, bNew); }
  863. BKMupdateBookmarks('UPDATE',a[p].owner, bNew, '');
  864. }
  865. }
  866. //Store Bookmark
  867. toSave.push(bNew);
  868. }
  869. localStorage.setItem('WMEBookmarksShared', JSON.stringify(toSave));
  870. }
  871. //Reload HTML
  872.  
  873. BKMcheckActiveCountry();
  874. if (container == 'divBookmarksContent') {
  875. getId('divBookmarksContent').innerHTML = '';
  876. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  877. } else {
  878. getId('divShareContent').innerHTML = '';
  879. loadBookmarks('WMEBookmarksShared', 'divShareContent');
  880. }
  881. }
  882. function BKMsuppr(name, id, container) { //Action after delete a bookmark (DB)
  883. clearTimeout(timer);
  884. if (debug) { console.info('WME Bookmarks Suppr: ', id); }
  885. var answer = window.confirm(lang[11] + ' ' + name + ' ?');
  886. if (answer) {
  887. var toSave=[];
  888. if (container === 'divHistoContent') {
  889. var a = JSON.parse(localStorage.WMEHistoric);
  890. for (var i = 0; a[i]; i++) {
  891. var bNew={};
  892. bNew.date=a[i].date;
  893. bNew.perma=a[i].perma;
  894. bNew.name=a[i].name;
  895. if (bNew.perma.toSource() !== id.toSource()) { toSave.push(bNew); }
  896. }
  897. localStorage.setItem('WMEHistoric', JSON.stringify(toSave));
  898. getId('divHistoContent').innerHTML = '';
  899. loadBookmarks('WMEHistoric', 'divHistoContent');
  900. }
  901. else if (container === 'divBookmarksContent') { // Suppr own bookmark
  902. var a = JSON.parse(localStorage.WMEBookmarks);
  903. for (var i = 0; a[i]; i++) {
  904. var bNew={};
  905. bNew.country=a[i].country;
  906. bNew.name=a[i].name;
  907. bNew.perma=a[i].perma;
  908. bNew.comm=a[i].comm;
  909. bNew.share=a[i].share;
  910. if (bNew.perma.toSource() !== id.toSource()) { toSave.push(bNew); }
  911. else {
  912. if (BKMsettingsSynchro === true) {
  913. if (debug) { console.log('WME Bookmarks: DELETE', BKMusername, bNew); }
  914. BKMupdateBookmarks('DELETE', BKMusername, bNew, '');
  915. }
  916. }
  917. }
  918. localStorage.setItem('WMEBookmarks', JSON.stringify(toSave));
  919. getId('divBookmarksContent').innerHTML = '';
  920. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  921. } else { // Unshare a bookmark
  922. var a = JSON.parse(localStorage.WMEBookmarksShared);
  923. for (var i = 0; a[i]; i++) {
  924. var bNew={};
  925. bNew.owner = a[i].owner;
  926. bNew.country = a[i].country;
  927. bNew.name = a[i].name;
  928. bNew.perma = a[i].perma;
  929. bNew.comm = a[i].comm;
  930. bNew.share = a[i].share;
  931. if (bNew.perma.toSource() !== id.toSource()) { toSave.push(bNew); }
  932. else {
  933. if (BKMsettingsSynchro === true) {
  934. if (debug) { console.log('WME Bookmarks: UNSHARE', a[i].owner, bNew); }
  935. BKMupdateBookmarks('UNSHARE', BKMusername, bNew, '');
  936. }
  937. }
  938. }
  939. localStorage.setItem('WMEBookmarksShared', JSON.stringify(toSave));
  940. getId('divShareContent').innerHTML = '';
  941. loadBookmarks('WMEBookmarksShared', 'divShareContent');
  942. }
  943. getId('BKMedit').style.display = 'none';
  944. }
  945. BKMcheckActiveCountry();
  946. }
  947. function BKMrelocate(oldPerma, name, iconId) { // Action after relocate a bookmark (DB)
  948. clearTimeout(timer);
  949. var answer = window.confirm(lang[13] + ' Lon/Lat/Zoom ? (' + name + ')');
  950. if (answer) {
  951. var toSave=[];
  952. link={}; getLink(document.getElementsByClassName('WazeControlPermalink')[0].getElementsByClassName('permalink')[0].href);
  953. //Bookmarks list update
  954. if (getId('divBookmarks').style.visibility == 'visible') {
  955. var a = JSON.parse(localStorage.WMEBookmarks);
  956. for (var i = 0; a[i]; i++) {
  957. var bNew={};
  958. bNew.country = a[i].country;
  959. bNew.name = a[i].name;
  960. bNew.perma = a[i].perma;
  961. bNew.comm = a[i].comm;
  962. bNew.share = a[i].share;
  963. if (bNew.perma.toSource() === oldPerma.toSource()) {
  964. bNew.perma = link;
  965. if (BKMsettingsSynchro === true) {
  966. if (debug) { console.log('WME Bookmarks: RELOCATE New', BKMusername, bNew.perma, oldPerma); }
  967. BKMupdateBookmarks('RELOCATE', BKMusername, bNew, oldPerma);
  968. }
  969. }
  970. toSave.push(bNew);
  971. }
  972. localStorage.setItem('WMEBookmarks', JSON.stringify(toSave));
  973. getId('divBookmarksContent').innerHTML = '';
  974. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  975. }
  976. //Sharing list update
  977. if (getId('divShare').style.visibility == 'visible') {
  978. var a = JSON.parse(localStorage.WMEBookmarksShared);
  979. for (var i = 0; a[i]; i++) {
  980. var bNew={};
  981. bNew.owner = a[i].owner;
  982. bNew.country = a[i].country;
  983. bNew.name = a[i].name;
  984. bNew.perma = a[i].perma;
  985. bNew.comm = a[i].comm;
  986. bNew.share = a[i].share;
  987. if (bNew.perma.toSource() === oldPerma.toSource()) {
  988. bNew.perma = link;
  989. if (BKMsettingsSynchro === true) {
  990. if (debug) { console.log('WME Bookmarks: RELOCATE',a[i].owner, bNew, oldPerma); }
  991. BKMupdateBookmarks('RELOCATE', a[i].owner, bNew, oldPerma);
  992. }
  993. }
  994. toSave.push(bNew);
  995. }
  996. localStorage.setItem('WMEBookmarksShared', JSON.stringify(toSave));
  997. getId('divBookmarksContent').innerHTML = '';
  998. loadBookmarks('WMEBookmarksShared', 'divBookmarksContent');
  999. }
  1000. }
  1001. else { getId('iconRelocate_'+iconId).src=iconNoRelocate; }
  1002. BKMcheckActiveCountry();
  1003. }
  1004. function BKMinsertPermalink() { // Action when you add a new permalink (DB)
  1005. BKMcountryActive = W.model.countries.top.name;
  1006. link={}; getLink(document.getElementsByClassName('WazeControlPermalink')[0].getElementsByClassName('permalink')[0].href);
  1007.  
  1008. //JSON for new permalink
  1009. var bNew={};
  1010. bNew.country=BKMcountryActive;
  1011. bNew.name=getName();
  1012. bNew.perma=link;
  1013. bNew.comm='';
  1014. bNew.share='';
  1015.  
  1016. //Add in localStorage
  1017. var lStorage = JSON.parse(localStorage.WMEBookmarks);
  1018. lStorage.push(bNew);
  1019. localStorage.setItem('WMEBookmarks', JSON.stringify(lStorage));
  1020. if (BKMsettingsSynchro === true) {
  1021. if (debug) { console.log('WME Bookmarks: ADD', BKMusername, bNew); }
  1022. BKMupdateBookmarks('ADD', BKMusername, bNew, '');
  1023. }
  1024.  
  1025. //Add in HTML table
  1026. BKMtableHtml ('divBookmarksContent', bNew, 9999);
  1027. BKMhtmlEditName('divBookmarksContent', bNew);
  1028.  
  1029. //Reload Select list if new country
  1030. if (countries.indexOf(BKMcountryActive) == - 1) {
  1031. BKMtableCountries();
  1032. select(countries, 'selectCountry');
  1033. }
  1034. W.selectionManager.unselectAll();
  1035. getId('tabBKM').click();
  1036. }
  1037. function BKMPastePerma() { // Action when you paste a permalink
  1038. setTimeout(function () {
  1039. var exp = new RegExp('/(https?://(?:www.|(?!www))[^s.]+.[^s]{2,}|www.[^s]+.[^s]{2,})', 'g');
  1040. var a = BKMmapSearch.value;
  1041. var b = BKMmapSearch.innerHTML;
  1042.  
  1043. //Paste a permalink
  1044. if (a.match(exp) && a.match(/lon/g) && a.match(/lat/g)) { // WME or Livemap URL
  1045. link={}; getLink(a);
  1046. if (debug) { console.log('WME Bookmarks link: ', link); }
  1047. BKMjump(BKMcountryActive,link,'paste');
  1048. setTimeout((function(){BKMaddHisto(link);}), 2500);
  1049. }
  1050. else if (a.match(exp) && a.match(/google/g) && a.match(/map/g) && a.match(/@/g)) { // Google Map URL
  1051. var b=a.split('@'), c=b[1].split('/'), d=c[0].split(',');
  1052. link.lat = d[0];
  1053. link.lon = d[1];
  1054. link.zoom = (d[2].substring(0, d[2].length-1)-12);
  1055. if (debug) { console.log('WME Bookmarks link: ', link); }
  1056. BKMjump(BKMcountryActive,link,'paste');
  1057. setTimeout((function(){BKMaddHisto(link);}), 2500);
  1058. }
  1059. //Paste an ID
  1060. else if (a.match(/\./g) && isNaN(a.replace(".",""))===false && a.length > 20) { //venue
  1061. objectsIsLoaded('vn:'+ a);
  1062. }
  1063. else if (isNaN(a)===false && a.length > 7) { //Segment or node
  1064. objectsIsLoaded('sg:'+ a);
  1065. }
  1066. //Reinit search-query
  1067. }, 100);
  1068. }
  1069. function BKMjump(country,data,action) { // Action when you click a link
  1070. //lastclic
  1071. if (/link/.test(action) && BKMsettingsClic) {
  1072. for (var i=1; getId("link"+i); i++) {
  1073. getId("link"+i).style.color='#59899e';
  1074. if ("link"+i===action) {
  1075. getId("link"+i).style.color='#26bae8';
  1076. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  1077. a.lastclic=action;
  1078. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  1079. }
  1080. }
  1081. }
  1082. //Move to
  1083. var xy = OL.Layer.SphericalMercator.forwardMercator(parseFloat(data.lon), parseFloat(data.lat));
  1084. W.map.setCenter(xy);
  1085. if (debug) { console.log('BKMjump',country,data,action); }
  1086. //Options
  1087. if (BKMsettingsZoom && data.zoom) { W.map.zoomTo(data.zoom); }
  1088. if (BKMsettingsServer) { W.model.events.register("mergeend", null, mapLoaded); }
  1089. if (action != 'paste' && BKMsettingsLayers && data.layers) { layersLoaded(data.layers); } // layers when bookmarks
  1090. if (action === 'paste' && BKMsettingsPasteLayers && data.layers) { layersLoaded(data.layers); } // layers when paste form searchbar
  1091. if (typeof (data.segments) != 'undefined') { objectsIsLoaded('sg:'+ data.segments); }
  1092. else if (typeof (data.nodes) != 'undefined') { objectsIsLoaded('nd:'+ data.nodes); }
  1093. else if (typeof (data.venues)!= 'undefined') { objectsIsLoaded('vn:'+ data.venues); }
  1094. else if (typeof (data.MC) != 'undefined' && data.MC != 0) { objectsIsLoaded('mc:'+ data.MC); }
  1095. else if (typeof (data.UR) != 'undefined' && data.UR != 0) { objectsIsLoaded('ur:'+ data.UR); }
  1096. else if (typeof (data.MP) != 'undefined' && data.MP != 0) { objectsIsLoaded('mp:'+ data.MP); }
  1097. else { colorSearch(); }
  1098. //Reload list if country is changed
  1099. if (country != W.model.countries.top.name) {
  1100. getId('divBookmarksContent').innerHTML = '';
  1101. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  1102. }
  1103.  
  1104. BKMaddButtonIfLoad();
  1105. }
  1106. function BKMpostBookmarks() {
  1107. var listFav = localStorage.WMEBookmarks;
  1108. if (debug) { console.log('WME Bookmarks: Send Data: ', JSON.parse(listFav)); }
  1109. var params={
  1110. url: "http://4bphotoabbatienne.fr/bkm.php",
  1111. headers: { "Content-Type": "application/x-www-form-urlencoded" },
  1112. data: "nickname="+BKMusername+"&postbookmarks=" + listFav,
  1113. method: 'POST'
  1114. };
  1115. BKMDownloadHelper.add(params, function (data) {
  1116. if (debug) { console.log('WME Bookmarks: Server Response: ', data); }
  1117. if (data.status == 'success') {
  1118.  
  1119. if (data.data != 'Check') {
  1120. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><img style="padding:3px 3px 0 0; height:18px;" src="' + iconSynchro + '" /><span style="color:red;">' + lang[19] + '</span></div>';
  1121. setTimeout(Getbookmarks, 1000);
  1122. } else {
  1123. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><img style="padding:3px 3px 0 0; height:18px;" src="' + iconSynchro + '" /><span style="color:darkgreen;">' + lang[20] + '</span></div>';
  1124. BKMaddButtonIfLoad();
  1125. setTimeout(reloadHtmlBookmarks, 1000);
  1126. }
  1127. }
  1128. });
  1129. }
  1130. function BKMupdateBookmarks(action, owner, data, arg) {
  1131. var bNew = {};
  1132. bNew.action=action;
  1133. bNew.owner=owner;
  1134. bNew.arg=arg;
  1135. bNew.data=data;
  1136. if (debug) { console.log('WME Bookmarks: Send Update: ', bNew); }
  1137. var params={
  1138. url: "http://4bphotoabbatienne.fr/bkm.php",
  1139. headers: {
  1140. "Content-Type": "application/x-www-form-urlencoded"
  1141. },
  1142. data: "addbookmark=" + JSON.stringify(bNew),
  1143. method: 'POST'
  1144. };
  1145. BKMDownloadHelper.add(params, function (data) {
  1146. if (debug) { console.log('WME Bookmarks: Server Response: ', data); }
  1147. if (data.status == 'success') {
  1148. if (data.data != 'Check') {
  1149. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><img style="padding:3px 3px 0 0; height:18px;" src="' + iconSynchro + '" /><span style="color:red;">' + lang[19] + '</span></div>';
  1150. setTimeout(Getbookmarks, 1000);
  1151. } else {
  1152. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><img style="padding:3px 3px 0 0; height:18px;" src="' + iconSynchro + '" /><span style="color:darkgreen;">' + lang[20] + '</span></div>';
  1153. BKMaddButtonIfLoad();
  1154. setTimeout(reloadHtmlBookmarks, 1000);
  1155. }
  1156. }
  1157. });
  1158. }
  1159.  
  1160. // ****************
  1161. // ** ROUTINES **
  1162. // ****************
  1163.  
  1164. function loadBookmarks(storage, dContainer) { //Fill HTML with localstorage
  1165. var lStorage = localStorage.getItem(storage);
  1166. if (lStorage) {
  1167. getId(dContainer).innerHTML = '';
  1168. var a = JSON.parse(lStorage);
  1169. if (BKMsettingsSort) { a.reverse(); }
  1170. var i=1;
  1171. for (var p in a) {
  1172. if(!a.hasOwnProperty(p)) continue;
  1173. if (dContainer == 'divHistoContent') { BKMhistoHtml(a[p]); }
  1174. if (a[p].country == BKMcountryActive) {
  1175. BKMtableHtml(dContainer, a[p], i);
  1176. i++;
  1177. }
  1178. }
  1179. }
  1180. }
  1181. function BKMaddButtonIfLoad() { //Show Pin if WME (permalink) is ready
  1182. var a = getElementsByClassName('WazeControlPermalink') [0].innerHTML;
  1183. if (!a.match(/lon/g)) {
  1184. getId('addNodeButton').style.height='0';
  1185. $('#BKMbutton2Icon').hide();
  1186. $('addNodeButton').hide();
  1187. setTimeout(BKMaddButtonIfLoad, 500);
  1188. return;
  1189. } else {
  1190. $('#BKMbutton2Icon').show();
  1191. $('addNodeButton').show();
  1192. }
  1193. }
  1194. function BMKcheckStorage() {
  1195. var settings = JSON.parse(localStorage.WMEBookmarksSettings);
  1196. if (!settings.version) {
  1197. //Convert
  1198. if (debug) { console.info('WME Bookmarks : Convert old data to new JSON'); }
  1199.  
  1200. var a = JSON.parse(localStorage.getItem('WMEBookmarks')), lStorage=[];
  1201. localStorage.setItem('WMEBookmarksShared', '[]');
  1202. localStorage.setItem('WMEBookmarks', '[]');
  1203. localStorage.setItem('WMEHistoric', '[]');
  1204. for (var p in a) {
  1205. if(!a.hasOwnProperty(p)) continue;
  1206.  
  1207. //Redo Bookmark
  1208. var bNew={};
  1209. bNew.country=a[p].country;
  1210. bNew.name=a[p].name;
  1211. bNew.perma=BKMconvertPermalink(a[p].coord);
  1212. bNew.comm=a[p].comm;
  1213. bNew.share=a[p].share;
  1214.  
  1215. //Store Bookmark
  1216. lStorage.push(bNew);
  1217. }
  1218. localStorage.setItem('WMEBookmarks', JSON.stringify(lStorage));
  1219. if (debug) { console.info('WME Bookmarks : New JSON > localStorage Ok !'); }
  1220.  
  1221. // Memorize version
  1222. settings['version']=BKMversion;
  1223. localStorage.WMEBookmarksSettings=JSON.stringify(settings);
  1224. }
  1225.  
  1226. }
  1227. function BKMcheckActiveCountry() { // Check Country and update select
  1228. var BKMcountryActiveWME = W.model.countries.top.name;
  1229. if (BKMcountryActive != BKMcountryActiveWME) {
  1230. if (debug) { console.log('WME Bookmarks Country changed : ' + BKMcountryActive + ' > ' + BKMcountryActiveWME); }
  1231. BKMcountryActive = BKMcountryActiveWME;
  1232. select(countries, 'selectCountry');
  1233. select(countriesS, 'selectCountryS');
  1234. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  1235. loadBookmarks('WMEBookmarksShared', 'divShareContent');
  1236. getId('selectCountry').onchange = (function () {
  1237. clearTimeout(timer);
  1238. BKMcheckActiveCountry();
  1239. BKMcountryActive = getId('selectCountry').value;
  1240. getId('divBookmarksContent').innerHTML = '';
  1241. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  1242. });
  1243. getId('selectCountryS').onchange = (function () {
  1244. clearTimeout(timer);
  1245. BKMcheckActiveCountry();
  1246. BKMcountryActive = getId('selectCountryS').value;
  1247. getId('divShareContent').innerHTML = '';
  1248. loadBookmarks('WMEBookmarksShared', 'divShareContent');
  1249. });
  1250. }
  1251. clearTimeout(timer);
  1252. setTimeout(timer = setTimeout(BKMcheckActiveCountry, 5000),100);
  1253. }
  1254. function BMKcheckAutoSave() { //Show shared if sync with server
  1255. if (BKMsettingsSynchro === true) {
  1256. $('#iconShare').animate({ width: '24px' }, 200);
  1257. }
  1258. else { $('#iconShare').animate({ width: '0' }, 200);
  1259. }
  1260. }
  1261. function BKMtableHtml(container, data, i) { // Bookmarks & Share table (HTML);
  1262. var div = document.createElement('div');
  1263. div.className = 'divBKM';
  1264. div.id = container + i;
  1265. //NAME
  1266. var divName = document.createElement('div');
  1267. divName.className = 'divName';
  1268. var divNameA = document.createElement('a');
  1269. divNameA.href = '#';
  1270. divNameA.id='link'+i;
  1271. divNameA.innerHTML = '<b>' + data.name.substring(0, 26) + '</b>';
  1272. divNameA.onclick = (function() { BKMjump(data.country,data.perma,divNameA.id); });
  1273. if (BKMsettingsClic) {
  1274. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  1275. if (divNameA.id===a.lastclic) { divNameA.style.color='#26BAE8'; a.lastclic=divNameA.id; }
  1276. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  1277. }
  1278. if (typeof(data.comm) != 'undefined') {
  1279. divNameA.onmouseover = (function () {
  1280. getId(container + i).style.backgroundColor = '#CBCBCB';
  1281. getId(container + i).style.borderBottom = '1px dashed #ededed';
  1282. getId(container + '_Comm_' + i).style.display = 'block';
  1283. });
  1284. divNameA.onmouseout = (function () {
  1285. getId(container + i).style.backgroundColor = '#FFFFFF';
  1286. getId(container + i).style.borderBottom = '1px solid #ededed';
  1287. getId(container + '_Comm_' + i).style.display = 'none';
  1288. });
  1289. }
  1290. divName.appendChild(divNameA);
  1291. div.appendChild(divName);
  1292. // SUPPR
  1293. var divSuppr = document.createElement('div');
  1294. divSuppr.className = 'divSuppr';
  1295. var divSupprA = document.createElement('a');
  1296. if (container == 'divShareContent') { divSupprA.innerHTML = '<img title="' + lang[21] + '" src="' + iconShare + '" />'; }
  1297. else { divSupprA.innerHTML = '<img title="' + lang[11] + '" src="' + iconDelete + '" />'; }
  1298. divSupprA.href = '#';
  1299. divSupprA.onclick = (function(){BKMsuppr(data.name,data.perma,container);});
  1300. divSuppr.appendChild(divSupprA);
  1301. div.appendChild(divSuppr);
  1302. // SHARE
  1303. if (container == 'divBookmarksContent' && BKMsettingsSynchro === true) {
  1304. var divShare = document.createElement('div');
  1305. divShare.className = 'divSuppr';
  1306. var divShareA = document.createElement('a');
  1307. if (data.share) { divShareA.innerHTML = '<img title="' + data.share + '" src="' + iconShare + '" />'; } //.replace(';', ' ')
  1308. else { divShareA.innerHTML = '<img title="' + lang[12] + '" src="' + iconNoShare + '" />'; }
  1309. divShareA.href = '#';
  1310. divShareA.onclick = (function () {
  1311. getId('BKMedit').style.height = '225px';
  1312. BKMedit(data);
  1313. });
  1314. divShare.appendChild(divShareA);
  1315. div.appendChild(divShare);
  1316. }
  1317. // RELOCATE
  1318.  
  1319. var divLocate = document.createElement('div');
  1320. divLocate.className = 'divSuppr';
  1321. var divLocateA = document.createElement('a');
  1322. divLocateA.innerHTML = '<img title="' + lang[13] + '" id="iconRelocate_' + i + '" src="' + iconNoRelocate + '" />';
  1323. divLocateA.href = '#';
  1324. divLocateA.onclick = (function(){
  1325. getId('iconRelocate_'+i).src=''+iconRelocate;
  1326. BKMrelocate(data.perma,data.name,i);
  1327. });
  1328. divLocate.appendChild(divLocateA);
  1329. div.appendChild(divLocate);
  1330. // COMMENT
  1331. var divComment = document.createElement('div');
  1332. divComment.className = 'divSuppr';
  1333. var divCommentA = document.createElement('a');
  1334. if (data.comm) { divCommentA.innerHTML = '<img title="' + data.comm + '" src="' + iconComment + '" />'; } //.replace(/%27/g, '&apos;').replace(/"/g, '&quot;').replace(/\<br\>/g, '&#13;')
  1335. else { divCommentA.innerHTML = '<img title="' + lang[10] + '" src="' + iconNoComment + '" />'; }
  1336. divCommentA.href = '#';
  1337. divCommentA.onclick = (function () {
  1338. getId('BKMedit').style.height = '133px';
  1339. BKMhtmlEditName(container, data);
  1340. });
  1341. if (data.comm) {
  1342. divCommentA.onmouseover = (function () {
  1343. getId(container + i).style.backgroundColor = '#CBCBCB';
  1344. getId(container + i).style.borderBottom = '1px dashed #77aacc';
  1345. getId(container + '_Comm_' + i).style.display = 'block';
  1346. });
  1347. divCommentA.onmouseout = (function () {
  1348. getId(container + i).style.backgroundColor = '#FFFFFF';
  1349. getId(container + i).style.borderBottom = '1px solid #C2C2C2';
  1350. getId(container + '_Comm_' + i).style.display = 'none';
  1351. });
  1352. }
  1353. divComment.appendChild(divCommentA);
  1354. div.appendChild(divComment);
  1355. var divSeeComment = document.createElement('div');
  1356. divSeeComment.className = 'divComment';
  1357. divSeeComment.id = container + '_Comm_' + i;
  1358. divSeeComment.innerHTML = data.comm; //.replace(/%27/g, '&apos;').replace(/"/g, '&quot;').replace(/\<br\>/g, '&#13;')
  1359. div.appendChild(divSeeComment);
  1360. getId(container).appendChild(div);
  1361. }
  1362. function BKMhistoHtml(data) { // Historic table (HTML)
  1363. var div = document.createElement('div');
  1364. div.className = 'divBKM';
  1365. var divName = document.createElement('div');
  1366. divName.className = 'divName';
  1367. var divNameA = document.createElement('a');
  1368. divNameA.href = '#';
  1369. divNameA.innerHTML = '<font size=-2>'+ data.date +' </font><b>'+ data.name.substring(0, 28) +'</b>';
  1370. divNameA.onclick = (function(){BKMjump(W.model.countries.top.name, data.perma,'');});
  1371. divName.appendChild(divNameA);
  1372. div.appendChild(divName);
  1373. // SUPPR
  1374. var divSuppr = document.createElement('div');
  1375. divSuppr.className = 'divSuppr';
  1376. var divSupprA = document.createElement('a');
  1377. divSupprA.innerHTML = '<img title="' + lang[11] + '" src="' + iconDelete + '" />';
  1378. divSupprA.href = '#';
  1379. divSupprA.onclick = (function(){BKMsuppr(data.name,data.perma,'divHistoContent');});
  1380. divSuppr.appendChild(divSupprA);
  1381. div.appendChild(divSuppr);
  1382. getId('divHistoContent').appendChild(div);
  1383. }
  1384. function select(cArray, selectlist) { // Fill select
  1385. //Add countries in select
  1386. BKMcountryActive = W.model.countries.top.name;
  1387. var CSelect = getId(selectlist);
  1388. if (CSelect !== null) {
  1389. CSelect.innerHTML = '';
  1390. for (var k = 0; cArray[k]; k++) {
  1391. var cList = document.createElement('option');
  1392. cList.value =cArray[k];
  1393. cList.text = cArray[k];
  1394. if (cArray[k] == BKMcountryActive) cList.selected = true;
  1395. CSelect.appendChild(cList);
  1396. }
  1397. //If country not listed
  1398. if (cArray.indexOf(BKMcountryActive) == - 1) {
  1399. cList = document.createElement('option');
  1400. cList.value = BKMcountryActive;
  1401. cList.text = BKMcountryActive;
  1402. cList.selected = true;
  1403. CSelect.appendChild(cList);
  1404. }
  1405. }
  1406. }
  1407. function mapLoaded() { // Test map server and change it if necessary
  1408. if(typeof(W.model.countries.top) === 'undefined' || W.model.countries.top === null) { setTimeout(mapLoaded, 500); return; }
  1409. var loc=W.model.countries.top.env.replace('NA','usa').toLowerCase();
  1410. if (BKMsettingsServer && loc !== W.location.code) {
  1411. var a = JSON.parse(localStorage.mapLocation);
  1412. a[loc]=a[W.location.code];
  1413. localStorage.setItem('mapLocation', JSON.stringify(a));
  1414. W.map.mapState.updateMapLocation(loc);
  1415. W.location.changeAndRemovePermalink(loc);
  1416. }
  1417. }
  1418. function layersLoaded(layers) { // Load layers when jump
  1419. var num = Number(layers).toString(2);
  1420. num = num.split('').reverse().join('');
  1421. // First : groups
  1422. layerCheck("group_issues", num.charAt(0));
  1423. layerCheck("group_map_issues", num.charAt(1));
  1424. layerCheck("group_parking_issues", num.charAt(7));
  1425. layerCheck("group_places", num.charAt(11));
  1426. layerCheck("group_road", num.charAt(15));
  1427. layerCheck("group_display", num.charAt(20));
  1428. layerCheck("group_cities", num.charAt(27));
  1429. // Second : items
  1430. layerCheck("item_map_problems", num.charAt(2));
  1431. layerCheck("item_closed_map_problems", num.charAt(3));
  1432. layerCheck("item_update_requests", num.charAt(4));
  1433. layerCheck("item_closed_update_requests", num.charAt(5));
  1434. layerCheck("item_place_update_requests", num.charAt(6));
  1435. layerCheck("item_parking_map_problems", num.charAt(8));
  1436. layerCheck("item_parking_closed_map_problems", num.charAt(9));
  1437. layerCheck("item_parking_place_update_requests", num.charAt(10));
  1438. layerCheck("item_venues", num.charAt(12));
  1439. layerCheck("item_residential_places", num.charAt(13));
  1440. layerCheck("item_parking_places", num.charAt(14));
  1441. layerCheck("item_road", num.charAt(16));
  1442. layerCheck("item_junction_boxes", num.charAt(17));
  1443. layerCheck("item_closures", num.charAt(18));
  1444. layerCheck("item_speed_cameras", num.charAt(19));
  1445. layerCheck("item_satellite_imagery", num.charAt(21));
  1446. layerCheck("item_area_managers", num.charAt(22));
  1447. layerCheck("item_gps_points", num.charAt(23));
  1448. layerCheck("item_live_users", num.charAt(24));
  1449. layerCheck("item_editable_areas", num.charAt(25));
  1450. layerCheck("item_disallowed_turns", num.charAt(29));
  1451. layerCheck("item_map_comments", num.charAt(26));
  1452. layerCheck("item_city_names", num.charAt(28));
  1453.  
  1454. function layerCheck(layerName, state) {
  1455. try {
  1456. if (getId("layer-switcher-"+layerName).checked && state==0 || getId("layer-switcher-"+layerName).checked===false && state==1) { getId("layer-switcher-"+layerName).click(); }
  1457. } catch (e) { console.log("error while check layers: ", e); }
  1458. }
  1459. }
  1460. function BKMaddHisto(perma) { // Add link in historic
  1461. var lStorage=JSON.parse(localStorage.WMEHistoric), bNew={};
  1462. if (Object.keys(lStorage).length >= 30) { lStorage.splice(0, 1); }
  1463. bNew.date=new Date().toLocaleString();
  1464. bNew.perma=perma;
  1465. bNew.name=getName();
  1466. lStorage.push(bNew);
  1467. localStorage.setItem('WMEHistoric', JSON.stringify(lStorage));
  1468. loadBookmarks('WMEHistoric', 'divHistoContent');
  1469. }
  1470. function objectsIsLoaded(selObjects) {
  1471. if (selObjects) {
  1472. var objectsList = [], idObj=selObjects.substring(3).split(',');
  1473. try {
  1474. for (var i=0; idObj[i]; i++) {
  1475. // Identify type
  1476. switch (selObjects.substring(0, 2)) {
  1477. case 'sg':
  1478. var objType = W.selectionManager.model.segments.objects[idObj[i]];
  1479. var type = I18n.translations[I18n.locale].layers.name.segments;
  1480. break;
  1481. case 'nd':
  1482. var objType = W.selectionManager.model.nodes.objects[idObj[i]];
  1483. var type = I18n.translations[I18n.locale].layers.name.nodes;
  1484. break;
  1485. case 'vn':
  1486. var objType = W.selectionManager.model.venues.objects[idObj[i]];
  1487. var type = I18n.translations[I18n.locale].layers.name.landmarks;
  1488. break;
  1489. case 'ur':
  1490. var objType="UR";
  1491. var type = I18n.translations[I18n.locale].layers.name.update_requests;
  1492. break;
  1493. case 'mp':
  1494. var objType="MP";
  1495. var type = I18n.translations[I18n.locale].layers.name.problems;
  1496. break;
  1497. case 'mc':
  1498. var objType = W.selectionManager.model.mapComments.objects[idObj[i]];
  1499. var type = I18n.translations[I18n.locale].layers.name.comments;
  1500. break;
  1501. default : break;
  1502. }
  1503. // Try to select
  1504. if ((typeof objType === 'undefined' || typeof objType === 'string') &&
  1505. typeof W.map.updateRequestLayer.markers[idObj[i]] === 'undefined' &&
  1506. typeof W.map.problemLayer.markers[String(idObj[i].replace('%2F','/'))] === 'undefined'
  1507. ) {
  1508. count++;
  1509. if (debug) { console.info('LOOP (' + count + '): try to select' + idObj[i]); }
  1510. if (count >= 10) {
  1511. alert(type +'\n'+ I18n.translations[I18n.locale].problems.panel.more_info.not_available);
  1512. count=0;
  1513. setTimeout(function () {
  1514. BKMmapSearch.style.backgroundColor = '';
  1515. BKMmapSearch.style.color='';
  1516. BKMmapSearch.value='';
  1517. BKMmapSearch.placeholder=lang[17];
  1518. }, 2000);
  1519. return;
  1520. }
  1521. setTimeout((function(){ objectsIsLoaded(selObjects); }), 750);
  1522. return;
  1523. }
  1524. else {
  1525. if (debug) { console.info('LOOP : found '+type+' :' + idObj[i]); }
  1526. if (objType === 'UR') { W.map.updateRequestLayer.markers[idObj[i]].icon.$div[0].click(); }
  1527. else if (objType === 'MP') { W.map.problemLayer.markers[String(idObj[i].replace('%2F','/'))].icon.$div[0].click(); }
  1528. else { objectsList.push(W.model.segments.objects[idObj[i]]); }
  1529. count=0;
  1530. }
  1531. }
  1532. } catch (e) {
  1533. console.log("error while getting selected item: ", e);
  1534. }
  1535. selObjects = '';
  1536. if (objType !== "none") {
  1537. W.selectionManager.unselectAll();
  1538. W.selectionManager.setSelectedModels(objectsList); }
  1539. colorSearch(type);
  1540. }
  1541. }
  1542. function BKMconvertPermalink(data) { //Redo permalink
  1543. if (data) {
  1544. var l=data.split("|"), link = {};
  1545. link.env=l[5];
  1546. link.lat=l[1];
  1547. link.lon=l[0];
  1548. link.zoom=l[2];
  1549. link.layers=l[3];
  1550. link.MP=l[6];
  1551. link.UR=l[7];
  1552. link.MC=l[8];
  1553. if (l[4]) {
  1554. switch (l[4].substring(0, 1)) {
  1555. case 's': link.segments = l[4].substring(2); break;
  1556. case 'n': link.nodes = l[4].substring(2); break;
  1557. case 'v': link.venues = l[4].substring(2); break;
  1558. }
  1559. }
  1560. Object.keys(link).sort();
  1561. return link;
  1562. }
  1563. }
  1564. function colorSearch(msg) {
  1565. setTimeout(function () {
  1566. BKMmapSearch.style.backgroundColor='#4d4d4d';
  1567. BKMmapSearch.style.color='white';
  1568. (msg ? msg=msg+': ' : msg='')
  1569. BKMmapSearch.value=msg+lang[18];
  1570. }, 500);
  1571. setTimeout(function () {
  1572. BKMmapSearch.style.backgroundColor = '';
  1573. BKMmapSearch.style.color='';
  1574. BKMmapSearch.value='';
  1575. BKMmapSearch.placeholder=lang[17];
  1576. }, 2000);
  1577. }
  1578.  
  1579. // ***********************
  1580. // ** ANIMATE FUNCTIONS **
  1581. // ***********************
  1582.  
  1583. function bookmarksToggle() {
  1584. $('#divBookmarks').css('visibility', 'visible');
  1585. $('#divContent').css('display', 'block');
  1586. $('#divBookmarks').slideDown();
  1587. $('#divShare').slideUp();
  1588. $('#divHisto').slideUp();
  1589. $('#divBackup').slideUp();
  1590. $('#divSettings').slideUp();
  1591. $('#BKMedit').slideUp(200);
  1592. $('#iconBookmarks').attr('src', '' + iconBookmarks);
  1593. $('#iconShare').attr('src', '' + iconNoShare);
  1594. $('#iconHisto').attr('src', '' + iconNoHisto);
  1595. $('#iconBackup').attr('src', '' + iconNoBackup);
  1596. $('#iconSettings').attr('src', '' + iconNoSettings);
  1597. BKMcheckActiveCountry();
  1598. reloadHtmlBookmarks();
  1599. if (BKMsettingsSynchro === true) { getBookmarks(); }
  1600. }
  1601. function shareToggle() {
  1602. $('#divShare').css('visibility', 'visible');
  1603. $('#divContent').css('display', 'block');
  1604. $('#divBookmarks').slideUp();
  1605. $('#divShare').slideDown();
  1606. $('#divHisto').slideUp();
  1607. $('#divBackup').slideUp();
  1608. $('#divSettings').slideUp();
  1609. $('#BKMedit').slideUp(200);
  1610. $('#iconBookmarks').attr('src', '' + iconNoBookmarks);
  1611. $('#iconShare').attr('src', '' + iconShare);
  1612. $('#iconHisto').attr('src', '' + iconNoHisto);
  1613. $('#iconBackup').attr('src', '' + iconNoBackup);
  1614. $('#iconSettings').attr('src', '' + iconNoSettings);
  1615. BKMcheckActiveCountry();
  1616. getShared();
  1617. }
  1618. function histoToggle() {
  1619. $('#divHisto').css('visibility', 'visible');
  1620. $('#divContent').css('display', 'block');
  1621. $('#divBookmarks').slideUp();
  1622. $('#divShare').slideUp();
  1623. $('#divHisto').slideDown();
  1624. $('#divBackup').slideUp();
  1625. $('#divSettings').slideUp();
  1626. $('#BKMedit').slideUp(200);
  1627. $('#iconBookmarks').attr('src', '' + iconNoBookmarks);
  1628. $('#iconShare').attr('src', '' + iconNoShare);
  1629. $('#iconHisto').attr('src', '' + iconHisto);
  1630. $('#iconBackup').attr('src', '' + iconNoBackup);
  1631. $('#iconSettings').attr('src', '' + iconNoSettings);
  1632. loadBookmarks('WMEHistoric', 'divHistoContent');
  1633. }
  1634. function backupToggle() {
  1635. $('#divBackup').css('visibility', 'visible');
  1636. $('#divContent').css('display', 'block');
  1637. $('#divBookmarks').slideUp();
  1638. $('#divShare').slideUp();
  1639. $('#divHisto').slideUp();
  1640. $('#divBackup').slideDown();
  1641. $('#divSettings').slideUp();
  1642. $('#BKMedit').slideUp(200);
  1643. $('#iconBookmarks').attr('src', '' + iconNoBookmarks);
  1644. $('#iconShare').attr('src', '' + iconNoShare);
  1645. $('#iconHisto').attr('src', '' + iconNoHisto);
  1646. $('#iconBackup').attr('src', '' + iconBackup);
  1647. $('#iconSettings').attr('src', '' + iconNoSettings);
  1648. BKMbackup();
  1649. }
  1650. function settingsToggle() {
  1651. $('#divSettings').css('visibility', 'visible');
  1652. $('#divContent').css('display', 'block');
  1653. $('#divBookmarks').slideUp();
  1654. $('#divShare').slideUp();
  1655. $('#divHisto').slideUp();
  1656. $('#divBackup').slideUp();
  1657. $('#divSettings').slideDown();
  1658. $('#BKMedit').slideUp(200);
  1659. $('#iconBookmarks').attr('src', '' + iconNoBookmarks);
  1660. $('#iconShare').attr('src', '' + iconNoShare);
  1661. $('#iconHisto').attr('src', '' + iconNoHisto);
  1662. $('#iconBackup').attr('src', '' + iconNoBackup);
  1663. $('#iconSettings').attr('src', '' + iconSettings);
  1664. loadSettings();
  1665. }
  1666.  
  1667. console.log('WME Bookmarks : ' + BKMversion + ' starting');
  1668. BKMinit();
  1669. }
  1670. var BKMscript = document.createElement('script');
  1671. BKMscript.textContent = '' + runBKM.toString() + ' \n' + 'runBKM();';
  1672. BKMscript.setAttribute('type', 'application/javascript');
  1673. document.body.appendChild(BKMscript);

QingJ © 2025

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