Allows alterations to the WME UI to fix things screwed up or ignored by Waze
当前为
// ==UserScript==
// @name WME Fix UI
// @namespace https://greasyfork.org/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.3
// @grant none
// ==/UserScript==
// Thanks to (in no particular order) Bellhouse, Twister-UK, Timbones, Dave2084, Rickzabel
(function()
{
// global variables
var wmefu_version = "0.3";
var applyCount = 0;
var wmefuinit = false;
var shrinkBlackBarActive = false;
var compressSegmentTabActive = false;
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 styles that will be used later
// create tab contents
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 += '<br>';
section.innerHTML += '<b><a href="https://greasyfork.org/en/scripts/20077-wme-fix-ui" target="_blank"><u>'
+ 'WME Fix UI</u></a></b> v' + wmefu_version;
addon.appendChild(section);
// insert the content as a tab
var userTabs = getId('user-info');
var navTabs = getElementsByClassName('nav-tabs', userTabs)[0];
var tabContent = getElementsByClassName('tab-content', userTabs)[0];
if (typeof navTabs === "undefined") {
console.log("WMEFU: not logged in - will initialise later");
Waze.loginManager.on("login", initialiseFixUI);
return;
}
newtab = document.createElement('li');
newtab.innerHTML = '<a href="#sidepanel-FixUI" data-toggle="tab">FU</a>';
navTabs.appendChild(newtab);
addon.id = "sidepanel-FixUI";
addon.className = "tab-pane";
tabContent.appendChild(addon);
// setup event handlers for user actions:
getId('_cbMoveZoomBar').onclick = moveZoomBar;
getId('_cbShrinkBlackBar').onclick = shrinkBlackBar;
getId('_cbHideUserInfo').onclick = hideUserInfo;
getId('_cbCompressSegmentTab').onclick = compressSegmentTab;
// 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];
} else {
getId('_cbMoveZoomBar').checked = true;
getId('_cbShrinkBlackBar').checked = true;
getId('_cbHideUserInfo').checked = true;
getId('_cbCompressSegmentTab').checked = true;
}
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;
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() {
applyCount += 1;
if (applyCount < 5) {
setTimeout(applyAllSettings, 2000);
}
moveZoomBar();
shrinkBlackBar();
hideUserInfo();
compressSegmentTab();
}
function moveZoomBar() {
var WMETBZLI = getId('WMETB_ZoomLevelIndicator');
var reportPanel = getId('panel-container');
if (_cbMoveZoomBar.checked) {
$(".olControlPanZoomBar").css({'left':10,'width':30,'right':""});
if (reportPanel) {
reportPanel.style.left = "70px";
reportPanel.style.position = "absolute";
}
if (WMETBZLI) {
WMETBZLI.style.left = "50px";
WMETBZLI.style.right = "";
}
} else {
$(".olControlPanZoomBar").css({'left':"",'width':30,'right':10});
if (reportPanel) {
reportPanel.style.left = "";
reportPanel.style.position = "";
}
if (WMETBZLI) {
WMETBZLI.style.left = "";
WMETBZLI.style.right = "50px";
}
}
}
function hideUserInfo() {
var PSButton = getId('WMEPS_UIButton');
var userbox = getId('user-box');
// WME Panel Swap button - move it up off the tabs if user info is hidden
if (_cbHideUserInfo.checked) {
userbox.style.padding = '0px';
$(".user-profile").css({'display':'none'});
if (PSButton) PSButton.style.top = '-20px';
} else {
userbox.style.padding = '20px';
$(".user-profile").css({'display':'block'});
if (PSButton) PSButton.style.top = '10px';
}
}
function shrinkBlackBar() {
var wm = getId('WazeMap');
if (_cbShrinkBlackBar.checked) {
$(".topbar").css({'height':'20px','line-height':'20px','padding':'0 10px'});
$(".topbar .location-info").css({'font-size':'12px'});
if (!shrinkBlackBarActive) wm.style.height = (wm.offsetHeight + 10) + 'px';
} else {
$(".topbar").css({'height':'30px','line-height':'30px','padding':'0 10px'});
$(".topbar .location-info").css({'font-size':'15px'});
if (shrinkBlackBarActive) wm.style.height = (wm.offsetHeight - 10) + 'px';
}
shrinkBlackBarActive = _cbShrinkBlackBar.checked;
}
function FALSEcompressSegmentTab() {
_cbCompressSegmentTab.checked = _cbextraCBSection.checked;
compressSegmentTab();
}
function compressSegmentTab() {
var ep=getId('edit-panel')
if (_cbCompressSegmentTab.checked) {
if (!compressSegmentTabActive) {
// shrink address
addGlobalStyle('.primary-street { font-size: 13px; line-height: 15px; }');
addGlobalStyle('.address-edit { margin-bottom: 5px !important; }');
//shrink tabs
addGlobalStyle('.nav > li > a { padding: 4px !important; }');
//reduce some vertical margins
addGlobalStyle('.contents { padding-top: 0px !important; }');
addGlobalStyle('.form-group { margin-bottom: 2px !important; line-height: 1; font-size: 11px; }');
addGlobalStyle('.selection { margin-bottom: 5px !important; }');
addGlobalStyle('.side-panel-section { margin-bottom: 5px !important; }');
addGlobalStyle('.side-panel-section::after { margin-top: 5px !important; margin-bottom: 2px !important; }');
addGlobalStyle('.control-label { margin-bottom: 1px !important; }');
//shrink dropdown controls
addGlobalStyle('.form-control { height: 22px !important; padding: 0px 12px !important; font-size: 11px; }');
//shrink button controls
addGlobalStyle('.action-button { font-size: 11px; height: 22px; padding: 0px 12px; margin-bottom: 2px !important; }');
}
} else {
if (compressSegmentTabActive) {
//enlarge address
addGlobalStyle('.primary-street { font-size: 18px; line-height: 24px; }');
addGlobalStyle('.address-edit { margin-bottom: 20px !important; }');
//enlarge tabs
addGlobalStyle('.nav > li > a { padding: 5px 15px !important; }');
//restore vertical margins
addGlobalStyle('.contents { padding-top: 20px !important; }');
addGlobalStyle('.form-group { margin-bottom: 10px !important; line-height: 1.43; font-size: 13px; }');
addGlobalStyle('.selection { margin-bottom: 20px !important; }');
addGlobalStyle('.side-panel-section { margin-bottom: 21px !important; }');
addGlobalStyle('.side-panel-section::after { margin-top: 21px !important; margin-bottom: 21px !important; }');
addGlobalStyle('.control-label { margin-bottom: 5px !important; }');
//enlarge dropdown controls
addGlobalStyle('.form-control { height: 32px !important; padding: 6px 12px !important; font-size: 13px; }');
//enlarge button controls
addGlobalStyle('.action-button { font-size: 13px; height: 32px; padding: 6px 12px; margin-bottom: 10px !important; }');
}
}
compressSegmentTabActive = _cbCompressSegmentTab.checked
}
//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, 1000);
})();