您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Allows alterations to the WME UI to fix things screwed up or ignored by Waze
当前为
// ==UserScript== // @name WME Fix UI // @namespace https://greatest.deepsurf.us/en/users/46070 // @description Allows alterations to the WME UI to fix things screwed up or ignored by Waze // @include https://www.waze.com/editor/* // @include https://www.waze.com/*/editor/* // @include https://editor-beta.waze.com/* // @exclude https://www.waze.com/user/editor/* // @supportURL https://www.waze.com/forum/viewtopic.php?f=819&t=191178 // @version 0.9 // @grant none // ==/UserScript== // Thanks to (in no particular order) Bellhouse, Twister-UK, Timbones, Dave2084, Rickzabel, Glodenox (function() { // global variables var wmefu_version = "0.9"; var applyCount = 0; var wmefuinit = false; var wmeFUAddon; function createAddon() { var addon = document.createElement('section'); addon.id = "wmefu-addon"; var section = document.createElement('p'); section.style.paddingTop = "0px"; section.id = "fuContent"; section.innerHTML = '<b>UI Fixes</b><br>'; section.innerHTML += '<input type="checkbox" id="_cbMoveZoomBar" /> ' + '<span title="Because nobody likes a pointless UI change that breaks your workflow, imposed by idiots who rarely use the editor and don\'t listen to feedback">Move zoom bar to left</span><br>'; section.innerHTML += '<input type="checkbox" id="_cbHideUserInfo" /> ' + '<span title="Because we can earn points quicker without a massive chunk of space wasted on telling us how many we earnt up to yesterday">Hide user info in the side panel</span><br>'; section.innerHTML += '<input type="checkbox" id="_cbShrinkBlackBar" /> ' + '<span title="Because we can\'t afford to waste screen space on stuff we didn\'t ask for and don\'t want">Shrink the black bar above the map</span><br>'; section.innerHTML += '<input type="checkbox" id="_cbCompressSegmentTab" /> ' + '<span title="Because I\'m sick of having to scroll the side panel because of oversized fonts and wasted space">Compress the contents of the side panel</span><br>'; section.innerHTML += '<input type="checkbox" id="_cbRestyleReports" /> ' + '<span title="Another UI element configured for developers with massive screens instead of normal users">Change formatting for report panels (UR/MP)</span><br>'; section.innerHTML += '<input type="checkbox" id="_cbDisableMapBlocker" /> ' + '<span title="As if the crappy interface wasn\'t making life hard enough, now they force us to wait for an arbitrary time after every save!">Disable map blocking during/after saving.</span><span title="Use at your own risk. We don\'t know why it\'s there. Maybe there\'s a good reason but Waze can\'t be arsed to tell us what it is." style="font-size: 16px; color: red;">⚠</span><br>'; section.innerHTML += '<input type="checkbox" id="_cbNarrowSidePanel" /> ' + '<span title="If you have a netbook, Waze isn\'t interested in your experience. You need every bit of map space you can get - so have a present from me!">Reduce width of the side panel</span><span title="This will definitely interfere with scripts that rely on a fixed width for their tabs." style="font-size: 16px; color: red;">⚠</span><br>'; section.innerHTML += '<br>'; section.innerHTML += '<b><a href="https://greatest.deepsurf.us/en/scripts/20077-wme-fix-ui" target="_blank"><u>' + 'WME Fix UI</u></a></b> v' + wmefu_version; addon.appendChild(section); addon.id = "sidepanel-FixUI"; addon.className = "tab-pane"; return addon } function addMyTab() { var userTabs = getId('user-info'); var navTabs = getElementsByClassName('nav-tabs', userTabs)[0]; if (typeof navTabs === "undefined") { console.log("WMEFU: not logged in - will initialise later"); Waze.loginManager.on("login", initialiseFixUI); return; } var tabContent = getElementsByClassName('tab-content', userTabs)[0]; newtab = document.createElement('li'); newtab.innerHTML = '<a href="#sidepanel-FixUI" data-toggle="tab" title="Fix UI">FU</a>'; navTabs.appendChild(newtab); tabContent.appendChild(wmeFUAddon); } function initialiseFixUI() { if (wmefuinit) { return; } // go round again if map container isn't there yet if(!window.Waze.map) { window.console.log("WME FixUI: waiting for WME..."); setTimeout(initialiseFixUI, 1000); return; } // create tab content wmeFUAddon = createAddon(); // insert the content as a tab addMyTab(); // recreate my tab when MTE mode is exited Waze.app.modeController.model.bind('change:mode', addMyTab); // setup event handlers for user actions: getId('_cbMoveZoomBar').onclick = moveZoomBar; getId('_cbShrinkBlackBar').onclick = shrinkBlackBar; getId('_cbHideUserInfo').onclick = hideUserInfo; getId('_cbCompressSegmentTab').onclick = compressSegmentTab; getId('_cbRestyleReports').onclick = restyleReports; getId('_cbDisableMapBlocker').onclick = disableMapBlocker; getId('_cbNarrowSidePanel').onclick = narrowSidePanel; // restore saved settings if (localStorage.WMEFixUI) { console.log("WMEFU: loading options"); options = JSON.parse(localStorage.WMEFixUI); getId('_cbMoveZoomBar').checked = options[1]; getId('_cbShrinkBlackBar').checked = options[2]; getId('_cbHideUserInfo').checked = options[3]; getId('_cbCompressSegmentTab').checked = options[4]; getId('_cbRestyleReports').checked = options[5]; getId('_cbDisableMapBlocker').checked = options[6]; getId('_cbNarrowSidePanel').checked = options[7]; } else { // default values if option isn't stored getId('_cbMoveZoomBar').checked = true; getId('_cbShrinkBlackBar').checked = true; getId('_cbHideUserInfo').checked = true; getId('_cbCompressSegmentTab').checked = true; getId('_cbRestyleReports').checked = true; getId('_cbDisableMapBlocker').checked = false; getId('_cbNarrowSidePanel').checked = false; } if (W.loginManager.user.userName == 'iainhouse') { // Adds an extra checkbox so I can test segment panel changes easily var brand = getId('brand'); extraCBSection = document.createElement('p'); extraCBSection.innerHTML = '<input type="checkbox" id="_cbextraCBSection" />'; brand.appendChild(extraCBSection); getId('_cbextraCBSection').onclick = FALSEcompressSegmentTab; _cbextraCBSection.checked = _cbCompressSegmentTab.checked; } // overload the WME exit function saveOptions = function() { if (localStorage) { console.log("WMEFU: saving options"); var options = []; // preserve previous options which may get lost after logout if (localStorage.WMEFixUI) options = JSON.parse(localStorage.WMEFixUI); options[1] = getId('_cbMoveZoomBar').checked; options[2] = getId('_cbShrinkBlackBar').checked; options[3] = getId('_cbHideUserInfo').checked; options[4] = getId('_cbCompressSegmentTab').checked; options[5] = getId('_cbRestyleReports').checked; options[6] = getId('_cbDisableMapBlocker').checked; options[7] = getId('_cbNarrowSidePanel').checked; localStorage.WMEFixUI = JSON.stringify(options); } }; window.addEventListener("beforeunload", saveOptions, false); // apply the settings setTimeout(applyAllSettings, 2000); wmefuinit = true; window.console.log("WMEFU: Initialised"); } function applyAllSettings() { moveZoomBar(); shrinkBlackBar(); hideUserInfo(); compressSegmentTab(); restyleReports(); disableMapBlocker(); narrowSidePanel(); applyCount += 1; } function moveZoomBar() { var reportPanel = getId('panel-container'); reportPanel.style.position = "absolute"; if (_cbMoveZoomBar.checked) { addGlobalStyle('.olControlPanZoomBar { left: 10px; width: 30px; right: inherit; }'); addGlobalStyle('#WMETB_ZoomLevelIndicator { left: 43px !important; right: inherit !important; }'); if (document.body.dir != "rtl") { addGlobalStyle('.panel { left: 61px; }'); } else { addGlobalStyle('.panel { right: inherit; }'); } } else { addGlobalStyle('.olControlPanZoomBar { left: inherit; width: 30px; right: 10px; }'); addGlobalStyle('#WMETB_ZoomLevelIndicator { left: inherit !important; right: 43px !important; }'); if (document.body.dir != "rtl") { addGlobalStyle('.panel { left: inherit; }'); } else { addGlobalStyle('.panel { right: 61px; }'); } } } function hideUserInfo() { // WME Panel Swap buttons - move them up if user info is hidden var PSButton1 = getId('WMEPS_UIButton'); var PSButton2 = getId('WMEPS_EditButton'); if (_cbHideUserInfo.checked) { addGlobalStyle('#sidebar #user-info #user-box { padding: 0px; }'); addGlobalStyle('#sidebar #user-details .user-profile { display: none !important; }'); if (PSButton1) PSButton1.style.top = '-27px'; if (PSButton2) PSButton2.style.top = '-27px'; // Keep My Layers toggle - move up if user info is hidden addGlobalStyle('.kml-toggle-container { top: -25px; }'); } else { addGlobalStyle('#sidebar #user-info #user-box { padding: 20px; }'); addGlobalStyle('#sidebar #user-details .user-profile { display: inherit !important; }'); if (PSButton1) PSButton1.style.top = '0px'; if (PSButton2) PSButton2.style.top = '0px'; // Keep My Layers toggle - move back down if user info is shown addGlobalStyle('.kml-toggle-container { top: 13px; }'); } } function shrinkBlackBar() { var wm = getId('WazeMap'); if (_cbShrinkBlackBar.checked) { addGlobalStyle('.topbar { height: 20px; line-height: 20px; }'); addGlobalStyle('.topbar .location-info { font-size: 12px; }'); } else { addGlobalStyle('.topbar { height: 30px; line-height: 30px; }'); addGlobalStyle('.topbar .location-info { font-size: 15px; }'); } // $(window).trigger('resize'); window.dispatchEvent(new Event('resize')); } function FALSEcompressSegmentTab() { _cbCompressSegmentTab.checked = _cbextraCBSection.checked; compressSegmentTab(); } function compressSegmentTab() { var ep=getId('edit-panel'); if (_cbCompressSegmentTab.checked) { // shrink address addGlobalStyle('#edit-panel .primary-street { font-size: 14px; line-height: 15px; font-weight: 600; color: black; }'); addGlobalStyle('#edit-panel .address-edit-view .preview .address-edit-btn:not(.disabled) { background-color: #FFF9C4; }'); addGlobalStyle('#edit-panel .segment .address-edit-view, .edit-panel .segment .address-edit-view { margin-bottom: 5px; }'); //shrink tabs addGlobalStyle('#sidebar .nav-tabs li a { padding: 4px; }'); addGlobalStyle('#sidebar .nav-tabs { margin-bottom: 5px; }'); //reduce some vertical margins addGlobalStyle('#edit-panel .contents { padding-top: 0px; }'); addGlobalStyle('#edit-panel .form-group { margin-bottom: 2px; line-height: 1; font-size: 11px; }'); addGlobalStyle('#edit-panel .selection { margin-bottom: 5px; }'); addGlobalStyle('#sidebar .side-panel-section:not(:last-child) { margin-bottom: 2px; }'); addGlobalStyle('#sidebar .side-panel-section:not(:last-child)::after { margin-top: 5px; margin-bottom: 2px; }'); addGlobalStyle('#edit-panel .control-label { margin-bottom: 1px; }'); addGlobalStyle('#sidebar .controls-container { padding-top: 2px; }'); addGlobalStyle('#edit-panel .segment .speed-limit label { margin-bottom: 0px; }'); addGlobalStyle('#edit-panel .more-actions { padding-top: 2px; }'); addGlobalStyle('#edit-panel .segment .speed-limit .direction-label, #edit-panel .segment .speed-limit .unit-label { line-height: 2.1em; }'); //shrink dropdown controls & buttons addGlobalStyle('#edit-panel button, #edit-panel select, #edit-panel .form-control { font-size: 11px; height: 22px; padding: 0px 4px; }'); addGlobalStyle('#edit-panel .more-actions button:not(:last-of-type) { margin-bottom: 2px; }'); addGlobalStyle('.edit-closure .input-group-addon { padding: 2px 8px; }'); //fit road property checkboxes on one line for all three (if text length allows) addGlobalStyle('#edit-panel .controls-container { display: inline-block; }'); addGlobalStyle('#edit-panel .controls-container label { font-size: 12px; line-height: 18px; padding-left: 22px; }'); addGlobalStyle('#edit-panel .select-entire-street { width: 49%; overflow: hidden; }'); addGlobalStyle('#edit-panel .edit-house-numbers { width: 49%; overflow: hidden; }'); addGlobalStyle('#edit-panel .action-button { color: black; }'); } else { //enlarge address addGlobalStyle('#edit-panel .primary-street { font-size: 18px; line-height: 24px; font-weight: inherit; color: inherit; }'); addGlobalStyle('#edit-panel .address-edit-view .preview .address-edit-btn:not(.disabled) { background-color: inherit; }'); addGlobalStyle('#edit-panel .segment .address-edit-view, .edit-panel .segment .address-edit-view { margin-bottom: 20px; }'); //enlarge tabs addGlobalStyle('#sidebar .nav-tabs li a { padding: 5px 15px; }'); addGlobalStyle('#sidebar .nav-tabs { margin-bottom: 20px; }'); //restore vertical margins addGlobalStyle('#edit-panel .contents { padding-top: 20px; }'); addGlobalStyle('#edit-panel .form-group { margin-bottom: 10px; line-height: 1.43; font-size: 13px; }'); addGlobalStyle('#edit-panel .selection { margin-bottom: 20px; }'); addGlobalStyle('#sidebar .side-panel-section:not(:last-child) { margin-bottom: 21px; }'); addGlobalStyle('#sidebar .side-panel-section:not(:last-child)::after { margin-top: 21px; margin-bottom: 21px; }'); addGlobalStyle('#edit-panel .control-label { margin-bottom: 5px; }'); addGlobalStyle('#sidebar .controls-container { padding-top: 7px; }'); addGlobalStyle('#edit-panel .segment .speed-limit label { margin-bottom: 5px; }'); addGlobalStyle('#edit-panel .more-actions { padding-top: 10px; }'); addGlobalStyle('#edit-panel .segment .speed-limit .direction-label, #edit-panel .segment .speed-limit .unit-label { line-height: 2.5em; }'); //enlarge dropdown controls & buttons addGlobalStyle('#edit-panel button, #edit-panel select, #edit-panel .form-control { font-size: 13px; height: 32px; padding: 6px 12px; }'); addGlobalStyle('#edit-panel .more-actions button:not(:last-of-type) { margin-bottom: 10px; }'); addGlobalStyle('.edit-closure .input-group-addon { padding: 6px 8px; }'); //restore road property checkboxes to one line per item addGlobalStyle('#edit-panel .controls-container { display: inherit; }'); addGlobalStyle('#edit-panel .controls-container label { font-size: inherit; line-height: inherit; padding-left: 25px; }'); addGlobalStyle('#edit-panel .select-entire-street { width: 100%; overflow: inherit; }'); addGlobalStyle('#edit-panel .edit-house-numbers { width: 100%; overflow: inherit; }'); addGlobalStyle('#edit-panel .action-button { color: inherit; }'); } //tweak required for Speedhelper script addGlobalStyle('div[id^="spd_"] { line-height: 1.43; }'); } function restyleReports() { if (_cbRestyleReports.checked) { addGlobalStyle('#panel-container .panel { font-size: 12px; line=height: 1; }'); addGlobalStyle('#panel-container .problem-edit .header { padding: 5px 10px; line-height: 15px; }'); addGlobalStyle('#panel-container .problem-edit .problem-data .title { line-height: 22px; }'); addGlobalStyle('#panel-container .problem-edit .section .content { padding: 5px; }'); addGlobalStyle('#WMEFP-UR-ALLPM { top: -2px !important; }'); addGlobalStyle('#panel-container .problem-edit .conversation.section .comment .comment-content { padding: 5px; }'); addGlobalStyle('#panel-container .problem-edit .conversation.section .new-comment-form { padding: 5px; }'); addGlobalStyle('#panel-container .problem-edit .conversation.section .new-comment-form textarea { resize: vertical; height: 110px; margin-bottom: 5px; padding: 3px 5px; font-size: 12px; }'); addGlobalStyle('#panel-container .btn { height: 20px; padding: 0px 10px;}'); addGlobalStyle('#panel-container .problem-edit .actions .content { padding: 2px 5px;}'); addGlobalStyle('#panel-container .problem-edit .actions .controls-container label { margin-bottom: 2px; }'); addGlobalStyle('#panel-container .problem-edit .actions .navigation { margin-top: 5px;}'); } else { addGlobalStyle('#panel-container .panel { font-size: inherit; line=height: inherit; }'); addGlobalStyle('#panel-container .problem-edit .header { padding: 10px 15px; line-height: 21px; }'); addGlobalStyle('#panel-container .problem-edit .problem-data .title { line-height: 40px; }'); addGlobalStyle('#panel-container .problem-edit .section .content { padding: 15px; }'); addGlobalStyle('#WMEFP-UR-ALLPM { top: 10px !important; }'); addGlobalStyle('#panel-container .problem-edit .conversation.section .comment .comment-content { padding: 10px 15px 10px 15px; }'); addGlobalStyle('#panel-container .problem-edit .conversation.section .new-comment-form { padding: 15px 15px 10px 15px; }'); addGlobalStyle('#panel-container .problem-edit .conversation.section .new-comment-form textarea { resize: none; height: 70px; margin-bottom: 10px; padding: 6px 10px; font-size: 13px; }'); addGlobalStyle('#panel-container .btn { height: inherit; padding: 6px 20px;}'); addGlobalStyle('#panel-container .problem-edit .actions .content { padding: 15px;}'); addGlobalStyle('#panel-container .problem-edit .actions .controls-container label { margin-bottom: 12px; }'); addGlobalStyle('#panel-container .problem-edit .actions .navigation { margin-top: 10px;}'); } } function disableMapBlocker() { if (_cbDisableMapBlocker.checked) { addGlobalStyle('#popup-overlay { width: 0%; height: 0%; }'); } else { addGlobalStyle('#popup-overlay { width: 100%; height: 100%; }'); } } function narrowSidePanel() { if (_cbNarrowSidePanel.checked) { addGlobalStyle('.row-fluid #sidebar { width: 250px; }'); addGlobalStyle('.col-fixed-330 { width: 250px; }'); if (document.body.dir != "rtl") { addGlobalStyle('.show-sidebar .row-fluid .fluid-fixed { margin-left: 250px; }'); addGlobalStyle('.col-offset-330 { padding-left: 250px; }'); } else { addGlobalStyle('.show-sidebar .row-fluid .fluid-fixed { margin-right: 250px; }'); addGlobalStyle('.col-offset-330 { padding-right: 250px; }'); } addGlobalStyle('.edit-closure .form { padding: 2px; }'); addGlobalStyle('.edit-closure .date-input-group { width: 56%; }'); } else { addGlobalStyle('.row-fluid #sidebar { width: 330px; }'); addGlobalStyle('.col-fixed-330 { width: 330px; }'); if (document.body.dir != "rtl") { addGlobalStyle('.show-sidebar .row-fluid .fluid-fixed { margin-left: 330px; }'); addGlobalStyle('.col-offset-330 { padding-left: 330px; }'); } else { addGlobalStyle('.show-sidebar .row-fluid .fluid-fixed { margin-right: 330px; }'); addGlobalStyle('.col-offset-330 { padding-right: 330px; }'); } addGlobalStyle('.edit-closure .form { padding 15px; }'); addGlobalStyle('.edit-closure .date-input-group { width: 62%; }'); } // $(window).trigger('resize') window.dispatchEvent(new Event('resize')); } //Helper functions function addGlobalStyle(css) { var head, style; head = document.getElementsByTagName('head')[0]; if (!head) { return; } style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; head.appendChild(style); } function getElementsByClassName(classname, node) { if(!node) node = document.getElementsByTagName("body")[0]; var a = []; var re = new RegExp('\\b' + classname + '\\b'); var els = node.getElementsByTagName("*"); for (var i=0,j=els.length; i<j; i++) if (re.test(els[i].className)) a.push(els[i]); return a; } function getId(node) { return document.getElementById(node); } // Start it running setTimeout(initialiseFixUI, 500); })();