您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Script version of the WME LevelReset tool, to make relocking segments to their appropriate lock level easy & quick. ʕʘ̅͜ʘ̅ʔ
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/14414/91504/WME%20LevelReset.js
// ==UserScript== // @name WME LevelReset // @namespace [email protected] // @version 0.1.3 // @description Script version of the WME LevelReset tool, to make relocking segments to their appropriate lock level easy & quick. ʕʘ̅͜ʘ̅ʔ // @author Broos Gert '2015 // @match https://editor-beta.waze.com/*editor/* // @match https://www.waze.com/*editor/* // @grant none // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAA+VBMVEX///93PgHX19fTgQfFZgLLcwTrxYDDgA3nqBj5+fmwr6+Yl5f8/PzExMTl5eX114vv7+/e3t68vLzOzs6saRKARQSLTgeioqK2tbX72XfU1NT515fxz4b54b3RmySYWAv31aTpwIHgrn9/f3/75qPZsEvuuC/utx3psVP13KizbhXuuVj745bfoEzzwzDxwDXTjknpxqDPfhzWih7PhUaObErowqDJchrmqCfprRjbmUvblCLZjAv71WnhnyTfmA7hrmbjsm7qxpPv06vYljj305776MvLkD3XkjFwcHCMi4v6zk/6z1P2wVDYqzr3y3j2xWnrrl761X3u0VhGAAABv0lEQVQ4jZWTXXuaMBiGY7bZQUhIoBaKsIK0KkVqtd+2tJ2gnVJs9f//mAW78uHYwe6TXE+em/flJAD8D0RVdF3HTKqvGcaMAiAQVYd1vaEASikhhFKA1ZoeA8Iwct2lCAnAxl/zdcAMbeGipbtwMQM62xFEFUJtoWEIsbh0CVTF3QGqqrjax2cq4kkkFQFjTJD2eYeXBoa4uoEoBOU/RhBUWHWHJukUCZ9JQFCnWkVAQJRQniREyvGPANA/YzazRhBKwjSOg+DZmdoRZ+r8XAfxr5eo1AfzuW1HljXfYkX2zJ5b8TQXXtbWzPff38x2hvn27qf+zFrHubC39tppGoabjczZHIZpmra9/jgXTn2vnSTJaxgecsLwNRkmsueflgV5eLZarU4y+Lk6G9YIg8HxB4PBYEfY3woZQ0529rjQ3y+Evid3ez9K9LpmWTjqe2b3Ti5xlwlHhRDYzdvvFW5NOyiEAy48Pu2VeHps2sFBIUwi5/6hWeLh3okmhdCajJyLLxUunNGktS0lgdLW+agz/lZh3Bmdt6ggZS/NUBqX152brxVuOteXDZVRafsUrxq1XGHIBb6CwHoY4Tt+A1eiQ8S/AAv7AAAAAElFTkSuQmCC // ==/UserScript== // initialize LevelReset and do some checks function LevelReset_bootstrap() { LevelReset_init(); } function LevelReset_init() { // Check initialisation if (typeof Waze == 'undefined' || typeof I18n == 'undefined') { setTimeout(LevelReset_init, 660); console.log('LevelReset: Waze object unavailable, map still loading'); return; } //console.log('LevelReset: Waze - ', Waze); function onScreen(obj) { if (obj.geometry) { return(Waze.map.getExtent().intersectsBounds(obj.geometry.getBounds())); } return(false); } // Setting up all variables // @require https://gf.qytechs.cn/scripts/14472-css-dots/code/CSS%20Dots.js?version=91472 var UpdateObject = require("Waze/Action/UpdateObject"), VERSION = '0.1.3', loader = 'data:image/gif;base64,R0lGODlhEAAQAPQAAP///wAAAPj4+Dg4OISEhAYGBiYmJtbW1qioqBYWFnZ2dmZmZuTk5JiYmMbGxkhISFZWVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH+GkNyZWF0ZWQgd2l0aCBhamF4bG9hZC5pbmZvACH5BAAKAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAAQAAAFUCAgjmRpnqUwFGwhKoRgqq2YFMaRGjWA8AbZiIBbjQQ8AmmFUJEQhQGJhaKOrCksgEla+KIkYvC6SJKQOISoNSYdeIk1ayA8ExTyeR3F749CACH5BAAKAAEALAAAAAAQABAAAAVoICCKR9KMaCoaxeCoqEAkRX3AwMHWxQIIjJSAZWgUEgzBwCBAEQpMwIDwY1FHgwJCtOW2UDWYIDyqNVVkUbYr6CK+o2eUMKgWrqKhj0FrEM8jQQALPFA3MAc8CQSAMA5ZBjgqDQmHIyEAIfkEAAoAAgAsAAAAABAAEAAABWAgII4j85Ao2hRIKgrEUBQJLaSHMe8zgQo6Q8sxS7RIhILhBkgumCTZsXkACBC+0cwF2GoLLoFXREDcDlkAojBICRaFLDCOQtQKjmsQSubtDFU/NXcDBHwkaw1cKQ8MiyEAIfkEAAoAAwAsAAAAABAAEAAABVIgII5kaZ6AIJQCMRTFQKiDQx4GrBfGa4uCnAEhQuRgPwCBtwK+kCNFgjh6QlFYgGO7baJ2CxIioSDpwqNggWCGDVVGphly3BkOpXDrKfNm/4AhACH5BAAKAAQALAAAAAAQABAAAAVgICCOZGmeqEAMRTEQwskYbV0Yx7kYSIzQhtgoBxCKBDQCIOcoLBimRiFhSABYU5gIgW01pLUBYkRItAYAqrlhYiwKjiWAcDMWY8QjsCf4DewiBzQ2N1AmKlgvgCiMjSQhACH5BAAKAAUALAAAAAAQABAAAAVfICCOZGmeqEgUxUAIpkA0AMKyxkEiSZEIsJqhYAg+boUFSTAkiBiNHks3sg1ILAfBiS10gyqCg0UaFBCkwy3RYKiIYMAC+RAxiQgYsJdAjw5DN2gILzEEZgVcKYuMJiEAOwAAAAAAAAAAAA==', strt = '', fwy_lvl = 4, rmp_lvl = 4, maj_lvl = 3, min_lvl = 2, pri_lvl = 1, absolute = false, fwy_cnt = 0, rmp_cnt = 0, maj_cnt = 0, min_cnt = 0, pri_cnt = 0, relockObject = null, userlevel = Waze.loginManager.user.normalizedLevel, //userlevel = 5, // Temp to test system relockTab = document.createElement('li'), userInfo = document.getElementById('user-info'), navTabs = userInfo.querySelector('.nav-tabs'), tabContent = userInfo.querySelector('.tab-content'), relockContent = document.createElement('div'), relockTitle = document.createElement('h3'), relockSubTitle = document.createElement('h4'), relockScanbutton = document.createElement('input'), relockAllbutton = document.createElement('input'), relockSub = document.createElement('p'), versionTitle = document.createElement('p'), resultsCntr = document.createElement('div'), warningCntr = document.createElement('div'), hidebutton = document.createElement('div'), dotscntr = document.createElement('div'), readable = {'pri':'Primary Streets (L2)','min':'Minor Highways (L3)', 'maj':'Major Highways (L4)', 'rmp':'Ramps (L5)', 'fwy':'Freeways (L5)'}; // Begin building relockContent.id = 'sidepanel-relockTab'; relockContent.className = 'tab-pane'; relockTitle.appendChild(document.createTextNode('Relock segments')); relockTitle.style.cssText = 'margin-bottom:0'; relockTab.innerHTML = '<a href="#sidepanel-relockTab" data-toggle="tab" title="Relock segments">Re - <span class="icon-lock" id="lockcolor" style="color:green"></span></a>'; // fill tab relockSub.innerHTML = 'Your on-screen area is automatically scanned when you load or pan around. Pressing the lock behind each type will relock only those results, or you can choose to relock all.<br/><br/>You can only relock segments lower or equal to your current editor level. Segments locked higher than normal are left alone.'; relockSub.style.cssText = 'font-size:85%;padding:15px;border:1px solid red;border-radius:5px;position:relative'; relockSub.id = 'sub'; hidebutton.style.cssText ='cursor:pointer;width:16px;height:16px;position:absolute;right:3px;top:3px;background-image:url(\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAAWdEVYdENyZWF0aW9uIFRpbWUAMTEvMjAvMTVnsXrkAAADTUlEQVQ4jW2TW0xbZQCAv3ODnpYWegEGo1wKwzBcxAs6dONSjGMm3kjmnBqjYqLREE2WLDFTIBmbmmxRpzHy4NPi4zRLfNBlZjjtnCEaOwYDJUDcVqC3UzpWTkt7fp80hvk9f/nePkkIwWb+gA5jMXLQjK50Zc2cuKVp4wlX2UevtAYubnal/waWoTI1N38keu7ck2uTl335ZFJCkpE8XlGob4ibgeZvMl7P8MtdO6/dFohDe/Sn0LdzJ457MuHfUYqLkYtsSIqMJASyIiNv30Gm6+G1zNbqvpf6gqF/AwaUXx+/MDdz6KArH4ujVVRAbgPVroMsQz6P6nJiGUnUGj/pR/tTyx2dtW+11t2UAa5Pz34w//GHLitpsG1wkODp0xQ11GOZJpgmzq5uqo8ew76zAxFPUDJxscwzFR4BkGfh/tj58/3Zq9OoFZU0PHsAd00NnWNj6IEApd3duA48g2nXKenpQSl1oceWsUeuPfdp+M9GZf/zA5+lz3x9lxRbAUli+dIlKnt7Ud1uCk1NJH0+VnMmq6EQfw0NUzCSULBQfT4HVf4iNRO50VlIGSi6jup0sj5zlTO7d9N48iRLa2vkCwWsyTArbx/GAaSBm/MLyLm85OjZs0c2zawQsoRmt5NeXCRyeRLh9rBkGBSEwF6i09h+L96GemyAx2bDK4ENkGRJkbM2fVy4PRhT08RmZvH09VE29C6ixEFuahL3hklLby9PhEKUt7VRZln4kHD669Bqtl6Q7W07jqWL9FQiEkHTdUoGBsgXF5EPh0m8M8Tc62/CSoLSqmqaR4ZxaRpenxfbgw8lCy2Nx5Uv3xuNXEll7shO/HI38Rjr09NImkriyCgOy0JZTZM4+x3C7SY+epTaLZWsdwXJPNV/6jF/9ReSEIKzmcKWpbHPF9OHDxUr6xksoAiQJAmnpuEWAqeq4G9uRr7nPpZeeDG10NqybV+5Ly4DPGJXlsv79u51v38iK22/EwmwACEEIpdD2tjApmncan8A49XX4qtNgeC+cl/8tpm+jxoBY+K3N7I/jj+dvxKuIhZV7KpKWV295dy1K6YEg1/NO2wj+/210f+98R9+hub0wo1BOZnslRVV16orf0hVeD55HH7d7P4N0V1gY9/zcaEAAAAASUVORK5CYII=\');'; hidebutton.onclick = function() { localStorage.msgHide = 1; $('#sub').hide('slow'); }; dotscntr.style.cssText = 'width:16px;height:16px;margin-left:5px;background:url("'+ loader + '");vertical-align:text-top;display:none'; dotscntr.id = 'dotscntr'; relockSubTitle.innerHTML = 'Results'; versionTitle.innerHTML = 'Version ' + VERSION; versionTitle.style.cssText = 'margin-top:2px;font-size:85%;font-weight:bold'; relockScanbutton.type = 'button'; relockScanbutton.value = 'Rescan area'; relockScanbutton.style.cssText = 'margin: 10px 3px 0 0'; relockScanbutton.onclick = function() { scanArea(); }; relockAllbutton.type = 'button'; relockAllbutton.value = 'Relock All'; relockAllbutton.style.cssText = 'margin: 10px 3px 0 5px'; relockAllbutton.onclick = function() { relockAll(); }; // Remember to save warningCntr.style.cssText = 'margin-top:15px;border:1px solid #FFBB00;background:#FFE599;color:#664C00;border-radius:5px;padding:10px 5px;text-align:center;font-weight:bold;display:none;'; warningCntr.innerHTML = 'Remember to save these changes!'; warningCntr.id = 'warningCntr'; // add to stage navTabs.appendChild(relockTab); tabContent.appendChild(relockContent); relockContent.appendChild(relockTitle); relockContent.appendChild(versionTitle); // only show if user didn't hide it before if (localStorage.msgHide != 1) { relockSub.appendChild(hidebutton); relockContent.appendChild(relockSub); } relockContent.appendChild(relockSubTitle); relockContent.appendChild(resultsCntr); relockContent.appendChild(relockScanbutton); relockContent.appendChild(relockAllbutton); relockContent.appendChild(dotscntr); relockContent.appendChild(warningCntr); // Some functions function relock(obj, key) { $('#dotscntr').css('display', 'inline-block'); $.each(obj[key], function( id, value ) { Waze.model.actionManager.add(value); }); $('#warningCntr:hidden').fadeIn('fast'); scanArea(); $('#dotscntr').hide('slow'); } function relockAll() { // only lock "all" until the current editors level is reached, then stop... var lvlCnt = 2; $('#dotscntr').css('display', 'inline-block'); if (userlevel < 5 ) { // Editors L5 and higher $.each(relockObject, function( key, value ) { if (value.length !== 0) { // loop trough each segment (updateObject) $.each(value, function( id, obj ) { Waze.model.actionManager.add(obj); }); } }); } else { // Editor L4 and lower $.each(relockObject, function( key, value ) { if(value.length !== 0 && userlevel >= lvlCnt) { // loop trough each segment (updateObject) $.each(value, function( id, obj ) { Waze.model.actionManager.add(obj); }); } lvlCnt++; }); } $('#warningCntr:hidden').fadeIn('fast'); scanArea(); $('#dotscntr').hide('slow'); } function scanArea() { // Object with array of roadtypes, to collect each wrongly locked segment, for later use relockObject = {'pri':[], 'min':[], 'maj':[], 'rmp':[], 'fwy':[]}; var foundBadlocks = false; var count = 0; // Do a count on how many segments are in need of a correct lock (limit to 150 to save CPU) // Count also depends on the users editor level $.each(Waze.model.segments.objects, function( k, v ) { if (count < 150 && v.type == "segment" && onScreen(v) && v.isGeometryEditable()) { // Primary (Lock 2) if (v.attributes.roadType == 2 && (v.attributes.lockRank < pri_lvl || (absolute && v.attributes.lockRank != pri_lvl))) { strt = Waze.model.streets.get(v.attributes.primaryStreetID); relockObject.pri.push(new UpdateObject(v, {lockRank: pri_lvl})); count++; foundBadlocks = true; } // Minor Highway if (v.attributes.roadType == 7 && (v.attributes.lockRank < min_lvl || (absolute && v.attributes.lockRank != min_lvl))) { strt = Waze.model.streets.get(v.attributes.primaryStreetID); relockObject.min.push(new UpdateObject(v, {lockRank: min_lvl})); count++; foundBadlocks = true; } // Major Highway if (v.attributes.roadType == 6 && (v.attributes.lockRank < maj_lvl || (absolute && v.attributes.lockRank != maj_lvl))) { strt = Waze.model.streets.get(v.attributes.primaryStreetID); relockObject.maj.push(new UpdateObject(v, {lockRank: maj_lvl})); count++; foundBadlocks = true; } // Ramps if (v.attributes.roadType == 4 && (v.attributes.lockRank < rmp_lvl || (absolute && v.attributes.lockRank != rmp_lvl))) { strt = Waze.model.streets.get(v.attributes.primaryStreetID); relockObject.rmp.push(new UpdateObject(v, {lockRank: rmp_lvl})); count++; foundBadlocks = true; } // Freeways if (v.attributes.roadType == 3 && (v.attributes.lockRank < fwy_lvl || (absolute && v.attributes.lockRank != fwy_lvl))) { strt = Waze.model.streets.get(v.attributes.primaryStreetID); relockObject.fwy.push(new UpdateObject(v, {lockRank: fwy_lvl})); count++; foundBadlocks = true; } } }); // Build result to users tabpanel resultsCntr.innerHTML = ''; var lvlCnt = 2; // start at 2 (pri) because we can't lock lower then 1 :-) $.each(relockObject, function( key, value ) { var __cntr = document.createElement('div'), __keyLeft = document.createElement('div'), __lckRight = document.createElement('div'), __cntRight = document.createElement('div'), __cleardiv = document.createElement("div"); // Begin building __keyLeft.style.cssText = 'float:left'; __keyLeft.innerHTML = readable[key]; __lckRight.className = ((value.length !==0) ? 'icon-lock' : ''); __cntRight.style.cssText = 'float:right'; __cntRight.innerHTML = ((value.length !==0) ? '<b>'+value.length+'</b>' : '-'); __cleardiv.style.cssText ='clear:both;'; // only add relock function if the editor's level allows it... if (userlevel < 5) { if (userlevel >= lvlCnt) { __lckRight.style.cssText = 'width:15px;float:right;padding:3px 0 0 8px;cursor:pointer;' + ((value.length!== 0) ? 'color:red' : '' ); __lckRight.onclick = function() { relock(relockObject, key); }; } else { // Grey out options to make it more visible __lckRight.className = ''; __keyLeft.style.cssText = 'float:left;color:#777'; __cntRight.style.cssText = 'float:right;color:#777'; __lckRight.style.cssText = 'float:right;padding:3px 0 0 8px;color:#777;width:15px'; } } else { // User is an L5/L6 so he can edit all road types (exceptions possible) __lckRight.style.cssText = 'width:15px;float:right;padding:3px 0 0 8px;cursor:pointer;' + ((value.length!== 0) ? 'color:red' : '' ); __lckRight.onclick = function() { relock(relockObject, key); }; } // Add to stage __cntr.appendChild(__keyLeft); __cntr.appendChild(__lckRight); __cntr.appendChild(__cntRight); __cntr.appendChild(__cleardiv); resultsCntr.appendChild(__cntr); lvlCnt++; }); // Color the small lock icon red, if errors are found, so people can decide what to do... if (foundBadlocks) { relockAllbutton.removeAttribute('disabled'); $('#lockcolor').css('color', 'red'); } else { relockAllbutton.setAttribute('disabled', true); $('#lockcolor').css('color', 'green'); } } // Do a default scan once at startup scanArea(); // Register some eventlisteners Waze.map.events.register("moveend", null, scanArea); Waze.model.actionManager.events.register("afteraction", null, scanArea); Waze.model.actionManager.events.register("afterundoaction", null, scanArea); Waze.model.actionManager.events.register("noActions", null, scanArea); } setTimeout(LevelReset_bootstrap, 2000);
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址