WME Bookmarks

Bookmark, share your favourite places

当前为 2019-09-11 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WME Bookmarks
  3. // @description Bookmark, share your favourite places
  4. // @namespace https://greasyfork.org/fr/scripts/4515-wme-bookmarks
  5. // @version 0.83
  6. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAGjElEQVR4nGJgGGAAAAAA//9ipETz3r17nf/8+RvDwsK8xNnZeS85ZgAAAAD//2KhxAE/f/3uYGZmNvn567cOAwODKTlmAAAAAP//YqLEAX///tURFRFh+PPnj8m+ffvEyTEDAAAA//8i2wG7d+/JZmNj4xAVFWHg4eFh+PP3bxo55gAAAAD//yLbAX/+/gkSEhJk4OLiYhASEmL48+evHznmAAAAAP//It8Bf/5aiQiLMLCwsDCIiUKigRxzAAAAAP//IssBe/bsCWdjY+Pg5eVhYGRkZODk5GTg4uJk2L17dzapZgEAAAD//yLLAb9//4ng4+NlYGFhYfj//z8DExMTg7CwMMPv33+CSDULAAAA//8iywG/fv+2ExYSYvj79y8c8/PzM/z6/duKVLMAAAAA//8i2QF79uxxZmJiEuLl5WX49+8f3AGcHBwMLCwsHLt27SIpGgAAAAD//yLZAT9//srh5+NjYGBgYPjz5w8cMzAwMAgICDD8+vWbpGgAAAAA//9iZGBgYFi/YePjv3//yhCrSUNdnUFAgB9F7P///wwfPn5kuHnzFtGWMzMzPwEAAAD//2zVsRGAIBAF0b3DFCNmPOtQ+69GAiwBhm8BGu+8eBeAMUbZYyMicHcww+1/E2ZGSone+6etOXOdB5J+rSTmnEiitYe71vICAAD//2JhYGBgEBTgN3vx8uXqZ89fqMvLyTIICQkx/IVqoBZghHro06dPDA8fPWb48/v3EwEBgQQAAAAA//9C8eaGDRsXfvr0KU5CUoJBRlqagYGBgeHv378UW87MzMzAxMTE8PTpU4anT58x8PHxLQoI8I9nYGBgAAAAAP//wgjnHTt3Or969XohOxubtKKiIgMHBzvD79+/4T4gBfz//5+BlZWV4fv37wwPHz1m+Pb163txcbFsT0/P5TA1AAAAAP//wmrq3r17xd+8eTvr48ePfjKyMgwS4uIMv3//Jik0mJiYGNjY2BjevH3L8PDBQwZuHu6D4mJi4c7Ozi+R1QEAAAD//8LrrS1bt0Y+fPBwHr+AAIeSogLD79+/Gf79+0e05ffu32f48P7DDxkZmTJ/f7/J2NQCAAAA//8iGK579uwRf/jo8favX74YysrJMnCwsxN0wO/ffxgeP3nMwMLCeltBQT7U3c3tIi61AAAAAP//IlgQubi4vOTi4jzKwcnJwMLMzPDjxw+C+P//fwxcXFwMHOzsN/FZzsDAwAAAAAD//yKqSfbyxYtgUVExhs+fPxOjnIGBAVIm3Lt/35aQOgAAAAD//yIYAtu3bzf49PmLJCw1I+OfP38ycHJyMvz+/RtD7s+fPwy/f/3m37x5ixs+8wEAAAD//yLogNevX6dyc3MxfPz4ASWYGRgYGPj5+RnevHnDwMvLy8DExIQi//HjRwYeHh6GZ8+eFeAzHwAAAP//IhgFjx4/DhIWEmb4+vUrXExYWJiBmZmF4dq16ww/fvz4+ezZc3ZVVVUGFhYWhvfv3zP8+/eP4ffv3wzcPDwMT58+w1tFAwAAAP//whsCW7dtM/z08ZMEIyMDvOwXFxdn+P7jB8OlS5cYBAUFdrS0NHNISkqsuHDhAsPnz18YREVFGZiYmBh+//7N8Of3H4ZfP3/wb9y40R2XHQAAAAD//8LrgOfPnqXz8PIyfP36lYGTk5NBXFyc4f79+wy3bt3+pa+vV5ydne3JwMDAkJaWFmlqahJ/7/79X/fv32cQFRVl4ObmZvjy5TMDLy8fw8NHjwpw2QEAAAD//8LrgPv37weys7Ey8PDwMHBxcTGcO3ee4dev3/cdHewtIiMj+5DVhoaGLnJ3c5X/9ev3/XPnzjOwsrIyCAgIMLCzszE8efwEZzQAAAAA///C6YAtW7YYfvz4SUxeXp7h67dvDGfOnGWQk5db1dBQr+Tt7X0emx5XV9cXDQ31SioqKrPOn7/A8P79ewYpKSmGP39+861bt84Tmx4AAAAA///C6YAHDx5m8/PzM1y8eInh+rVrvy0szNNzc3IicalHBunpaekODvYB9x88+HLmzBkGfn4BhocPHyZjUwsAAAD//1TOrQ7CMBQG0N37fbd6WIbiJ0tJikHwKogG1Ucupgo3kk0xOiwKwROc8xcQEaeqK5K7eX7VUkozTuMzhHBNKd2dcxczO5HsAWwBrAF0ADYAOpJ7kt7MzjHG6ej97V3rI+fcLMtnIHlQ1VZE7Gd+AQAA//8acAQAAAD//wMA0QVN81BfUzsAAAAASUVORK5CYII=
  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.83', 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, BKMsettingsCopy; // settings variables
  125.  
  126. // *************
  127. // ** ICONS **
  128. // *************
  129.  
  130. var di = 'data:image/png;base64,';
  131. 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';
  132.  
  133. // *********************
  134. // ** HELPER FUNCTION **
  135. // *********************
  136.  
  137. function getId(node) { return document.getElementById(node); }
  138. function getElementsByClassName(classname, node) {
  139. node || (node = document.getElementsByTagName('body') [0]);
  140. 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]); }
  141. return a;
  142. }
  143. function getLink(pl) {
  144. var a=pl.split('?'), b=a[1].split('&');
  145. link.MP="0", link.UR="0", link.MC="0";
  146. for (var i = 0; b[i]; i++) {
  147. var e = b[i].split('=');
  148. switch(e[0]){
  149. case 'env': link.env = e[1]; break;
  150. case "lat": link.lat = e[1]; break;
  151. case 'lon': link.lon = e[1]; break;
  152. case 'zoom': link.zoom = e[1]; break;
  153. case "layers": link.layers = e[1]; break; // old format
  154. case "s": link.layers = e[1]; break; // new format
  155. case 'mapProblem': link.MP = e[1]; break;
  156. case 'mapUpdateRequest': link.UR = e[1]; break;
  157. case 'mapComments': link.MC = e[1]; break;
  158. case 'segments': link.segments = e[1]; break;
  159. case 'nodes': link.nodes = e[1]; break;
  160. case 'venues': link.venues = e[1]; break;
  161. default: break;
  162. }
  163. }
  164. //Object.keys(link).sort();
  165. }
  166. function getName() {
  167. var name, topCity = W.model.topCityId;
  168. if (topCity == null) { name = lang[16]; }
  169. else {
  170. var name = W.model.cities.getObjectById(topCity).attributes.name;
  171. if (name === undefined) { name = lang[16]; }
  172. else { name = W.model.cities.getObjectById(topCity).attributes.name; }
  173. }
  174. return name;
  175. }
  176. function isJsonString(str) {
  177. try { JSON.parse(str); }
  178. catch (e) { return false; }
  179. return true;
  180. }
  181. function loadSettings() {
  182. var settings = JSON.parse(localStorage.WMEBookmarksSettings);
  183. BKMsettingsSort = settings.sort;
  184. BKMsettingsZoom = settings.zoom;
  185. BKMsettingsLayers = settings.layers;
  186. BKMsettingsPasteLayers = settings.layersPaste;
  187. BKMsettingsServer = settings.server;
  188. BKMsettingsSynchro = settings.synchro;
  189. BKMsettingsBck = settings.backup;
  190. BKMsettingsClic = settings.lclic;
  191. BKMsettingsCopy = settings.lcopy;
  192. }
  193.  
  194. // ****************
  195. // ** MAIN HTML **
  196. // ****************
  197.  
  198. function BKMinit() {
  199. // Waze object needed
  200. if (typeof (W) === 'undefined') { setTimeout(BKMinit, 500); return; }
  201. if (typeof (W.app) == 'undefined') { setTimeout(BKMinit, 500); return; }
  202. if (typeof (W.map) == 'undefined') { setTimeout(BKMinit, 500); return; }
  203. if (typeof (I18n) == 'undefined') { setTimeout(BKMinit, 500); return; }
  204. if (typeof (OL) === 'undefined') { setTimeout(BKMinit, 500); return; }
  205. if (W.loginManager.user == null) { setTimeout(BKMinit, 500); return; }
  206. BKMusername = W.loginManager.user.userName;
  207. if(typeof(W.model.getTopCountry()) === 'undefined' || W.model.getTopCountry() === null) { setTimeout(BKMinit, 500); return; }
  208. BKMcountryActive = W.model.getTopCountry().name;
  209. if (typeof (BKMusername) == 'undefined') { setTimeout(BKMinit, 500); return; }
  210.  
  211. // Waze GUI needed
  212. BKMhandle = getId('user-info');
  213. if (typeof (BKMhandle) === 'undefined') { if (debug) { console.info('WME Bookmarks - BKMhandle : NOK'); } setTimeout(BKMinit, 500); return; }
  214. BKMhandleClass = getElementsByClassName('nav-tabs', BKMhandle) [0];
  215. if (typeof (BKMhandleClass) === 'undefined') { if (debug) { console.info('WME Bookmarks - BKMhandleClass : NOK'); } return; }
  216. BKMhandleClass2 = getElementsByClassName('tab-content', BKMhandle) [0];
  217. if (typeof (BKMhandleClass2) === 'undefined') { if (debug) { console.info('WME Bookmarks - BKMhandleClass2 : NOK'); } setTimeout(BKMinit, 500); return; }
  218. BKMmapSearch = getElementsByClassName('search-query', getId('search')) [0];
  219. if (typeof (BKMmapSearch) === 'undefined') { if (debug) { console.info('WME Bookmarks - BKMmapSearch : NOK'); } setTimeout(BKMinit, 500); return; }
  220.  
  221. // Verify localStorages
  222. if ('undefined' === typeof localStorage.WMEBookmarks || !isJsonString(localStorage.WMEBookmarks)) { localStorage.setItem('WMEBookmarks', '[]'); }
  223. if ('undefined' === typeof localStorage.WMEBookmarksShared || !isJsonString(localStorage.WMEBookmarksShared)) { localStorage.setItem('WMEBookmarksShared', '[]'); }
  224. if ('undefined' === typeof localStorage.WMEHistoric || !isJsonString(localStorage.WMEHistoric)) { localStorage.setItem('WMEHistoric', '[]'); }
  225. if ('undefined' === typeof localStorage.WMECopyPastePOI || !isJsonString(localStorage.WMECopyPastePOI)) { localStorage.setItem('WMECopyPastePOI', '[]'); }
  226. if ('undefined' === typeof localStorage.WMEBookmarksSettings || !isJsonString(localStorage.WMEBookmarksSettings)) { localStorage.setItem('WMEBookmarksSettings', '{"version":'+null+',"zoom":true,"layers":true,"layersPaste":true,"server":false,"synchro":true,"backup":"ins","lclic":false,"lcopy":false}'); }
  227. BMKcheckStorage();
  228. loadSettings();
  229.  
  230. // Translation
  231. var BKMLang = I18n.locale;
  232. if (BKMLang == 'fr') {
  233. lang = new Array('Favoris', 'Partage des amis', 'Partage ', 'Historique', 'Sauvegarde / Restauration', 'Synchroniser', 'Nom', 'Copier / Restaurer POI', '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');
  234. text1 = ' Copiez ces données dans un fichier TXT pour les conserver.<br/>Collez vos données pour les restaurer.';
  235. text2 = ' Écrivez les pseudos avec qui vous souhaitez partager le favoris. Le séparateur se mettra automatiquement.';
  236. 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.';
  237. 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é','Activer le copier/restaurer des POI');
  238. }
  239. else if (BKMLang == 'de') {
  240. lang = new Array('Favoriten', 'Mit Freunden geteilt', 'Teilen ', 'Verlauf', 'Sichern / Wiederherstellen', 'Synchronisieren', 'Name', 'POI kopieren / wiederherstellen', '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');
  241. text1 = ' Daten zur Sicherung in eine TXT-Datei sichern.<br/>Zur Wiederherstellung Daten hier einfügen.';
  242. text2 = ' Usernamen des Users eintragen, mit dem du den Favoriten teilen willst. Trennzeichen werden automatisch eingefügt.';
  243. 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.';
  244. 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','Aktivieren Sie Kopieren / Wiederherstellen POI');
  245. }
  246. else {
  247. lang = new Array('Bookmarks', 'Friends\'s Sharing', 'Sharing ', 'Historic', 'Backup / Restore', 'Synchronization', 'Name', 'Copy / Restore POI', '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');
  248. text1 = ' Copy data into a TXT file to preserve them.<br/>Paste your data to restore them.';
  249. text2 = ' Write the nick you want to share the bookmark. The separator will be inserted automatically';
  250. 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.';
  251. 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','Enable copying / restoring POIs');
  252. }
  253. // Then running
  254.  
  255. enhancedSearch();
  256. BKMtableCountries();
  257. BKMcss();
  258. checkPOI();
  259. W.map.events.register('moveend', W.map, mapLoaded);
  260. W.model.actionManager.events.register("afterclearactions", null, enhancedSearch);
  261.  
  262. function enhancedSearch(){
  263. setTimeout(function () {
  264. BKMmapSearch = getElementsByClassName('search-query', getId('search')) [0];
  265. if (typeof (BKMmapSearch) === 'undefined') { if (debug) { console.info('WME Bookmarks - BKMmapSearch : NOK'); } setTimeout(enhancedSearch, 500); return; }
  266. BKMmapSearch.placeholder = lang[17];
  267. BKMmapSearch.removeEventListener('paste', BKMPastePerma, false);
  268. BKMmapSearch.addEventListener('paste', BKMPastePerma, false);
  269. }, 100);
  270. //MajkiiTelini's hack about Search layers
  271. for (var i = W.map.getLayersByName("Search").length - 2; i >= 0 ; i--) { W.map.getLayersByName("Search")[i].destroy(); }
  272. }
  273. }
  274. function BKMtableCountries() {
  275. if (localStorage.WMEBookmarks) {
  276. var a = JSON.parse(localStorage.WMEBookmarks);
  277. for (var p in a) {
  278. if(!a.hasOwnProperty(p)) continue;
  279. var pays = a[p].country;
  280. if (pays && pays.length > 0) {
  281. if (countries.indexOf(pays) == - 1) { countries.push(pays); }
  282. }
  283. }
  284. if (debug) { console.log('WME Bookmarks : Mains Countries listed', countries); }
  285. select(countries, 'selectCountry');
  286. }
  287. if (localStorage.WMEBookmarksShared) {
  288. var b = JSON.parse(localStorage.WMEBookmarksShared);
  289. for (var p in b) {
  290. if(!b.hasOwnProperty(p)) continue;
  291. var pays = b[p].country;
  292. if (pays && pays.length > 0) {
  293. if (countriesS.indexOf(pays) == - 1) { countriesS.push(pays); }
  294. }
  295. }
  296. if (debug) { console.log('WME Bookmarks : Shared Countries listed', countriesS); }
  297. select(countriesS, 'selectCountryS');
  298. }
  299. }
  300. function BKMcss() {
  301. var Scss = document.createElement('style');
  302. Scss.type = 'text/css';
  303. var css = '.BKMbutton {float:left;margin-right:5px;color:#7f0;cursor:pointer;}';
  304. css += '#divContent {box-shadow: 0 4px 10px #aaa;}';
  305. css += '.BKMbuttonSync {padding:6px 10px;border-radius:5px;border:2px solid #C2C2C2;background-color:#CBCBCB;cursor:pointer;}';
  306. css += '.BKMbuttonSync:hover {background-color:#93C4D3;}';
  307. css += '.divHead {clear:both;height:28px;padding-left:5px;font-weight:bold;background-color:#CBCBCB;}';
  308. css += '.divHeadName {float:left;text-align:left;vertical-align:bottom;}';
  309. css += '.divHeadCountry {float:right;}';
  310. css += '#selectCountry, #selectCountryS {height:22px;background-color:#CBCBCB;border:0;}';
  311. css += '.divBKM {clear:both;line-height:21px;height:24px;border:1px solid #ededed;border-top:0;background-color:#ffffff;}';
  312. css += '.divName {float:left;text-align:left;padding-left:5px;padding-top:2px;}';
  313. css += '.divName a {text-decoration:none;}';
  314. css += '.divIcons {float:right;height:16px;}';
  315. css += '.divSubMenu {float:right;height:24px;display:none;min-width:60px;}';
  316. css += '.divExpand {float:right;color:#aaa;line-height:24px;width:20px;text-align:center;display:block;}';
  317. css += '#BKMedit {clear:both;display:none;margin-bottom:10px;height:133px;border:2px solid #C2C2C2;box-shadow: 0 4px 10px #aaa;}';
  318. css += '#divEditTitre {line-height:24px;height:24px;border-bottom:1px solid #C2C2C2;}';
  319. css += '#divEdit {float:left;width:50px;height:23px;text-align:left;padding-left:5px;font-weight:bold;background-color:#CBCBCB;}';
  320. css += '#divEditName {float:left;width:195px;height:23px;padding:0;padding-left:5px;border:0;margin:0;}';
  321. 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;}';
  322. css += '#divCommEdit {float:left;width:100%;height:81px;border:0;margin:0;padding:2px;resize:none;}';
  323. css += '#divBackupTxt, #divSettingsContent {width:279px;min-height:150px;margin:2px 0 10px;resize:none;border:2px solid #C2C2C2;}';
  324. css += '#divShareTxt {float:left;width:100%;height:118px;resize:none;margin-bottom:5px;border:0;border-bottom:1px solid #C2C2C2;}';
  325. css += '.divComment {clear:both;position:relative;top:1px;display:none;padding:1px 0 3px 20px;text-align:left;background-color:#dddddd;border-bottom:1px solid #C2C2C2;}';
  326. css += '.BKMsync {padding: 5px 15px;}';
  327. css += '#divBackup p, #BKMedit p, #divSettings p {margin:0;line-height:20px;text-align:justify;padding:5px;font-size:11px;}';
  328. css += '.fabkm {font-size:16px;padding:6px 4px;}';
  329. css += '.iconPoint, .iconZone {float:left; margin-left:2px; background-image:url(//editor-assets.waze.com/production/img/toolbarcad3e904c322a28bc0d9d3f9a9b06f8c.png);}'
  330. css += '.iconPoint {background-position:-50px 0px; width:16px; height:16px; margin-top:2px;}'
  331. css += '.iconZone {background-position:0px 0px; width:17px; height:21px;}';
  332. Scss.innerHTML = css;
  333. document.body.appendChild(Scss);
  334. BKMmainHtml();
  335. }
  336. function BKMmainHtml() {
  337. //Create content in favorite's tab
  338. var newTab = document.createElement('li');
  339. newTab.innerHTML = '<a href="#sidepanel-bookmarks" data-toggle="tab" id="tabBKM"><span class="fa fa-star" title="Bookmarks"></span></a>';
  340. BKMhandleClass.appendChild(newTab);
  341. var addon = document.createElement('section');
  342. addon.id = 'bookmarks-addon';
  343. // Bookmarks header
  344. var content = '<div style="float:left;margin-left:5px;"><b><a href="https://greasyfork.org/scripts/4515-wme-bookmarks" target="_blank"><u>WME Bookmarks</u></a></b> v' + BKMversion + '</div>';
  345. content += '<div style="clear:both;float:left;width:100%;margin:5px;">';
  346. content += '<div style="float:left;width:34px;"><span id="iconBookmarks" class="fabkm fa fa-star" title="' + lang[0] + '" style="color:#36c;font-size:20px;"></span></div>';
  347. content += '<div id="shareButton" style="float:left;width:34px;"><span id="iconShare" class="fabkm fa fa-share-alt-square" title="' + lang[1] + '" style="color:#bbb;font-size:20px;"></span></div>';
  348. content += '<div style="float:left;width:34px;"><span id="iconHisto" class="fabkm fa fa-history" title="' + lang[3] + '" style="color:#bbb;font-size:20px;"></span></div>';
  349. content += '<div id="copypButton" style="float:left;width:34px;"><span id="iconCopy" class="fabkm fa fa-copy" title="' + lang[7] + '" style="color:#bbb;font-size:20px;"></span></div>';
  350. content += '<div style="float:left;width:34px;"><span id="iconBackup" class="fabkm fa fa-cube " title="' + lang[4] + '" style="color:#bbb;font-size:20px;"></span></div>';
  351. content += '<div style="float:left;width:34px;"><span id="iconSettings" class="fabkm fa fa-sliders" title="' + lang[22] + '" style="color:#bbb;font-size:20px;"></span></div>';
  352. content += '</div><div style="clear:both;"></div><div id="BKMedit"></div>'; // Edit and Share containers
  353. content += '<div id="divContent">'; // Principal container
  354. // Bookmarks tab
  355. content += '<div id="divBookmarks" style="margin-bottom:10px;visibility:hidden;"><div class="divHead" id="divBookmarksHead">';
  356. content += '<div class="divHeadName"><span class="fabkm fa fa-star"></span>' + lang[6] + 's</div>';
  357. content += '<div class="divHeadCountry"><select type="text" name="Country" id="selectCountry"></select></div>';
  358. content += '</div><div id="divBookmarksContent"></div></div>';
  359. // Friends Share tab
  360. content += '<div id="divShare" style="margin-bottom:10px;visibility:hidden;"><div class="divHead" id="divShareHead">';
  361. content += '<div class="divHeadName"><span class="fabkm fa fa-share-alt-square"></span>' + lang[1] + '</div>';
  362. content += '<div class="divHeadCountry"><select type="text" name="Country" id="selectCountryS"></select></div>';
  363. content += '</div><div id="divShareContent"></div></div>';
  364. // Historic tab
  365. content += '<div id="divHisto" style="margin-bottom:10px;visibility:hidden;"><div class="divHead">';
  366. content += '<div class="divHeadName"><span class="fabkm fa fa-history"></span>' + lang[3] + '</div>';
  367. content += '</div><div id="divHistoContent"></div></div>';
  368. // Copy/paste tab
  369. content += '<div id="divCopy" style="margin-bottom:10px;visibility:hidden;"><div class="divHead" id="divCopyHead">';
  370. content += '<div class="divHeadName"><span class="fabkm fa fa-copy"></span>'+lang[7]+'</div>';
  371. content += '</div><div id="divCopyContent"></div></div>';
  372. // Backup tab
  373. content += '<div id="divBackup" style="margin-bottom:10px;visibility:hidden;"><div class="divHead">';
  374. content += '<div class="divHeadName"><span class="fabkm fa fa-cube"></span>' + lang[4] + '</div>';
  375. content += '<div class="divIcons"><a href="#"><span id="backupValid" class="fabkm fa fa-check" title="' + lang[4] + '" style="color:#0b0;"></a></div></div>';
  376. content += '<input type="radio" id="bckNew" name="typeBck" ' + (BKMsettingsBck=="new" ? ' checked' : '') + ' value="new" style="margin-left: 40px;" /> '+ tset[9];
  377. content += '<input type="radio" id="bckAdd" name="typeBck" ' + (BKMsettingsBck=="add" ? ' checked' : '') + ' value="add" style="margin-left: 40px;" /> '+ tset[10];
  378. content += '<textarea id="divBackupTxt"></textarea><p><span class="fabkm fa fa-info-circle" style="padding:0;color:#36c;"></span>' + text1 + '</p></div>';
  379. // Settings tab
  380. content += '<div id="divSettings" style="margin-bottom:10px;visibility:hidden;"><div class="divHead">';
  381. content += '<div class="divHeadName"><span class="fabkm fa fa-sliders"></span>' + lang[22] + '</div>';
  382. content += '</div><div id="divSettingsContent" style="padding:3px;line-height:22px;">';
  383. content += '<input type="checkbox" id="chkSort" ' + (BKMsettingsSort ? ' checked' : '') + ' /> ' + tset[6] + '<br />';
  384. content += '<input type="checkbox" id="chkZoom" ' + (BKMsettingsZoom ? ' checked' : '') + ' /> ' + tset[0] + '<br />';
  385. content += '<input type="checkbox" id="chkLayers" ' + (BKMsettingsLayers ? ' checked' : '') + ' /> ' + tset[1] + '<br />';
  386. content += '<input type="checkbox" id="chkLayersPaste" ' + (BKMsettingsPasteLayers ? ' checked' : '') + ' /> ' + tset[7] + '<br />';
  387. content += '<input type="checkbox" id="chkServer" ' + (BKMsettingsServer ? ' checked' : '') + ' /> ' + tset[2] + '<br />';
  388. content += '<input type="checkbox" id="chkSynchro" ' + (BKMsettingsSynchro ? ' checked' : '') + ' /> ' + tset[3] + '<br />';
  389. content += '<input type="checkbox" id="chkLastClic" ' + (BKMsettingsClic ? ' checked' : '') + ' /> ' + tset[11] + '<br />';
  390. content += '<input type="checkbox" id="chkCopyPaste" ' + (BKMsettingsCopy ? ' checked' : '') + ' /> ' + tset[12] + '<br />';
  391. content += '<input type="button" id="razButton1" value="" style="height: 13px;" /> ' + tset[4] + '<br />';
  392. content += '<input type="button" id="razButton2" value="" style="height: 13px;" /> ' + tset[5] + '<br />';
  393. content += '<input type="button" id="razButton3" value="" style="height: 13px;" /> ' + tset[8] + '<br />';
  394. content += '</div><p><span class="fabkm fa fa-info-circle" style="padding:0;color:#36c;"></span>' + text3 + '</p></div></div>';
  395. addon.innerHTML = content;
  396. addon.id = 'sidepanel-bookmarks';
  397. addon.className = 'tab-pane';
  398. BKMhandleClass2.appendChild(addon);
  399. // Tabs actions
  400. select(countries, 'selectCountry');
  401. select(countriesS, 'selectCountryS');
  402. bookmarksToggle();
  403. getId('iconBookmarks').onclick = (function () { bookmarksToggle(); });
  404. getId('iconShare').onclick = (function () { shareToggle(); });
  405. getId('iconHisto').onclick = (function () { histoToggle(); });
  406. getId('iconCopy').onclick = (function () { copyToggle(); });
  407. getId('iconBackup').onclick = (function () { backupToggle(); });
  408. getId('iconSettings').onclick = (function () { settingsToggle(); });
  409. // Buttons actions
  410. getId('bckNew').onclick = (function () {
  411. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  412. a.backup="new";
  413. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  414. loadSettings();
  415. });
  416. getId('bckAdd').onclick = (function () {
  417. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  418. a.backup="add";
  419. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  420. loadSettings();
  421. });
  422. getId('chkSort').onclick = (function () {
  423. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  424. (getId('chkSort').checked ? a.sort=true : a.sort=false)
  425. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  426. loadSettings();
  427. });
  428. getId('chkZoom').onclick = (function () {
  429. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  430. (getId('chkZoom').checked ? a.zoom=true : a.zoom=false)
  431. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  432. loadSettings();
  433. });
  434. getId('chkLayers').onclick = (function () {
  435. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  436. (getId('chkLayers').checked ? a.layers=true : a.layers=false)
  437. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  438. loadSettings();
  439. });
  440. getId('chkLayersPaste').onclick = (function () {
  441. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  442. (getId('chkLayersPaste').checked ? a.layersPaste=true : a.layersPaste=false)
  443. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  444. loadSettings();
  445. });
  446. getId('chkServer').onclick = (function () {
  447. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  448. (getId('chkServer').checked ? a.server=true : a.server=false)
  449. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  450. loadSettings();
  451. });
  452. getId('chkSynchro').onclick = (function () {
  453. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  454. if (getId('chkSynchro').checked) {
  455. a.synchro=true;
  456. $('#iconShare').css('display', 'block');
  457. $('#shareButton').animate({ width: '34px' }, 250);
  458. } else {
  459. a.synchro=false;
  460. $('#shareButton').animate({ width: '0' }, 250);
  461. $('#iconShare').css('display', 'none');
  462. }
  463. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  464. loadSettings();
  465. });
  466. getId('chkLastClic').onclick = (function () {
  467. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  468. (getId('chkLastClic').checked ? a.lclic=true : a.lclic=false)
  469. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  470. loadSettings();
  471. });
  472. getId('chkCopyPaste').onclick = (function () {
  473. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  474. if (getId('chkCopyPaste').checked) {
  475. a.lcopy=true;
  476. $('#iconCopy').css('display', 'block');
  477. $('#copypButton').animate({ width: '34px' }, 250);
  478. } else {
  479. a.lcopy=false;
  480. $('#copypButton').animate({ width: '0' }, 250);
  481. $('#iconCopy').css('display', 'none');
  482. }
  483. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  484. loadSettings();
  485. });
  486. getId('razButton1').onclick = (function () {
  487. var answer = window.confirm(tset[4] + ' ?');
  488. if (answer) {
  489. localStorage.setItem('WMEBookmarks', '[]');
  490. BKMtableCountries();
  491. select(countries, 'selectCountry');
  492. }
  493. });
  494. getId('razButton2').onclick = (function () {
  495. var answer = window.confirm(tset[5] + ' ?');
  496. if (answer) { initBookmarks(); }
  497. });
  498. getId('razButton3').onclick = (function () {
  499. var answer = window.confirm(tset[8] + ' ?');
  500. if (answer) { localStorage.setItem('WMEHistoric', '[]'); }
  501. });
  502. if (debug) { console.info('WME Bookmarks HTML loaded'); }
  503. // Button on the map
  504. setTimeout(function () {
  505. var addNodeButton = document.createElement('div');
  506. addNodeButton.id = 'addNodeButton';
  507. addNodeButton.className = 'fabkm fa fa-thumb-tack BKMbutton';
  508. addNodeButton.onclick = BKMinsertPermalink;
  509. getElementsByClassName('topbar')[0].insertBefore(addNodeButton,getElementsByClassName('location-info-region')[0]);
  510. getElementsByClassName('topbar')[0].style.padding = '0 10px';
  511. addNodeButton.onmouseover = (function () { getId('addNodeButton').style.opacity = '1'; });
  512. addNodeButton.onmouseout = (function () { getId('addNodeButton').style.opacity = '0.6'; });
  513. }, 1000);
  514.  
  515. if (BKMsettingsSynchro === false) {
  516. $('#iconShare').css('display', 'none');
  517. $('#shareButton').animate({ width: '0' }, 250);
  518. }
  519.  
  520. if (BKMsettingsCopy === false) {
  521. $('#iconCopy').css('display', 'none');
  522. $('#copypButton').animate({ width: '0' }, 250);
  523. }
  524.  
  525. BMKcheckAutoSave();
  526. BKMaddButtonIfLoad();
  527. timer = setTimeout(BKMcheckActiveCountry, 5000);
  528. }
  529.  
  530. // ***************
  531. // ** BOOKMARKS **
  532. // ***************
  533.  
  534. function initBookmarks() {
  535. if (debug) { console.log('WME Bookmarks: Send: ' + BKMusername + ' to init'); }
  536. var params = {
  537. url: 'http://4bphotoabbatienne.fr/bkm.php?initbookmarks=' + BKMusername,
  538. headers: { "Content-Type": "application/x-www-form-urlencoded" },
  539. data: null,
  540. method: 'POST'
  541. };
  542. BKMDownloadHelper.add(params, function (data) {
  543. if (debug) { console.log('WME Bookmarks: Server Response: ', data); }
  544. if (data.status == 'success') {
  545. if (data.data != 'Check') {
  546. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><span class="fabkm fa fa-random"></span><span style="color:red;">' + lang[19] + '</span></div>';
  547. setTimeout(Getbookmarks, 1000);
  548. } else {
  549. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><span class="fabkm fa fa-random"></span><span style="color:darkgreen;">' + lang[20] + '</span></div>';
  550. BKMaddButtonIfLoad();
  551. setTimeout(reloadHtmlBookmarks, 1000);
  552. }
  553. }
  554. });
  555. }
  556. function getBookmarks() {
  557. var listFav = localStorage.WMEBookmarks;
  558. var params = {
  559. url: 'http://4bphotoabbatienne.fr/bkm.php?getbookmarks=' + BKMusername,
  560. headers: { "Content-Type": "application/x-www-form-urlencoded" },
  561. data: null,
  562. method: 'GET'
  563. };
  564. BKMDownloadHelper.add(params, function (data) {
  565. if (data.status == 'success') {
  566. if (isJsonString(data.data)) {
  567. if (_.isEqual(JSON.parse(listFav), JSON.parse(data.data.replace(/\\/g, ""))) !== true && data.data && BKMsettingsSynchro === true) {
  568. if (debug) { console.log('WME Bookmarks: From BKM Server: ', data.data.replace(/\\/g, "")); }
  569. if (debug) { console.log('WME Bookmarks: From BKM local : ', listFav); }
  570. clearTimeout(timer);
  571. $('addNodeButton').hide();
  572. getId('addNodeButton').style.height='0';
  573. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><span class="fabkm fa fa-random"></span>' + lang[5] + '</div><div class="divIcons"><span id="SyncCancel" class="fabkm fa fa-window-close" title="' + lang[9] + '" style="color:red;"></span></div>';
  574. if (data.data != '[]') {
  575. var servToPC = '<div id="serv2Loc" class="BKMbuttonSync" style="float:left;"><span class="fabkm fa fa-cloud"></span> <span class="fabkm fa fa-chevron-circle-right" style="font-size:20px;color:#36c;"></span> <span class="fabkm fa fa-laptop"></span></div>';
  576. } else { var servToPC = ''; }
  577. if (listFav != '[]') {
  578. var PCToServ = '<div id="loc2Serv" class="BKMbuttonSync" style="float:right;"><span class="fabkm fa fa-laptop"></span> <span class="fabkm fa fa-chevron-circle-right" style="font-size:20px;color:#36c;"></span> <span class="fabkm fa fa-cloud"></span></div>';
  579. } else { var PCToServ = ''; }
  580. getId('divBookmarksContent').innerHTML = '<div class="BKMsync" style="clear:both;height:60px;"><div class="BKMsync">'+ servToPC + PCToServ +'</div>';
  581. if (getId('serv2Loc')) getId('serv2Loc').onclick = (function(){serv2Loc(data.data);});
  582. if (getId('loc2Serv')) getId('loc2Serv').onclick = (function(){loc2Serv();});
  583. }
  584. else {
  585. reloadHtmlBookmarks();
  586. if (debug) { console.log('WME Bookmarks: Bookmarks Sync !'); }
  587. }
  588. } else {
  589. if (debug) { console.log('WME Bookmarks: Server not responding or data corrupted'); }
  590. clearTimeout(timer);
  591. $('addNodeButton').hide();
  592. getId('addNodeButton').style.height='0';
  593. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><span class="fabkm fa fa-random"></span>' + lang[5] + '</div><div class="divIcons"><a href="#"><span id="SyncCancel" class="fabkm fa fa-window-close" title="' + lang[9] + '" style="color:red;"></span></a></div>';
  594. 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>';
  595. getId('servhs').onclick = (function () {
  596. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  597. a.synchro=false;
  598. $('#iconShare').animate({ width: '0' }, 200);
  599. $('#shareButton').animate({ width: '0' }, 250);
  600. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  601. reloadHtmlBookmarks();
  602. getId('chkSynchro').checked=false;
  603. });
  604. }
  605. }
  606. }, null);
  607. function serv2Loc(data) {
  608. localStorage.setItem('WMEBookmarks', data);
  609. BKMaddButtonIfLoad();
  610. reloadHtmlBookmarks();
  611. }
  612. function loc2Serv() {
  613. getId('divBookmarksContent').innerHTML = '';
  614. BKMaddButtonIfLoad();
  615. BKMpostBookmarks();
  616. }
  617. }
  618. function reloadHtmlBookmarks() {
  619. var content = '<div class="divHeadName"><span class="fabkm fa fa-star" style="font-size:16px;padding:6px;"></span>' + lang[6] + 's</div>';
  620. content += '<div class="divHeadCountry"><select type="text" name="Country" id="selectCountry"></select></div>';
  621. getId('divBookmarksHead').innerHTML = content;
  622. select(countries, 'selectCountry');
  623. getId('selectCountry').onchange = (function () {
  624. clearTimeout(timer);
  625. BKMcheckActiveCountry();
  626. BKMcountryActive = getId('selectCountry').value;
  627. getId('divBookmarksContent').innerHTML = '';
  628. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  629. });
  630. getId('divBookmarksContent').innerHTML = '';
  631. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  632. BKMtableCountries();
  633. }
  634. function BKMpostBookmarks() {
  635. var listFav = localStorage.WMEBookmarks;
  636. if (debug) { console.log('WME Bookmarks: Send Data: ', JSON.parse(listFav)); }
  637. var params={
  638. url: "http://4bphotoabbatienne.fr/bkm.php",
  639. headers: { "Content-Type": "application/x-www-form-urlencoded" },
  640. data: "nickname="+BKMusername+"&postbookmarks=" + listFav,
  641. method: 'POST'
  642. };
  643. BKMDownloadHelper.add(params, function (data) {
  644. if (debug) { console.log('WME Bookmarks: Server Response: ', data); }
  645. if (data.status == 'success') {
  646.  
  647. if (data.data != 'Check') {
  648. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><span class="fabkm fa fa-random"></span><span style="color:red;">' + lang[19] + '</span></div>';
  649. setTimeout(Getbookmarks, 1000);
  650. } else {
  651. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><span class="fabkm fa fa-random"></span><span style="color:darkgreen;">' + lang[20] + '</span></div>';
  652. BKMaddButtonIfLoad();
  653. setTimeout(reloadHtmlBookmarks, 1000);
  654. }
  655. }
  656. });
  657. }
  658. function BKMupdateBookmarks(action, owner, data, arg) {
  659. var bNew = {};
  660. bNew.action=action;
  661. bNew.owner=owner;
  662. bNew.arg=arg;
  663. bNew.data=data;
  664. if (debug) { console.log('WME Bookmarks: Send Update: ', bNew); }
  665. var params={
  666. url: "http://4bphotoabbatienne.fr/bkm.php",
  667. headers: {
  668. "Content-Type": "application/x-www-form-urlencoded"
  669. },
  670. data: "addbookmark=" + JSON.stringify(bNew),
  671. method: 'POST'
  672. };
  673. BKMDownloadHelper.add(params, function (data) {
  674. if (debug) { console.log('WME Bookmarks: Server Response: ', data); }
  675. if (data.status == 'success') {
  676. if (data.data != 'Check') {
  677. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><span class="fabkm fa fa-random"></span><span style="color:red;">' + lang[19] + '</span></div>';
  678. setTimeout(Getbookmarks, 1000);
  679. } else {
  680. getId('divBookmarksHead').innerHTML = '<div class="divHeadName"><span class="fabkm fa fa-random"></span><span style="color:darkgreen;">' + lang[20] + '</span></div>';
  681. BKMaddButtonIfLoad();
  682. setTimeout(reloadHtmlBookmarks, 1000);
  683. }
  684. }
  685. });
  686. }
  687. function BKMtableHtml(container, data, i) { // Bookmarks & Share table (HTML);
  688. var div = document.createElement('div');
  689. div.className = 'divBKM';
  690. div.id = container + i;
  691. getId(container).appendChild(div);
  692. //NAME
  693. var divName = document.createElement('div');
  694. divName.className = 'divName';
  695. var divNameA = document.createElement('a');
  696. divNameA.href = '#';
  697. divNameA.id='link'+i;
  698. divNameA.innerHTML = '<b>' + data.name.substring(0, 26) + '</b>';
  699. divNameA.onclick = (function() { BKMjump(data.country,data.perma,divNameA.id); });
  700. if (BKMsettingsClic) {
  701. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  702. if (divNameA.id===a.lastclic) { divNameA.style.color='#26BAE8'; a.lastclic=divNameA.id; }
  703. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  704. }
  705. if (data.comm != '') {
  706. divNameA.onmouseover = (function () {
  707. getId(container + i).style.backgroundColor = '#CBCBCB';
  708. getId(container + i).style.borderBottom = '1px dashed #ededed';
  709. getId(container + '_Comm_' + i).style.display = 'block';
  710. });
  711. divNameA.onmouseout = (function () {
  712. getId(container + i).style.backgroundColor = '#FFFFFF';
  713. getId(container + i).style.borderBottom = '1px solid #ededed';
  714. getId(container + '_Comm_' + i).style.display = 'none';
  715. });
  716. }
  717. divName.appendChild(divNameA);
  718. div.appendChild(divName);
  719. // SUBMENU
  720. var divExpand = document.createElement('span');
  721. divExpand.className='fa fa-ellipsis-v divExpand';
  722. div.appendChild(divExpand);
  723. var divSubMenu = document.createElement('div');
  724. divSubMenu.className = 'divSubMenu';
  725. divExpand.onmouseover = (function () {
  726. divSubMenu.style.display='block';
  727. divExpand.style.display='none';
  728. });
  729. divSubMenu.onmouseleave = (function () {
  730. divSubMenu.style.display='none';
  731. divExpand.style.display='block';
  732. });
  733. div.appendChild(divSubMenu);
  734. // SUPPR
  735. var divSuppr = document.createElement('div');
  736. divSuppr.className = 'divIcons';
  737. var divSupprA = document.createElement('a');
  738. if (container == 'divShareContent') { divSupprA.innerHTML = '<span class="fabkm fa fa-share-alt-square" title="' + lang[21] + '" style="color:red;"></span>'; }
  739. else { divSupprA.innerHTML = '<span class="fabkm fa fa-times" title="' + lang[11] + '" style="color:red;"></span>'; }
  740. divSupprA.href = '#';
  741. divSupprA.onclick = (function(){BKMsuppr(data.name,data.perma,container);});
  742. divSuppr.appendChild(divSupprA);
  743. divSubMenu.appendChild(divSuppr);
  744. // SHARE
  745. if (container == 'divBookmarksContent' && BKMsettingsSynchro === true) {
  746. var divShare = document.createElement('div');
  747. divShare.className = 'divIcons';
  748. var divShareA = document.createElement('a');
  749. if (data.share) { divShareA.innerHTML = '<span class="fabkm fa fa-share-alt-square" title="' + data.share + '" style="color:#36c;"></span>'; }
  750. else { divShareA.innerHTML = '<span class="fabkm fa fa-share-alt-square" title="' + lang[12] + '" style="color:#bbb;"></span>'; }
  751. divShareA.href = '#';
  752. divShareA.onclick = (function () {
  753. getId('BKMedit').style.height = '225px';
  754. BKMedit(data);
  755. });
  756. divShare.appendChild(divShareA);
  757. divSubMenu.appendChild(divShare);
  758. }
  759. // RELOCATE
  760. var divLocate = document.createElement('div');
  761. divLocate.className = 'divIcons';
  762. var divLocateA = document.createElement('a');
  763. divLocateA.innerHTML = '<span class="fabkm fa fa-map-marker" title="' + lang[13] + '" style="color:#bbb;" id="iconRelocate_' + i + '"></span>';
  764. divLocateA.href = '#';
  765. divLocateA.onclick = (function(){
  766. getId('iconRelocate_'+i).style.color="#36c";
  767. setTimeout(function(){ BKMrelocate(data.perma,data.name,i)}, 200);
  768. });
  769. divLocate.appendChild(divLocateA);
  770. divSubMenu.appendChild(divLocate);
  771. // COMMENT
  772. var divComment = document.createElement('div');
  773. divComment.className = 'divIcons';
  774. var divCommentA = document.createElement('a');
  775. if (data.comm != '') {
  776. divCommentA.innerHTML = '<span class="fabkm fa fa-sticky-note" title="' + data.comm + '" style="color:#36c;"></span>';
  777. divCommentA.onmouseover = (function () {
  778. getId(container + i).style.backgroundColor = '#CBCBCB';
  779. getId(container + i).style.borderBottom = '1px dashed #77aacc';
  780. getId(container + '_Comm_' + i).style.display = 'block';
  781. });
  782. divCommentA.onmouseout = (function () {
  783. getId(container + i).style.backgroundColor = '#FFFFFF';
  784. getId(container + i).style.borderBottom = '1px solid #ededed';
  785. getId(container + '_Comm_' + i).style.display = 'none';
  786. });
  787. }
  788. else {
  789. divCommentA.innerHTML = '<span class="fabkm fa fa-sticky-note" title="' + lang[10] + '" style="color:#bbb;"></span>';
  790. }
  791. divCommentA.href = '#';
  792. divCommentA.onclick = (function () {
  793. getId('BKMedit').style.height = '133px';
  794. BKMhtmlEditName(container, data);
  795. });
  796. divComment.appendChild(divCommentA);
  797. divSubMenu.appendChild(divComment);
  798. //COMMENT TEXT
  799. var divSeeComment = document.createElement('div');
  800. divSeeComment.className = 'divComment';
  801. divSeeComment.id = container + '_Comm_' + i;
  802. divSeeComment.innerHTML = data.comm;
  803. div.appendChild(divSeeComment);
  804. }
  805.  
  806. // ***************
  807. // ** SHARED **
  808. // ***************
  809.  
  810. function getShared() {
  811. var listFav = localStorage.WMEBookmarksShared;
  812. var params = {
  813. url: 'http://4bphotoabbatienne.fr/bkm.php?getshared='+ BKMusername,
  814. headers: { "Content-Type": "application/x-www-form-urlencoded" },
  815. data: null,
  816. method: 'GET'
  817. };
  818. BKMDownloadHelper.add(params, function (data) {
  819. if (data.status == 'success') {
  820. if (_.isEqual(JSON.parse(listFav), JSON.parse(data.data.replace(/\\/g, ""))) !== true && data.data && BKMsettingsSynchro === true) {
  821. if (debug) { console.log('WME Bookmarks: From Share Server: ', JSON.parse(data.data)); }
  822. if (debug) { console.log('WME Bookmarks: From Share local: ', JSON.parse(listFav)); }
  823. localStorage.setItem('WMEBookmarksShared', data.data);
  824. reloadHtmlShared();
  825. } else {
  826. reloadHtmlShared();
  827. if (debug) { console.log('WME Bookmarks: Shared Sync !'); }
  828. }
  829. }
  830. }, null);
  831. }
  832. function BKMedit(data) { //Show Share DIV
  833. clearTimeout(timer);
  834. $('#BKMedit').slideDown(200);
  835. $('#divContent').slideUp(1000);
  836. 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 + '" />';
  837. content1 += '<div class="divIcons"><a href="#"><span id="shareValid" class="fabkm fa fa-check" title="' + lang[8] + '" style="font-size:16px;padding:6px;color:#0b0;"></a></div>';
  838. content1 += '</div><textarea id="divShareTxt"></textarea><p><span class="fabkm fa fa-info-circle" title="Info" style="font-size:16px;padding:6px;color:#36c;"></span>' + text2 + '</p>';
  839. getId('BKMedit').innerHTML = content1;
  840. if (!data.share) {
  841. data.share = lang[23];
  842. getId('divShareTxt').style.color = '#aaa';
  843. }
  844. getId('divShareTxt').onclick = (function () {
  845. if (getId('divShareTxt').value == lang[23]) {
  846. getId('divShareTxt').value = '';
  847. getId('divShareTxt').style.color = '#000';
  848. }
  849. });
  850. getId('divShareTxt').innerHTML = data.share;
  851. getId('divShareTxt').onkeyup = (function () {
  852. var t = getId('divShareTxt').value;
  853. if (t === '') { getId('divShareTxt').innerHTML = data.share; }
  854. getId('divShareTxt').value = t.replace(',', ';').replace(' ', ';').replace(';;', ';');
  855. });
  856. getId('shareValid').onclick = (function () {
  857. data.share = getId('divShareTxt').value;
  858. if (data.share !== lang[23]) {
  859. var toSave=[];
  860. var a = JSON.parse(localStorage.WMEBookmarks);
  861. for (var p in a) {
  862. if(!a.hasOwnProperty(p)) continue;
  863.  
  864. //Redo Bookmark
  865. var bNew={};
  866. bNew.country=a[p].country;
  867. bNew.name=a[p].name;
  868. bNew.perma=a[p].perma;
  869. bNew.comm=a[p].comm;
  870. if (getId('permalink').value == a[p].perma.lon+'|'+a[p].perma.lat) {
  871. bNew.share=data.share;
  872. if (BKMsettingsSynchro === true) {
  873. if (debug) { console.log('WME Bookmarks: SHARE', BKMusername, bNew); }
  874. BKMupdateBookmarks('SHARE', BKMusername, bNew, '');
  875. }
  876. } else { bNew.share=a[p].share; }
  877. //Store Bookmark
  878. toSave.push(bNew);
  879. }
  880. localStorage.setItem('WMEBookmarks', JSON.stringify(toSave));
  881. }
  882. $('#divContent').slideDown(1000);
  883. $('#BKMedit').slideUp(500);
  884. });
  885. BKMcheckActiveCountry();
  886. getId('divBookmarksContent').innerHTML = '';
  887. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  888. }
  889. function reloadHtmlShared() {
  890. var content = '<div class="divHeadName"><span class="fabkm fa fa-share-alt-square" style="font-size:16px;padding:6px;"></span>' + lang[1] + '</div>';
  891. content += '<div class="divHeadCountry"><select type="text" name="Country" id="selectCountryS"></select></div>';
  892. getId('divShareHead').innerHTML = content;
  893. select(countriesS, 'selectCountryS');
  894. getId('selectCountryS').onchange = (function () {
  895. clearTimeout(timer);
  896. BKMcheckActiveCountry();
  897. BKMcountryActive = getId('selectCountryS').value;
  898. getId('divShareContent').innerHTML = '';
  899. loadBookmarks('WMEBookmarksShared', 'divShareContent');
  900. });
  901. getId('divShareContent').innerHTML = '';
  902. loadBookmarks('WMEBookmarksShared', 'divShareContent');
  903. }
  904.  
  905. // ***************
  906. // ** HISTORY **
  907. // ***************
  908.  
  909. function BKMaddHisto(perma) { // Add link in historic
  910. var lStorage=JSON.parse(localStorage.WMEHistoric), bNew={};
  911. if (Object.keys(lStorage).length >= 30) { lStorage.splice(0, 1); }
  912. bNew.date=new Date().toLocaleString();
  913. bNew.perma=perma;
  914. bNew.name=getName();
  915. lStorage.push(bNew);
  916. localStorage.setItem('WMEHistoric', JSON.stringify(lStorage));
  917. loadBookmarks('WMEHistoric', 'divHistoContent');
  918. }
  919. function BKMhistoHtml(data) { // Historic table (HTML)
  920. var div = document.createElement('div');
  921. div.className = 'divBKM';
  922. var divName = document.createElement('div');
  923. divName.className = 'divName';
  924. var divNameA = document.createElement('a');
  925. divNameA.href = '#';
  926. divNameA.innerHTML = '<font size=-2>'+ data.date +' </font><b>'+ data.name.substring(0, 28) +'</b>';
  927. divNameA.onclick = (function(){BKMjump(W.model.getTopCountry().name, data.perma,'');});
  928. divName.appendChild(divNameA);
  929. div.appendChild(divName);
  930. // SUPPR
  931. var divSuppr = document.createElement('div');
  932. divSuppr.className = 'divIcons';
  933. var divSupprA = document.createElement('a');
  934. divSupprA.innerHTML = '<span class="fabkm fa fa-times" title="' + lang[11] + '" style="color:red;"></span>';
  935. divSupprA.href = '#';
  936. divSupprA.onclick = (function(){BKMsuppr(data.name,data.perma,'divHistoContent');});
  937. divSuppr.appendChild(divSupprA);
  938. div.appendChild(divSuppr);
  939. getId('divHistoContent').appendChild(div);
  940. }
  941.  
  942. // ***************
  943. // ** BACKUP **
  944. // ***************
  945.  
  946. function BKMbackup() {
  947. var a = localStorage.WMEBookmarks, toshow = '';
  948. getId('divBackupTxt').value='';
  949. if (a) {
  950. a = JSON.parse(a);
  951. for (var p in a) {
  952. if(!a.hasOwnProperty(p)) continue;
  953. var permalink = a[p].perma.lon +"|"+ a[p].perma.lat;
  954. if (typeof(a[p].perma.zoom) !== 'undefined') { permalink += "|"+ a[p].perma.zoom; } else { permalink += "|"; }
  955. if (typeof(a[p].perma.layers) !== 'undefined') { permalink += "|"+ a[p].perma.layers; } else { permalink += "|"; }
  956. // Objects
  957. if (typeof(a[p].perma.segments) !== 'undefined') { permalink += "|s:"+ a[p].perma.segments; }
  958. else if (typeof(a[p].perma.nodes) !== 'undefined') { permalink += "|n:"+ a[p].perma.nodes; }
  959. else if (typeof(a[p].perma.venues) !== 'undefined') { permalink += "|v:"+ a[p].perma.venues; }
  960. else { permalink += "|"; }
  961. // New filters
  962. if (typeof(a[p].perma.env) !== 'undefined') { permalink += "|"+ a[p].perma.env; } else { permalink += "|"; }
  963. if (typeof(a[p].perma.MP) !== 'undefined') { permalink += "|"+ a[p].perma.MP; } else { permalink += "|"; }
  964. if (typeof(a[p].perma.UR) !== 'undefined') { permalink += "|"+ a[p].perma.UR; } else { permalink += "|"; }
  965. if (typeof(a[p].perma.MC) !== 'undefined') { permalink += "|"+ a[p].perma.MC; } else { permalink += "|"; }
  966.  
  967. if (typeof(a[p].comm) !== 'undefined') { permalink += ";"+ a[p].comm; } else { permalink += ";"; }
  968. if (typeof(a[p].share) !== 'undefined') { permalink += ";"+ a[p].share; } else { permalink += ";"; }
  969.  
  970. //Push to generate CSV
  971. toshow += a[p].country +";"+ a[p].name +";"+ permalink +"\n";
  972. }
  973. getId('divBackupTxt').value=toshow;
  974. getId('divBackupTxt').onclick=(function () {
  975. getId('divBackupTxt').focus();
  976. getId('divBackupTxt').select();
  977. });
  978. }
  979. getId('backupValid').onclick = backup;
  980. function backup() {
  981. if (getId('bckAdd').checked===true) {
  982. var lStorage=JSON.parse(localStorage.WMEBookmarks);
  983. } else { //bckNew
  984. localStorage.setItem('WMEBookmarks', '[]');
  985. var lStorage=[];
  986. }
  987. var a = getId('divBackupTxt').value;
  988. var b = a.split('\n');
  989.  
  990. for (var i=0; b[i]; i++){
  991. var c = b[i].split(';');
  992. var bNew ={};
  993. bNew.country = c[0];
  994. bNew.name = c[1];
  995. bNew.perma=BKMconvertPermalink(c[2]);
  996. bNew.comm = c[3];
  997. bNew.share = c[4];
  998. 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
  999. }
  1000. localStorage.setItem('WMEBookmarks', JSON.stringify(lStorage));
  1001. BKMtableCountries();
  1002. bookmarksToggle();
  1003. if (BKMsettingsSynchro === true) { BKMpostBookmarks(); }
  1004. }
  1005. }
  1006.  
  1007. // ********************
  1008. // ** COPY/PASTE POI **
  1009. // ********************
  1010.  
  1011. function checkPOI(){
  1012. if ($('#landmark-edit-general').length == 1 && BKMsettingsCopy) {
  1013. var editLM = $('.geometry-button-region');
  1014. if (editLM.length==1) {
  1015. var copyattribDiv = $('#wme-copyattrib-fr');
  1016. if (copyattribDiv.length==0) {
  1017. copyattribDiv=document.createElement('div');
  1018. copyattribDiv.id='wme-copyattrib-fr';
  1019. $(copyattribDiv).css({'float':'right','padding':'4px','border-radius':'5px','box-shadow':'rgba(0, 0, 0, 0.1) 0px 1px 6px 0px'});
  1020. editLM[0].parentNode.insertBefore(copyattribDiv, editLM[0].nextSibling);
  1021.  
  1022. if (localStorage.WMECopyPastePOI.indexOf(W.selectionManager.getSelectedFeatures()[0].model.attributes.id) == "-1") {
  1023. var copyBtn=document.createElement('span');
  1024. copyBtn.innerHTML='<i class="fa fa-copy" data-original-title="" title="Copy attributes" style="color:#fff;"></i>';
  1025. copyBtn.style.margin='0 3px';
  1026. copyBtn.onclick=CopyAttrib;
  1027. $(copyattribDiv).css({'background-color':'#26bae8'});
  1028. copyattribDiv.appendChild(copyBtn);
  1029. } else {
  1030. var pasteBtn=document.createElement('span');
  1031. pasteBtn.innerHTML='<i class="fa fa-paste" data-original-title="" title="Restore attributes" style="color:#555;"></i>';
  1032. pasteBtn.style.margin='0 3px';
  1033. pasteBtn.onclick=PasteAttrib;
  1034. $(copyattribDiv).css({'background-color':'#ffc107'});
  1035. copyattribDiv.appendChild(pasteBtn);
  1036. }
  1037. }
  1038. }
  1039. }
  1040. setTimeout(checkPOI, 2000);
  1041. }
  1042. function CopyAttrib(){
  1043. //JSON for POI info
  1044. var PoiAttr={}, venue = W.selectionManager.getSelectedFeatures()[0].model.attributes, lStorage = JSON.parse(localStorage.WMECopyPastePOI);
  1045.  
  1046. //Get geometry
  1047. if (typeof(W.selectionManager.getSelectedFeatures()[0].model.geometry.components) != 'undefined') {
  1048. var currentPOI = W.selectionManager.getSelectedFeatures()[0].model.geometry.components[0].clone().components;
  1049. var coord, Geo = ""
  1050. for(var i=0; i<currentPOI.length;i++){
  1051. coord = currentPOI[i];
  1052. if(i < currentPOI.length-1){
  1053. coord = coord.transform(W.map.projection, W.map.displayProjection);
  1054. Geo += `${coord.x},${coord.y} `;
  1055. }
  1056. PoiAttr.geometry = Geo;
  1057. PoiAttr.geoX = venue.geometry.bounds.right.toString();
  1058. PoiAttr.geoY = venue.geometry.bounds.top.toString();
  1059. PoiAttr.type="zone";
  1060. }
  1061. } else {
  1062. var currentPOI = W.selectionManager.getSelectedFeatures()[0].model.attributes;
  1063. PoiAttr.geometry = "";
  1064. PoiAttr.geoX = currentPOI.geometry.x.toString();
  1065. PoiAttr.geoY = currentPOI.geometry.y.toString();
  1066. PoiAttr.type="point";
  1067. }
  1068. PoiAttr.id=venue.id;
  1069. PoiAttr.aliases=venue.aliases.toString();
  1070. (venue.brand==null ? PoiAttr.brand = 'null' : PoiAttr.brand = venue.brand)
  1071. PoiAttr.categories=venue.categories.toString();
  1072. PoiAttr.categoryAttributes=JSON.stringify(venue.categoryAttributes);
  1073. PoiAttr.description=venue.description;
  1074. //PoiAttr.entryExitPoints=venue.entryExitPoints.toString();
  1075. PoiAttr.externalProviderIDs=JSON.stringify(venue.externalProviderIDs).replace(/"/g,"");
  1076. (typeof(venue.houseNumber)=="undefined" ? PoiAttr.houseNumber = 'null' : PoiAttr.houseNumber = venue.houseNumber)
  1077. PoiAttr.name=venue.name;
  1078. PoiAttr.openingHours="";
  1079. //for (var i=0; venue.openingHours[i]; i++) { PoiAttr.openingHours = PoiAttr.openingHours + JSON.stringify(venue.openingHours[i]).replace(/"/g,"") + ";"; }
  1080. PoiAttr.openingHours=venue.openingHours.toString();
  1081. (venue.phone==null ? PoiAttr.phone = 'null' : PoiAttr.phone = venue.phone)
  1082. PoiAttr.services=venue.services.toString();
  1083. (venue.url==null ? PoiAttr.url = 'null' : PoiAttr.url = venue.url)
  1084.  
  1085. //Add in localStorage
  1086. lStorage.push(PoiAttr);
  1087. localStorage.setItem('WMECopyPastePOI', JSON.stringify(lStorage));
  1088.  
  1089. if (BKMsettingsSynchro === true) {
  1090. if (debug) { console.log('WME Bookmarks: ADD Copy Cloud', PoiAttr); }
  1091. BKMupdateCopy('ADD', BKMusername, PoiAttr);
  1092. }
  1093. W.selectionManager.unselectAll();
  1094. getId('tabBKM').click();
  1095. getId('iconCopy').click();
  1096. }
  1097. function PasteAttrib(){
  1098. var a = JSON.parse(localStorage.WMECopyPastePOI);
  1099. var toSave=[];
  1100. for (var i = 0; a[i]; i++) {
  1101. if (a[i].id.toSource() == W.selectionManager.getSelectedFeatures()[0].model.attributes.id.toSource()) {
  1102. try {
  1103. var geom=a[i].geometry; delete(a[i].geometry);
  1104. delete(a[i].geoX);
  1105. delete(a[i].geoY);
  1106.  
  1107. if (a[i].aliases.length == 0) { delete(a[i].aliases); }
  1108. else { var m=[], n=a[i].aliases.split(","); for (var j = 0; n[j]; j++) { m.push(n[j]); } a[i].aliases = m; }
  1109.  
  1110. var m=[], n=a[i].categories.split(","); for (var j = 0; n[j]; j++) { m.push(n[j]); }
  1111. if(m == W.selectionManager.getSelectedFeatures()[0].model.attributes.categories) { delete(a[i].categories); }
  1112. else { a[i].categories = m; }
  1113.  
  1114. if (a[i].categoryAttributes == '{}' || a[i].categoryAttributes == 'null') { delete(a[i].categoryAttributes); }
  1115. if (a[i].brand == 'null') { delete(a[i].brand); }
  1116. if (a[i].houseNumber == 'null') { delete(a[i].houseNumber); }
  1117. delete(a[i].externalProviderIDs);
  1118. delete(a[i].openingHours);
  1119. if (a[i].phone == 'null') { delete(a[i].phone); }
  1120.  
  1121. if (a[i].services.length == 0) { delete(a[i].services); }
  1122. else { var m=[], n=a[i].services.split(","); for (var j = 0; n[j]; j++) { m.push(n[j]); } a[i].services = m; }
  1123.  
  1124. if (a[i].url == 'null') { delete(a[i].url); }
  1125.  
  1126. if (a[i].type == "zone") { //restore geometry if zone
  1127. var lines = geom.split(' ');
  1128. for(var k=0; k < lines.length; k++){
  1129. if (lines[k] !== "") {
  1130. var t=lines[k].split(',');
  1131. var pt = WazeWrap.Geometry.ConvertTo900913(t[0], t[1]);
  1132. lines[k] = new OL.Geometry.Point(pt.lon, pt.lat);
  1133. }
  1134. }
  1135. saveNewPlaceGeometry(lines);
  1136. }
  1137. delete(a[i].type);
  1138.  
  1139. if (debug) { console.log('WME Bookmarks: Paste Attrib', a[i]); }
  1140. W.model.actionManager.add(new (require("Waze/Action/UpdateObject"))(W.selectionManager.getSelectedFeatures()[0].model, a[i]));
  1141. BKMupdateCopy('DELETE', BKMusername, a[i].id);
  1142. delete(a[i].id);
  1143.  
  1144. getId('tabBKM').click();
  1145. getId('iconCopy').click();
  1146. }
  1147. catch (err) {
  1148. console.log("Copy Venue Attributes : Problem", err);
  1149. }
  1150. }
  1151. else {
  1152. toSave.push(a[i]);
  1153. }
  1154. }
  1155. W.selectionManager.unselectAll();
  1156. localStorage.setItem('WMECopyPastePOI', JSON.stringify(toSave));
  1157. loadBookmarks('WMECopyPastePOI', 'divCopyContent');
  1158.  
  1159. function saveNewPlaceGeometry(newGeom){ // PIE Function by JustinS83
  1160. let selected = W.selectionManager.getSelectedFeatures()[0].model;
  1161. let originalGeometry = selected.geometry.clone();
  1162. let ls = new OL.Geometry.LineString(newGeom);
  1163. let newGeometry = new OL.Geometry.Polygon(new OL.Geometry.LinearRing(ls.components));
  1164. let UFG = require("Waze/Action/UpdateFeatureGeometry");
  1165. W.model.actionManager.add(new UFG(selected, W.model.venues, originalGeometry, newGeometry));
  1166. }
  1167. }
  1168. function getCopyPaste() {
  1169. var listFav = localStorage.WMECopyPastePOI;
  1170. var params = {
  1171. url: 'http://4bphotoabbatienne.fr/bkm.php?getcopypaste=' + BKMusername,
  1172. headers: { "Content-Type": "application/x-www-form-urlencoded" },
  1173. data: null,
  1174. method: 'GET'
  1175. };
  1176. BKMDownloadHelper.add(params, function (data) {
  1177. if (data.status == 'success') {
  1178. if (isJsonString(data.data)) {
  1179. if (_.isEqual(JSON.parse(listFav), JSON.parse(data.data.replace(/\\/g, ""))) !== true && data.data && BKMsettingsSynchro === true) {
  1180. if (debug) { console.log('WME Bookmarks: From Copy Server: ', data.data.replace(/\\/g, "")); }
  1181. if (debug) { console.log('WME Bookmarks: From Copy local : ', listFav); }
  1182. clearTimeout(timer);
  1183. $('addNodeButton').hide();
  1184. getId('addNodeButton').style.height='0';
  1185. getId('divCopyHead').innerHTML = '<div class="divHeadName"><span class="fabkm fa fa-random"></span>' + lang[5] + '</div><div class="divIcons"><span id="SyncCancel" class="fabkm fa fa-window-close" title="' + lang[9] + '" style="color:red;"></span></div>';
  1186. if (data.data != '[]') {
  1187. var servToPC = '<div id="serv2Loc" class="BKMbuttonSync" style="float:left;"><span class="fabkm fa fa-cloud"></span> <span class="fabkm fa fa-chevron-circle-right" style="font-size:20px;color:#36c;"></span> <span class="fabkm fa fa-laptop"></span></div>';
  1188. } else { var servToPC = ''; }
  1189. if (listFav != '[]') {
  1190. var PCToServ = '<div id="loc2Serv" class="BKMbuttonSync" style="float:right;"><span class="fabkm fa fa-laptop"></span> <span class="fabkm fa fa-chevron-circle-right" style="font-size:20px;color:#36c;"></span> <span class="fabkm fa fa-cloud"></span></div>';
  1191. } else { var PCToServ = ''; }
  1192. getId('divCopyContent').innerHTML = '<div class="BKMsync" style="clear:both;height:60px;"><div class="BKMsync">'+ servToPC + PCToServ +'</div>';
  1193. if (getId('serv2Loc')) getId('serv2Loc').onclick = (function(){serv2LocCP(data.data);});
  1194. if (getId('loc2Serv')) getId('loc2Serv').onclick = (function(){loc2ServCP();});
  1195. }
  1196. else {
  1197. reloadHtmlCopy();
  1198. if (debug) { console.log('WME Bookmarks: Copy Paste POI Sync !'); }
  1199. }
  1200. } else {
  1201. if (debug) { console.log('WME Bookmarks: Server not responding or data corrupted'); }
  1202. clearTimeout(timer);
  1203. $('addNodeButton').hide();
  1204. getId('addNodeButton').style.height='0';
  1205. getId('divCopyHead').innerHTML = '<div class="divHeadName"><span class="fabkm fa fa-random"></span>' + lang[5] + '</div><div class="divIcons"><a href="#"><span id="SyncCancel" class="fabkm fa fa-window-close" title="' + lang[9] + '" style="color:red;"></span></a></div>';
  1206. getId('divCopyContent').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>';
  1207. getId('servhs').onclick = (function () {
  1208. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  1209. a.synchro=false;
  1210. $('#iconCopy').css('display', 'none');
  1211. $('#copypButton').animate({ width: '0' }, 250);
  1212. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  1213. reloadHtmlCopy();
  1214. getId('chkSynchro').checked=false;
  1215. });
  1216. }
  1217. }
  1218. }, null);
  1219. function serv2LocCP(data) {
  1220. localStorage.setItem('WMECopyPastePOI', data);
  1221. BKMaddButtonIfLoad();
  1222. reloadHtmlCopy();
  1223. }
  1224. function loc2ServCP() {
  1225. getId('divCopyContent').innerHTML = '';
  1226. BKMaddButtonIfLoad();
  1227. BKMpostCopy();
  1228. }
  1229. }
  1230. function reloadHtmlCopy() {
  1231. var content = '<div class="divHeadName"><span class="fabkm fa fa-star" style="font-size:16px;padding:6px;"></span>' + lang[6] + 's</div>';
  1232. getId('divCopyHead').innerHTML = content;
  1233. getId('divCopyContent').innerHTML = '';
  1234. loadBookmarks('WMECopyPastePOI', 'divCopyContent');
  1235. }
  1236. function BKMpostCopy() {
  1237. var listFav = localStorage.WMECopyPastePOI;
  1238. if (debug) { console.log('WME Copy POI: Send Data: ', JSON.parse(listFav)); }
  1239. var params={
  1240. url: "http://4bphotoabbatienne.fr/bkm.php",
  1241. headers: { "Content-Type": "application/x-www-form-urlencoded" },
  1242. data: "nickname="+BKMusername+"&postcopypaste=" + listFav,
  1243. method: 'POST'
  1244. };
  1245. BKMDownloadHelper.add(params, function (data) {
  1246. if (debug) { console.log('WME Bookmarks: Server Response: ', data); }
  1247. if (data.status == 'success') {
  1248.  
  1249. if (data.data != 'Check') {
  1250. getId('divCopyHead').innerHTML = '<div class="divHeadName"><span class="fabkm fa fa-random"></span><span style="color:red;">' + lang[19] + '</span></div>';
  1251. setTimeout(getCopyPaste, 1000);
  1252. } else {
  1253. getId('divCopyHead').innerHTML = '<div class="divHeadName"><span class="fabkm fa fa-random"></span><span style="color:darkgreen;">' + lang[20] + '</span></div>';
  1254. BKMaddButtonIfLoad();
  1255. setTimeout(reloadHtmlCopy, 1000);
  1256. }
  1257. }
  1258. });
  1259. }
  1260. function BKMupdateCopy(action, owner, data) {
  1261. var bNew = {};
  1262. bNew.action=action;
  1263. bNew.owner=owner;
  1264. bNew.data=data;
  1265. if (debug) { console.log('WME Copy POI: Send Update: ', bNew); }
  1266. var params={
  1267. url: "http://4bphotoabbatienne.fr/bkm.php",
  1268. headers: {
  1269. "Content-Type": "application/x-www-form-urlencoded"
  1270. },
  1271. data: "addcopypaste=" + JSON.stringify(bNew),
  1272. method: 'POST'
  1273. };
  1274. BKMDownloadHelper.add(params, function (data) {
  1275. if (debug) { console.log('WME Bookmarks: Server Response: ', data); }
  1276. if (data.status == 'success') {
  1277. if (data.data != 'Check') {
  1278. getId('divCopyHead').innerHTML = '<div class="divHeadName"><span class="fabkm fa fa-random"></span><span style="color:red;">' + lang[19] + '</span></div>';
  1279. setTimeout(getCopyPaste, 1000);
  1280. } else {
  1281. getId('divCopyHead').innerHTML = '<div class="divHeadName"><span class="fabkm fa fa-random"></span><span style="color:darkgreen;">' + lang[20] + '</span></div>';
  1282. BKMaddButtonIfLoad();
  1283. setTimeout(reloadHtmlCopy, 1000);
  1284. }
  1285. }
  1286. });
  1287. }
  1288. function BKMcopyPasteHtml(data) { // copy paste table (HTML)
  1289. if (data.name ==="") { data.name = '<b>Sans Nom</b> <font size=-2>(ID: '+data.id+')</font>'; }
  1290. else { data.name = '<b>'+ data.name.substring(0, 37) +'</b>' }
  1291. var div = document.createElement('div');
  1292.  
  1293. //Icon
  1294. var icon = document.createElement('div');
  1295. (data.type=="point" ? icon.className = 'iconPoint' : icon.className = 'iconZone')
  1296. div.appendChild(icon);
  1297.  
  1298. //Text
  1299. div.className = 'divBKM';
  1300. var divName = document.createElement('div');
  1301. divName.className = 'divName';
  1302. var divNameA = document.createElement('a');
  1303. divNameA.href = '#';
  1304. divNameA.innerHTML = data.name;
  1305. divNameA.onclick = (function(){
  1306. console.log(data);
  1307. W.map.setCenter(new OpenLayers.LonLat(parseFloat(data.geoX), parseFloat(data.geoY)));
  1308. objectsIsLoaded('vn:'+ data.id);
  1309. });
  1310. divName.appendChild(divNameA);
  1311. div.appendChild(divName);
  1312.  
  1313. // Suppr
  1314. var divSuppr = document.createElement('div');
  1315. divSuppr.className = 'divIcons';
  1316. var divSupprA = document.createElement('a');
  1317. divSupprA.innerHTML = '<span class="fabkm fa fa-times" title="' + lang[11] + '" style="color:red;"></span>';
  1318. divSupprA.href = '#';
  1319. divSupprA.onclick = (function(){ BKMsuppr(data.name,data,'divCopyContent'); });
  1320. divSuppr.appendChild(divSupprA);
  1321. div.appendChild(divSuppr);
  1322.  
  1323. getId('divCopyContent').appendChild(div);
  1324. }
  1325.  
  1326. // ***************************
  1327. // ** ACTIONS WITH BOOKMARK **
  1328. // ****************************
  1329.  
  1330. function BKMhtmlEditName(container, data) { //Show Edit DIV
  1331. clearTimeout(timer);
  1332. $('#BKMedit').slideDown(200);
  1333. if (container == 'divBookmarksContent') { getId('BKMedit').style.height = '133px'; }
  1334. 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 + '" />';
  1335. content1 += '<div class="divIcons"><a href="#"><span id="EditValid" class="fabkm fa fa-check" title="' + lang[8] + '" style="font-size:16px;padding:6px;color:#0b0;"></a></div>';
  1336. content1 += '</div><div id="divComm">' + lang[14] + '</div></div><textarea id="divCommEdit">';
  1337. if (data.comm === '') { content1 += ''; } else { content1 += data.comm; }
  1338. content1 += '</textarea>';
  1339. getId('BKMedit').innerHTML = content1;
  1340. getId('divEditName').focus();
  1341. getId('divEditName').select();
  1342. getId('EditValid').onclick = (function(){ BKMeditName(container,data); });
  1343. }
  1344. function BKMeditName(container, data) { //Action after editing name or comment (DB)
  1345. $('#BKMedit').slideUp(200);
  1346. var toSave=[];
  1347.  
  1348. //Bookmarks list update
  1349. if (container === 'divBookmarksContent') {
  1350. var a = JSON.parse(localStorage.WMEBookmarks);
  1351. for (var p in a) {
  1352. if(!a.hasOwnProperty(p)) continue;
  1353.  
  1354. //Redo Bookmark
  1355. var bNew={};
  1356. bNew.country=a[p].country;
  1357. bNew.name=a[p].name;
  1358. bNew.perma=a[p].perma;
  1359. bNew.comm=a[p].comm;
  1360. bNew.share=a[p].share;
  1361. if (getId('permalink').value == a[p].perma.lon+'|'+a[p].perma.lat) {
  1362. bNew.name=getId('divEditName').value;
  1363. bNew.comm=getId('divCommEdit').value;
  1364. if (BKMsettingsSynchro === true) {
  1365. if (debug) { console.log('WME Bookmarks: UPDATE', BKMusername, bNew); }
  1366. BKMupdateBookmarks('UPDATE',BKMusername, bNew, '');
  1367. }
  1368. }
  1369. //Store Bookmark
  1370. toSave.push(bNew);
  1371. }
  1372. localStorage.setItem('WMEBookmarks', JSON.stringify(toSave));
  1373. }
  1374.  
  1375. //Sharing list update
  1376. else {
  1377. var a = JSON.parse(localStorage.WMEBookmarksShared);
  1378. for (var p in a) {
  1379. if(!a.hasOwnProperty(p)) continue;
  1380.  
  1381. //Redo Bookmark
  1382. var bNew={};
  1383. bNew.owner=a[p].owner;
  1384. bNew.country=a[p].country;
  1385. bNew.name=a[p].name;
  1386. bNew.perma=a[p].perma;
  1387. bNew.comm=a[p].comm;
  1388. bNew.share=a[p].share;
  1389. if (getId('permalink').value == a[p].perma.lon+'|'+a[p].perma.lat) {
  1390. bNew.name=getId('divEditName').value;
  1391. bNew.comm=getId('divCommEdit').value;
  1392. if (BKMsettingsSynchro === true) {
  1393. if (debug) { console.log('WME Bookmarks: UPDATE', a[p].owner, bNew); }
  1394. BKMupdateBookmarks('UPDATE',a[p].owner, bNew, '');
  1395. }
  1396. }
  1397. //Store Bookmark
  1398. toSave.push(bNew);
  1399. }
  1400. localStorage.setItem('WMEBookmarksShared', JSON.stringify(toSave));
  1401. }
  1402. //Reload HTML
  1403.  
  1404. BKMcheckActiveCountry();
  1405. if (container == 'divBookmarksContent') {
  1406. getId('divBookmarksContent').innerHTML = '';
  1407. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  1408. } else {
  1409. getId('divShareContent').innerHTML = '';
  1410. loadBookmarks('WMEBookmarksShared', 'divShareContent');
  1411. }
  1412. }
  1413. function BKMsuppr(name, id, container) { //Action after delete a bookmark (DB)
  1414. clearTimeout(timer);
  1415. if (debug) { console.info('WME Bookmarks Suppr: ', id); }
  1416. var answer = window.confirm(lang[11] + ' ' + name.replace(/<\/?[^>]+(>|$)/g, "") + ' ?');
  1417. if (answer) {
  1418. console.log(container);
  1419. var toSave=[];
  1420. if (container === 'divHistoContent') {
  1421. var a = JSON.parse(localStorage.WMEHistoric);
  1422. for (var i = 0; a[i]; i++) {
  1423. var bNew={};
  1424. bNew.date=a[i].date;
  1425. bNew.perma=a[i].perma;
  1426. bNew.name=a[i].name;
  1427. if (bNew.perma.toSource() !== id.toSource()) { toSave.push(bNew); }
  1428. }
  1429. localStorage.setItem('WMEHistoric', JSON.stringify(toSave));
  1430. getId('divHistoContent').innerHTML = '';
  1431. loadBookmarks('WMEHistoric', 'divHistoContent');
  1432. }
  1433. else if (container === 'divCopyContent') {
  1434. var a = JSON.parse(localStorage.WMECopyPastePOI);
  1435. for (var i = 0; a[i]; i++) {
  1436. if (a[i].id != id.id) { toSave.push(a[i]); }
  1437. else {
  1438. if (BKMsettingsSynchro === true) {
  1439. if (debug) { console.log('WME Copy POI: DELETE', BKMusername, bNew); }
  1440. BKMupdateCopy('DELETE', BKMusername, id.id);
  1441. }
  1442. }
  1443. }
  1444. localStorage.setItem('WMECopyPastePOI', JSON.stringify(toSave));
  1445. getId('divCopyContent').innerHTML = '';
  1446. loadBookmarks('WMECopyPastePOI', 'divCopyContent');
  1447. }
  1448. else if (container === 'divBookmarksContent') { // Suppr own bookmark
  1449. var a = JSON.parse(localStorage.WMEBookmarks);
  1450. for (var i = 0; a[i]; i++) {
  1451. var bNew={};
  1452. bNew.country=a[i].country;
  1453. bNew.name=a[i].name;
  1454. bNew.perma=a[i].perma;
  1455. bNew.comm=a[i].comm;
  1456. bNew.share=a[i].share;
  1457. if (bNew.perma.toSource() !== id.toSource()) { toSave.push(bNew); }
  1458. else {
  1459. if (BKMsettingsSynchro === true) {
  1460. if (debug) { console.log('WME Bookmarks: DELETE', BKMusername, bNew); }
  1461. BKMupdateBookmarks('DELETE', BKMusername, bNew, '');
  1462. }
  1463. }
  1464. }
  1465. localStorage.setItem('WMEBookmarks', JSON.stringify(toSave));
  1466. getId('divBookmarksContent').innerHTML = '';
  1467. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  1468. }
  1469. else { // Unshare a bookmark
  1470. var a = JSON.parse(localStorage.WMEBookmarksShared);
  1471. for (var i = 0; a[i]; i++) {
  1472. var bNew={};
  1473. bNew.owner = a[i].owner;
  1474. bNew.country = a[i].country;
  1475. bNew.name = a[i].name;
  1476. bNew.perma = a[i].perma;
  1477. bNew.comm = a[i].comm;
  1478. bNew.share = a[i].share;
  1479. if (bNew.perma.toSource() !== id.toSource()) { toSave.push(bNew); }
  1480. else {
  1481. if (BKMsettingsSynchro === true) {
  1482. if (debug) { console.log('WME Bookmarks: UNSHARE', a[i].owner, bNew); }
  1483. BKMupdateBookmarks('UNSHARE', BKMusername, bNew, '');
  1484. }
  1485. }
  1486. }
  1487. localStorage.setItem('WMEBookmarksShared', JSON.stringify(toSave));
  1488. getId('divShareContent').innerHTML = '';
  1489. loadBookmarks('WMEBookmarksShared', 'divShareContent');
  1490. }
  1491. getId('BKMedit').style.display = 'none';
  1492. }
  1493. BKMcheckActiveCountry();
  1494. }
  1495. function BKMrelocate(oldPerma, name, iconId) { // Action after relocate a bookmark (DB)
  1496. clearTimeout(timer);
  1497. var answer = window.confirm(lang[13] + ' Lon/Lat/Zoom ? (' + name + ')');
  1498. if (answer) {
  1499. var toSave=[];
  1500. link={}; getLink(document.getElementsByClassName('WazeControlPermalink')[0].getElementsByClassName('permalink')[0].href);
  1501. //Bookmarks list update
  1502. if (getId('divBookmarks').style.visibility == 'visible') {
  1503. var a = JSON.parse(localStorage.WMEBookmarks);
  1504. for (var i = 0; a[i]; i++) {
  1505. var bNew={};
  1506. bNew.country = a[i].country;
  1507. bNew.name = a[i].name;
  1508. bNew.perma = a[i].perma;
  1509. bNew.comm = a[i].comm;
  1510. bNew.share = a[i].share;
  1511. if (bNew.perma.toSource() === oldPerma.toSource()) {
  1512. bNew.perma = link;
  1513. if (BKMsettingsSynchro === true) {
  1514. if (debug) { console.log('WME Bookmarks: RELOCATE New', BKMusername, bNew.perma, oldPerma); }
  1515. BKMupdateBookmarks('RELOCATE', BKMusername, bNew, oldPerma);
  1516. }
  1517. }
  1518. toSave.push(bNew);
  1519. }
  1520. localStorage.setItem('WMEBookmarks', JSON.stringify(toSave));
  1521. getId('divBookmarksContent').innerHTML = '';
  1522. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  1523. }
  1524. //Sharing list update
  1525. if (getId('divShare').style.visibility == 'visible') {
  1526. var a = JSON.parse(localStorage.WMEBookmarksShared);
  1527. for (var i = 0; a[i]; i++) {
  1528. var bNew={};
  1529. bNew.owner = a[i].owner;
  1530. bNew.country = a[i].country;
  1531. bNew.name = a[i].name;
  1532. bNew.perma = a[i].perma;
  1533. bNew.comm = a[i].comm;
  1534. bNew.share = a[i].share;
  1535. if (bNew.perma.toSource() === oldPerma.toSource()) {
  1536. bNew.perma = link;
  1537. if (BKMsettingsSynchro === true) {
  1538. if (debug) { console.log('WME Bookmarks: RELOCATE',a[i].owner, bNew, oldPerma); }
  1539. BKMupdateBookmarks('RELOCATE', a[i].owner, bNew, oldPerma);
  1540. }
  1541. }
  1542. toSave.push(bNew);
  1543. }
  1544. localStorage.setItem('WMEBookmarksShared', JSON.stringify(toSave));
  1545. getId('divBookmarksContent').innerHTML = '';
  1546. loadBookmarks('WMEBookmarksShared', 'divBookmarksContent');
  1547. }
  1548. }
  1549. getId('iconRelocate_'+iconId).style.color="#bbb";
  1550. BKMcheckActiveCountry();
  1551. }
  1552. function BKMinsertPermalink() { // Action when you add a new permalink (DB)
  1553. BKMcountryActive = W.model.getTopCountry().name;
  1554. link={}; getLink(document.getElementsByClassName('WazeControlPermalink')[0].getElementsByClassName('permalink')[0].href);
  1555.  
  1556. //JSON for new permalink
  1557. var bNew={};
  1558. bNew.country=BKMcountryActive;
  1559. bNew.name=getName();
  1560. bNew.perma=link;
  1561. bNew.comm='';
  1562. bNew.share='';
  1563.  
  1564. //Add in localStorage
  1565. var lStorage = JSON.parse(localStorage.WMEBookmarks);
  1566. lStorage.push(bNew);
  1567. localStorage.setItem('WMEBookmarks', JSON.stringify(lStorage));
  1568. if (BKMsettingsSynchro === true) {
  1569. if (debug) { console.log('WME Bookmarks: ADD', BKMusername, bNew); }
  1570. BKMupdateBookmarks('ADD', BKMusername, bNew, '');
  1571. }
  1572.  
  1573. //Add in HTML table
  1574. BKMtableHtml ('divBookmarksContent', bNew, 9999);
  1575. BKMhtmlEditName('divBookmarksContent', bNew);
  1576.  
  1577. //Reload Select list if new country
  1578. if (countries.indexOf(BKMcountryActive) == - 1) {
  1579. BKMtableCountries();
  1580. select(countries, 'selectCountry');
  1581. }
  1582. W.selectionManager.unselectAll();
  1583. getId('tabBKM').click();
  1584. }
  1585. function BKMPastePerma() { // Action when you paste a permalink
  1586. setTimeout(function () {
  1587. var exp = new RegExp('/(https?://(?:www.|(?!www))[^s.]+.[^s]{2,}|www.[^s]+.[^s]{2,})', 'g');
  1588. var a = BKMmapSearch.value;
  1589. var b = BKMmapSearch.innerHTML;
  1590.  
  1591. //Paste a permalink
  1592. if (a.match(exp) && a.match(/lon/g) && a.match(/lat/g)) { // WME or Livemap URL
  1593. link={}; getLink(a);
  1594. if (debug) { console.log('WME Bookmarks link: ', link); }
  1595. BKMjump(BKMcountryActive,link,'paste');
  1596. setTimeout((function(){BKMaddHisto(link);}), 2500);
  1597. }
  1598. else if (a.match(exp) && a.match(/google/g) && a.match(/map/g) && a.match(/@/g)) { // Google Map URL
  1599. var b=a.split('@'), c=b[1].split('/'), d=c[0].split(',');
  1600. link.lat = d[0];
  1601. link.lon = d[1];
  1602. link.zoom = (d[2].substring(0, d[2].length-1)-12);
  1603. if (debug) { console.log('WME Bookmarks link: ', link); }
  1604. BKMjump(BKMcountryActive,link,'paste');
  1605. setTimeout((function(){BKMaddHisto(link);}), 2500);
  1606. }
  1607. //Paste an ID
  1608. else if (a.match(/\./g) && isNaN(a.replace(".",""))===false && a.length > 20) { //venue
  1609. objectsIsLoaded('vn:'+ a);
  1610. }
  1611. else if (isNaN(a)===false && a.length > 7) { //Segment or node
  1612. objectsIsLoaded('sg:'+ a);
  1613. }
  1614. //Reinit search-query
  1615. }, 100);
  1616. }
  1617. function BKMjump(country,data,action) { // Action when you click a link
  1618. //lastclic
  1619. if (/link/.test(action) && BKMsettingsClic) {
  1620. for (var i=1; getId("link"+i); i++) {
  1621. getId("link"+i).style.color='#59899e';
  1622. if ("link"+i===action) {
  1623. getId("link"+i).style.color='#26bae8';
  1624. var a=JSON.parse(localStorage.WMEBookmarksSettings);
  1625. a.lastclic=action;
  1626. localStorage.setItem('WMEBookmarksSettings', JSON.stringify(a));
  1627. }
  1628. }
  1629. }
  1630. //Move to
  1631. W.map.setCenter(OL.Layer.SphericalMercator.forwardMercator(parseFloat(data.lon), parseFloat(data.lat)));
  1632. if (debug) { console.log('BKMjump',country,data,action); }
  1633. //Options
  1634. if (BKMsettingsZoom && data.zoom) { W.map.zoomTo(data.zoom); }
  1635. if (BKMsettingsServer) { W.model.events.register("mergeend", null, mapLoaded); }
  1636. if (action != 'paste' && BKMsettingsLayers && data.layers) { layersLoaded(data.layers); } // layers when bookmarks
  1637. if (action === 'paste' && BKMsettingsPasteLayers && data.layers) { layersLoaded(data.layers); } // layers when paste form searchbar
  1638. if (typeof (data.segments) != 'undefined') { objectsIsLoaded('sg:'+ data.segments); }
  1639. else if (typeof (data.nodes) != 'undefined') { objectsIsLoaded('nd:'+ data.nodes); }
  1640. else if (typeof (data.venues)!= 'undefined') { objectsIsLoaded('vn:'+ data.venues); }
  1641. else if (typeof (data.MC) != 'undefined' && data.MC != 0) { objectsIsLoaded('mc:'+ data.MC); }
  1642. else if (typeof (data.UR) != 'undefined' && data.UR != 0) { objectsIsLoaded('ur:'+ data.UR); }
  1643. else if (typeof (data.MP) != 'undefined' && data.MP != 0) { objectsIsLoaded('mp:'+ data.MP); }
  1644. else { colorSearch(); }
  1645. //Reload list if country is changed
  1646. if (country != W.model.getTopCountry().name) {
  1647. getId('divBookmarksContent').innerHTML = '';
  1648. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  1649. }
  1650.  
  1651. BKMaddButtonIfLoad();
  1652. }
  1653.  
  1654. // ************
  1655. // ** MISC **
  1656. // ************
  1657.  
  1658. function loadBookmarks(storage, dContainer) { //Fill HTML with localstorage
  1659. var lStorage = localStorage.getItem(storage);
  1660. if (lStorage) {
  1661. getId(dContainer).innerHTML = '';
  1662. var a = JSON.parse(lStorage);
  1663. if (BKMsettingsSort) { a.reverse(); }
  1664. var i=1;
  1665. for (var p in a) {
  1666. if(!a.hasOwnProperty(p)) continue;
  1667. if (dContainer == 'divCopyContent') { BKMcopyPasteHtml(a[p]); }
  1668. else if (dContainer == 'divHistoContent') { BKMhistoHtml(a[p]); }
  1669. if (a[p].country == BKMcountryActive) {
  1670. BKMtableHtml(dContainer, a[p], i);
  1671. i++;
  1672. }
  1673. }
  1674. }
  1675. }
  1676. function BKMaddButtonIfLoad() { //Show Pin if WME (permalink) is ready
  1677. var a = getElementsByClassName('WazeControlPermalink') [0].innerHTML;
  1678. if (!a.match(/lon/g)) {
  1679. getId('addNodeButton').style.height='0';
  1680. $('addNodeButton').hide();
  1681. setTimeout(BKMaddButtonIfLoad, 500);
  1682. return;
  1683. } else {
  1684. $('addNodeButton').show();
  1685. }
  1686. }
  1687. function BMKcheckStorage() {
  1688. var settings = JSON.parse(localStorage.WMEBookmarksSettings);
  1689. if (!settings.version) {
  1690. //Convert
  1691. if (debug) { console.info('WME Bookmarks : Convert old data to new JSON'); }
  1692.  
  1693. var a = JSON.parse(localStorage.getItem('WMEBookmarks')), lStorage=[];
  1694. localStorage.setItem('WMEBookmarksShared', '[]');
  1695. localStorage.setItem('WMEBookmarks', '[]');
  1696. localStorage.setItem('WMEHistoric', '[]');
  1697. for (var p in a) {
  1698. if(!a.hasOwnProperty(p)) continue;
  1699.  
  1700. //Redo Bookmark
  1701. var bNew={};
  1702. bNew.country=a[p].country;
  1703. bNew.name=a[p].name;
  1704. bNew.perma=BKMconvertPermalink(a[p].coord);
  1705. bNew.comm=a[p].comm;
  1706. bNew.share=a[p].share;
  1707.  
  1708. //Store Bookmark
  1709. lStorage.push(bNew);
  1710. }
  1711. localStorage.setItem('WMEBookmarks', JSON.stringify(lStorage));
  1712. if (debug) { console.info('WME Bookmarks : New JSON > localStorage Ok !'); }
  1713.  
  1714. // Memorize version
  1715. settings['version']=BKMversion;
  1716. localStorage.WMEBookmarksSettings=JSON.stringify(settings);
  1717. }
  1718.  
  1719. }
  1720. function BKMcheckActiveCountry() { // Check Country and update select
  1721. var BKMcountryActiveWME = W.model.getTopCountry().name;
  1722. if (BKMcountryActive != BKMcountryActiveWME) {
  1723. if (debug) { console.log('WME Bookmarks Country changed : ' + BKMcountryActive + ' > ' + BKMcountryActiveWME); }
  1724. BKMcountryActive = BKMcountryActiveWME;
  1725. select(countries, 'selectCountry');
  1726. select(countriesS, 'selectCountryS');
  1727. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  1728. loadBookmarks('WMEBookmarksShared', 'divShareContent');
  1729. getId('selectCountry').onchange = (function () {
  1730. clearTimeout(timer);
  1731. BKMcheckActiveCountry();
  1732. BKMcountryActive = getId('selectCountry').value;
  1733. getId('divBookmarksContent').innerHTML = '';
  1734. loadBookmarks('WMEBookmarks', 'divBookmarksContent');
  1735. });
  1736. getId('selectCountryS').onchange = (function () {
  1737. clearTimeout(timer);
  1738. BKMcheckActiveCountry();
  1739. BKMcountryActive = getId('selectCountryS').value;
  1740. getId('divShareContent').innerHTML = '';
  1741. loadBookmarks('WMEBookmarksShared', 'divShareContent');
  1742. });
  1743. }
  1744. clearTimeout(timer);
  1745. setTimeout(timer = setTimeout(BKMcheckActiveCountry, 5000),100);
  1746. }
  1747. function BMKcheckAutoSave() { //Show shared if sync with server
  1748. if (BKMsettingsSynchro === true) {
  1749. $('#iconShare').animate({ width: '24px' }, 200);
  1750. }
  1751. else { $('#iconShare').animate({ width: '0' }, 200);
  1752. }
  1753. }
  1754. function select(cArray, selectlist) { // Fill select
  1755. //Add countries in select
  1756. BKMcountryActive = W.model.getTopCountry().name;
  1757. var CSelect = getId(selectlist);
  1758. if (CSelect !== null) {
  1759. CSelect.innerHTML = '';
  1760. for (var k = 0; cArray[k]; k++) {
  1761. var cList = document.createElement('option');
  1762. cList.value =cArray[k];
  1763. cList.text = cArray[k];
  1764. if (cArray[k] == BKMcountryActive) cList.selected = true;
  1765. CSelect.appendChild(cList);
  1766. }
  1767. //If country not listed
  1768. if (cArray.indexOf(BKMcountryActive) == - 1) {
  1769. cList = document.createElement('option');
  1770. cList.value = BKMcountryActive;
  1771. cList.text = BKMcountryActive;
  1772. cList.selected = true;
  1773. CSelect.appendChild(cList);
  1774. }
  1775. }
  1776. }
  1777. function mapLoaded() { // Test map server and change it if necessary
  1778. if(typeof(W.model.getTopCountry()) === 'undefined' || W.model.getTopCountry() === null) { setTimeout(mapLoaded, 500); return; }
  1779. var loc=W.model.getTopCountry().env.replace('NA','usa').toLowerCase();
  1780. if (BKMsettingsServer && loc !== W.app.getAppRegionCode()) {
  1781. var a = JSON.parse(localStorage.mapLocation);
  1782. a[loc]=a[W.app.getAppRegionCode()];
  1783. localStorage.setItem('mapLocation', JSON.stringify(a));
  1784. W.map.mapState.updateMapLocation(loc);
  1785. }
  1786. }
  1787. function layersLoaded(layers) { // Load layers when jump
  1788. var num = Number(layers).toString(2);
  1789. num = num.split('').reverse().join('');
  1790. // First : groups
  1791. layerCheck("group_issues", num.charAt(0));
  1792. layerCheck("group_map_issues", num.charAt(1));
  1793. layerCheck("group_parking_issues", num.charAt(7));
  1794. layerCheck("group_places", num.charAt(11));
  1795. layerCheck("group_road", num.charAt(15));
  1796. layerCheck("group_display", num.charAt(20));
  1797. layerCheck("group_cities", num.charAt(27));
  1798. // Second : items
  1799. layerCheck("item_map_problems", num.charAt(2));
  1800. layerCheck("item_closed_map_problems", num.charAt(3));
  1801. layerCheck("item_update_requests", num.charAt(4));
  1802. layerCheck("item_closed_update_requests", num.charAt(5));
  1803. layerCheck("item_place_update_requests", num.charAt(6));
  1804. layerCheck("item_parking_map_problems", num.charAt(8));
  1805. layerCheck("item_parking_closed_map_problems", num.charAt(9));
  1806. layerCheck("item_parking_place_update_requests", num.charAt(10));
  1807. layerCheck("item_venues", num.charAt(12));
  1808. layerCheck("item_residential_places", num.charAt(13));
  1809. layerCheck("item_parking_places", num.charAt(14));
  1810. layerCheck("item_road", num.charAt(16));
  1811. layerCheck("item_junction_boxes", num.charAt(17));
  1812. layerCheck("item_closures", num.charAt(18));
  1813. layerCheck("item_speed_cameras", num.charAt(19));
  1814. layerCheck("item_satellite_imagery", num.charAt(21));
  1815. layerCheck("item_area_managers", num.charAt(22));
  1816. layerCheck("item_gps_points", num.charAt(23));
  1817. layerCheck("item_live_users", num.charAt(24));
  1818. layerCheck("item_editable_areas", num.charAt(25));
  1819. layerCheck("item_disallowed_turns", num.charAt(29));
  1820. layerCheck("item_map_comments", num.charAt(26));
  1821. layerCheck("item_city_names", num.charAt(28));
  1822.  
  1823. function layerCheck(layerName, state) {
  1824. try {
  1825. if (getId("layer-switcher-"+layerName).checked && state==0 || getId("layer-switcher-"+layerName).checked===false && state==1) { getId("layer-switcher-"+layerName).click(); }
  1826. } catch (e) { console.log("error while check layers: ", e); }
  1827. }
  1828. }
  1829. function objectsIsLoaded(selObjects) {
  1830. if (debug) { console.log('objectsIsLoaded',selObjects); }
  1831. if (selObjects) {
  1832. var objectsList = [], idObj=selObjects.substring(3).split(',');
  1833. try {
  1834. for (var i=0; idObj[i]; i++) {
  1835. // Identify type
  1836. switch (selObjects.substring(0, 2)) {
  1837. case 'sg':
  1838. var objType = W.selectionManager.model.segments.objects[idObj[i]];
  1839. var type = I18n.translations[I18n.locale].layers.name.segments;
  1840. break;
  1841. case 'nd':
  1842. var objType = W.selectionManager.model.nodes.objects[idObj[i]];
  1843. var type = I18n.translations[I18n.locale].layers.name.nodes;
  1844. break;
  1845. case 'vn':
  1846. var objType = W.selectionManager.model.venues.objects[idObj[i]];
  1847. var type = I18n.translations[I18n.locale].layers.name.landmarks;
  1848. break;
  1849. case 'ur':
  1850. var objType = "ur";
  1851. var type = I18n.translations[I18n.locale].layers.name.update_requests;
  1852. break;
  1853. case 'mp':
  1854. var objType = "mp";
  1855. var type = I18n.translations[I18n.locale].layers.name.problems;
  1856. break;
  1857. case 'mc':
  1858. var objType = W.selectionManager.model.mapComments.objects[idObj[i]];
  1859. var type = I18n.translations[I18n.locale].layers.name.comments;
  1860. break;
  1861. default : break;
  1862. }
  1863. // Try to select
  1864. if ((typeof objType === 'undefined' || typeof objType === 'string') &&
  1865. typeof W.map.updateRequestLayer.featureMarkers[idObj[i]] === 'undefined' &&
  1866. typeof W.map.problemLayer.featureMarkers[String(idObj[i].replace('%2F','/'))] === 'undefined'
  1867. ) {
  1868. count++;
  1869. if (debug) { console.info('LOOP (' + count + '): try to select '+type+' :' + idObj[i]); }
  1870. if (count >= 10) {
  1871. alert(type +'\n'+ I18n.translations[I18n.locale].problems.panel.more_info.not_available);
  1872. count=0;
  1873. setTimeout(function () {
  1874. BKMmapSearch.style.backgroundColor = '';
  1875. BKMmapSearch.style.color='';
  1876. BKMmapSearch.value='';
  1877. BKMmapSearch.placeholder=lang[17];
  1878. }, 2000);
  1879. return;
  1880. }
  1881. setTimeout((function(){ objectsIsLoaded(selObjects); }), 750);
  1882. return;
  1883. }
  1884. else {
  1885. if (debug) { console.info('LOOP : found '+type+' :' + idObj[i]); }
  1886. if (selObjects.substring(0, 2) === 'ur') { W.map.updateRequestLayer.featureMarkers[idObj[i]].marker.icon.$div[0].click(); }
  1887. else if (selObjects.substring(0, 2) === 'mp') { W.map.problemLayer.featureMarkers[String(idObj[i].replace('%2F','/'))].marker.icon.$div[0].click(); }
  1888. else if (selObjects.substring(0, 2) === 'vn') { objectsList.push(W.model.venues.objects[idObj[i]]); }
  1889. else if (selObjects.substring(0, 2) === 'nd') { objectsList.push(W.model.nodes.objects[idObj[i]]); }
  1890. else if (selObjects.substring(0, 2) === 'mc') { objectsList.push(W.model.mapComments.objects[idObj[i]]); }
  1891. else { objectsList.push(W.model.segments.objects[idObj[i]]); }
  1892. count=0;
  1893. setTimeout(function () {
  1894. BKMmapSearch.style.backgroundColor = '';
  1895. BKMmapSearch.style.color='';
  1896. BKMmapSearch.value='';
  1897. BKMmapSearch.placeholder=lang[17];
  1898. }, 2000);
  1899. }
  1900. }
  1901. } catch (e) {
  1902. console.log("error while getting selected item: ", e);
  1903. }
  1904. selObjects = '';
  1905. if (objType !== "none") {
  1906. W.selectionManager.unselectAll();
  1907. W.selectionManager.setSelectedModels(objectsList);
  1908. }
  1909. colorSearch(type);
  1910. }
  1911. }
  1912. function BKMconvertPermalink(data) { //Redo permalink
  1913. if (data) {
  1914. var l=data.split("|"), link = {};
  1915. link.env=l[5];
  1916. link.lat=l[1];
  1917. link.lon=l[0];
  1918. link.zoom=l[2];
  1919. link.layers=l[3];
  1920. link.MP=l[6];
  1921. link.UR=l[7];
  1922. link.MC=l[8];
  1923. if (l[4]) {
  1924. switch (l[4].substring(0, 1)) {
  1925. case 's': link.segments = l[4].substring(2); break;
  1926. case 'n': link.nodes = l[4].substring(2); break;
  1927. case 'v': link.venues = l[4].substring(2); break;
  1928. }
  1929. }
  1930. Object.keys(link).sort();
  1931. return link;
  1932. }
  1933. }
  1934. function colorSearch(msg) {
  1935. setTimeout(function () {
  1936. BKMmapSearch.style.backgroundColor='#4d4d4d';
  1937. BKMmapSearch.style.color='white';
  1938. (msg ? msg=msg+': ' : msg='')
  1939. BKMmapSearch.value=msg+lang[18];
  1940. }, 500);
  1941. setTimeout(function () {
  1942. BKMmapSearch.style.backgroundColor = '';
  1943. BKMmapSearch.style.color='';
  1944. BKMmapSearch.value='';
  1945. BKMmapSearch.placeholder=lang[17];
  1946. }, 2000);
  1947. }
  1948.  
  1949. // ***********************
  1950. // ** ANIMATE FUNCTIONS **
  1951. // ***********************
  1952.  
  1953. function bookmarksToggle() {
  1954. $('#divBookmarks').css('visibility', 'visible');
  1955. $('#divContent').css('display', 'block');
  1956. $('#divBookmarks').slideDown(); $('#iconBookmarks').css('color', '#36c');
  1957. $('#divShare').slideUp(); $('#iconShare').css('color', '#bbb');
  1958. $('#divHisto').slideUp(); $('#iconHisto').css('color', '#bbb');
  1959. $('#divCopy').slideUp(); $('#iconCopy').css('color', '#bbb');
  1960. $('#divBackup').slideUp(); $('#iconBackup').css('color', '#bbb');
  1961. $('#divSettings').slideUp(); $('#iconSettings').css('color', '#bbb');
  1962. $('#BKMedit').slideUp(200);
  1963. BKMcheckActiveCountry();
  1964. reloadHtmlBookmarks();
  1965. if (BKMsettingsSynchro === true) { getBookmarks(); }
  1966. }
  1967. function shareToggle() {
  1968. $('#divShare').css('visibility', 'visible');
  1969. $('#divContent').css('display', 'block');
  1970. $('#divBookmarks').slideUp(); $('#iconBookmarks').css('color', '#bbb');
  1971. $('#divShare').slideDown(); $('#iconShare').css('color', '#36c');
  1972. $('#divHisto').slideUp(); $('#iconHisto').css('color', '#bbb');
  1973. $('#divCopy').slideUp(); $('#iconCopy').css('color', '#bbb');
  1974. $('#divBackup').slideUp(); $('#iconBackup').css('color', '#bbb');
  1975. $('#divSettings').slideUp(); $('#iconSettings').css('color', '#bbb');
  1976. $('#BKMedit').slideUp(200);
  1977. BKMcheckActiveCountry();
  1978. getShared();
  1979. }
  1980. function histoToggle() {
  1981. $('#divHisto').css('visibility', 'visible');
  1982. $('#divContent').css('display', 'block');
  1983. $('#divBookmarks').slideUp(); $('#iconBookmarks').css('color', '#bbb');
  1984. $('#divShare').slideUp(); $('#iconShare').css('color', '#bbb');
  1985. $('#divHisto').slideDown(); $('#iconHisto').css('color', '#36c');
  1986. $('#divCopy').slideUp(); $('#iconCopy').css('color', '#bbb');
  1987. $('#divBackup').slideUp(); $('#iconBackup').css('color', '#bbb');
  1988. $('#divSettings').slideUp(); $('#iconSettings').css('color', '#bbb');
  1989. $('#BKMedit').slideUp(200);
  1990. loadBookmarks('WMEHistoric', 'divHistoContent');
  1991. }
  1992. function copyToggle() {
  1993. $('#divCopy').css('visibility', 'visible');
  1994. $('#divContent').css('display', 'block');
  1995. $('#divBookmarks').slideUp(); $('#iconBookmarks').css('color', '#bbb');
  1996. $('#divShare').slideUp(); $('#iconShare').css('color', '#bbb');
  1997. $('#divHisto').slideUp(); $('#iconHisto').css('color', '#bbb');
  1998. $('#divCopy').slideDown(); $('#iconCopy').css('color', '#36c');
  1999. $('#divBackup').slideUp(); $('#iconBackup').css('color', '#bbb');
  2000. $('#divSettings').slideUp(); $('#iconSettings').css('color', '#bbb');
  2001. $('#BKMedit').slideUp(200);
  2002. reloadHtmlCopy();
  2003. if (BKMsettingsSynchro === true) { getCopyPaste(); }
  2004. }
  2005. function backupToggle() {
  2006. $('#divBackup').css('visibility', 'visible');
  2007. $('#divContent').css('display', 'block');
  2008. $('#divBookmarks').slideUp(); $('#iconBookmarks').css('color', '#bbb');
  2009. $('#divShare').slideUp(); $('#iconShare').css('color', '#bbb');
  2010. $('#divHisto').slideUp(); $('#iconHisto').css('color', '#bbb');
  2011. $('#divCopy').slideUp(); $('#iconCopy').css('color', '#bbb');
  2012. $('#divBackup').slideDown(); $('#iconBackup').css('color', '#36c');
  2013. $('#divSettings').slideUp(); $('#iconSettings').css('color', '#bbb');
  2014. $('#BKMedit').slideUp(200);
  2015. BKMbackup();
  2016. }
  2017. function settingsToggle() {
  2018. $('#divSettings').css('visibility', 'visible');
  2019. $('#divContent').css('display', 'block');
  2020. $('#divBookmarks').slideUp(); $('#iconBookmarks').css('color', '#bbb');
  2021. $('#divShare').slideUp(); $('#iconShare').css('color', '#bbb');
  2022. $('#divHisto').slideUp(); $('#iconHisto').css('color', '#bbb');
  2023. $('#divCopy').slideUp(); $('#iconCopy').css('color', '#bbb');
  2024. $('#divBackup').slideUp(); $('#iconBackup').css('color', '#bbb');
  2025. $('#divSettings').slideDown(); $('#iconSettings').css('color', '#36c');
  2026. $('#BKMedit').slideUp(200);
  2027. loadSettings();
  2028. }
  2029.  
  2030. console.log('WME Bookmarks : ' + BKMversion + ' starting');
  2031. BKMinit();
  2032. }
  2033. var BKMscript = document.createElement('script');
  2034. BKMscript.textContent = '' + runBKM.toString() + ' \n' + 'runBKM();';
  2035. BKMscript.setAttribute('type', 'application/javascript');
  2036. document.body.appendChild(BKMscript);