WME Open Other Maps

Links for opening external resources at the WME location and WME from external resources

当前为 2018-02-21 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WME Open Other Maps
  3. // @namespace https://greasyfork.org/users/30701-justins83-waze
  4. // @version 2018.02.21.01
  5. // @description Links for opening external resources at the WME location and WME from external resources
  6. // @author JustinS83
  7. // @include https://www.waze.com/editor*
  8. // @include https://www.waze.com/*/editor*
  9. // @include https://beta.waze.com*
  10. // @include https://www.google.com/maps*
  11. // @include *wv511.org/*
  12. // @include http://www.511virginia.org/mobile/?menu_id=incidents
  13. // @exclude https://www.waze.com/user/editor*
  14. // @require https://greasyfork.org/scripts/24851-wazewrap/code/WazeWrap.js
  15. // @require https://greasyfork.org/scripts/13097-proj4js/code/Proj4js.js
  16. // @grant none
  17. // ==/UserScript==
  18.  
  19. (function() {
  20. 'use strict';
  21. //var jqUI_CssSrc = GM_getResourceText("jqUI_CSS");
  22. //GM_addStyle(jqUI_CssSrc);
  23.  
  24. var settings = {};
  25. var gmapsIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHiSURBVDhPY/hPCPx+9eLjtg3vVy/9evr4vz9/IIIEtL1fteSev9NdbzsIepwV/+v5U6A4SNvR59fW3TuGic5uXATXAEePMuOAdjIA9SguScKKtsS5AdXd8bZbbGEw0Uj7mLMFRCfQtQxr7h4FqnDZWLX37tmTD68m7emHazsX5AhUdMbVqkFXHYjmmulBtH3YsBqq7fD9i+6baoxW5VmuLVJemgLRtiPWFajotpfdbDO9TgPNA07mEG1fjh+Garv45Lby0uTp5zfffP4gaFsLRFtRXRBEHTJ6EBv07+dPqLbe02tWXt3fdHzJqYfXNJdnAEW0liUeOe39KM0eTdvnQ3tBIQnRBkRROzvzD0w3WJUL0XP0nPffO87fDrveQYqAJ211oGhB1gZHcD1/brtdOTX7XE8bRM+tMK9bFy9g1wbX8/d+4M9PV06dOnXowIGbMYFAbWcn9d68eROLNrien7fc3r+9CpT+8eMHUOe5vo7bIR6H9+/Dog1ZT9v8udnTzr799BOi89zO7VeKsw8dOoSuDU1PYMtRIELo/P798uL56Nqw6kHXCXYtQtu2+4dx6YEgZJ0PHz6Eavv7+QAePRAE1wkHDP///fr3du7RM1smbbqNB605+vgfVMv/////AwB1kYZCu5TA6gAAAABJRU5ErkJggg==";
  26. var mapillaryIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGPC/xhBQAAAatJREFUOE+tlFtLAkEUx/er9CEyA+sbRM9BH8EuWhL0oC8h9B7dFAIXoqe8RGgP9RDkipoSZkJpeQk1N8swldW108ywa3uZLKKFH7sz/3P+c2Z2Zhj8GPzmEYN3jh31mkvoLSDgBwQplsW5XyaHZl4T+HtwLjZDDVYnSiyGt8CdCVE1DSwjlUgTIViMQafXhekTB1WXwR64IuqaTASs0BQ60O9/wHEhqtM1CNiIJoCNcxGTJJ8DUezD7Nk6NU5GZ2RCldgiLsi8FCHXKIPJb4HHJg/h6o0qTsvACC9ssBBD02mTSrLIZCXiJtpqdA8SfBbGfQuqZCUDI1cmCO2uQEyunu9JZcpAe8wD5+UUjCn6lKimNhWyQyDPQU8UofxeBwdKljVLeJsMIlephbrYM6dOMnqqngdH3ANWbof0x2u38PBWpU6RaiSDE7AhruSydgcXlTT5diYPdLFDjWSWuV30ByvEBPPUasBkYEkVg41+c0hJdWuJfai2XonZZvpIqQtDjwgNvOM3rv1QQnvLKK2VfES+PbTDMPrmlW32/66RwZ2EXKVp/uFiY5hPR2AhGcMUotsAAAAASUVORK5CYII=";
  27. var terraIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAACSUlEQVQ4T6XUzW/SYBwHcLLEg8aTmVdv/gV6EJ6Wlj6FQV0NFhEQeRMGpmgW0BnjxlB8O0iixpdMmS5ZiB58iWMzvmRZFjfRbOyw+HryoIlZYjyRqLvsZwvPRGIHbH6T76F52s/T9tdU10qy2Wx7NBqVyOH/RRCE/YwRLXAdLIiiOOl0OreQpdUlHo9vt9lscwf26eHjOIKjU3fBcrwPDAiVWZZNFgqFDeTUxpFleaPJZDpjxmjpzhUEv95TsPiBgp7XD8A5PQv2eyPAuD1A0/S8JElGcpl2XEqU3b8mDhrgy8sqtNxlsNKpGbBlLwHCGDDGuXA4vIkQtQSDQZfQoYdnw6gO0gRJpacTwHXFQHnPbwlTSyAQCF49q42p1QLVikN5FfxEmFqagYdu9EHnwC2Qxp7XgZ0Dg2sDAx496PXVMi4PiLfzVfD6zdWDP5RJx2QEgpsC6x4ENGOowJbefth5+Vrr4Lc3NIy+MMG5xxj6R/k/TY3wELvAAi+iyt02BX8qnXzFwqmxGqLV1CMedofpxmD5HQXDE5wmoNXQSWZl8OJpBLnx1jG1K4J+v3+XzY6WErnWwWN5DIILgcPhmCFMfbxer8Vs5j/vPUzDifv1g/i76lACKUaZNlpECHUXi8X1hNBMm9VqzdB4R7nrPPsPlhjkwGJXPiFBmM1kMtvINc2j/Em28jw/rT7SkSEOeh9icHcbgaKp75FIpCedTreRU1tPqVRa5/P5ZCNDL7BmAyibPAmFQpvJ8tqTTCbblfeLyWGD6HS/AREwNmot2NXWAAAAAElFTkSuQmCC";
  28. var wikimapiaIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAACeklEQVQ4T5VUTWgTQRRebf2v9Te0m5nNJjuzaRuxl4LoQUMPCnoRKcWjUD14K+LFm+LFS6ngD57Eo6AXEdGDQsSDilQP2oOK6EHSmN2djaFYawrZfm+yYlpCbB88mJ33vW++997sGM0WDQ2tUzyzN2DynOJOwWeiGnL5OA6vzD5LuUFxcSVgohhwWQfZHL5fY30xhvzf6pxvUklxHyQ1xcQfkNzw2IAbSNkd2fbGGNbeYiWT8FrAxdfAkkciw1gbOs62kGUHg153IIa2txJ394HAC5gzD5LDRFJhYhj9eQplPxSTD2Joe1OWe5l6goTrROJx9xDKm1FcRuQgexJD2xuAb6mxZUuKes/gFqh7pIlXTyTmAZ6inlSZ4+L7y1+SVRHpBCae+7v6tipL7EHTvzcTIaagsNDsZStNA1kTsMxIY885QYpCnPrpZyq1Y6Y3bWP9YQnRMkd8zmPOURIRWnJC7yezJw3dEyYXAhMT0zdbXMXewnKCfy6mvFS/GeXznRjQRyierfT0pUEkx+BRyMUrmlrRzO4G+EUrEhz4m66GLivpnkIepi0elhO5LqOUymZQ3nsNZuJS0TQ3R7nc+pDJCwC+RPI0FL7Dvbrt29l+kHRgPYw9HwfOhpY4TsQGqQB4xGdOlQKKOdcC7jJ96k7ZTWtSeQ8E0ehoBzBncOA3UgMBN0u4MnpqZAUj30nMANCPWvOTooxbPhFa7kH8g1bjRXDGEX9DzW6UKe6WE4mumGKpAbQfgGeQ7en6m/rTcPFLt8GSZ6dRfpzW2iq2vR0qDoDoNBInMZk7IL6F9XmUfSw0nZTuyUqNelfHy0BPDD0lVH4camGGsQj+znJFw2F9rQAAAABJRU5ErkJggg==";
  29. var bingIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAAB70lEQVQ4T62TOUtDURCFn/uuiCIIojYWKhZi7y+w8S9obS1iYmJcUQIuQSsRQWy10SJErFxQ0UKwECxMXELAECMhhMQc51xzJS/kaaEXJu/lzcx3z70zYwD4F1M/1dPTqJqaAp8lTieKHA7UyHv295/MBKKVTU6id20NfevrKBZgZQZSlfFbmQlUK2aMj8N1dIREKoWt62s0zs2hwuXKm5xtJlDdzAwMmw02n48OROJxtLvdSiWP+dMRyTAryoDS6TQCkQhaFhfVfXGTWjGdmAs1gbQi++EhHQi8vaFzZQVN8/MosNthiFXKMRmXq5AMS5BfFPV4PDi4u8Pm1RUGtrfRIHfGGFaWORpGhiUo+P6O+tlZuI+P1X+um2AQy6en6F5dRanAdIvIsga9RKNoXlhAlySd+P2IJRLqO9eExLDCzPkV9CygNqmaMTqKjqUlXD49qbZIfnyoFlGgfIpyq/Ygd8TyD+/t4TYUQkoAaolvaHdXxTInvyLZhbKZ9BqL4TwQYND3unh8xODODsqlepZV04rGvF46TOs+HMbI/v7XZtIG1RlI3qrROA68YJuoCouieDIJz9kZWnlXsgn7SDempSLtKJeRYBIHt39jQyngmOgKMS4bQjOBdBCfTOL0F8p4UIHu5FyAtm/Q3w3GJ+jeRjZzKMG3AAAAAElFTkSuQmCC";
  30. var osmIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAAEAUlEQVQ4T32Ue0xTVwDGL1vYw7kty+YykJAtY2FuIYASgyzBGTNn1Lm4ZE83idPJssUZ1i0ukT8U2YZBNGGMAUJb2tIHUAqUR73lJX15y20F2gJFkL54tLS08hLd49tpQaPZ40u+nD/O+X73O+eee6m+kORldlZmMfqkDYxHnMWy5eus3u4X7MGeA9qpBq50+MKQyFZQr/cKs/qnBU9c8ys3WgOqT2yBDvlwsKuUul/GWWkvAcE4Wo0+b+3KUIgG42uG2iWBYqwMSmsp5L0S0IxmpdvUBxXThTptNWx+tQ9A1BqGgHySE4xXAsbKg8EhgNmnADMjR5uDB4GhBDqrBd6l25hdvoPpxRW452/BOhOErFMBs1v5yhqGimpiS9OZGQn0k0LoBypxdUoMk68eV8ZroDYZI+GwJxdW7bp5C8P+RZinQ/iprOLkGoeiWJfy4EioE9bAZQxOtcDkrkWXswpc9a+RYIA08RMHV34nrW5jIrSMfu98xA0ao3sNQ1GWuTaxNajCoL8Vg7MtMAxXQ2j7mYAkcJBQuEF4dNxcxo3gMgZ9C/dA2jEPUlMzYimAihoINHuII2dzzS5Dnb0Ichsfks4W2AOLkXDYo3NLBLIKuGvd+CSSk9M3Urxu3mOGyZpl44wMrEsKZkyILlcV6AkxqhrrMUCCQ/4FWO5rcdcj5CEqAzudkJDwaHhn0fRIBW2YroHeTt7amACmmWbQTikq6ppQLKz9B2CAeDy4BDfZ6qlzRXnx8UnPREB8+myefkoE/XU+dKN8GJw0cS+qlT3YtWc/uI3tD0DCZ+WYW4CovfGPdz98+8XY2FefDYOiCkWc93QeATQuPrpZEQwWGU4XfIuiH49h74G9+Or7wxC0i9FqNEBlNpGxE0KVFHIND+crc/cnJiY+GQZR3TbZp+wUaeFug8ZZh29ys/HWzl3Yt2c7fhOVkrtUhdreYojpQkhVhbioOoXyjrNQmiV/fnxs3zaCeDgC6vP0CLvccjCTCnx98gu8mbkD6ekZ+JJzCJfJp6EbUqP/uhysvQ5X+rmoYM/gkvkMyrR5dhJ/LgIhekg1XuPQORTIzvkcGelvIC1tK45zskBrfkHvjWZoJzpw1UVgPiUUoyWo7M8D15KP8/R3fJJfbXPw+O6nmmy80JETn/21ZXMaklNSwcnPhtp+CS10iVPSU8honTWLOmc7GE8r5MMXwbXmo9x0ev4H/pHDEciaooleF5YcZTenbLqTtm1rHyf/qPCdj3Z8QOZeIn5+w4anU3IvZOdUKouk5wQ5xe9zdmetX//Ia2RuXRhwT3FxcY9nZm45tHN7SsGmpKTMmJiYBxesKvy7iCZe3cp/KQyLT4pcrP9f+K+iqL8B4XkGClAVarkAAAAASUVORK5CYII=";
  31. var yandexIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAABa0lEQVQ4T62TPc8BQRSF/SdfER8FFZH4ASoSnYpCIkGCjoRGpaHS04iWUqHS+0hQoxPHnR12dnauxvtu8uTOPfecm9lN1gPgX2HFv8CKGpsNMJkAg4Gs6zXJjO8NK1qcz0CzCaTTQCQC+P2yJpNS5zIEK1rUakAgAHi9JkLvdMhm5gzBYrmUtxFhcbNMBshmZQ0GpR6LwfK5slpjUyqp24jX2++BxwM4HIB2W82Ez5XVGptEQoUuF5Icz+mkZsLnymqNTTSqQvc7SY7ndlMzgSurNTaFggqMx3LJ8wlcr8BopGa5HNn1rNbYzGZAKCRDolYqQLcLlMtAOKwWDodk17Nao1EsqiCH+H7bLVn1nNYY5POAz8cvbLXIYmYMwWCxAOp1IJVSy+JxYLWisek3hK/0empho0ES4yFYkeWzUPxBxyNJjIdgRZbPwumUWmb+hhVZ+n2gWqUjM3PAiizzObDb0ZGZOWDF34HnBbQcm5EIFazJAAAAAElFTkSuQmCC";
  32. var hereIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAAB0klEQVQ4T62RSy9DURSF+69U79XWq9p6NDEgMRAxEI1XQjqQGBATP8AjaElJKxGPlqLCmDAyEI8IpYKqViJ+wLLPuXo5vSclavDl7L3W2evs5JgA/CtSsRikYjFIxWIwCGvrG1iLbFIp6oyd+B4dRv07QrOyGkFpWQ3hQHRjiyRNj25uw+FuhFmt5l5f/6Du5SM03X0+KHYXVIKd8d19kmFivZmCzIoWqNhc8HYPcC8fg+Dt6ofF6oTF5kSFw4NO6tlmJUoVGhpbeG2x1vA7zMufF5oc7HU2wLYxq9pGg0MjSKfTCIWXea/a6VG609Xro5GvWSHoOzyUtrRV1vGA4dExkjUvEo19hrp4aGu7V/eEkHy00K/B9UiMZM1jn5b7wPGpWV0XAmR0UKhSXouycjffNrYVJ1nzVlajmA+G9J6hF4UY6PFBpVDV7ubnwuISyfK7erH4lIQ/dY/Awy38j3cIMO4TmMs+IZy4wow/iIkpP2dyOkAjxjCGXsSeH+C6O4fn7RF1qRviGp73FOpvTnH0mqErxmEZQnOcSaMpecFDaom25CUuXrNkiUOFMAgHLyk03J6hOXGG0+zvN8shFQ8p9CTzQqXR+wmpWAxS8e/A9AGMrnKfuSpKAAAAAABJRU5ErkJggg==";
  33. var midriveIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAASCAYAAABfJS4tAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QsdDy4g/1qyDQAAA1JJREFUOMt1lH9oVnUUxj/n+saS/lhSkBNKKJL+yCAiaQNtP2KBLgyMChuIe0P/qEgsMymzbNnmyKgIjLUpLDShpKJgQriEBhKD0IxCAyMhoyhyi7Xe+z3n6Y/37nU/6gvn3vu9nOe55/uc5x5rebSvif9fGRFnRwa3/9rS1QOIkcEdtJR7F4HdCgTw18jAM6daynu7gIcAAT+UQKM1Gs2gNEAC0zctXT0dI4PP/gTQ0rVnMdJRjMYi8xywDMVyzNqrGJaWiJhTpKoXYRKYsVziQHP51TUCJ9gv1Giq4f4AkGIS4QXFeEkKTEIGJhA2CjoPdGJGFa9WkvYaXJTZWiRUPVJxNGBqaidmL05XVyKcwGTimGBY8qNm1g38I1FXqOKCTUAdClBBahQywxeHd0dtA5QkATEmRfnE0Es/N2/sziLysikbBjYCh2T2iaS7gcdBqwQlapzVxqzs3PUAqKPgPV8KOcCdwIWVnS8Me6WyW8bpL9/bdRg43LT++frM7Fqhr0x0mWWHMOY5SYpGYEOx/baky83LgNXAakKDTet3bDGyVzDaJd0IXBFwAPl1VJs6y0QKpemuA3nJw+e7V2wA+13oEUwDkrYZ9hRm/ZZpYbheAzpnQrzKWzNWofE85gUSW0BNiOOGvS40cPL9nglgYsWD23+zOYiI2TyZh+PuuCfcE8kTyQMPfy653+wRYyeP9Gz92338jnVPFyR+IoUzHQApEikKjkiU3H2OCgIY//rDfX23r9vab7I9AKc+6KuVlIe/a9gvwOKaFB7UrA1kKYL/iI8AkseVleRjMz+8/P4tL0eod3Li0vXJ/VxeNN8lkl/mKKWiYrPqaCjW6SqxfwdWD/x5U8dmFl11NWNHendOJ91y3xNnkJYUuczs1yxXzHg/VeyHUuRDQHNlEqYWTM2SLfdkVmDy5DN/PLLcndydSnEvnpcAfP/pWxc8dHDpvZu7Lxx/hzMfv0HDPWUAbmjf9HCefG2lsEMlEhWPWmR5cvIU5MnJowhPrQDL1jzG+eH9Bz38UkNbeVtDW7nu4ucDXLNqo6WIJ1OEJU8G4Mnrqu5ykvvCUpo3NgFY0dBWbj372dvHq6DYR2a3Af0NbeU3gXpJd80ZtqNAfTHufvwXtm8nDnLoEBMAAAAASUVORK5CYII=";
  34. var NYFCIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAADL0lEQVQ4T2VUSUtjQRDObRzw7kSdgyKiiCIo7stBPMw4MyB4M4mDB8E/oF48eBJUPImIDqIgiOKCJ3HfsrgkuB4EBb0paojGLC8Jz5rva19EZxrqdb+q+r6upbtN/w4R+QKxQIZ1XXdrmuaDPGLtgW4EYn15eUk23P8fMH6C0/doNDp9c3Nzd3x87He73ZrdbtcpBwcHGnW0hcPhOfj/gH+CAX8dV1dXCVBaYLT7fL7gxcWFnJycCIBydHSkhP+np6dCG3xC8HUAY/tAhp9vANknJiai/f390tPT8ya9vb3S19enhGvquB4dHY3t7+87ga2LkyR7vd7ptra2SHFxseTk5EhBQYEUFhZKSUmJVFVVSXV1tZSVlSldfn6+ZGdnS2Njo2xubkaBn0V0KSSyoAZ39fX1kpeXp8ClpaUKSMKMjAxJS0uTrKwsKSoqUmQVFRXS0dGhUkeaDyCymtCN4fn5ef/g4KAMDAzI0NAQw1Zr7pqZmanImpqa3uxjY2OyvLwsaADJArFYbMQUDAbdq6ur2u7urng8HlVY7jQ5OalSSk9Pl5qaGsFmynZ4eCiojSALRba0tKSFQiG36enpybeysqJDZGNjQ/b29mRmZkYaGhokKSlJpdXd3a2A29vbgk1lbW1N+XJeX1/X/X6/z4TPI5Q6FGqnra0t6ezsVCnl5uZKc3OzIiARbSiwEuqIIRGCeWRqHkSj0ciwWQcW3Gw2q4IzJZfLpYD0iZPx34hKIweLPQJWP0kIslgskpqaqtrc1dWl6razs/MmJIjPJMLMYv/h1bBeX1/fcZfW1lZ1RtglpuRwOATXRJxOp4qKM3WcScYGXV5eesFhI9FXnKU5FDhSWVkpiYmJUltbK+Pj43J2dqZqQ/B74aZsCq5LNBAILJAjfrrrAHC0tLTEysvLpb29XTkyfNaEM8HxTpHs/Pw89vz87AL2pyLhwA8vrQ2hOqempkKLi4sqJXaFYJLEC8wUEUkY3SbJb0Tz2aB5HcYLwKdh9v7+/oEnFic3gnroiEAHcYS629vbBzw1C/D7Bfn4jLwf2MEMBytEPWx4e3yQ9w+bDT4phrsxTKa/NeZmq7YI4fAAAAAASUVORK5CYII=";
  35.  
  36. function initInterface(){
  37. var $section = $("<div>");
  38. $section.html([
  39. '<div>',
  40. '<p>The below maps are legal to use and do not violate copyright</p>',
  41. `<div><input type="checkbox" id="chkMiDrive" class="OOMchk"><label for="chkMiDrive"><img src="${midriveIcon}" height="18" width="18">MiDrive</label></div>`,
  42. `<div><input type="checkbox" id="chkNYFC" class="OOMchk"><img src="${NYFCIcon}" height="18" width="18">NY FC</div>`,
  43. '</br>',
  44. "<p>The below maps are for <span style='color:red; font-weight:bold;'>reference only</span> and <b>no data</b> should be copied from them as it violates copyright.</p>",
  45. `<div><input type="checkbox" id="chkGMaps" class="OOMchk"><label for="chkGMaps"><img src="${gmapsIcon}" height="18" width="18">Google Maps</label></div>`,
  46. `<div><input type="checkbox" id="chkMapillary" class="OOMchk"><label for="chkMapillary"><img src="${mapillaryIcon}" height="18" width="18">Mapillary</label></div>`,
  47. `<div><input type="checkbox" id="chkTerraserver" class="OOMchk"><label for="chkTerraserver"><img src="${terraIcon}" height="18" width="18">Terraserver</label></div>`,
  48. `<div><input type="checkbox" id="chkWikimapia" class="OOMchk"><label for="chkWikimapia"><img src="${wikimapiaIcon}" height="18" width="18">Wikimapia</label></div>`,
  49. `<div><input type="checkbox" id="chkBing" class="OOMchk"><label for="chkBing"><img src="${bingIcon}" height="18" width="18">Bing Maps</label></div>`,
  50. `<div><input type="checkbox" id="chkOSM" class="OOMchk"><label for="chkOSM"><img src="${osmIcon}" height="18" width ="18">Open Street Map</label></div>`,
  51. `<div><input type="checkbox" id="chkYandex" class="OOMchk"><label for="chkYandex"><img src="${yandexIcon}" height="18" width ="18">Yandex</label></div>`,
  52. `<div><input type="checkbox" id="chkHere" class="OOMchk"><label for="chkHere"><img src="${hereIcon}" height="18" width ="18">Here</label></div>`,
  53. '</br><div>',
  54. '<fieldsetstyle="border: 1px solid silver; padding: 8px; border-radius: 4px;">',
  55. '<legend style="margin-bottom:0px; border-bottom-style:none;width:auto;"><h4>Map Language (where applicable)</h4></legend>',
  56. '<input type="radio" name="radOOMLanguage" id="radOOMNoLang">Do not set a language</br>',
  57. '<input type="radio" name="radOOMLanguage" id="radOOMWMELang">Use WME language</br>',
  58. '<input type="radio" name="radOOMLanguage" id="radOOMCustomLang">Custom language <input type="text" name="txtOOMLanguage" id="txtOOMLanguage" style="border: 1px solid #000000;" size="4"/>',
  59. '</fieldset>',
  60. '</div>',
  61. '</div>'
  62. ].join(' '));
  63.  
  64. new WazeWrap.Interface.Tab('OOM', $section.html(), init);
  65. }
  66.  
  67. function init(){
  68. loadSettings();
  69. setChecked('chkGMaps', settings.GMaps);
  70. setChecked('chkMapillary', settings.Mapillary);
  71. setChecked('chkTerraserver', settings.Terraserver);
  72. setChecked('chkWikimapia', settings.Wikimapia);
  73. setChecked('chkBing', settings.Bing);
  74. setChecked('chkOSM', settings.OSM);
  75. setChecked('chkYandex', settings.Yandex);
  76. setChecked('chkHere', settings.Here);
  77. setChecked('chkMiDrive', settings.MiDrive);
  78. setChecked('chkNYFC', settings.NYFC);
  79.  
  80. if(settings.LangSetting == 0)
  81. setChecked("radOOMNoLang", true);
  82. else if(settings.LangSetting == 1)
  83. setChecked("radOOMWMELang", true);
  84. else
  85. setChecked("radOOMCustomLang", true);
  86.  
  87. $('#txtOOMLanguage')[0].value = settings.CustLang;
  88.  
  89. $('.olControlAttribution').css("right", "400px");
  90.  
  91. LoadMapButtons();
  92. $('.OOMchk').change(function() {
  93. var settingName = $(this)[0].id.substr(3);
  94. settings[settingName] = this.checked;
  95. saveSettings();
  96. LoadMapButtons();
  97. });
  98. $("[id^='rad']").change(function() {
  99. if(isChecked("radOOMNoLang"))
  100. settings.LangSetting = 0;
  101. else if(isChecked("radOOMWMELang"))
  102. settings.LangSetting = 1;
  103. else
  104. settings.LangSetting = 2;
  105. saveSettings();
  106. });
  107. $('#txtOOMLanguage').focusout(function(){
  108. settings.CustLang = $('#txtOOMLanguage').val();
  109. saveSettings();
  110. });
  111. }
  112.  
  113. function GetLanguage()
  114. {
  115. if(isChecked("radOOMNoLang"))
  116. return "";
  117. else if(isChecked("radOOMWMELang"))
  118. return I18n.currentLocale().replace("en-US", "en");
  119. else //Custom Language
  120. return $('#txtOOMLanguage').val();
  121. }
  122.  
  123. function LoadMapButtons()
  124. {
  125. $('#OOMMiDrive').remove();
  126. if(settings.MiDrive)
  127. {
  128. let $section = $("<div>", {style:"padding:8px 16px"});
  129. $section.html([
  130. '<span id="OOMMiDrive">',
  131. `<img src="${midriveIcon}" alt="MiDrive" width="18" height="18" id="OOMMiDriveImg" title="Open in MiDrive" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  132. '</span>'
  133. ].join(' '));
  134.  
  135. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($section.html());
  136.  
  137. $('#OOMMiDriveImg').click(function(){
  138. var topleft= (new OpenLayers.LonLat(Waze.map.getExtent().left,Waze.map.getExtent().top));
  139. var bottomright= (new OpenLayers.LonLat(Waze.map.getExtent().right,Waze.map.getExtent().bottom));
  140. var xmin = topleft.lon;
  141. var xmax = bottomright.lon;
  142. var ymin = bottomright.lat;
  143. var ymax = topleft.lat;
  144.  
  145. window.open('http://mdotnetpublic.state.mi.us/drive/Default.aspx?xmin=' + xmin + '&xmax=' + xmax + '&ymin=' + ymin + '&ymax=' + ymax + '&lc=true&cam=true&tb=false&bc=false&bh1=false&bh2=false&sensor=false&inc=true&mp=false&sign=false&mb=false&cps=false&aps=false&bing=false&source=social&rsp=false&rest=false&park=false&plow=false', 'MiDrive');
  146. });
  147. }
  148.  
  149. $('#OOMGMaps').remove();
  150. if(settings.GMaps)
  151. {
  152. let $section = $("<div>", {style:"padding:8px 16px"});
  153. $section.html([
  154. '<span id="OOMGMaps">',
  155. `<img src="${gmapsIcon}" alt="Google Maps" width="18" height="18" id="OOMGMapsImg" title="Open in Google Maps" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  156. '</span>'
  157. ].join(' '));
  158.  
  159. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($section.html());
  160.  
  161. $('#OOMGMapsImg').click(function(){
  162. let projI = new OpenLayers.Projection("EPSG:900913");
  163. let projE = new OpenLayers.Projection("EPSG:4326");
  164. let center_lonlat = (new OpenLayers.LonLat(Waze.map.center.lon, Waze.map.center.lat)).transform(projI,projE);
  165. let lat = Math.round(center_lonlat.lat * 1000000) / 1000000;
  166. let lon = Math.round(center_lonlat.lon * 1000000) / 1000000;
  167. let lang = GetLanguage();
  168.  
  169. window.open('https://www.google.com/maps/@' + lat + ',' + lon + ',' + ( W.map.zoom + 12) + 'z' + (lang != "" ? "?hl=" + lang : ""), 'Google Maps');
  170. });
  171. }
  172.  
  173.  
  174. //************** Mapillary *****************
  175. $('#OOMMapillary').remove();
  176. if(settings.Mapillary){
  177. let $sectionMapillary = $("<div>", {style:"padding:8px 16px"});
  178. $sectionMapillary.html([
  179. '<span id="OOMMapillary">',
  180. `<img src="${mapillaryIcon}" alt="Mapillary" width="18" height="18" id="OOMMapillaryImg" title="Open in Mapillary" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  181. '</span>'
  182. ].join(' '));
  183.  
  184. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionMapillary.html());
  185. $('#OOMMapillaryImg').click(function(){
  186. var projI=new OpenLayers.Projection("EPSG:900913");
  187. var projE=new OpenLayers.Projection("EPSG:4326");
  188. var center_lonlat = (new OpenLayers.LonLat(Waze.map.center.lon, Waze.map.center.lat)).transform(projI,projE);
  189. var lat = Math.round(center_lonlat.lat * 1000000) / 1000000;
  190. var lon = Math.round(center_lonlat.lon * 1000000) / 1000000;
  191.  
  192. window.open(`https://www.mapillary.com/app/?lat=${lat}&lng=${lon}&z=${( W.map.zoom + 11)}`, 'Mapillary');
  193. });
  194. }
  195.  
  196.  
  197. //****************** Terraserver *********************
  198. $('#OOMTerraserver').remove();
  199. if(settings.Terraserver){
  200. var $sectionTerraserver = $("<div>", {style:"padding:8px 16px"});
  201. $sectionTerraserver.html([
  202. '<span id="OOMTerraserver">',
  203. `<img src="${terraIcon}" alt="Terraserver" width="18" height="18" id="OOMTerraserverImg" title="Open in Terraserver" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  204. '</span>'
  205. ].join(' '));
  206.  
  207. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionTerraserver.html());
  208. $('#OOMTerraserverImg').click(function(){
  209. var center_lonlat=OpenLayers.Layer.SphericalMercator.inverseMercator(Waze.map.getCenter().lon,Waze.map.getCenter().lat);
  210. window.open(`http://www.terraserver.com/view?utf8=✓&searchLng=${center_lonlat.lon}&searchLat=${center_lonlat.lat}`);
  211. });
  212. }
  213.  
  214.  
  215. //********************* Wikimapia *********************
  216. $('#OOMWikimapia').remove();
  217. if(settings.Wikimapia){
  218. let $sectionWikimapia = $("<div>", {style:"padding:8px 16px"});
  219. $sectionWikimapia.html([
  220. '<span id="OOMWikimapia">',
  221. `<img src="${wikimapiaIcon}" alt="Wikimapia" width="18" height="18" id="OOMWikimapiaImg" title="Open in Wikimapia" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  222. '</span>'
  223. ].join(' '));
  224.  
  225. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionWikimapia.html());
  226. $('#OOMWikimapiaImg').click(function(){
  227. //var center_lonlat=OpenLayers.Layer.SphericalMercator.inverseMercator(Waze.map.getCenter().lon,Waze.map.getCenter().lat);
  228. var projI=new OpenLayers.Projection("EPSG:900913");
  229. var projE=new OpenLayers.Projection("EPSG:4326");
  230. var center_lonlat = (new OpenLayers.LonLat(Waze.map.center.lon, Waze.map.center.lat)).transform(projI,projE);
  231. var lat = Math.round(center_lonlat.lat * 1000000) / 1000000;
  232. var lon = Math.round(center_lonlat.lon * 1000000) / 1000000;
  233. let lang = GetLanguage();
  234. if(lang === "")
  235. lang = "en";
  236. window.open(`http://wikimapia.org/#${(lang !== "" ? "lang=" + lang : "")}&lat=${lat}&lon=${lon}&z=${( W.map.zoom + 12)}&m=b`);
  237. });
  238. }
  239.  
  240. $('#OOMBing').remove();
  241. if(settings.Bing)
  242. {
  243. let $sectionBing = $("<div>", {style:"padding:8px 16px"});
  244. $sectionBing.html([
  245. '<span id="OOMBing">',
  246. `<img src="${bingIcon}" alt="Bing Maps" width="18" height="18" id="OOMBingImg" title="Open in Bing Maps" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  247. '</span>'
  248. ].join(' '));
  249.  
  250. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionBing.html());
  251.  
  252. $('#OOMBingImg').click(function(){
  253. let projI = new OpenLayers.Projection("EPSG:900913");
  254. let projE = new OpenLayers.Projection("EPSG:4326");
  255. let center_lonlat = (new OpenLayers.LonLat(Waze.map.center.lon, Waze.map.center.lat)).transform(projI,projE);
  256. let lat = Math.round(center_lonlat.lat * 1000000) / 1000000;
  257. let lon = Math.round(center_lonlat.lon * 1000000) / 1000000;
  258. //let lang = I18n.currentLocale().replace("en-US", "en");
  259.  
  260. window.open(`https://www.bing.com/maps?&cp=${lat}~${lon}&lvl=${( W.map.zoom + 12)}`);
  261. });
  262. }
  263.  
  264. $('#OOMOSM').remove();
  265. if(settings.OSM){
  266. //https://www.openstreetmap.org/#map=16/39.5588/-84.2365
  267. let $sectionOSM = $("<div>", {style:"padding:8px 16px"});
  268. $sectionOSM.html([
  269. '<span id="OOMOSM">',
  270. `<img src="${osmIcon}" alt="Open Street Map" width="18" height="18" id="OOMOSMImg" title="Open in Open Street Maps" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  271. '</span>'
  272. ].join(' '));
  273.  
  274. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionOSM.html());
  275.  
  276. $('#OOMOSMImg').click(function(){
  277. let projI = new OpenLayers.Projection("EPSG:900913");
  278. let projE = new OpenLayers.Projection("EPSG:4326");
  279. let center_lonlat = (new OpenLayers.LonLat(Waze.map.center.lon, Waze.map.center.lat)).transform(projI,projE);
  280. let lat = Math.round(center_lonlat.lat * 1000000) / 1000000;
  281. let lon = Math.round(center_lonlat.lon * 1000000) / 1000000;
  282. //let lang = I18n.currentLocale().replace("en-US", "en");
  283.  
  284. window.open(`https://www.openstreetmap.org/#map=${(W.map.zoom + 12)}/${lat}/${lon}`);
  285. });
  286. }
  287.  
  288. $('#OOMYandex').remove();
  289. if(settings.Yandex){
  290. //https://n.maps.yandex.ru/#!/?z=14&ll=46.019795%2C51.505120&l=nk%23sat
  291. let $sectionYandex = $("<div>", {style:"padding:8px 16px"});
  292. $sectionYandex.html([
  293. '<span id="OOMYandex">',
  294. `<img src="${yandexIcon}" alt="Yandex" width="18" height="18" id="OOMYandexImg" title="Open in Yandex" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  295. '</span>'
  296. ].join(' '));
  297.  
  298. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionYandex.html());
  299.  
  300. $('#OOMYandexImg').click(function(){
  301. let projI = new OpenLayers.Projection("EPSG:900913");
  302. let projE = new OpenLayers.Projection("EPSG:4326");
  303. let center_lonlat = (new OpenLayers.LonLat(Waze.map.center.lon, Waze.map.center.lat)).transform(projI,projE);
  304. let lat = Math.round(center_lonlat.lat * 1000000) / 1000000;
  305. let lon = Math.round(center_lonlat.lon * 1000000) / 1000000;
  306. //let lang = I18n.currentLocale().replace("en-US", "en");
  307.  
  308. window.open(`https://n.maps.yandex.ru/#!/?z=${(W.map.zoom + 12)}&ll=${lon}%2C${lat}&l=nk%23sat`);
  309. });
  310. }
  311.  
  312. $('#OOMHere').remove();
  313. if(settings.Here){
  314. //https://wego.here.com/?map=39.56508,-84.26224,16,normal&x=ep
  315. let $sectionHere = $("<div>", {style:"padding:8px 16px"});
  316. $sectionHere.html([
  317. '<span id="OOMHere">',
  318. `<img src="${hereIcon}" alt="Here" width="18" height="18" id="OOMHereImg" title="Open in Here" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  319. '</span>'
  320. ].join(' '));
  321.  
  322. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionHere.html());
  323.  
  324. $('#OOMHereImg').click(function(){
  325. let projI = new OpenLayers.Projection("EPSG:900913");
  326. let projE = new OpenLayers.Projection("EPSG:4326");
  327. let center_lonlat = (new OpenLayers.LonLat(Waze.map.center.lon, Waze.map.center.lat)).transform(projI,projE);
  328. let lat = Math.round(center_lonlat.lat * 1000000) / 1000000;
  329. let lon = Math.round(center_lonlat.lon * 1000000) / 1000000;
  330. //let lang = I18n.currentLocale().replace("en-US", "en");
  331.  
  332. window.open(`https://wego.here.com/?map=${lat},${lon},${(W.map.zoom + 12)},satellite&x=ep`);
  333. });
  334. }
  335.  
  336. $('#OOMNYFC').remove();
  337. if(settings.NYFC){
  338. let $sectionNYFC = $("<div>", {style:"padding:8px 16px"});
  339. $sectionNYFC.html([
  340. '<span id="OOMNYFC">',
  341. `<img src="${NYFCIcon}" alt="NY FC" width="18" height="18" id="OOMNYFCImg" title="Open in NY FC" style="cursor:pointer; float: left; display:inline-block; margin: 2px 5px 0 3px;">`,
  342. '</span>'
  343. ].join(' '));
  344.  
  345. $('.view-area.olMap >div > div > div.WazeControlPermalink').append($sectionNYFC.html());
  346.  
  347. $('#OOMNYFCImg').click(function(){
  348. let e=W.map.getExtent();
  349. let geoNW=new OL.Geometry.Point(e.left,e.top);
  350. let geoSE=new OL.Geometry.Point(e.right,e.bottom);
  351.  
  352. Proj4js.defs["EPSG:26918"] = "+proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs";
  353.  
  354. let source = new Proj4js.Proj('EPSG:900913');
  355. let dest = new Proj4js.Proj('EPSG:26918');
  356.  
  357. geoNW = new Proj4js.Point(geoNW.x,geoNW.y);
  358. geoSE = new Proj4js.Point(geoSE.x,geoSE.y);
  359.  
  360. Proj4js.transform(source, dest, geoNW);
  361. Proj4js.transform(source, dest, geoSE);
  362.  
  363. let mapScale = 36111.909643;
  364.  
  365. switch (W.map.zoom) {
  366. case 0:
  367. case 1:
  368. mapScale = 72223.819286;
  369. break;
  370. case 2:
  371. mapScale = 36111.909643;
  372. break;
  373. case 3:
  374. mapScale = 18055.954822;
  375. break;
  376. default:
  377. mapScale = 9027.977411;
  378. break;
  379. }
  380.  
  381. let URL='http://gis3.dot.ny.gov/html5viewer/?viewer=FC&scale='+mapScale+'&extent='+geoNW.x+'%2C'+geoNW.y+'%2C'+geoSE.x+'%2C'+geoSE.y;
  382. window.open(URL,"_blank");
  383. });
  384. }
  385. }
  386.  
  387. function loadSettings() {
  388. var loadedSettings = $.parseJSON(localStorage.getItem("OOM_Settings"));
  389. var defaultSettings = {
  390. GMaps: true,
  391. Mapillary: true,
  392. Terraserver: true,
  393. Wikimapia: false,
  394. Bing: false,
  395. OSM: false,
  396. LangSetting: 1,
  397. CustLang: "",
  398. Yandex: false,
  399. Here: false,
  400. MiDrive: false,
  401. NYFC: false
  402. };
  403. settings = loadedSettings ? loadedSettings : defaultSettings;
  404. for (var prop in defaultSettings) {
  405. if (!settings.hasOwnProperty(prop))
  406. settings[prop] = defaultSettings[prop];
  407. }
  408. }
  409.  
  410. function saveSettings() {
  411. if (localStorage) {
  412. var localsettings = {
  413. GMaps: settings.GMaps,
  414. Mapillary: settings.Mapillary,
  415. Terraserver: settings.Terraserver,
  416. Wikimapia: settings.Wikimapia,
  417. Bing: settings.Bing,
  418. OSM: settings.OSM,
  419. LangSetting: settings.LangSetting,
  420. CustLang: settings.CustLang,
  421. Yandex: settings.Yandex,
  422. Here: settings.Here,
  423. MiDrive: settings.MiDrive,
  424. NYFC: settings.NYFC
  425. };
  426.  
  427. localStorage.setItem("OOM_Settings", JSON.stringify(localsettings));
  428. }
  429. }
  430.  
  431. function isChecked(checkboxId) {
  432. return $('#' + checkboxId).is(':checked');
  433. }
  434.  
  435. function setChecked(checkboxId, checked) {
  436. $('#' + checkboxId).prop('checked', checked);
  437. }
  438.  
  439. function bootstrap(tries = 1) {
  440. if(location.href.indexOf("google.com/maps") > -1)
  441. bootstrapGeneral(initGoogleMaps, 1);
  442. else if(location.href.indexOf("wv511.org") > -1)
  443. bootstrapGeneral(initWV511, 1);
  444. else if(location.href.indexOf("511virginia.org") > -1)
  445. bootstrapGeneral(init511virginia, 1);
  446. else{
  447. if (W &&
  448. W.map &&
  449. W.model &&
  450. $ && WazeWrap.Ready) {
  451. initInterface();
  452. } else if (tries < 1000) {
  453. setTimeout(function () {bootstrap(tries++);}, 200);
  454. }}
  455. }
  456.  
  457. function initGoogleMaps(){
  458. let $OOMWazeButton = document.createElement("div");
  459. $OOMWazeButton.innerHTML = '<div id="OOMWazeButtonDiv" style="height:30px; width:34px; position: fixed; right:30px; top:75px; cursor: pointer; background-image: url(https://imgur.com/NTLWfFz.png); background-repeat: no-repeat;" title="Open in WME"></div>';
  460. let parent = document.getElementById("content-container");
  461. parent.appendChild($OOMWazeButton);
  462.  
  463. document.getElementById("OOMWazeButtonDiv").addEventListener("click", function(){
  464. window.open(GMToWaze());
  465. });
  466.  
  467. document.getElementById('OOMWazeButtonDiv').addEventListener("mouseenter",function(e) {
  468. document.addEventListener('keydown', copyPLHotkeyEvent);
  469. document.getElementsByClassName('widget-scene-canvas')[0].addEventListener('keydown', copyPLHotkeyEvent);
  470. });
  471.  
  472. document.getElementById('OOMWazeButtonDiv').addEventListener('mouseleave', function() {
  473. document.removeEventListener('keydown', copyPLHotkeyEvent);
  474. document.getElementsByClassName('widget-scene-canvas')[0].removeEventListener('keydown', copyPLHotkeyEvent);
  475. });
  476. }
  477.  
  478. var copyToClipboard = function(str) {
  479. var temp = document.createElement("input");
  480. document.body.append(temp);
  481. temp.value = str;
  482. temp.select();
  483. document.execCommand('copy');
  484. document.body.removeChild(temp);
  485. };
  486.  
  487. var copyPLHotkeyEvent = function(e) {
  488. if ((e.metaKey || e.ctrlKey) && (e.which === 67))
  489. copyToClipboard(GMToWaze());
  490. };
  491.  
  492. function GMToWaze(){
  493. let lon, lat, zoom;
  494. let curURL = location.href.split('@').pop().split(',');
  495. lon = curURL[1];
  496. lat = curURL[0];
  497. zoom = parseInt(curURL[2]);
  498. return `https://www.waze.com/en-US/editor/?lon=${lon}&lat=${lat}&zoom=${(Math.max(0,Math.min(10,(zoom - 12))))}`;
  499. }
  500.  
  501. function bootstrapGeneral(initdelegate, tries = 1){
  502. if(document.readyState !== 'complete' )
  503. setTimeout(function() {bootstrapGeneral(initdelegate, tries++);}, 200);
  504. else
  505. initdelegate();
  506. }
  507.  
  508. function init511virginia(){
  509. $('#incident_table_paginate > a').click(insertWazeLinks511Virginia);
  510. insertWazeLinks511Virginia();
  511. }
  512.  
  513. function insertWazeLinks511Virginia(){
  514. $('#incident_table > tbody > tr > td > a').parent().append(function(){
  515. if($(this).find("a").length === 1){
  516. let latlons = $(this).find("a")[0].href.match(/lon1=(.*)&lat1=(.*)&lon2=(.*)&lat2=(.*)/);
  517.  
  518. let lonCenter = Math.min(latlons[1],latlons[3]) + (Math.abs(latlons[1] - latlons[3])/2);
  519. let latCenter = Math.min(latlons[2], latlons[4]) + (Math.abs(latlons[2] - latlons[4])/2);
  520. return ` <a href='https://www.waze.com/editor/?env=usa&lon=${lonCenter}&lat=${latCenter}&zoom=4' target='_blank'>Open in WME</a>`;
  521. }
  522. return "";
  523. });
  524. }
  525.  
  526. function initWV511(){
  527. if(document.getElementById("OOMWazeButtonDi") !== null)
  528. document.getElementById("OOMWazeButtonDi").remove();
  529.  
  530. let $OOMWazeButton = document.createElement("div");
  531. $OOMWazeButton.setAttribute("id", "OOMWazeButtonDiv");
  532. $OOMWazeButton.setAttribute("style", "position:absolute; right:15px; top:190px; height:30px; width:34px; cursor:pointer; background-image:url(https://imgur.com/NTLWfFz.png); background-repeat:no-repeat;");
  533. $OOMWazeButton.setAttribute("title", "Open in WME");
  534. document.body.appendChild($OOMWazeButton);
  535.  
  536. document.getElementById("OOMWazeButtonDiv").addEventListener("click", function(){
  537. let lon1, lon2, lonCenter, lat1, lat2, latCenter;
  538. let latlon = location.href.split(":");
  539. lon1 = latlon[2];
  540. lat1 = latlon[3];
  541. lon2 = latlon[4];
  542. lat2 = latlon[5];
  543.  
  544. lonCenter = Math.min(lon1,lon2) + (Math.abs(lon1 - lon2)/2);
  545. latCenter = Math.min(lat1, lat2) + (Math.abs(lat1 - lat2)/2);
  546. window.open(`https://www.waze.com/en-US/editor/?lon=${lonCenter}&lat=${latCenter}&zoom=5`);
  547. });
  548. }
  549.  
  550. bootstrap();
  551. })();