WME script for WazeMY editing moderation
当前为
- // ==UserScript==
- // @name WazeMY
- // @namespace http://junyianl.net/
- // @version 2020.06.03.01
- // @description WME script for WazeMY editing moderation
- // @author junyianl
- // @include /^https:\/\/(www|beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?editor\/?.*$/
- // @require https://greasyfork.org/scripts/24851-wazewrap/code/WazeWrap.js
- // @grant none
- // ==/UserScript==
- /* global W */
- /* global WazeWrap */
- (function() {
- 'use strict';
- var tooltipDiv = null;
- var tooltipOffset = {
- x: 15,
- y: 15
- };
- function initTooltip() {
- tooltipDiv = document.createElement("div");
- tooltipDiv.id = "wazemyTooltip";
- tooltipDiv.style.height = "auto";
- tooltipDiv.style.width = "auto";
- tooltipDiv.style.background = "rgba(0, 0, 0, 0.5)";
- tooltipDiv.style.color = "white";
- tooltipDiv.style.borderRadius = "5px";
- tooltipDiv.style.padding = "5px";
- tooltipDiv.style.position = "absolute";
- tooltipDiv.style.top = "0px";
- tooltipDiv.style.left = "0px";
- tooltipDiv.style.visibility = "hidden";
- tooltipDiv.style.zIndex = 10000;
- document.body.appendChild(tooltipDiv);
- }
- function WazeMY_init() {
- // add WazeMY tab in sidebar
- let username = WazeWrap.User.Username();
- let rank = WazeWrap.User.Rank();
- let tabhtml = '<div>Version: ' + GM_info.script.version + '</div><br>';
- tabhtml += '<div>' + username + '(' + rank + ')</div>';
- new WazeWrap.Interface.Tab('WazeMY', tabhtml, null)
- // initialize tooltip for mouse over segments and places
- initTooltip();
- WazeWrap.Events.register("mousemove", null, wazemy_showMapTooltip);
- // initialize keyboard shortcut for copying lat/lon
- new WazeWrap.Interface.Shortcut('WazeMY_latloncopy', 'Copies lat/lon of mouse position', 'wazemy', 'WazeMY', 'CA+c', wazemy_copyLatLon, null).add();
- // WazeWrap.Events.register("moveend", null, wazemy_moveend);
- // WazeWrap.Events.register("zoomend", null, wazemy_zoomend);
- // WazeWrap.Events.register("changelayer", null, wazemy_changelayer);
- // WazeWrap.Events.register("selectionchanged", null, wazemy_selectionchanged);
- }
- function wazemy_moveend(arg1){
- console.log("WazeMY: moveend");
- }
- function wazemy_zoomend(arg1){
- console.log("WazeMY: zoomend");
- }
- function wazemy_showMapTooltip(e){
- var landmark = null;
- var segment = null;
- var result = "";
- var showTooltip = false;
- // landmark = W.map.landmarkLayer.getFeatureBy("renderIntent", "highlight");
- landmark = W.map.venueLayer.getFeatureBy("renderIntent", "highlight");
- segment = W.map.segmentLayer.getFeatureBy("renderIntent", "highlight");
- if (landmark != null) {
- // console.log(landmark.model);
- result = "<b>"+landmark.model.attributes.name+"</b><br>";
- var address = landmark.model.getAddress();
- try {
- result += (address.attributes.houseNumber?(address.attributes.houseNumber+", "):"") + (address.attributes.street.name?address.attributes.street.name:"No street") + "<br>";
- result += address.attributes.city.attributes.name + ", " + address.attributes.state.name + "<br>";
- }
- catch {
- result += "No address<br>";
- }
- result += "<b>Lock:</b> " + (landmark.model.getLockRank() + 1);
- showTooltip = true;
- }
- else if (segment != null) {
- // console.log(segment.model);
- var segmentId = segment.model.attributes.id;
- var primaryStreetId = WazeWrap.Model.getPrimaryStreetID(segmentId);
- var address = segment.model.getAddress();
- result = "<b>" + (address.attributes.street.name?address.attributes.street.name:"No street") + "</b><br>";
- result += address.attributes.city.attributes.name + ", " + address.attributes.state.name + "<br>";
- result += "<b>ID:</b> " + segmentId + "<br>";
- result += "<b>Lock:</b> " + (segment.model.getLockRank() + 1);
- showTooltip = true;
- }
- if (showTooltip == true) { // adjust tooltip position and make it visible
- var tw = tooltipDiv.clientWidth;
- var th = tooltipDiv.clientHeight;
- var tooltipX = e.clientX + window.scrollX + tooltipOffset.x;
- var tooltipY = e.clientY + window.scrollY + tooltipOffset.y;
- if ((tooltipX + tw) > W.map.$map.innerWidth()) { // adjust tooltip position to keep within map window
- tooltipX -= tw + 20; // 20 = scroll bar size
- if (tooltipX < 0) tooltipX = 0;
- }
- if ((tooltipY + th) > W.map.$map.innerHeight()) {
- tooltipY -= th + 20;
- if (tooltipY < 0) tooltipY = 0;
- }
- tooltipDiv.style.top = tooltipY + "px";
- tooltipDiv.style.left = tooltipX + "px";
- tooltipDiv.innerHTML = result;
- tooltipDiv.style.visibility = "visible";
- }
- else { // hide tooltip
- tooltipDiv.style.visibility = "hidden";
- }
- }
- function wazemy_copyLatLon(){
- let elMousepos = document.getElementsByClassName("mouse-position");
- copyToClipboard(elMousepos[0].innerText);
- }
- function wazemy_changelayer(arg1){
- console.log("WazeMY: changelayer");
- }
- function wazemy_selectionchanged(arg1){
- console.log("WazeMY: selectionchanged");
- }
- // courtesy of PIE
- var copyToClipboard = function(str) {
- var $temp = $('<input>');
- $('body').append($temp);
- $temp.val(str).select();
- document.execCommand('copy');
- $temp.remove();
- };
- function wazemy_bootstrap(tries) {
- if (W && W.map && W.model && WazeWrap.Ready) {
- WazeMY_init();
- // WazeWrap.Alerts.info(GM_info.script.name, "Loaded...");
- }
- else if (tries < 1000) {
- // console.log(GM_info.script.name, "wazemy_bootstrap failed. Trying again...");
- window.setTimeout(wazemy_bootstrap, 200, ++tries);
- }
- else {
- WazeWrap.Alerts.error(GM_info.script.name, "Bootstrap timed out.");
- }
- }
- wazemy_bootstrap(1);
- })();