WME Bookmarks

Bookmark, share your favourite places

当前为 2015-06-17 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WME Bookmarks
  3. // @version 0.51
  4. // @description Bookmark, share your favourite places
  5. // @namespace Sebiseba
  6. // @include https://www.waze.com/editor/*
  7. // @include https://www.waze.com/*/editor/*
  8. // @include https://editor-beta.waze.com/*
  9. // @icon data:image/png;base64,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
  10. // @URL https://greasyfork.org/scripts/4515-wme-bookmarks
  11. // @require http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js
  12. // @grant GM_xmlhttpRequest
  13. // @copyright Sebiseba 2014-2015
  14. // ==/UserScript==
  15.  
  16. var WMEF_Version = GM_info.script.version;
  17. var link="", countries="", debug="";
  18. var form = new Array("country","name","coord","comm","share");
  19. var selobjects=null,count=0;
  20.  
  21. // *************
  22. // ** ICONS **
  23. // *************
  24. // icon from ©iconza (https://www.iconfinder.com/iconsets/iconza)
  25. // icon form ©Sketchdock (https://www.iconfinder.com/iconsets/sketchdock-ecommerce-icons)
  26.  
  27. var di="data:image/png;base64,";
  28. var icon_signet=di+"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";
  29. icon_addlinkmap=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";
  30. icon_bookmarks=di+"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";
  31. icon_nobookmarks=di+"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3goJCQQUoj+qIgAAA/ZJREFUSMetlE1sG0UYht+Z3Z3dteP4h6SNY6ex8wfJpUKiatRUKVFAtELNhSs5JKgSEqUHJJBAoAqJK+JYcSVwQ4pEegbJuFQqcYmEE0tpErt2bOP/v3i9jnc9HEqiVE1CouaT5jCj+eb5vnfmHeAUwTmXCvmCk3MunDSHngaQzeXulKvVYC5fmDhTQKVSBQDk84U5mbGxbDb7zpkC7PZOaFrjEqW07/z5c7BarTdK5bL9TCWKJ+KXnA6HTRRFCILw+tZWTK5UKmcD4JwzSuhkZ6eNAACTRPR5e2ftdvvLAzRNQyKxbWcym2KMAQA6OjqgaY0PAaBcLr8cwGKxgFI6QCk9R+mz7arFgp16fYhz3u9wOM5Eoq9URQUh5FkSIbBarUgmU5/9Xy5ZXYv0GYYR55zvH/BCFZRieGgIssz21+qahvX1JxCEwz3XbrchimKT/B1edQqU/sZkdtHT6waTFfB2+8VKCAHn/Mj5wWLq9TrS6X/QMoxFwjnHRnRDIm36fSaTmRt5dQT2zk6YponThiRJSKVSSCS20dPTc8vtdi8QAIhGY8Tv9/FCsfh2OLz6k9fj6e7u7jqyysO6M00T8XgCxWLx6bVrk+8RQkLRaAz7oldrNXTabMjl8oORSOQugNmBwQGoinIsRBAEFIpFJJNJMMa+G798+QtCiF4sFuFyuUCO+jWXl0NvFQqFn719XovDbj8SkkqlUa3VikNDgzd9/f0PCSG81WpBkiQAgHhYUrPZbKmq8lBi7KkoCKONRuMYeQCLqm75fb4/qrXa/l3sxaEARVEQDAYvNDRtVNf1556voijQdf3AXMbG5uYbnPMOQsjOiY2mKMrHAKDrOjRNg67rkGUZ6XQaoihC0zRomoZmcxeiICIUevz1qZy8thb5gDGGRqMB0zRBKMWjR38a4fDqxtpahDPGYBgGdnZ24HQ5sRwKvXtiQDaXvVmpVIggUFgsKkrlMsLhcN7j6b1z+/ZHw4xJ3zx+vLLfFQFB2zR7o7HY+LGAUqkEALi/dP9Tl8sJq9WKUOgvlEvljampqfHp6el7ADAzM3N3bGx0JB5PmNFoDFarBTZbh23pl6UrhwL2LtHpdIJz3pVIbL/m8XoRfPCg7R/w/zg7+/6w3+fbPGAsPjFx5cn8/BzTNO3XlZUV7na7oSjym5xz5aAB6X/vHoQQAYC6uLg43Wq1ugOBgE4Jvrxx/frnqqr2CoLQLQiCfW+IovgKIaRrYeGHW83d3Xu/B4NoNPTx+fn5fkqpAoBwzp+TqA2gmUwmlzKZzIU2bw9sbm59CyBnGEYeQBlA/cCoSpJUDgQCycmrVz8xDKMvl8tdXF9fjwLYBcAB4F+Gkb6o+TjnqgAAAABJRU5ErkJggg==";
  32. icon_share=di+"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALpSURBVHjatFZNSFRRFP7emxnvzGiPEUf784fKzIqCCDIlCje2iUCwNiER1SIigshdaLoJaldECyGohDZGJYFltFEIx5AiWpSW4A+mY86M8//evJ/ufb6ZZnRmHJM5cLhz7nv3O/ec75zzhtM0DfkUHnmWvDswJxtVl11suU21YwOYnQxjsrtutYM4+KGaMpQ67OtGXvCF8XnM3ZGEBS6ZZBqBFgd3+5WMQOxMNBqFoijgeR5WK6GrSX825Q7C4/GCRsCli8AAlzG/JGd0EAyGYOOjuHt+J+prBUzMi7jT58P4nARCyNoks6DYLdMpu7UoimhpKEXjAQesFh77ym24cEJIvJOR5GyiqhoikTBCoTBKBELBi1Oe2wm/dhUl59jvD0CWZT2/TBiwYDfh+ukqnDtegnmfjJ9zIqq3EHiCCnqGlpCuadM6YCmwQMLN5u3YX2HHK5cHxOrAlaYy0EDQ/cGLvtEACgmH2m0E054Yfnvl3CNQVRW3zlTi7LFS3T66R9BJfzrow8tPfoix5ZvSIDA8Hs690eJiMplwcEdhyt7rEQ96Br36sw2PCovFjHdfgv/KMqqiua4YnS1ObN0k0wgVyk+Mkh6BJEmMtRWaA8lP6G3dAQW7NhO8/xqguddw9aQTz2/sRt/IIh72z6LEYUZDbREmF1W4fonrqSJAoWy+GV1K2b/2eAb1NYW42FiM3ra9cBSZKdHLKevqncMLly/3abrcbKv1448QWu9P4NtUOAHO5NRhIfFODg60rFpQYMHQ92DKibFZMTsHHMeh8tKwPhE1jcNaX7q3tAgqnH9wpNqOCbeERwML+hnWnJk4oKhqFx237TabDWZz9ikSpb3woN+dssfAWWUxHHphNqm1xLimNktXQXnrQBdPhLb//dqoov/ezLOmdvpTotjqSgfs2jY2u6gSwzYZyutRphKlUlUMZblhRLDWjjB7pQMYAHySckkrl6UaVGNV4rZmAHP5/tvyV4ABABHEe0sJhQEUAAAAAElFTkSuQmCC";
  33. icon_noshare=di+"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKWSURBVHjatFbdThpREJ6FpQsuFhRaMQoxRBIbk8YbvTG98NKkL+EDeNlbab3tpQ/gS/QNeAFjook/CRFEQP5/dlnYXU7PTBe6IOC2hpNMYM7Z/b6Zb2YOCIwxmOdywZzX3AlEu3N+nsKP79ySb8D8gRhHR19eEgzAt7ejEAr5/xm5UmnD1VU2acN6QTAEV1VtKlC/z6DV0kDXTXC7XbC46AVRdIHPJ0I0ugTZbC05jYDAFUUjmxWponRhfz8Bq6tBIstkKrQny15nRcb2nWSGYUK73YXNzRVYX1+mDILBBVhbWxo+M7XI4+DjstTrKpksS1yK5ZFzt1uASTMlTtP4+bkF3a7B9ZVor1pVQZJE2N2NQzz+ATRN55lo4Pd7odczuO5Ves8Rgar2yHZ2YlSTdLrE5QjB1lYEMMiHhwoUCg2rwBJ0OjoRvjoHg2UYfdjbi0MisUJ+JBLg2ei8kFXI52vDSE3T5AXXnQ/aYHk8bgiHR+cgnS7zyMt09uarArVGCf5mZMLGRphnFKHeRx8zajQ6JOV4pznqolyuyiXo8yJKUCw2aS8e/wgHB58om8vLLAWC8iEpFtyxRH86CeDpqT6yd3GRoaLHYiE4PPxMBAPJrq9z8PhYcyYRZomFnGSlUgtSqVuaZns9cKIHzzggYDPN6/VAqdwceafZ1CbWYEggCMLwnnmNhJ9CmWdyf1+EWk2hIbu7K9DZ+DzYayAw1j/l1+1JIOAjfWct02Rwc5Mf2cPJx85CHB4wx2NMGKTEfczm3dnZr1NZfv/tf39tFKX58/j46wn/2uPY/XECDNvHbQHHwfLdluG5YC8VNhsmY5mBSeBNw62D/jgBWAAumwm2T2FSP9iImEVEPrOAhXn/bfktwAC4/bsJgXSBjQAAAABJRU5ErkJggg==";
  34. icon_histo=di+"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3goJDAkkN4MmKAAABFZJREFUSMftlVtsFGUUx/8zO7vT2e6tFAot0G4LhRatBEQkCAUSMfAgCAQTEmMiGhpJ1PBiNGIIiSa+qC9ErfGBqCRGHyQxkcQs2psBWRJiK6VtKAW3dWt3drez3Zn5vpnv4kORSxSIl0dO8j2d75zfOSc55w/ct/9idZ399/wT/PDSXf3KPTM8M9LUWpHfOB/ufF3hYSEgJmVFftSv/MX5bHX3vcKVv6vIf7EVALD64NnOJp3tbkkm4ssXVQUTRghQgBlCxUhm2hm4UryaMiOHrM9XpeZ1DiDX0fZXwI5X+gKc88X9LGZmPlpVBoDaAxcaH4p46famSPVjbQ1QAgFYhMNhApRJBFQFcT0AQ/roHriG1K/sjTNF410cX0FrO39GtmPlDYAmfLZoYU14TLHcrsxz43taxdjCB+Okd8ej9fFEVQJ5KuALHwDgcwkqJByf44rlAQCamxuwsMp8O5ieWtO7Ue7Ndij81g40MA9BYx72rIhtZqdHzumGTvZtWhJ3FR3TlEGVABUSlEtQKUGYgMcAIgDiCfTNECQTCRzYpO1i/Mc3z9TLo/KEIm8AJKWYMG0sbV6A/U8sXZKzXLhKEJRxSCnh/pnYE6C+nH2QIETMgn2J3pyLNXUhtCfDR8oXT3/ZDwxqmgbGGFTquNCFj6vZMoKVUbQmazFDfJSph4LroVimKFgERZvCnCEolAmsEp31lwjMaQcuoUgNlzB3XgzVuvIFAGz3Z8eqea4D7lGEAwJZy8W4lLApB+WzVRIpQDwBwgT0QACUCdCyDSiAETIAVWLKdGF5HF26gXV1Wlt6z/fPfqMonwKA5hMX3KPwiIeCLeH5AoQKeELAvQ5yKUelKjExlkHJnCpIBMqScalogapodXW0cX6NMsol+gZMtD9egxU/nX31HHAd4LtgroeyTaAKBsIEXJ/PztzjsAlHwlBxbWRM5hz/aH9y6wl8UH8ZACpfGHhk8cTFrXMLw4cXJWIGCceQGiph/fKa5Hl+sl2knurRmHTAHIKS5YBR7bbkhAuENBV03MRkzjx2sevgUSg3d9P+pC09BKRXbjtxLJ+zhhvD9gIrWItoMl7ZQLvWjgE9KhcUzPNglVwUimUU8mUUCzaKlo18bgbSp6ibE4KmqM3Kzp5qAKh467vbtrWkqjMZHm3K5q0rkbKJ3yyGhtjiTdh93tCYJPB9F7nfpxHUFDAmQDkH9SUIY7g6ZaKipQ57NyzZRrvTXw0fkU+Tw4p5K2Ds230SgDu6/esng5NDZ+OhQDQa1tdGpy5EVS5dEEJQlwhhQSSE2oSO+qowGucYWDY3graaOMxpBxlPx0s7125pTr1+6k6HzT61a/BS9cMvW+ODMHy3JuKNhDSuGn6OjppTQ4P2zQsoAUW9LXgiI3BKSkVTY+6dAOF3foDz2pbjlzd/3NFSzK4LIFvxr3Ri/fNddz3ziW0nGx7YcOj9Zev3z/nfRUp7L31fqf+Z/QFgv2hBV+ff4AAAAABJRU5ErkJggg==";
  35. icon_nohisto=di+"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";
  36. icon_backup=di+"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAM6SURBVHjatFW9UxNBFH97d8nl4iUcBwTMjEDjjI2tH52VtaWlhZY2lloAzmjpjGOphaWlfwFjJzZ2lhaiE0kIISSBfHC5c39vby+XEEAKdubNXva9/b2v39uIKIroMpdxnsHKk2/rUqJTdBH0Z90XOoO7a9tjikrlLy6uZbNZKhaLVK/XqVy+Kr5uLLOt1EeLiyXa32/SYDDAlQ2pH3MG2xMZABiXJfBaqVSiQqFAQXAsd5dBY5tobs6nMAzJ8zxaWlok2OM8DuxkBnGqHLHvz9JwOJyQkAH7/T6DCiHIMES8G8m+t9dIMvr1/vY6O0AtNTB+a9AgGEpQBY5zCC573gxik6DEwEIY7Ew7gmhHlk5ldtZLItUOAI6ow1ABh/0O9doNEsc+RRk3doQFG0Eohs4Kwe7sVMdKFKWdKGBVEg08uXIFnwzbTUqWLtvubp1kiUSSARiCJuXzeQbu9XqnAuvFOimwgyMEiEwajX3GG2tymttBt0WDw+aFhyp7xSPLKXLkU+fgohlMliqXy3Gjj46OkpmxUvxP9UCQ4zgU2jZfPK8HNuwMg8U0DS6VmpllkdAUU4nI/4dFTtEnkXUxXAk9DcOU4FqUs2q1NsoAIw9qKWPFhiAAI4ZMQ0QZAdBWwJo1Cswkyxo5wDkanTx2aIqMcAO8hSPLslgyGSv+NpMh4sbFU4vzcTuL7wMHeJM0xVPB7xAMEKXit57OIbXbXbbFbOBtUhFbvDebyaOXUPTU5/r+rVXyXJtqtZoEbcvIMnLv0Pz8HOtvXi/zb3XeZjtko/XplWSw9XKF9+XHW7yXfJcCqe52u/xUoz9oOBaIgd84d5wcf/ODEetBz2kZIC0TH5vf/0gQxSaUamammDBLOVA6nEOvda1WW/fIFHHDJh1ktj/cWegfVN7++FmlTucwpu1IVKTR2BnsDg5ahHu4D5wYbzTJAt1UJXOk5KXY5Yefn1nu0lM0ETTFwpTeWF2g7dohN5uf9c7Ou8qnB2/Qf5hIARsCiR2mHegsjJTw72uPvrwQVu45qIk66z0Keq9/f7z3igdFVk7KMN7DKAae9tid9ezwvx7+reLvqUvy/+Rf5mWtfwIMAKOeQJT4XFj9AAAAAElFTkSuQmCC";
  37. icon_nobackup=di+"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJWSURBVHja7JW9T9tQEMDPzncgVBAZ0oCcVhQlCxJiYUDp2D+hO0wsXSqxtIPboV2QKlVd2Nj5EzpSITEjoarqgBRVNCgKddI4xl/PvXvNi+yQOGmrbD3p9Gy/e/d7d+/uWfJ9H6YpMkxZpg6ID344OvoUZf8KVUN93XseKjs71T+OgJz5MzMpbWvrEeRyGYL4UZBJAdxxNpvUtrfLsL6ugmnaoKoLUKncB/o+DiRHOc5kklq1WoHNzYfQ6ZjQbhsIsMC2XfA8BsvL87C2tgRkNwoUH+Lcj8VkoB1TCbfbXbAsF9UZGWahcI+PtVpTQzDBpCgArKwswMnJZ8Ccw8bGA0inPWi1DHAcF9W7Y99sGmAYFihKDhqNn2MjgFJJgWJxHq6ufsDp6RcOWl1dAkmSMDU+uC4DxhhCzb7jUinP104EIKGdKspcH3R+XuOgxcU50HUDzyTseOI+CEq3e4uVkg6BLi8b/FlV8//WyXTAjPm8eggkIiIhgBCyCerEERCASpHEw3OlQ04kYqEU/tVVEdyZ64adiHcaB+fGpogqhFQIVYvjsDsaNSfmR0UgCeDZ2Vfs0MLIXVKJDpu7uTHEZimXDNPsywOAxO7uY+X6+vv7i4tv2ECdfjqCaRHpE0p29XoLaB2tJz+imyXxR0Oq3Isog5pFTR0cHD/P5wvP4vEYzM6muJ2ud6FcLqIznffCb0D9w/7+03c4bVF1o5p0VOibBQHBNAnl74eHH18mk+kXdEdRZYnRtm/f7u09eUNB9S47rzfy9IQimNYPR/r/0x8nvwQYAHt+Zlz7MOT0AAAAAElFTkSuQmCC";
  38. icon_settings=di+"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAASySURBVHjatJXLi2XVFcZ/+zzuua+6t6rrpd1Gu7Uhg0QQTJQ8ps6FEPoPyCg4iMNgICAZiwgJiPgHhCSTkIzEgSghOlBotYWYapXuarr61uvce+45++znyuDcsqvjuDds1t7r23xrrf36lIjwMFvCQ24PPYD6+e9DMpb48vZIfjvthdH5DRNA/Z99oJ0B3AcVsHBJfavJXy0T9adMovrN07u8dvFqThzkZAko1XWRrkdWNoIoiKEjlJU/CMSVdQG2LcONW+GP7x8n8+yJvn1l56mCfA2GGQyLbmGIoGJHfjZPEnAOYtbNZeWPgERoXTdfpLB+KeH7lf1DMsntmk27jMZjWDSCBMgyiElHLrEr/+gkkKgVabyfuXUwXwT6OfTSLolSKaaZu5g4ITjpnLNb8I9/nrD3ac3+TTi4BwsDcw21hfc+rEkkUtYwb1Zdw+E88snnS/p9KFswDpoALkafxShYgcMvNb/8aZ/nrq1RZAm9HD74uOHLMmN8oQcKvIKlhXnbVXSW/clcWNaBwxO4eyJIqihSiCaQSRSMQHWnZNrsMsh76CUMehBnS46yIXHUQyIYG9EtlHUXwJnImvV8L/NM1hvW6yk7reU/Vcpks0dmDFkMgdZAnY/4yzszKl2xMSgQSdirwD+5QVmtDtEEag1lBSqB4zsN165ofvXiNvPlEG+g1T1+8fo35JOnGHlHFqxH1xB3J1xvM67vG56/OuBUBsRhQUFOU3YX3BhH08i3AeY68PXNiusfTKhqhwTFUmvmy5aphsI4Mm8dUcOihfFgSL42pZgWqDDAaKirbq8lgdYJTZtw2nS3LmRr/H2/5K+ff0FhSy5dvMQXsxqz8SibjTBxgSw4jzUwr8AaqGuH1imnDdRtd8dN61mcLCjvzti/0Ofmbcfa+hjShDB9hHqwybY5xF+5zIwaiZ668Yh1ZME6mgZOK6HpKWrtaJuC0ypQtYHGeH6Qz3jz1ztoe5lxr6C1PV5++xtutNtQpATrWBeDrg2uqUGEaHsEZ8mCc9RaOKoa8jRl3mi0HnJvoVkaT123/LB/yPMblykXoFvYHEGhS7wZg+qBtaAC4hzYFhSo4AjOkQXjqbXjeNmgsgxnHNYKpW5pjQMRrs88L73xGeIadkZjDmrDV8ceJhGcBe8gceA9BNsdkHNdBeIs1lq8MRACuJYkBpRzEBwIHBZbvHVjCdUxP3t6i3/t1TDZAvHgBLwjSS1p8N3LUwLBEr0lC951ZM4AAZRwXLdEt1p89gevTyhyT+iPYOI7EmtWL86jBebLpqtAugrEG5UF06Y7YkkkElsNxZCP9hcd69kvt5JVkw74cO+gk6kzcZDuWz2wGQe3Z6A6eDcarJeY3GH4743lET/a6jNKhDwGcgU5kVzFlZXOSiBP6fAzDFnhgTwRRgn8eGvIej3j1uji39R04yfPPv7M7/785OajV5N+juec0gAKQUQ6RVv5hPP4/QoBMiLeeL46uvvf2zdeu6b6JFfSjed2h6OrL2T1vdF9XRQeHMm323VeOhXnZHOFu7XHSq333pXjj05Uj+yCpGNJ0vGucjp7QGcfkF9ZZct3A5wbiID0Rlbi8p7yVfq/AQB2JwwGH05xBAAAAABJRU5ErkJggg==";
  39. icon_nosettings=di+"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAQoSURBVHjatJVNbxxFEIaf7umd3fVudteJvY5NTCB/gCg5khMSvwcOHBA3xJkb/AcicSDADQgXBOScXKI4WiJw4i95P7w709/NYbyT2FYQl7TUUqurpt63umreEikl3uSSvOH1xgHU9z/8KEMIH+eNxqcyyzr/6b18TfH6+5QgRr+IIX2eNbKvFfBRp9P58u3tbdrtFkKIi3FP63S+XufvU0rEGDHGrDx/vveV83YqU0qfbV97i05nBSkljUYDpRRSygtbKYUQoibxKhkhBCklUkrkec7GxhDvwxdSCHEpz3NijDSbTYwxxBjrYK+yOzk5qc/LDRBjZLFYkGUZQghCCOR5AwFbEghCCGKMHBwc8ODBA3Z2dnjx4gWz2YwYI845Uko8fvyYGCPee0IIeO/x3qO15unTp2RZVttSSsSUvIoxAjAajbi2vc17N2+SyQzVUDz76xmXLnUZDAZ472t23vuafQiBxWKBtZaiKM5k4qxDpVSlvL+/z2D1CpnKsLZASsnh4RFSQLfbJYRQB9daA+C9Zz6fE0IAYDweM5/PSSkxWF3FWouKsUqz3W7z6OFDFuWCPG+SCYn3jq3NDcqyJKWEtRZjDFprpJTs7++hVM6t27fRWuO9Z7Bq+eXnn7h96xbOWZRzDq01m5ubDAYFO092GK5dodnMyTKFkJLFYoEQogYoyxIpJVobprMj8lYbrTUxJqyt7NY5rHMoY6qPrLV0Ol16/T79fp9Go4G1lrIs69ZcFnXZaXmeY3TJn7//xnw+Z2tri+l0ynA4pCiK6omcs3Ug5xxFUaC1xhiDMaZmPplM2N3dpdvtMh6P6fV6KKUYDocMBgOm0yk3btzg8PCQEEKVhTEoZx3WGoqiQClVB1+2Z9UdJXfuvI82hkajQYyRX+/fp9Vq1ZkaU8UoioIYI+12G+/9yxqcB7DW4r2nKApmsxl5s01IYLSh2WoxmUwZ9FNNxHuPcw5jzGmH1TUwaF2hZ1lWB9daY60lhsDJyZx7977DGEOn06EsS4qyoN/v4ZyrAZYgKaXq3jqk965GXu4QAtZanHOElBgM+swmY3b/+RspYDadMOj3az9jTA3y8hzw3qKsrd7ZWotSCqAG8t7XYtbr90lAu92m1+sBYK0lpYT3vtaj5V9ujcVYK5Q2Jls6lGXJysoKR0dHZ9RxKXB5nrO7u3tGrpd2IQR7e3u1zVWaFGWr2fzjeDyh2+3WvX5eMWOMpBhZ6hZcVNOlTQhBv9/n+PiY9bX1b7PRaPTo6tXND0hcrkRKvqLz4vQnkwgpT88gRIaUlU3KjCyr5kWWZYBgsSg5PDx4cvfuN58I4N3r19/ZWF9f/3A8HncuzsFqDL5kfn5WijO+AGtra5Ojo6OfR6PRsQAuN5vNlDebG0Yb9fpB/P9Xq9Wy1tp9rXX27wBOE0kcmOQyhQAAAABJRU5ErkJggg==";
  40. icon_comment=di+"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";
  41. icon_nocomment=di+"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";
  42. icon_relocate=di+"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3goPCgAbccGTMgAAAiBJREFUOMu9ks9Lk3Ecx1/f53nms2dzYGqgSHToVApSQuJljh2C6MdBIiSLaIq0Y/QHOA916tCpwGdsFw+CXoQ6dMk5I0JBOsS0tUj8UTvMGrPt2Zx7vh2atpURXvqePnz5vF/vzy/4ny8SiR892TRjPVPTS9KcmBs7MiQaXfBOTi1aH59MymfzKWmasdA/IbXOk1OL1sbzeTvd0CQTgXtyemZJhsP1EPE3Z4ehv+gtp53u0Ts0trZQKVhsXh4gORTk23p6fGTEF4pE4qi1zrOzUUwz1qO7jbl+j6Xrt24IT3sbiqqiNzfR+DqOYuXJdZ71Xbx02x4e9saVfUAg4CUaXfAaHter3nLaqV4bEI2tLQhAc+pohoFQFGwJsqbagxbC4dhJp8v53ufONyiD14WnvQ0BqE4dh9tNMbNNss9PcihI/ktmfHikPxSJxDmooFyuHO/qOqFns98FgKJpaFVxYWWFZJ+f1Ss368SBgPcXAEBWbHbOdLP28DG5rc9ohkExs03q6iDJoSBWvlQnBuoBqqrw7u3acqL51PKnR0/5upr8w3li4uWBGEDbD2xbApKOjmPnCoVddjo6Sd0fY6PXT25988Hd4IWQrhva6Kjf5uccZS1AlEo5I5HYAqBSsSmms2ROn+fD4ptwaDwwI4ToLpWsMlACckAWKIuabShVqrsKdlT/XUIIh5SyAuwBu0AeKAB7h12i+H3F+zM+LP4BGsLvw/41mgUAAAAASUVORK5CYII=";
  43. icon_norelocate=di+"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";
  44. icon_synchro=di+"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";
  45. icon_valid=di+"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";
  46. icon_cancel=di+"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3ggcCi8VvAktSQAAAZhJREFUOMvFk89qE1EUh797z4xp0Qb/DBOLpCiCrotC49sUWxB8Al1NBNE3cCFx6a4v4cZYSougC6UgJdrSigkFUeNk5hwXncRJiOnSCwcu9/D97u+ccy/87+WmHS6tvxnmljutxs4sAT8N7rQaqFpixvZpDvw0eHH1dbNeqybnz1X+CRYu/5ZQhpdvxEll/ixvP3zhdzrYBKTEini38fnFnScjgTJ89XI1qcUX2e+lxNUQ8YaqkueKqgHGp/0eu89uuzEHV+62n966GT/w4TyHx4ORPdWcLMuKUFRzfvX77D1fcQDByJd3vN87JooE70501YxcQW0YhpqNDc+XSng4SNNH3W9dzOwk6T0iHhFBRAgCIQjCsWYGAJ1WYyjSrK+16XZ7SRRd4ujoK2maFk10FMbEObcxczT1tXbz+v1tu3Zvy04b4+Sr9L6yIAD11VePl9Y3hwJngLBw7MtNkBI8B8SWpzVwi9/fvfzovLT7B1sOiIEIuAAsFNwAUFcSCIvk3MRtAAYokAEp8AP4CWRuxgebzNm0/R+R3aag7ETr7wAAAABJRU5ErkJggg==";
  47. icon_delete=di+"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";
  48. icon_server=di+"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";
  49. icon_home=di+"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";
  50. icon_info=di+"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3ggcCiUhZ1IxdgAAAaVJREFUOMvFkj1rVEEUhp9zP/bmakiCBoKaaCUopLILphbsBftgbWVjYX6H/0BBEAR/QkCRdHYqEd1CTDaim2zuZu6957W46364G1sHBg7DzDPPe2bgf42rD94aQPJnYXXrza08S3azVmz/OihBryh3BHeAYgjIs2R3Y/2SFVWMARhEZgiQawKy9627+f3gx0vg7hCQtWIryojPB33MIJyWLKbHLM3P8bM6TxF8CEizHEnLANEsTQMsjnn2aJ1Xj29yfSVt1gZTGhklfyVEcoShuuL2k0/UMpYXWiRjrXH32QAJvBZEcHmh5vnDawjYfnHI3n4Y7oui6GwDl4Mb3ZAyn8esXszI0sMJ7XGDaNJAyB3Jae8f0emWAPRDjeS417g3ddONKUBDl8TahYgbV84BsH1vheOiai6QcHfMZkUw0ECxsjm2nn5FLtLEaCU2FsOmexDKWt3eqSEhoNevef/lZJTVGkOAEPoAnQnAUae9+aH0nTgavJfZ7H8MVKF4d/Lx9f1xFxvABOSDOh3rkYAaqIAAhGRxjepXu7IzPuJk0BFkqv4NL9LKlyfSx2sAAAAASUVORK5CYII=";
  51.  
  52.  
  53. // *********************
  54. // ** HELPER FUNCTION **
  55. // *********************
  56. function getId(node) {
  57. return document.getElementById(node);
  58. }
  59. function getElementsByClassName(classname, node) {
  60. node || (node = document.getElementsByTagName("body")[0]);
  61. for (var a = [], re = new RegExp("\\b" + classname + "\\b"), els = node.getElementsByTagName("*"), i = 0, j = els.length;i < j;i++) {
  62. re.test(els[i].className) && a.push(els[i]);
  63. }
  64. return a;
  65. }
  66. function getFunctionWithArgs(func, args) {
  67. return (
  68. function () {
  69. var json_args = JSON.stringify(args);
  70. return function() {
  71. var args = JSON.parse(json_args);
  72. func.apply(this, args);
  73. }
  74. }
  75. )();
  76. }
  77. function GetLink() {
  78. var segments="",nodes="",venues="";
  79. var a = getElementsByClassName("WazeControlPermalink")[0].innerHTML;
  80. var b = a.substring(a.indexOf("https")).split('?');
  81. var c = b[1].split(/"/g);
  82. var d = c[0].split('&amp;');
  83. for (i=0; d[i]; i++) {
  84. var e = d[i].split('=');
  85. if (e[0]=="lat") { var lat = e[1]; }
  86. if (e[0]=="lon") { var lon = e[1]; }
  87. if (e[0]=="zoom") { var zoom = e[1]; }
  88. if (e[0]=="layers") { var layers = "|"+e[1]; }
  89. if (e[0]=="segments") { segments = "|s:"+ e[1]; }
  90. if (e[0]=="nodes") { nodes = "|n:"+ e[1]; }
  91. if (e[0]=="venues") { venues = "|v:"+ e[1]; }
  92. }
  93. link = lon+"|"+lat+"|"+zoom+layers+segments+nodes+venues
  94. if (debug) { console.log("WME Bookmarks link: " + link); }
  95. return link;
  96. }
  97. function IsJsonString(str) {
  98. try {
  99. JSON.parse(str);
  100. } catch (e) {
  101. return false;
  102. }
  103. return true;
  104. }
  105. function LoadSettings() {
  106. var settings = JSON.parse(localStorage.WMEBookmarksSettings);
  107. BKMsettings_sort = settings.sort;
  108. BKMsettings_zoom = settings.zoom;
  109. BKMsettings_layers = settings.layers;
  110. BKMsettings_server = settings.server;
  111. BKMsettings_synchro = settings.synchro;
  112. }
  113.  
  114. // ****************
  115. // ** MAIN HTML **
  116. // ****************
  117. function BKM_bootstrap() {
  118. if (typeof unsafeWindow === "undefined") {
  119. unsafeWindow = ( function () {
  120. var dummyElem = document.createElement('p');
  121. dummyElem.setAttribute('onclick', 'return window;');
  122. return dummyElem.onclick();
  123. }) ();
  124. }
  125.  
  126. /* begin running the code! */
  127. console.log("WME Bookmarks : " + WMEF_Version + " starting");
  128. BKMinit();
  129. }
  130. function BKMinit(){
  131. // Waze object needed
  132. BKMWaze = unsafeWindow.Waze;
  133. if(typeof(BKMWaze) === 'undefined'){ if (debug) { console.error("WME Bookmarks - BKMWaze : NOK"); } setTimeout(BKMinit, 500); return; }
  134. BKMlocation = BKMWaze.location;
  135. BKMmap = BKMWaze.map;
  136. if(typeof(BKMlocation) == 'undefined' || typeof(BKMmap) == 'undefined'){ if (debug) { console.error("WME Bookmarks : NOK"); } setTimeout(BKMinit, 500); return; }
  137. BKMcountry = BKMWaze.model.countries.top;
  138. if(typeof(BKMcountry) == 'undefined'){ if (debug) { console.error("WME Bookmarks - BKMcountry DOM : NOK"); } setTimeout(BKMinit, 500); return; }
  139. BKMUsername = BKMWaze.loginManager.user.userName;
  140. if(typeof(BKMUsername) == 'undefined'){ if (debug) { console.error("WME Bookmarks - BKMUsername : NOK"); } setTimeout(BKMinit, 500); return; }
  141.  
  142. // OpenLayers
  143. if(typeof(unsafeWindow.OpenLayers) === 'undefined'){ if (debug) { console.error("WME Bookmarks - OpenLayers : NOK"); } setTimeout(BKMinit, 500); return; }
  144. OpenLayers = unsafeWindow.OpenLayers;
  145.  
  146. // Traductions
  147. BKMI18n = unsafeWindow.I18n;
  148. if(typeof(BKMI18n) == 'undefined'){ if (debug) { console.error("WME Bookmarks - BKMI18n : NOK"); } setTimeout(BKMinit, 500); return; }
  149.  
  150. // Waze GUI needed
  151. BKMhandle = getId("user-info");
  152. if(typeof(BKMhandle) == 'undefined'){ if (debug) { console.error("WME Bookmarks - BKMhandle : NOK"); } setTimeout(BKMinit, 500); return; }
  153. BKMhandleClass = getElementsByClassName("nav-tabs", BKMhandle)[0];
  154. if(typeof(BKMhandleClass) === 'undefined'){ if (debug) { console.error("WME Bookmarks - BKMhandleClass : NOK"); } setTimeout(BKMinit, 500); return; }
  155. BKMhandleClass2 = getElementsByClassName("tab-content", BKMhandle)[0];
  156. if(typeof(BKMhandleClass2) === 'undefined'){ if (debug) { console.error("WME Bookmarks - BKMhandleClass2 : NOK"); } setTimeout(BKMinit, 500); return; }
  157. BKMmapSearch = getElementsByClassName("form-control search-query", getId("map-search"))[0];
  158. if(typeof(BKMmapSearch) === 'undefined'){ if (debug) { console.error("WME Bookmarks - BKMmapSearch : NOK"); } setTimeout(BKMinit, 500); return; }
  159.  
  160. // Verify localStorages
  161. if ("undefined" === typeof localStorage.WMEBookmarks || !IsJsonString(localStorage.getItem('WMEBookmarks'))) { localStorage.setItem('WMEBookmarks', '[]'); }
  162. if ("undefined" === typeof localStorage.WMEBookmarksShared || !IsJsonString(localStorage.getItem('WMEBookmarksShared'))) { localStorage.setItem('WMEBookmarksShared', '[]'); }
  163. if ("undefined" === typeof localStorage.WMEHistoric || !IsJsonString(localStorage.getItem('WMEHistoric'))) { localStorage.setItem('WMEHistoric', '[]'); }
  164. if ("undefined" === typeof localStorage.WMEBookmarksSettings || !IsJsonString(localStorage.getItem('WMEBookmarksSettings'))) { localStorage.setItem('WMEBookmarksSettings', '{"zoom":true,"layers":true,"server":false,"synchro":true}'); }
  165. LoadSettings();
  166.  
  167. // Translation
  168. var BKMLang = BKMI18n.locale;
  169. if (BKMLang == "fr") {
  170. lang = new Array("Favoris","Partage des amis","Partage ","Historique","Sauvegarde / Restauration","Synchroniser","Nom","Serveur","Valider","Annuler","Ajouter","Supprimer","Partager","Relocaliser","Commentaire","Changer","Sans Nom","Chercher une adresse, un lieu ou permalien","C'est parti !","Erreur","Réussi !","Stop","Paramètres","Pseudos");
  171. text1=" Copiez ces données dans un fichier TXT pour les conserver.<br/>Collez vos données pour les restaurer.<br/>Attention les données existantes seront perdues, pensez à les fusionner si nécessaire.";
  172. text2=" Écrivez les pseudos avec qui vous souhaitez partager le favoris. Le séparateur se mettra automatiquement.";
  173. 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.";
  174. tset = new Array("Appliquer le zoom","Appliquer les calques","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");
  175. }
  176. else {
  177. lang = new Array("Bookmarks","Friends's Sharing","Sharing ","Historic","Backup / Restore","Synchronization","Name","Server","Submit","Cancel","Add","Delete","Share","Relocate","Comment","Change","Unnamed","Search for an address, place or permalink","Let's Go !","Error","Success !","Stop","Settings","Nicknames");
  178. text1=" Copy data into a TXT file to preserve them.<br/>Paste your data to restore them.<br/>Please note existing data will be lost, think about merge them if necessary.";
  179. text2=" Write the nick you want to share the bookmark. The separator will be inserted automatically";
  180. 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.";
  181. tset = new Array("Apply Zoom","Apply Layers","Auto change Server (usa/intl)","Synchro with script server","Clear local storage data","Clear script server data","Sort : Bookmark more recent on top");
  182. }
  183.  
  184. // Then running
  185. BKMmapSearch.placeholder = lang[17];
  186. BKMmapSearch.onpaste=getFunctionWithArgs(BKMPastePerma, []);
  187. BKMcountryActive = BKMWaze.model.countries.top.name;
  188. BKMTableCountries();
  189. BKMcss();
  190. BKMMainhtml();
  191. }
  192. function BKMTableCountries() {
  193. countries = new Array();
  194. if (localStorage.getItem("WMEBookmarks")) {
  195. var tmp = JSON.parse(localStorage.getItem("WMEBookmarks"));
  196. for (var i=0; tmp[i]; i++) {
  197. var pays = tmp[i].country;
  198. if (countries.indexOf(pays) == -1) { countries.push(pays); }
  199. }
  200. }
  201. countriesS = new Array();
  202. if (localStorage.getItem("WMEBookmarksShared")) {
  203. var tmp=JSON.parse(localStorage.getItem("WMEBookmarksShared"));
  204. for (var i=0; tmp[i]; i++) {
  205. var pays=tmp[i].country;
  206. if (countriesS.indexOf(pays) == -1) { countriesS.push(pays); }
  207. }
  208. }
  209. if (debug) { console.log("WME Bookmarks : All Countries listed"); }
  210. }
  211. function BKMcss() {
  212. var Scss = document.createElement("style");
  213. Scss.type = "text/css";
  214. var css =".BKMbutton {height:24px;border:1px solid #93C4D3;padding:3px;cursor:pointer;}";
  215. css +=".BKMbutton2 {padding:2px;margin-top:48px;height:30px;width:30px;background-color:rgba(0,0,0,0.6);border-radius:5px;cursor:pointer;}";
  216. css +="#BKMbutton2Icon {height:30px;opacity:0.75;background:url("+icon_addlinkmap+") no-repeat 0 0;}";
  217. css +="#BKMcontent {box-shadow: 0 4px 10px #aaa;}";
  218. css +=".BKMbuttonSync {font-size:12px;font-weight:bold;text-align:center;padding:6px 8px;border-radius:5px;border:2px solid #3d3d3d;background-color:#BEDCE5;cursor:pointer;}";
  219. css +=".BKMbuttonSync:hover {background-color:#93C4D3;}";
  220. css +=".divEntete {clear:both;height:28px;padding-left:5px;font-weight:bold;border:2px solid #3d3d3d;background-color:#BEDCE5;}";
  221. css +=".divEnteteNom {float:left;text-align:left;vertical-align:bottom;}";
  222. css +=".divEntetePays {float:right;}";
  223. css +="#SelectCountry, #SelectCountryS {height:22px;background-color:#BEDCE5;border:0;}";
  224. css +=".divBKM {clear:both;line-height:21px;height:24px;border:1px solid #3d3d3d;border-top:0;}";
  225. css +=".divName {float:left;text-align:left;padding-left:5px;}";
  226. css +=".divSuppr {float:right;width:20px;}";
  227. css +=".divSuppr img {height:16px;}";
  228. css +="#BKMEdit {clear:both;display:none;margin-bottom:10px;height:133px;border:2px solid #3d3d3d;box-shadow: 0 4px 10px #aaa;}";
  229. css +="#divEditTitre {line-height:24px;height:24px;border-bottom:1px solid #3d3d3d;}";
  230. css +="#divEdit {float:left;width:50px;height:23px;text-align:left;padding-left:5px;font-weight:bold;background-color:#BEDCE5;}";
  231. css +="#divEditName {float:left;width:195px;height:23px;padding:0;padding-left:5px;border:0;margin:0;}";
  232. css +="#divComm {float:left;width:100%;line-height:24px;height:23px;padding-left:5px;text-align:left;font-weight:bold;background-color:#BEDCE5;border-bottom:1px solid #3d3d3d;}";
  233. css +="#divCommEdit {float:left;width:275px;height:81px;border:0;margin:0;padding:2px;resize:none;}";
  234. css +="#divBackuptxt, #divsettings_content {width:279px;min-height:150px;margin:2px 0 10px;resize:none;border:2px solid #3d3d3d;}";
  235. css +="#divSharetxt {float:left;width:275px;height:118px;resize:none;margin-bottom:5px;border:0;border-bottom:1px solid #3d3d3d;}";
  236. css +=".divComment {clear:both;position:relative;display:none;padding:0 0 3px 20px;text-align:left;background:#BEDCE5 url("+icon_comment+") no-repeat left top;border-bottom:1px solid #3d3d3d;}";
  237. css +=".BKMSync {padding: 5px 2px 25px;}";
  238. css +=".BKMSync img {height:16px;}";
  239. css +="#divbackup p, #BKMEdit p, #divsettings p {margin:0;line-height:20px;text-align:justify;padding:5px;font-size:11px;}";
  240. Scss.innerHTML = css;
  241. document.body.appendChild(Scss);
  242. }
  243. function BKMMainhtml() {
  244. //Create content in favorite's tab
  245. var newtab = document.createElement('li');
  246. newtab.innerHTML = "<a href='#sidepanel-bookmarks' data-toggle='tab' id='tab_bkm'><img style='width:16px;' title='"+ lang[0] +"' src='"+icon_signet+"' /> "+ lang[0] +"</a>";
  247. BKMhandleClass.appendChild(newtab);
  248.  
  249. var addon = document.createElement('section');
  250. addon.id = "bookmarks-addon";
  251.  
  252. // Bookmarks header
  253. 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"+ WMEF_Version + "</div>";
  254. content += "<div id='addBKMButton' style='float:right;height:26px;'><a href='#'><img class='BKMbutton' id='AddIcon' title='"+ lang[10] +"' src='"+icon_addlinkmap+"' /></a></div>";
  255. content += "<div style='clear:both;float:left;width:100%;margin:5px;'>";
  256. content += "<div style='float:left;width:34px;'><img id='icon_bookmarks' title='"+ lang[0] +"' src='"+icon_bookmarks+"' /></div>";
  257. content += "<div id='share_button' style='float:left;width:34px;'><img id='icon_share' title='"+ lang[1] +"' src='"+icon_noshare+"' /></div>";
  258. content += "<div style='float:left;width:34px;'><img id='icon_histo' title='"+ lang[3] +"' src='"+icon_nohisto+"' /></div>";
  259. content += "<div style='float:left;width:34px;'><img id='icon_backup' title='"+ lang[4] +"' src='"+icon_nobackup+"' /></div>";
  260. content += "<div style='float:left;width:34px;'><img id='icon_settings' title='"+ lang[22] +"' src='"+icon_nosettings+"' /></div>";
  261. content += "</div><div style='clear:both;'></div><div id='BKMEdit'></div>"; // Edit and Share containers
  262. content += "<div id='BKMcontent'>"; // Principal container
  263.  
  264. // Bookmarks tab
  265. content += "<div id='divbookmarks' style='margin-bottom:10px;visibility:hidden;'><div class='divEntete' id='divbookmarks_entete'>";
  266. content += "<div class='divEnteteNom'><img style='padding-right:3px;height:18px;' src='"+icon_bookmarks+"' />"+ lang[6] +"s</div>";
  267. content += "<div class='divEntetePays'><select type='text' name='Country' id='SelectCountry'></select></div>";
  268. content += "</div><div id='divbookmarks_content'></div></div>";
  269.  
  270. // Friends Share tab
  271. content += "<div id='divshare' style='margin-bottom:10px;visibility:hidden;'><div class='divEntete' id='divshare_entete'>";
  272. content += "<div class='divEnteteNom'><img style='padding:3px 3px 0 0;height:18px;' src='"+icon_share+"' />"+ lang[1] +"</div>";
  273. content += "<div class='divEntetePays'><select type='text' name='Country' id='SelectCountryS'></select></div>";
  274. content += "</div><div id='divshare_content'></div></div>";
  275.  
  276. // Historic tab
  277. content += "<div id='divhisto' style='margin-bottom:10px;visibility:hidden;'><div class='divEntete' id='divhisto_entete'>";
  278. content += "<div class='divEnteteNom'><img style='padding:3px 3px 0 0;height:18px;' src='"+icon_histo+"' />"+ lang[3] +"</div>";
  279. content += "</div><div id='divhisto_content'></div></div>";
  280.  
  281. // Backup tab
  282. content += "<div id='divbackup' style='margin-bottom:10px;visibility:hidden;'><div class='divEntete' id='divbackup_entete'>";
  283. content += "<div class='divEnteteNom'><img style='padding:3px 3px 0 0;height:18px;' src='"+icon_backup+"' />"+ lang[4] +"</div>";
  284. content += "<div class='divSuppr'><a href='#'><img id='BackupValid' title='"+ lang[4] +"' src='"+icon_valid+"' /></a></div>";
  285. content += "</div><div id='divbackup_content'><textarea id='divBackuptxt'></textarea><p><img title='Info' src='"+icon_info+"' />"+text1+"</p></div></div>";
  286.  
  287. // Settings tab
  288. content += "<div id='divsettings' style='margin-bottom:10px;visibility:hidden;'><div class='divEntete' id='divsettings_entete'>";
  289. content += "<div class='divEnteteNom'><img style='padding:3px 3px 0 0;height:22px;' src='"+icon_settings+"' />"+ lang[22] +"</div>";
  290. content += "</div><div id='divsettings_content' style='padding:3px;line-height:22px;'>";
  291. content += "<input type='checkbox' id='chk_sort' " + (BKMsettings_sort?' checked':'') + " /> "+ tset[6] +"<br />";
  292. content += "<input type='checkbox' id='chk_zoom' " + (BKMsettings_zoom?' checked':'') + " /> "+ tset[0] +"<br />";
  293. content += "<input type='checkbox' id='chk_layers' " + (BKMsettings_layers?' checked':'') + " /> "+ tset[1] +"<br />";
  294. content += "<input type='checkbox' id='chk_server' " + (BKMsettings_server?' checked':'') + " /> "+ tset[2] +"<br />";
  295. content += "<input type='checkbox' id='chk_synchro' " + (BKMsettings_synchro?' checked':'') + " /> "+ tset[3] +"<br />";
  296. content += "<input type='button' id='raz_button1' value='' style='height: 13px;' /> "+ tset[4] +"<br />";
  297. content += "<input type='button' id='raz_button2' value='' style='height: 13px;' /> "+ tset[5] +"<br />";
  298. content += "</div><p><img title='Info' src='"+icon_info+"' />"+text3+"</p></div></div>";
  299.  
  300. addon.innerHTML = content;
  301. addon.id = "sidepanel-bookmarks";
  302. addon.className = "tab-pane";
  303. BKMhandleClass2.appendChild(addon);
  304.  
  305. // Tabs actions
  306. select("SelectCountry"); select("SelectCountryS"); // Fill Countries Select
  307. bookmarks_toggle();
  308. getId('icon_bookmarks').onclick = getFunctionWithArgs(bookmarks_toggle,[]);
  309. getId('icon_share').onclick = getFunctionWithArgs(share_toggle,[]);
  310. getId('icon_histo').onclick = getFunctionWithArgs(histo_toggle,[]);
  311. getId('icon_backup').onclick = getFunctionWithArgs(backup_toggle,[]);
  312. getId('icon_settings').onclick = getFunctionWithArgs(settings_toggle,[]);
  313.  
  314. // Buttons actions
  315. getId('AddIcon').onclick = BKMInsertPermalink;
  316. getId('chk_sort').onclick = (function(){
  317. var bnew = new Object();
  318. if (getId('chk_sort').checked) { bnew.sort=true; } else { bnew.sort=false; }
  319. var tosave = '{"sort":'+bnew.sort+',"zoom":'+ BKMsettings_zoom +',"layers":'+ BKMsettings_layers +',"server":'+ BKMsettings_server +',"synchro":'+ BKMsettings_synchro +'}';
  320. localStorage.setItem('WMEBookmarksSettings', tosave);
  321. LoadSettings();
  322. });
  323. getId('chk_zoom').onclick = (function(){
  324. var bnew = new Object();
  325. if (getId('chk_zoom').checked) { bnew.zoom=true; } else { bnew.zoom=false; }
  326. var tosave = '{"sort":'+BKMsettings_sort+',"zoom":'+ bnew.zoom +',"layers":'+ BKMsettings_layers +',"server":'+ BKMsettings_server +',"synchro":'+ BKMsettings_synchro +'}';
  327. localStorage.setItem('WMEBookmarksSettings', tosave);
  328. LoadSettings();
  329. });
  330. getId('chk_layers').onclick = (function(){
  331. var bnew = new Object();
  332. if (getId('chk_layers').checked) { bnew.layers=true; } else { bnew.layers=false; }
  333. var tosave = '{"sort":'+BKMsettings_sort+',"zoom":'+ BKMsettings_zoom +',"layers":'+ bnew.layers +',"server":'+ BKMsettings_server +',"synchro":'+ BKMsettings_synchro +'}';
  334. localStorage.setItem('WMEBookmarksSettings', tosave);
  335. LoadSettings();
  336. });
  337. getId('chk_server').onclick = (function(){
  338. var bnew = new Object();
  339. if (getId('chk_server').checked) { bnew.server=true; } else { bnew.server=false; }
  340. var tosave = '{"sort":'+BKMsettings_sort+',"zoom":'+ BKMsettings_zoom +',"layers":'+ BKMsettings_layers +',"server":'+ bnew.server +',"synchro":'+ BKMsettings_synchro +'}';
  341. localStorage.setItem('WMEBookmarksSettings', tosave);
  342. LoadSettings();
  343. });
  344. getId('chk_synchro').onclick = (function(){
  345. var bnew = new Object();
  346. if (getId('chk_synchro').checked) {
  347. bnew.synchro=true;
  348. $('#icon_share').animate({width: '24px'},200);
  349. $('#share_button').animate({width: '34px'},250);
  350. } else {
  351. bnew.synchro=false;
  352. $('#icon_share').animate({width: '0'},200);
  353. $('#share_button').animate({width: '0'},250);
  354. }
  355. var tosave = '{"sort":'+bnew.synchro+',"zoom":'+ BKMsettings_zoom +',"layers":'+ BKMsettings_layers +',"server":'+ BKMsettings_server +',"synchro":'+ bnew.synchro +'}';
  356. localStorage.setItem('WMEBookmarksSettings', tosave);
  357. LoadSettings();
  358. });
  359. getId('raz_button1').onclick = (function(){
  360. var answer = window.confirm(tset[4] +" ?");
  361. if (answer){
  362. localStorage.setItem('WMEBookmarks', '[]');
  363. BKMTableCountries();
  364. select("SelectCountry");
  365. }
  366. });
  367. getId('raz_button2').onclick = (function(){
  368. var answer = window.confirm(tset[5] +" ?");
  369. if (answer){ Initbookmarks(); }
  370. });
  371. if (debug) { console.info("WME Bookmarks HTML loaded"); }
  372.  
  373. // Button on the map
  374. setTimeout(function() {
  375. var addnodebutton = document.createElement('div');
  376. addnodebutton.id="addnodebutton";
  377. addnodebutton.className="BKMbutton2";
  378. addnodebutton.innerHTML="<div id='BKMbutton2Icon'></div>";
  379. addnodebutton.onclick = BKMInsertPermalink;
  380. getElementsByClassName("olControlPanZoomBar olControlNoSelect")[0].appendChild(addnodebutton);
  381. addnodebutton.onmouseover=(function() { getId("BKMbutton2Icon").style.opacity="1"; });
  382. addnodebutton.onmouseout=(function() { getId("BKMbutton2Icon").style.opacity="0.75"; });
  383. } ,1000);
  384. if (BKMsettings_synchro == false) {
  385. $('#icon_share').animate({width: '0'},200);
  386. $('#share_button').animate({width: '0'},250);
  387. }
  388. // Routines
  389. BMKCheckAutoSave();
  390. BKMAddButtonIfLoad();
  391. BKMCheckActiveCountry();
  392. }
  393.  
  394. // ***************
  395. // ** BOOKMARKS **
  396. // ***************
  397. function Initbookmarks(){
  398. if (debug) { console.log("WME Bookmarks: Send: " + BKMUsername +" to init"); }
  399. var ret = GM_xmlhttpRequest( {
  400. method: "POST",
  401. url: "http://wmebookmarks.free.fr/?init=" + BKMUsername,
  402. headers: { "Content-Type": "text/plain; charset=UTF-8" },
  403. onload: function(r) {
  404. if (debug) { console.log("WME Bookmarks: Saving: " + r.responseText); }
  405. if (r.responseText != "Check") {
  406. getId('divbookmarks_entete').innerHTML="<div class='divEnteteNom'><img style='padding:3px 3px 0 0; height:18px;' src='"+icon_synchro+"' /><span style='color:red;'>"+ lang[19] +"</span></div>";
  407. } else {
  408. getId('divbookmarks_entete').innerHTML="<div class='divEnteteNom'><img style='padding:3px 3px 0 0; height:18px;' src='"+icon_synchro+"' /><span style='color:darkgreen;'>"+ lang[20] +"</span></div>";
  409. }
  410. },
  411. onerror: function(r) { if (debug) { console.log("WME Bookmarks: Error: " + r.responseText); } }
  412. } );
  413.  
  414. }
  415. function Getbookmarks(){
  416. var listfav= localStorage.getItem("WMEBookmarks");
  417. var ret = GM_xmlhttpRequest( {
  418. method: "GET",
  419. url: "http://wmebookmarks.free.fr/?getbookmarks2=" + BKMUsername,
  420. headers: { "Accept": "text/xml" },
  421. onload: function(r) {
  422. if (IsJsonString(r.responseText)) {
  423. console.log("WME Bookmarks: Not Sync (server) : " + r.responseText);
  424. if (listfav.replace(/%27/g,"'") != r.responseText && r.responseText && BKMsettings_synchro == true) {
  425. if (debug) { console.log("WME Bookmarks: Not Sync (local) : " + listfav.replace(/%27/g,"'")); }
  426. clearTimeout(timer); clearTimeout(timeradd);
  427. $('#addBKMButton').hide();
  428. $('addnodebutton').hide();
  429. getId('divbookmarks_entete').innerHTML="<div class='divEnteteNom'><img style='padding:3px 3px 0 0; height:18px;' src='"+icon_synchro+"' />"+ lang[5] +"</div><div class='divSuppr'><a href='#'><img id='SyncCancel' title='"+ lang[9] +"' src='"+icon_cancel+"' /></a></div>";
  430. if (r.responseText != "[]") { var servtopc = "<div id='serv2loc' class='BKMbuttonSync' style='float:left;'><img src='"+icon_server+"' alt='' /> "+ lang[7] +" > PC <img src='"+icon_home+"' alt='' /></div>"; } else { var servtopc=""; }
  431. getId('divbookmarks_content').innerHTML="<div class='BKMSync' style='clear:both; padding-bottom:20px;'><div class='BKMSync'>"+servtopc+"<div id='loc2serv' class='BKMbuttonSync' style='float:right;'><img src='"+icon_home+"' alt='' /> PC > "+ lang[7] +" <img src='"+icon_server+"' alt='' /></div></div>";
  432. if (r.responseText != "[]") { getId('serv2loc').onclick=getFunctionWithArgs(serv2loc, [r.responseText]); }
  433. getId('loc2serv').onclick=loc2serv;
  434. getId('SyncCancel').onclick=(function () {
  435. getId('divbookmarks_entete').innerHTML="<div class='divEnteteNom'><img style='padding-right:3px; height:18px;' src='"+icon_bookmarks +"' />"+ lang[6] +"s</div><div class='divEntetePays'><select type='text' name='Country' id='SelectCountry'></select></div>";
  436. BKMTableCountries();
  437. select("SelectCountry");
  438. BMKTestAutoSave();
  439. bookmarks_toggle();
  440. });
  441. } else {
  442. ReloadHTMLBookmarks();
  443. if (debug) { console.log("WME Bookmarks: Bookmarks Sync !"); }
  444. }
  445. } else {
  446. if (debug) { console.log("WME Bookmarks: Server not responding or data corrupted"); }
  447. clearTimeout(timer); clearTimeout(timeradd);
  448. $('#addBKMButton').hide();
  449. $('addnodebutton').hide();
  450. getId('divbookmarks_entete').innerHTML="<div class='divEnteteNom'><img style='padding:3px 3px 0 0; height:18px;' src='"+icon_synchro+"' />"+ lang[5] +"</div><div class='divSuppr'><a href='#'><img id='SyncCancel' title='"+ lang[9] +"' src='"+icon_cancel+"' /></a></div>";
  451. getId('divbookmarks_content').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>";
  452. getId('servhs').onclick=(function(){
  453. BKMsettings_synchro=false;
  454. var tosave = '{"zoom":'+ BKMsettings_zoom +',"layers":'+ BKMsettings_layers +',"server":'+ BKMsettings_server +',"synchro":'+ BKMsettings_synchro +'}';
  455. localStorage.setItem('WMEBookmarksSettings', tosave);
  456. LoadSettings();
  457. });
  458. }
  459. },
  460. onerror: function(r) { if (debug) { console.log("WME Bookmarks: " + r.responseText); } }
  461. } );
  462.  
  463. function serv2loc(data) {
  464. localStorage.setItem("WMEBookmarks", data);
  465. BKMAddButtonIfLoad();
  466. ReloadHTMLBookmarks();
  467. }
  468. function loc2serv() {
  469. getId('divbookmarks_content').innerHTML="";
  470. BKMPostBookmarks();
  471. }
  472. }
  473. function ReloadHTMLBookmarks() {
  474. var content = "<div class='divEnteteNom'><img style='padding-right:3px; height:18px;' src='"+icon_bookmarks+"' />"+ lang[6] +"s</div>";
  475. content += "<div class='divEntetePays'><select type='text' name='Country' id='SelectCountry'></select></div>";
  476. getId('divbookmarks_entete').innerHTML=content;
  477. select("SelectCountry");
  478. getId('SelectCountry').onchange = (function() { clearTimeout(timer); BKMCheckActiveCountry(); BKMcountryActive=getId('SelectCountry').value; getId('divbookmarks_content').innerHTML=""; LoadBookmarks("WMEBookmarks","divbookmarks_content"); });
  479. getId('divbookmarks_content').innerHTML="";
  480. LoadBookmarks("WMEBookmarks","divbookmarks_content");
  481. BKMTableCountries();
  482. select("SelectCountry");
  483. }
  484.  
  485. // ***************
  486. // ** SHARED **
  487. // ***************
  488. function PostNewShare(link,nicks){
  489. nicks = nicks.replace(BKMUsername+';','').replace(';;',';');
  490. if (debug) { console.log("WME Bookmarks: Send: " + BKMUsername +"@"+ link +"@"+ nicks); }
  491. var ret = GM_xmlhttpRequest( {
  492. method: "POST",
  493. url: "http://wmebookmarks.free.fr/?postshare=" + BKMUsername +"@"+ link +"@"+ nicks,
  494. headers: { "Content-Type": "text/plain; charset=UTF-8" },
  495. onload: function(r) {
  496. if (debug) { console.log("WME Bookmarks: Saving: " + r.responseText); }
  497. if (r.responseText != "Check") {
  498. getId('divbookmarks_entete').innerHTML="<div class='divEnteteNom'><img style='padding:3px 3px 0 0; height:18px;' src='"+icon_synchro+"' /><span style='color:red;'>"+ lang[19] +"</span></div>";
  499. setTimeout(Getbookmarks,1000);
  500. } else {
  501. getId('divbookmarks_entete').innerHTML="<div class='divEnteteNom'><img style='padding:3px 3px 0 0; height:18px;' src='"+icon_synchro+"' /><span style='color:darkgreen;'>"+ lang[20] +"</span></div>";
  502. BKMAddButtonIfLoad();
  503. var a= JSON.parse(localStorage.getItem("WMEBookmarks")), tosave="", bnew = new Object();
  504. for (var i=0; a[i]; i++) {
  505. bnew.country=a[i].country; bnew.name=a[i].name; bnew.coord=a[i].coord; bnew.comm=a[i].comm; bnew.share=a[i].share;
  506. var b = a[i].coord;
  507. if (b.indexOf(link) != -1) { bnew.share=nicks; }
  508. tosave = tosave + JSON.stringify(bnew,form) +",";
  509. }
  510. tosave = tosave.substring(0,tosave.length-1);
  511. if (debug) { console.log("WME Bookmarks : "+ tosave); }
  512. localStorage.setItem("WMEBookmarks", '['+tosave+']');
  513. setTimeout(ReloadHTMLBookmarks,1000);
  514. }
  515. },
  516. onerror: function(r) { if (debug) { console.log("WME Bookmarks: Error: " + r.responseText); } }
  517. } );
  518. }
  519. function GetShared(){
  520. var listfav= localStorage.getItem("WMEBookmarksShared");
  521. var ret = GM_xmlhttpRequest( {
  522. method: "GET",
  523. url: "http://wmebookmarks.free.fr/?getshared=" + BKMUsername,
  524. headers: { "Accept": "text/xml" },
  525. onload: function(r) {
  526. if (listfav.replace(/%27/g,"'") != r.responseText && r.responseText && BKMsettings_synchro === true) {
  527. if (debug) { console.log("WME Bookmarks: Not Sync (local) : " + listfav.replace(/%27/g,"'")); console.log("WME Bookmarks: Not Sync (server) : " + r.responseText); }
  528. localStorage.setItem("WMEBookmarksShared", r.responseText);
  529. ReloadHTMLShared();
  530. } else {
  531. ReloadHTMLShared();
  532. if (debug) { console.log("WME Bookmarks: Shared Sync !"); }
  533. }
  534. },
  535. onerror: function(r) { if (debug) { console.log("WME Bookmarks Shared: " + r.responseText); } }
  536. } );
  537. }
  538. function ReloadHTMLShared() {
  539. var content = "<div class='divEnteteNom'><img style='padding:3px 3px 0 0; height:18px;' src='"+icon_share+"' />"+ lang[1] +"</div>";
  540. content += "<div class='divEntetePays'><select type='text' name='Country' id='SelectCountryS'></select></div>";
  541. getId('divshare_entete').innerHTML=content;
  542. select("SelectCountryS");
  543. getId('SelectCountryS').onchange = (function() { clearTimeout(timer); BKMCheckActiveCountry(); BKMcountryActive=getId('SelectCountryS').value; getId('divshare_content').innerHTML=""; LoadBookmarks("WMEBookmarksShared","divshare_content"); });
  544. getId('divshare_content').innerHTML="";
  545. LoadBookmarks("WMEBookmarksShared","divshare_content");
  546. }
  547. function BKMHTMLShare(link, name, share) {
  548. clearTimeout(timer);
  549. $('#BKMEdit').slideDown(500);
  550. $('#BKMcontent').slideUp(1000);
  551. var content1 = "<div id='divEditTitre'><div id='divEdit' style='width:80px;'>"+ lang[12] +"</div><input type='text' id='divEditName' style='width:165px;' value='"+name.replace(/"/g,'&quot;')+"' readonly />";
  552. content1 += "<div class='divSuppr'><a href='#'><img id='ShareValid' margin-top:3px;' title='"+ lang[8] +"' src='"+icon_valid+"' /></a></div>";
  553. content1 += "</div><textarea id='divSharetxt'></textarea><p><img title='Info' src='"+icon_info+"' />"+text2+"</p>";
  554. getId('BKMEdit').innerHTML=content1;
  555. if (!share) { share = lang[23]; getId('divSharetxt').style.color="#aaa"; }
  556. getId('divSharetxt').onclick = (function() { if (getId('divSharetxt').value == lang[23]) { getId('divSharetxt').value=""; getId('divSharetxt').style.color="#000"; }});
  557. getId('divSharetxt').innerHTML=share;
  558. getId('divSharetxt').onkeyup = (function() {
  559. var t = getId('divSharetxt').value;
  560. if (t == "") { getId('divSharetxt').innerHTML=share; }
  561. getId('divSharetxt').value = t.replace(',',';').replace(' ',';').replace(';;',';');
  562. });
  563. getId('ShareValid').onclick = (function() {
  564. var nicks = getId('divSharetxt').value;
  565. if (nicks !== lang[23]) { PostNewShare(link,nicks); }
  566. $('#BKMcontent').slideDown(1000);
  567. $('#BKMEdit').slideUp(500);
  568. });
  569. }
  570.  
  571. // ***************
  572. // ** HISTORIC **
  573. // ***************
  574. function GetHisto() {
  575. LoadBookmarks("WMEHistoric","divhisto_content");
  576. }
  577.  
  578. // ***************
  579. // ** BACKUP **
  580. // ***************
  581. function BKMBackup() {
  582. var a=localStorage.getItem("WMEBookmarks"),tosave="";
  583. if (a) {
  584. a = JSON.parse(a);
  585. for (var i=0; a[i]; i++) { tosave = tosave + a[i].country +";"+ a[i].name +";"+ a[i].coord +";"+ a[i].comm +";"+ a[i].share +"\n"; }
  586. if (debug) { console.log("WME Bookmarks Backup : "+ tosave); }
  587. getId('divBackuptxt').innerHTML=tosave;
  588. getId('divBackuptxt').onclick=(function() {getId('divBackuptxt').focus(); getId('divBackuptxt').select(); });
  589. }
  590. getId('BackupValid').onclick=backup;
  591. function backup() {
  592. var tosave="";
  593. var a = getId('divBackuptxt').value;
  594. a = a.replace(/,/g,'&#44;').replace(/&/g,'|').replace(/\n/g,',').replace(/\<br\>/g,'&#13;');
  595. var b = a.split(',');
  596. for (var i=0; b[i]; i++) {
  597. var c = b[i].split(';');
  598. var data = {};
  599. data.country=c[0]; data.name=c[1]; data.coord=c[2]; data.comm=c[3]; data.share="";
  600. tosave=tosave + JSON.stringify(data)+",";
  601. }
  602. tosave = '['+tosave.substring(0,tosave.length-1)+']';
  603. if (debug) { console.log("WME Bookmarks Backup : "+ tosave); }
  604. BKMTableCountries();
  605. bookmarks_toggle();
  606. localStorage.setItem("WMEBookmarks", tosave);
  607. if (BKMsettings_synchro === true) { BKMPostBookmarks(); }
  608. }
  609. }
  610.  
  611. // ***************************
  612. // ** ACTIONS WITH BOOKMARK **
  613. // ****************************
  614. function BKMHTMLEditName(container,name,link,comment) { //Show Edit DIV
  615. clearTimeout(timer);
  616. $('#BKMEdit').slideDown(200);
  617. if (container =="divbookmarks_content") { getId('BKMEdit').style.height="133px"; }
  618. var content1 = "<div id='divEditTitre'><div id='divEdit'>"+ lang[6] +"</div><input type='text' id='divEditName' value='"+name.replace(/"/g,'&quot;')+"' />";
  619. content1 += "<div class='divSuppr'><a href='#'><img id='EditValid' margin-top:3px;' title='"+ lang[8] +"' src='"+icon_valid+"' /></a></div>";
  620. content1 += "</div><div id='divComm'>"+ lang[14] +"</div><textarea id='divCommEdit'>";
  621. if (comment === "") { content1 += ""; } else { content1 += comment.replace(/%27/g,"'").replace(/\<br\>/g,'&#13;'); }
  622. content1 += "</textarea>";
  623. getId('BKMEdit').innerHTML=content1;
  624. getId('divEditName').focus(); getId('divEditName').select();
  625. getId('EditValid').onclick = getFunctionWithArgs(BKMEditName, [container,link]);
  626. }
  627. function BKMEditName(container,link) { //Action after editing name or comment (DB)
  628. var newname = getId('divEditName').value;
  629. var newcomment = getId('divCommEdit').value.replace(new RegExp('(\r\n|\r|\n)', 'g'),'<br>').replace(/\'/g,'\%27').replace(/"/g,'&quot;');
  630. $('#BKMEdit').slideUp(200);
  631. if (debug) { console.info("WME Bookmarks New Values: "+newname+" "+newcomment); }
  632.  
  633. //Bookmarks list update
  634. if (getId('divbookmarks').style.visibility=="visible") {
  635. var a= JSON.parse(localStorage.getItem("WMEBookmarks")), tosave="";
  636. var bnew = new Object();
  637. for (var i=0; a[i]; i++) {
  638. bnew.country=a[i].country; bnew.name=a[i].name; bnew.coord=a[i].coord; bnew.comm=a[i].comm; bnew.share=a[i].share;
  639. var b = a[i].coord;
  640. if (b.indexOf(link) != -1) {
  641. bnew.name=newname; bnew.coord=link; bnew.comm=newcomment;
  642. if (debug) { console.info("WME Bookmarks New Values: Update Bookmark"); }
  643. if (BKMsettings_synchro === true) { BKMUpdateBookmarks("UPDATE",link,BKMUsername,"",newname,newcomment); }
  644. }
  645. tosave = tosave + JSON.stringify(bnew,form) +",";
  646. }
  647. tosave = tosave.substring(0,tosave.length-1);
  648. localStorage.setItem("WMEBookmarks", '['+tosave+']');
  649. }
  650.  
  651. //Sharing list update
  652. if (getId('divshare').style.visibility=="visible") {
  653. var a= JSON.parse(localStorage.getItem("WMEBookmarksShared")), tosave="";
  654. var bnew = new Object();
  655. var form = new Array("owner","country","name","coord","comm","share");
  656. for (var i=0; a[i]; i++) {
  657. bnew.owner=a[i].owner; bnew.country=a[i].country; bnew.name=a[i].name; bnew.coord=a[i].coord; bnew.comm=a[i].comm; bnew.share=a[i].share;
  658. var b = a[i].coord;
  659. if (b.indexOf(link) != -1) {
  660. bnew.name=newname; bnew.coord=link; bnew.comm=newcomment;
  661. if (debug) { console.info("WME Bookmarks New Values: Update Sharing"); }
  662. if (BKMsettings_synchro === true) { BKMUpdateBookmarks("UPDATE",link,a[i].owner,"",newname,newcomment); }
  663. }
  664. tosave = tosave + JSON.stringify(bnew,form) +",";
  665. }
  666. tosave = tosave.substring(0,tosave.length-1);
  667. localStorage.setItem("WMEBookmarksShared", '['+tosave+']');
  668. }
  669.  
  670. //Reload HTML
  671. BKMCheckActiveCountry();
  672. if (container == "divbookmarks_content") {
  673. getId('divbookmarks_content').innerHTML="";
  674. LoadBookmarks("WMEBookmarks","divbookmarks_content");
  675. } else {
  676. getId('divshare_content').innerHTML="";
  677. LoadBookmarks("WMEBookmarksShared","divshare_content");
  678. }
  679. }
  680. function BKMSuppr(name,id,container) { //Action after delete a bookmark (DB)
  681. clearTimeout(timer);
  682. var answer = window.confirm(lang[11] +" "+ name +" ?");
  683. if (answer){
  684. if (debug) { console.info("WME Bookmarks Suppr: "+id); }
  685. if (container == "divbookmarks_content") { // Suppr own bookmark
  686. var a= JSON.parse(localStorage.getItem("WMEBookmarks")), tosave="", bnew = new Object();
  687. for (var i=0; a[i]; i++) {
  688. bnew.country=a[i].country; bnew.name=a[i].name; bnew.coord=a[i].coord; bnew.comm=a[i].comm; bnew.share=a[i].share, b = a[i].coord;
  689. if (b.indexOf(id) == -1) { tosave = tosave + JSON.stringify(bnew,form) +","; }
  690. else { if (BKMsettings_synchro === true) { BKMUpdateBookmarks("DELETE",id,BKMUsername,"","",""); } }
  691. }
  692. tosave = tosave.substring(0,tosave.length-1);
  693. localStorage.setItem("WMEBookmarks", '['+tosave+']');
  694. getId('divbookmarks_content').innerHTML="";
  695. LoadBookmarks("WMEBookmarks","divbookmarks_content");
  696. } else { // Unshare a bookmark
  697. var a= JSON.parse(localStorage.getItem("WMEBookmarksShared")), tosave="", bnew = new Object();
  698. for (var i=0; a[i]; i++) {
  699. //[{"owner":"Jawel44","country":"France","name":"ZONE AM Châteaubriant","coord":"-1.53004|47.64863|0","comm":"","share":"Sebiseba"},
  700. bnew.owner=a[i].owner; bnew.country=a[i].country; bnew.name=a[i].name; bnew.coord=a[i].coord; bnew.comm=a[i].comm; bnew.share=a[i].share, b = a[i].coord;
  701. if (b.indexOf(id) == -1) { tosave = tosave + JSON.stringify(bnew,form) +","; }
  702. else { if (BKMsettings_synchro === true) { BKMUpdateBookmarks("UNSHARE",id,a[i].owner,"","",BKMUsername); } }
  703. }
  704. tosave = tosave.substring(0,tosave.length-1);
  705. localStorage.setItem("WMEBookmarksShared", '['+tosave+']');
  706. getId('divshare_content').innerHTML="";
  707. LoadBookmarks("WMEBookmarks","divshare_content");
  708. }
  709. getId('BKMEdit').style.display = "none";
  710. }
  711. BKMCheckActiveCountry();
  712. }
  713. function BKMLocate(id,name,icon_id) { // Action after relocate a bookmark (DB)
  714. getId("icon_relocate_"+icon_id).src=""+icon_relocate;
  715. clearTimeout(timer);
  716. var answer = window.confirm(lang[13]+" Lon/Lat/Zoom ? ("+name+")");
  717. if (answer){
  718. GetLink();
  719.  
  720. //Bookmarks list update
  721. if (getId('divbookmarks').style.visibility=="visible") {
  722. var a= JSON.parse(localStorage.getItem("WMEBookmarks")), tosave="", bnew = new Object();
  723. for (var i=0; a[i]; i++) {
  724. bnew.country=a[i].country; bnew.name=a[i].name; bnew.coord=a[i].coord; bnew.comm=a[i].comm; bnew.share=a[i].share;
  725. var b = a[i].coord;
  726. if (b.indexOf(id) != -1) {
  727. bnew.coord=link;
  728. if (BKMsettings_synchro === true) { BKMUpdateBookmarks("LOCATE",link,BKMUsername,"",id,""); }
  729. }
  730. tosave = tosave + JSON.stringify(bnew,form) +",";
  731. }
  732. tosave = tosave.substring(0,tosave.length-1);
  733. if (debug) { console.log("WME Bookmarks : "+ tosave); }
  734. localStorage.setItem("WMEBookmarks", '['+tosave+']');
  735. getId('divbookmarks_content').innerHTML="";
  736. LoadBookmarks("WMEBookmarks","divbookmarks_content");
  737. getId("icon_relocate_"+icon_id).src=""+icon_norelocate;
  738. }
  739.  
  740. //Sharing list update
  741. if (getId('divshare').style.visibility=="visible") {
  742. var a= JSON.parse(localStorage.getItem("WMEBookmarksShared")), tosave="", bnew = new Object();
  743. for (var i=0; a[i]; i++) {
  744. bnew.owner=a[i].owner; bnew.country=a[i].country; bnew.name=a[i].name; bnew.coord=a[i].coord; bnew.comm=a[i].comm; bnew.share=a[i].share;
  745. var b = a[i].coord;
  746. if (b.indexOf(id) != -1) {
  747. bnew.coord=link;
  748. if (BKMsettings_synchro === true) { BKMUpdateBookmarks("LOCATE",link,a[i].owner,"",id,""); }
  749. }
  750. tosave = tosave + JSON.stringify(bnew,form) +",";
  751. }
  752. tosave = tosave.substring(0,tosave.length-1);
  753. if (debug) { console.log("WME Bookmarks : "+ tosave); }
  754. localStorage.setItem("WMEBookmarksShared", '['+tosave+']');
  755. getId('divshare_content').innerHTML="";
  756. LoadBookmarks("WMEBookmarksShared","divshare_content");
  757. getId("icon_relocate_"+icon_id).src=""+icon_norelocate;
  758. }
  759. }
  760. else { getId("icon_relocate_"+icon_id).src=""+icon_norelocate; }
  761. BKMCheckActiveCountry();
  762. }
  763. function BKMInsertPermalink() { // Action when you add a new permalink (DB)
  764. BKMcountryActive = BKMWaze.model.countries.top.name;
  765. GetLink();
  766.  
  767. //Get name
  768. var town = getElementsByClassName("WazeControlLocationInfo olControlNoSelect")[0];
  769. var name = town.innerHTML.split(",");
  770. name = name[0].substring(6);
  771. if (!name) { name = lang[16]; }
  772. if (debug) { console.info("WME Bookmarks Add link: "+BKMcountryActive+" / "+name+" / "+link); }
  773.  
  774. //Add in HTML table
  775. var id = new Date().getTime();
  776. BKMTableHTML("divbookmarks_content",name,link,"","",9999);
  777. BKMHTMLEditName("divbookmarks_content",name,link,"");
  778.  
  779. //Add in memory
  780.  
  781. var exists = localStorage.getItem("WMEBookmarks"), bnew = new Object();
  782. bnew.country=BKMcountryActive; bnew.name=name; bnew.coord=link; bnew.comm=""; bnew.share="";
  783. var lenls=JSON.parse(exists);
  784. if (debug) { console.info("WME Bookmarks LStorage length: "+lenls); }
  785. if (lenls.length == 0) { var tosave = "["+ JSON.stringify(bnew,form) +"]"; }
  786. else {
  787. exists = exists.substring(0,exists.length-1);
  788. var tosave = exists +","+ JSON.stringify(bnew,form) +"]";
  789. }
  790. localStorage.setItem("WMEBookmarks", tosave);
  791. if (BKMsettings_synchro === true) { BKMUpdateBookmarks("ADD",link,BKMUsername,BKMcountryActive,name,""); }
  792.  
  793. //Reload Select list if new country
  794. if (countries.indexOf(BKMcountryActive) == -1) {
  795. BKMTableCountries();
  796. select("SelectCountry");
  797. }
  798. BKMWaze.selectionManager.unselectAll();
  799. getId('tab_bkm').click();
  800. }
  801. function BKMPastePerma() { // Action when you paste a permalink
  802. setTimeout(function(){
  803. var exp=new RegExp("/(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})","g");
  804. var a = BKMmapSearch.value;
  805. if (a.match(exp) && a.match(/lon/g) && a.match(/lat/g) && a.match(/zoom/g)) {
  806. BKMmapSearch.style.backgroundColor="#4d4d4d";
  807. BKMmapSearch.style.color="white";
  808. setTimeout(function(){ BKMmapSearch.value=lang[18]; }, 500);
  809. var segments="",nodes="",venues="";
  810. var b = a.substring(a.indexOf("https")).split('?');
  811. var c = b[1].split('&');
  812. for (i=0; c[i]; i++) {
  813. var d = c[i].split('=');
  814. if (d[0]=="lat") { var lat = d[1]; }
  815. if (d[0]=="lon") { var lon = d[1]; }
  816. if (d[0]=="zoom") { var zoom = d[1]; }
  817. if (d[0]=="layers") { var layers = "|"+ d[1]; }
  818. if (d[0]=="segments") { segments = "|s:"+ d[1]; }
  819. if (d[0]=="nodes") { nodes = "|n:"+ d[1]; }
  820. if (d[0]=="venues") { venues = "|v:"+ d[1]; }
  821. }
  822. link = lon+"|"+lat+"|"+zoom+layers+segments+nodes+venues
  823. if (debug) { console.log("WME Bookmarks link: " + link); }
  824.  
  825. //Reinit search-query
  826. setTimeout(function(){
  827. BKMmapSearch.value="";
  828. BKMmapSearch.style.backgroundColor="#FFFFFF";
  829. BKMmapSearch.style.color="#3d3d3d";
  830. BKMmapSearch.value="";
  831. }, 2000);
  832. BKMJump(link);
  833. BKMAddHisto(link);
  834. }
  835. }, 100);
  836. }
  837. function BKMJump(xy) { // Action when you click a link
  838. var coord=xy.split('|');
  839. if (debug) { console.log("WME Bookmarks Move to: "+coord[0]+" / "+coord[1]+" / Zoom: "+coord[2]+" / Layers: "+coord[3]+" / Objects: "+coord[4]); }
  840. var xy = OpenLayers.Layer.SphericalMercator.forwardMercator(parseFloat(coord[0]), parseFloat(coord[1]));
  841. unsafeWindow.Waze.map.setCenter(xy);
  842. if (BKMsettings_zoom) { unsafeWindow.Waze.map.zoomTo(coord[2]); }
  843. if (BKMsettings_server) { MAPloaded(); }
  844. if (BKMsettings_layers && coord[3]) { LAYERloaded(eval(coord[3])); }
  845.  
  846. //If segments
  847. if (coord[4]) { selobjects=coord[4]; ObjectsIsLoaded(); }
  848.  
  849. var BKMcountryActiveWME = BKMWaze.model.countries.top.name;
  850. BKMAddButtonIfLoad();
  851. getId('divbookmarks_content').innerHTML="";
  852. LoadBookmarks("WMEBookmarks","divbookmarks_content");
  853. }
  854. function BKMPostBookmarks(){ // Reinit DataBase (GM_xmlhttpRequest)
  855. var listfav= localStorage.getItem("WMEBookmarks");
  856. if (debug) { console.log("WME Bookmarks: Send: " + BKMUsername +"@"+listfav.replace(/&#13;/g,'<br>')); }
  857. var ret = GM_xmlhttpRequest( {
  858. method: "POST",
  859. url: "http://wmebookmarks.free.fr/?postbookmarks=" + BKMUsername +"@"+listfav.replace(/&#13;/g,'<br>'),
  860. headers: { "Content-Type": "text/plain; charset=ISO-8859-1" },
  861. onload: function(r) {
  862. if (debug) { console.log("WME Bookmarks: Saving: " + r.responseText); }
  863. if (r.responseText != "Check") {
  864. getId('divbookmarks_entete').innerHTML="<div class='divEnteteNom'><img style='padding:3px 3px 0 0; height:18px;' src='"+icon_synchro+"' /><span style='color:red;'>"+ lang[19] +"</span></div>";
  865. setTimeout(Getbookmarks,1000);
  866. } else {
  867. getId('divbookmarks_entete').innerHTML="<div class='divEnteteNom'><img style='padding:3px 3px 0 0; height:18px;' src='"+icon_synchro+"' /><span style='color:darkgreen;'>"+ lang[20] +"</span></div>";
  868. BKMAddButtonIfLoad();
  869. setTimeout(ReloadHTMLBookmarks,1000);
  870. }
  871. },
  872. onerror: function(r) { if (debug) { console.log("WME Bookmarks: Error: " + r.responseText); } }
  873. } );
  874. }
  875. function BKMUpdateBookmarks(action,link,owner,country,name,comment){ // Update DataBase (GM_xmlhttpRequest)
  876. if (debug) { console.log("WME Bookmarks: Send Update: "+action+"@"+link+"@"+owner+"@"+country+"@"+name+"@"+comment.replace(/&#13;/g,'<br>').replace(/\'/g,"\%27")); }
  877. var ret = GM_xmlhttpRequest( {
  878. method: "POST",
  879. url: "http://wmebookmarks.free.fr/?updatebookmarks="+action+"@"+link+"@"+owner+"@"+country+"@"+name+"@"+comment.replace(/&#13;/g,'<br>').replace(/\'/g,"\%27"),
  880. headers: { "Content-Type": "text/plain; charset=ISO-8859-1" },
  881. onload: function(r) {
  882. if (debug) { console.log("WME Bookmarks: Saving: " + r.responseText); }
  883. if (r.responseText != "Check") {
  884. getId('divbookmarks_entete').innerHTML="<div class='divEnteteNom'><img style='padding:3px 3px 0 0; height:18px;' src='"+icon_synchro+"' /><span style='color:red;'>"+ lang[19] +"</span></div>";
  885. setTimeout(Getbookmarks,1000);
  886. } else {
  887. getId('divbookmarks_entete').innerHTML="<div class='divEnteteNom'><img style='padding:3px 3px 0 0; height:18px;' src='"+icon_synchro+"' /><span style='color:darkgreen;'>"+ lang[20] +"</span></div>";
  888. BKMAddButtonIfLoad();
  889. setTimeout(ReloadHTMLBookmarks,1000);
  890. }
  891. },
  892. onerror: function(r) { if (debug) { console.log("WME Bookmarks: Error: " + r.responseText); } }
  893. } );
  894. }
  895.  
  896. // ****************
  897. // ** ROUTINES **
  898. // ****************
  899. function LoadBookmarks(storage,container) { //Fill HTML with localstorage
  900. var a= localStorage.getItem(storage);
  901. if (a) {
  902. a = JSON.parse(a);
  903. if (BKMsettings_sort) { a.reverse(); }
  904. getId(container).innerHTML="";
  905. for (var i=0; a[i]; i++) {
  906. if (container == "divhisto_content") { BKMHistoHTML(a[i].date,a[i].coord); }
  907. else if (a[i].country == BKMcountryActive) { BKMTableHTML(container,a[i].name,a[i].coord,a[i].comm,a[i].share,i); }
  908. }
  909. console.info("WME Bookmarks all ID loaded, script ready ");
  910. }
  911. else { console.info("WME Bookmarks no ID to load, script ready"); }
  912. }
  913. function BKMAddButtonIfLoad() { //Show Pin if WME (permalink) is ready
  914. var a = getElementsByClassName("WazeControlPermalink")[0].innerHTML;
  915. if (!a.match(/lon/g)) {
  916. $('#addBKMButton').hide();
  917. $('addnodebutton').hide();
  918. setTimeout(BKMAddButtonIfLoad, 500);
  919. return;
  920. }
  921. $('#addBKMButton').show();
  922. $('addnodebutton').show();
  923. timeradd = setTimeout(BKMAddButtonIfLoad, 2000);
  924. }
  925. function BKMCheckActiveCountry() { // Check Country and update select
  926. var BKMcountryActiveWME = BKMWaze.model.countries.top.name;
  927. if (BKMcountryActive != BKMcountryActiveWME) {
  928. if (debug) { console.log("WME Bookmarks Country changed : "+ BKMcountryActive+"* / *"+BKMcountryActiveWME+"*"); }
  929. BKMcountryActive = BKMcountryActiveWME;
  930. select("SelectCountry"); select("SelectCountryS");
  931. LoadBookmarks("WMEBookmarks","divbookmarks_content"); LoadBookmarks("WMEBookmarksShared","divshare_content");
  932. getId('SelectCountry').onchange = (function() { clearTimeout(timer); BKMCheckActiveCountry(); BKMcountryActive=getId('SelectCountry').value; getId('divbookmarks_content').innerHTML=""; LoadBookmarks("WMEBookmarks","divbookmarks_content"); });
  933. getId('SelectCountryS').onchange = (function() { clearTimeout(timer); BKMCheckActiveCountry(); BKMcountryActive=getId('SelectCountryS').value; getId('divshare_content').innerHTML=""; LoadBookmarks("WMEBookmarksShared","divshare_content"); });
  934. }
  935. timer = setTimeout(BKMCheckActiveCountry, 6000);
  936. }
  937. function BMKCheckAutoSave(){ //Show shared if sync with server
  938. if (BKMsettings_synchro === true) { $('#icon_share').animate({width: '24px'},200); }
  939. else { $('#icon_share').animate({width: '0'},200); }
  940. }
  941. function BMKTestAutoSave(){ //Toggle sync
  942. var bnew = new Object();
  943. if (BKMsettings_synchro === true) { bnew.synchro=false; } else { bnew.synchro=true; }
  944. var tosave = '{"zoom":'+ BKMsettings_zoom +',"layers":'+ BKMsettings_layers +',"server":'+ BKMsettings_server +',"synchro":'+ bnew.synchro +'}';
  945. localStorage.setItem('WMEBookmarksSettings', tosave);
  946. LoadSettings();
  947. BMKCheckAutoSave();
  948. Getbookmarks();
  949. BKMAddButtonIfLoad();
  950. }
  951. function BKMTableHTML(container,name,link,comment,share,i) { // Bookmarks & Share table (HTML);
  952. var div = document.createElement('div'); div.className="divBKM"; div.id=container+i;
  953.  
  954. //NAME
  955. var divname = document.createElement('div'); divname.className="divName";
  956. var divnamea = document.createElement('a'); divnamea.href = "#"; divnamea.innerHTML="<b>"+name.substring(0,26)+"</b>";
  957. divnamea.onclick = getFunctionWithArgs(BKMJump, [link]);
  958. if (comment) {
  959. divnamea.onmouseover = (function() {
  960. getId(container+i).style.backgroundColor="#BEDCE5";
  961. getId(container+i).style.borderBottom="1px dashed #77aacc";
  962. getId(container+"_Comm_"+i).style.display="block";
  963. });
  964. divnamea.onmouseout = (function() {
  965. getId(container+i).style.backgroundColor="#FFFFFF";
  966. getId(container+i).style.borderBottom="1px solid #3d3d3d";
  967. getId(container+"_Comm_"+i).style.display="none";
  968. });
  969. }
  970. divname.appendChild(divnamea);
  971. div.appendChild(divname);
  972.  
  973. // SUPPR
  974. var divsuppr = document.createElement('div');
  975. divsuppr.className="divSuppr";
  976. var divsuppra = document.createElement('a');
  977. if (container == "divshare_content") { divsuppra.innerHTML="<img title='"+ lang[21] +"' src='"+icon_share+"' />"; }
  978. else { divsuppra.innerHTML="<img title='"+ lang[11] +"' src='"+icon_delete+"' />"; }
  979. divsuppra.href = "#";
  980. divsuppra.onclick = getFunctionWithArgs(BKMSuppr, [name, link, container]);
  981. divsuppr.appendChild(divsuppra);
  982. div.appendChild(divsuppr);
  983.  
  984. // SHARE
  985. if (container == "divbookmarks_content" && BKMsettings_synchro === true) {
  986. var divshare = document.createElement('div');
  987. divshare.className="divSuppr";
  988.  
  989. var divsharea = document.createElement('a');
  990. if (share) { divsharea.innerHTML="<img title='"+ share.replace(';',' ') +"' src='"+icon_share+"' />"; }
  991. else { divsharea.innerHTML="<img title='"+ lang[12] +"' src='"+icon_noshare+"' />"; }
  992. divsharea.href = "#";
  993. divsharea.onclick = (function(){
  994. getId('BKMEdit').style.height="225px";
  995. BKMHTMLShare(link, name, share);
  996. });
  997. divshare.appendChild(divsharea);
  998. div.appendChild(divshare);
  999. }
  1000.  
  1001. // RELOCATE
  1002. var divlocate = document.createElement('div');
  1003. divlocate.className="divSuppr";
  1004.  
  1005. var divlocatea = document.createElement('a');
  1006. divlocatea.innerHTML="<img title='"+ lang[13] +"' id='icon_relocate_"+i+"' src='"+icon_norelocate+"' />";
  1007. divlocatea.href = "#";
  1008. divlocatea.onclick = getFunctionWithArgs(BKMLocate, [link, name, i]);
  1009. divlocate.appendChild(divlocatea);
  1010. div.appendChild(divlocate);
  1011.  
  1012. // COMMENT
  1013. var divcomment = document.createElement('div');
  1014. divcomment.className="divSuppr";
  1015. var divcommenta = document.createElement('a');
  1016. if (comment === "") { divcommenta.innerHTML="<img title='"+ lang[10] +"' src='"+icon_nocomment+"' />"; }
  1017. else { divcommenta.innerHTML="<img title='"+comment.replace(/%27/g,'&apos;').replace(/"/g,'&quot;').replace(/\<br\>/g,'&#13;')+"' src='"+icon_comment+"' />"; }
  1018. divcommenta.href = "#";
  1019. divcommenta.onclick = (function(){
  1020. getId('BKMEdit').style.height="133px";
  1021. BKMHTMLEditName(container,name,link,comment);
  1022. });
  1023. if (comment) {
  1024. divcommenta.onmouseover = (function() {
  1025. getId(container+i).style.backgroundColor="#BEDCE5";
  1026. getId(container+i).style.borderBottom="1px dashed #77aacc";
  1027. getId(container+"_Comm_"+i).style.display="block";
  1028. });
  1029. divcommenta.onmouseout = (function() {
  1030. getId(container+i).style.backgroundColor="#FFFFFF";
  1031. getId(container+i).style.borderBottom="1px solid #3d3d3d";
  1032. getId(container+"_Comm_"+i).style.display="none";
  1033. });
  1034. }
  1035. divcomment.appendChild(divcommenta);
  1036. div.appendChild(divcomment);
  1037.  
  1038. var divseecomment = document.createElement('div');
  1039. divseecomment.className="divComment";
  1040. divseecomment.id=container+"_Comm_"+i;
  1041. divseecomment.innerHTML=comment.replace(/%27/g,'&apos;').replace(/"/g,'&quot;').replace(/\<br\>/g,'&#13;');
  1042. div.appendChild(divseecomment);
  1043. getId(container).appendChild(div);
  1044. }
  1045. function BKMHistoHTML(date,link) { // Historic table (HTML)
  1046. var div = document.createElement('div'); div.className="divBKM";
  1047. var divname = document.createElement('div'); divname.className="divName";
  1048. var divnamea = document.createElement('a'); divnamea.href = "#"; divnamea.innerHTML="<b>"+date+"</b>";
  1049. divnamea.onclick = getFunctionWithArgs(BKMJump, [link]);
  1050. divname.appendChild(divnamea);
  1051. div.appendChild(divname);
  1052. getId("divhisto_content").appendChild(div);
  1053. }
  1054. function select(selectlist){ // Fill select
  1055. //Add countries in select
  1056. BKMcountryActive = BKMWaze.model.countries.top.name;
  1057. var CSelect = getId(selectlist);
  1058. CSelect.innerHTML="";
  1059. for (k=0; countries[k]; k++) {
  1060. var CList = document.createElement('option');
  1061. CList.value = countries[k];
  1062. CList.text = countries[k];
  1063. if (countries[k] == BKMcountryActive) CList.selected = true;
  1064. CSelect.appendChild(CList);
  1065. }
  1066.  
  1067. //If country not listed
  1068. var a = countries.indexOf(BKMcountryActive);
  1069. if (a == -1) {
  1070. var CList = document.createElement('option');
  1071. CList.value = BKMcountryActive;
  1072. CList.text = BKMcountryActive;
  1073. CList.selected = true;
  1074. CSelect.appendChild(CList);
  1075. }
  1076. }
  1077. function MAPloaded() { // Test map server and change it if necessary
  1078. var loaded = Waze.map.controls[5].pending;
  1079. if(loaded.length !== 0){
  1080. window.setTimeout(MAPloaded, 500);
  1081. return;
  1082. }
  1083. if (BKMWaze.model.locations[0] != BKMWaze.location.code) {
  1084. BKMlocation.change(BKMWaze.model.locations[0]);
  1085. BKMWaze.map.mapState.updateMapLocation();
  1086. window.location.reload(!0);
  1087. }
  1088. }
  1089. function LAYERloaded(layers) { // Load layers when jump
  1090. var num = layers.toString(2);
  1091. num = num.split("").reverse().join("");
  1092. for (var i=0; i <12; i++) {
  1093. switch (i) {
  1094. case 0: LAYERcheck(0,num.charAt(i)); break; //SatelliteImagery
  1095. case 1: LAYERcheck(1,num.charAt(i)); break; //Cities
  1096. case 2: LAYERcheck(2,num.charAt(i)); break; //Roads
  1097. case 3: LAYERcheck(4,num.charAt(i)); break; //GPSpoints
  1098. case 4: LAYERcheck(6,num.charAt(i)); break; //AreaManagers
  1099. case 5: LAYERcheck(7,num.charAt(i)); break; //Places
  1100. case 6: LAYERcheck(11,num.charAt(i)); break; //Speedcameras
  1101. case 7: LAYERcheck(13,num.charAt(i)); break; //MapProblems
  1102. case 8: LAYERcheck(14,num.charAt(i)); break; //UpdateRequests
  1103. case 9: LAYERcheck(16,num.charAt(i)); break; //EditableAreas
  1104. case 10: LAYERcheck(99,num.charAt(i)); break; //LiveUsers (layer may change)
  1105. }
  1106. }
  1107. function LAYERcheck(index,idx) {
  1108. if (index==99) { for (var i=20; i<99; i++) { if (BKMmap.controls[0].map.layers[i].options.uniqueName == "live_users") { index=i; break; } } } //Find LiveUsers
  1109. var layerName = BKMmap.controls[0].map.layers[index].name;
  1110. if (debug) { console.log("WME Bookmarks Layers : "+layerName+" / "+idx); }
  1111. if (idx==1) { BKMmap.controls[0].map.layers[index].setVisibility(true); }
  1112. else { BKMmap.controls[0].map.layers[index].setVisibility(false); }
  1113. }
  1114. }
  1115. function BKMAddHisto(link) { // Add link in historic
  1116. var form = new Array("date","coord"), date = new Date().toLocaleString(), exists = localStorage.getItem("WMEHistoric"), bnew = new Object();
  1117.  
  1118. var a=JSON.parse(exists), b=new Object();
  1119. b.date=date; b.coord=link; a.push(b);
  1120. var l=a.length-30, c=[];
  1121. for (i=l; i<a.length; i++) { if (a[i]) { c.push(a[i]); } }
  1122. var t=JSON.stringify(c);
  1123. localStorage.setItem("WMEHistoric", t);
  1124. GetHisto();
  1125. }
  1126.  
  1127. function ObjectsIsLoaded() {
  1128. var Objectslist=[];
  1129. var sellist=selobjects.substring(2);
  1130. if (selobjects.substring(0,1) == "s") {
  1131. var idobj = sellist.split(',');
  1132. for (var i=0; idobj[i]; i++) {
  1133. var obj = BKMWaze.selectionManager.model.segments.objects[parseInt(idobj[i])];
  1134. if (typeof obj === "undefined") {
  1135. count++;
  1136. if (debug) { console.info("LOOP ("+count+"): try to catch :" + sellist); }
  1137. if (count==10) { alert('Segments not found'); return; }
  1138. setTimeout(ObjectsIsLoaded, 500);
  1139. return;
  1140. }
  1141. else {
  1142. if (debug) { console.info("LOOP : found :" + parseInt(idobj[i])); }
  1143. Objectslist.push(obj);
  1144. count=0;
  1145. }
  1146. }
  1147. }
  1148. if (selobjects.substring(0,1) == "n") {
  1149. var obj = BKMWaze.selectionManager.model.nodes.objects[parseInt(sellist)];
  1150. if (typeof obj === "undefined") {
  1151. count++;
  1152. if (debug) { console.info("LOOP ("+count+"): try to catch :" + sellist); }
  1153. if (count==10) { alert('Node not found'); return; }
  1154. setTimeout(ObjectsIsLoaded, 500);
  1155. return; }
  1156. else {
  1157. if (debug) { console.info("LOOP : found :" + parseInt(sellist)); }
  1158. Objectslist.push(obj);
  1159. count=0;
  1160. }
  1161. }
  1162. if (selobjects.substring(0,1) == "v") {
  1163. var obj = BKMWaze.selectionManager.model.venues.objects[sellist];
  1164. if (typeof obj === "undefined") {
  1165. count++;
  1166. console.info("LOOP ("+count+"): try to catch :" + sellist);
  1167. if (count==10) { alert('Venue not found'); return; }
  1168. setTimeout(ObjectsIsLoaded, 500);
  1169. return;
  1170. }
  1171. else {
  1172. if (debug) { console.info("LOOP : found :" + sellist); }
  1173. Objectslist.push(obj);
  1174. count=0;
  1175. }
  1176. }
  1177. selobjects="";
  1178. BKMWaze.selectionManager.select(Objectslist);
  1179. }
  1180.  
  1181. // ***********************
  1182. // ** ANIMATE FUNCTIONS **
  1183. // ***********************
  1184. function bookmarks_toggle() {
  1185. $('#divbookmarks').css('visibility','visible');
  1186. $('#BKMcontent').css('display','block');
  1187. $('#divbookmarks').slideDown();
  1188. $('#divshare').slideUp();
  1189. $('#divhisto').slideUp();
  1190. $('#divbackup').slideUp();
  1191. $('#divsettings').slideUp();
  1192. $('#BKMEdit').slideUp(200);
  1193. $('#icon_bookmarks').attr("src",""+icon_bookmarks);
  1194. $('#icon_share').attr("src",""+icon_noshare);
  1195. $('#icon_histo').attr("src",""+icon_nohisto);
  1196. $('#icon_backup').attr("src",""+icon_nobackup);
  1197. $('#icon_settings').attr("src",""+icon_nosettings);
  1198. Getbookmarks();
  1199. }
  1200. function share_toggle() {
  1201. $('#divshare').css('visibility','visible');
  1202. $('#BKMcontent').css('display','block');
  1203. $('#divbookmarks').slideUp();
  1204. $('#divshare').slideDown();
  1205. $('#divhisto').slideUp();
  1206. $('#divbackup').slideUp();
  1207. $('#divsettings').slideUp();
  1208. $('#BKMEdit').slideUp(200);
  1209. $('#icon_bookmarks').attr("src",""+icon_nobookmarks);
  1210. $('#icon_share').attr("src",""+icon_share);
  1211. $('#icon_histo').attr("src",""+icon_nohisto);
  1212. $('#icon_backup').attr("src",""+icon_nobackup);
  1213. $('#icon_settings').attr("src",""+icon_nosettings);
  1214. GetShared();
  1215. }
  1216. function histo_toggle() {
  1217. $('#divhisto').css('visibility','visible');
  1218. $('#BKMcontent').css('display','block');
  1219. $('#divbookmarks').slideUp();
  1220. $('#divshare').slideUp();
  1221. $('#divhisto').slideDown();
  1222. $('#divbackup').slideUp();
  1223. $('#divsettings').slideUp();
  1224. $('#BKMEdit').slideUp(200);
  1225. $('#icon_bookmarks').attr("src",""+icon_nobookmarks);
  1226. $('#icon_share').attr("src",""+icon_noshare);
  1227. $('#icon_histo').attr("src",""+icon_histo);
  1228. $('#icon_backup').attr("src",""+icon_nobackup);
  1229. $('#icon_settings').attr("src",""+icon_nosettings);
  1230. GetHisto();
  1231. }
  1232. function backup_toggle() {
  1233. $('#divbackup').css('visibility','visible');
  1234. $('#BKMcontent').css('display','block');
  1235. $('#divbookmarks').slideUp();
  1236. $('#divshare').slideUp();
  1237. $('#divhisto').slideUp();
  1238. $('#divbackup').slideDown();
  1239. $('#divsettings').slideUp();
  1240. $('#BKMEdit').slideUp(200);
  1241. $('#icon_bookmarks').attr("src",""+icon_nobookmarks);
  1242. $('#icon_share').attr("src",""+icon_noshare);
  1243. $('#icon_histo').attr("src",""+icon_nohisto);
  1244. $('#icon_backup').attr("src",""+icon_backup);
  1245. $('#icon_settings').attr("src",""+icon_nosettings);
  1246. BKMBackup();
  1247. }
  1248. function settings_toggle() {
  1249. $('#divsettings').css('visibility','visible');
  1250. $('#BKMcontent').css('display','block');
  1251. $('#divbookmarks').slideUp();
  1252. $('#divshare').slideUp();
  1253. $('#divhisto').slideUp();
  1254. $('#divbackup').slideUp();
  1255. $('#divsettings').slideDown();
  1256. $('#BKMEdit').slideUp(200);
  1257. $('#icon_bookmarks').attr("src",""+icon_nobookmarks);
  1258. $('#icon_share').attr("src",""+icon_noshare);
  1259. $('#icon_histo').attr("src",""+icon_nohisto);
  1260. $('#icon_backup').attr("src",""+icon_nobackup);
  1261. $('#icon_settings').attr("src",""+icon_settings);
  1262. LoadSettings();
  1263. }
  1264.  
  1265. /* begin running the code! */
  1266. BKM_bootstrap();