WME Bookmarks

Bookmark, share your favourite places

目前为 2019-11-18 提交的版本,查看 最新版本

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