Greasy Fork is available in English.

WME KYTC PL Jump (beta)

Paste a KYTC PL in the search box and click the "Jump to KYTC PL" button.

  1. // ==UserScript==
  2. // @name WME KYTC PL Jump (beta)
  3. // @namespace https://greatest.deepsurf.us/users/45389
  4. // @version 0.1.b4
  5. // @description Paste a KYTC PL in the search box and click the "Jump to KYTC PL" button.
  6. // @author MapOMatic
  7. // @include /^https:\/\/(www|beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?editor\/?.*$/
  8. // @license GNU GPLv3
  9. // @icon data:image/png;base64,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
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. var _alertUpdate = true;
  16. var _debugLevel = 0;
  17. var _scriptVersion = GM_info.script.version;
  18. var _scriptChanges = GM_info.script.name + "\nv " + _scriptVersion + "\nPaste a KYTC PL in the search box and click the 'Jump to KYTC PL' button.\n\nWhat's New\n------------------------------";
  19. _scriptChanges += '\n- Improved calculation of zoom level.';
  20.  
  21. function log(message, level) {
  22. if (message && level <= _debugLevel) {
  23. console.log('KYTC PL Jump: ' + message);
  24. }
  25. }
  26.  
  27. function processKytcPL(pl) {
  28. var re = /.*x1=(\d+\.\d+)\&y1=(\d+\.\d+)\&x2=(\d+\.\d+)\&y2=(\d+\.\d+)/;
  29. if (! re.test(pl)) {
  30. alert('Could not process KYTC PL.');
  31. return;
  32. }
  33. var kytcCoords = re.exec(pl);
  34. var url = 'https://kygisserver.ky.gov/arcgis/rest/services/Utilities/Geometry/GeometryServer/project?inSR=102763&outSR=3857&geometries=';
  35. url += kytcCoords[1] + '%2C' + kytcCoords[2] + '%2C' + kytcCoords[3] + '%2C' + kytcCoords[4] + '&transformation=&transformForward=true&f=json';
  36. log(url, 1);
  37. $.ajax({
  38. url: url,
  39. method: 'GET',
  40. success: function(ext) {
  41. var pts = $.parseJSON(ext).geometries;
  42. console.log(pts);
  43. var wazeExt = W.map.getExtent();
  44. var aspectRatio = (wazeExt.right - wazeExt.left) / (wazeExt.top - wazeExt.bottom);
  45. var centerX = (pts[0].x + pts[1].x) / 2;
  46. var deltaX = (pts[1].y - pts[0].y) * aspectRatio / 2;
  47. var extent = [centerX - deltaX,pts[0].y,centerX + deltaX,pts[1].y];
  48. W.map.zoomToExtent(extent);
  49. }
  50. });
  51. }
  52.  
  53. function addJumpButton() {
  54. $('.search-query').after($('<div class="btn btn-primary" style="float:right;margin-right:-120px;height:26px;line-height:26px;padding-left:8px;padding-right:8px;padding-top:0px;">Jump to KYTC PL</div>').click(function() {
  55. var pl = $('.search-query').val();
  56. processKytcPL(pl);
  57. }));
  58. }
  59. function init() {
  60. addJumpButton();
  61.  
  62. /* Check version and alert on update */
  63. if (_alertUpdate && ('undefined' === window.localStorage.kytcPlJumpVersion ||
  64. _scriptVersion !== window.localStorage.kytcPlJumpVersion)) {
  65. alert(_scriptChanges);
  66. window.localStorage.kytcPlJumpVersion = _scriptVersion;
  67. }
  68.  
  69. // check for changes in the edit-panel
  70. var searchObserver = new MutationObserver(function(mutations) {
  71. mutations.forEach(function(mutation) {
  72. // Mutation is a NodeList and doesn't support forEach like an array
  73. for (var i = 0; i < mutation.addedNodes.length; i++) {
  74. var addedNode = mutation.addedNodes[i];
  75. // Only fire up if it's a node
  76. if (addedNode.nodeType === Node.ELEMENT_NODE) {
  77. var searchBox = addedNode.querySelector('.search-query');
  78. if (searchBox) {
  79. addJumpButton();
  80. }
  81. }
  82. }
  83. });
  84. });
  85. searchObserver.observe(document.getElementById('app-head'), { childList: true, subtree: true });
  86.  
  87. log('Initialized.', 0);
  88. }
  89.  
  90. function bootstrap() {
  91. if (W && W.loginManager &&
  92. W.loginManager.events.register &&
  93. W.map && $('.level-icon').length>0) {
  94. log('Initializing...', 0);
  95. init();
  96. } else {
  97. log('Bootstrap failed. Trying again...', 0);
  98. window.setTimeout(function () {
  99. bootstrap();
  100. }, 1000);
  101. }
  102. }
  103.  
  104. log('Bootstrap...', 0);
  105. bootstrap();
  106. })();