Greasy Fork is available in English.

WME Beta/Prod switcher

allow you to switch faster from beta to prod editor and vice versa

// ==UserScript==
// @name			WME Beta/Prod switcher
// @namespace		@BPS_Myriades
// @description		allow you to switch faster from beta to prod editor and vice versa
// @include			https://*.waze.com/*editor/*
// @icon			data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA3CAYAAABQOymxAAAABGdBTUEAAYagMeiWXwAAAAlwSFlz AAALEwAACxMBAJqcGAAAAAd0SU1FB98BFRQjL3tMy9MAAATrSURBVGje7ZldbBVFFMd/e1uKt0XK h+3dC2I0YjRgINKARow8iAmEgA9IotGINoqQUIkajD5oDD7ogzEKKA9EDARjbDCoCcQYE4nGRGjF irUoWFEiDbRIC/2+3T3jw521y3Rvb6F3t03cfzLJnbm755z/njMz58xAjBgxYsSIESNGjEEoUIWS lQjDOAVKICPwiwPL/w/esO6GyQ6sEmgZhbjbAKuQHi4ULGAiMFsbt7sImh1Y4SesPb9VIAOQgfkC RwS6BQ5n4HY9vsCBxi5w34b28UR4JrAE2AH0osNZgcqACDQ5sMJP2IXHDkERgECdCzWtUOZCjcBh b/wgbEuCu1HLAzaPB8LrszwGmxr8vTco3Ouh2OsL9LRAEqAVygS6vfEknARU8nKZe8YD6aXApQDC r+VbbbWH15+FUu3hIwDn4cTToK4BteFymQqoHmvCdwJnAgivy0c4A3cI1An0CNRlYD5QshBaj4Hq AvX6UMIKqBorsssMQ5ys41DAylFslZuBPoYS9dpvQGnUZG2gg6Hh9qL+PW+U8ueSXeFzkX4qasI/ GwbsRa++wF1AugA6Jvmni9GOR+nl5wzlZ4AJIemaBVzMQXpRFGQnAecMxRtC1rnatzb4W20UhKsM pd1AKgK9P+RYvELHfkPp9xFNo/sCCJ8FpoZZLRUDC4yxtuFeuK6f2baw3RY+t102UJvVWdFNyhbe sIWPKl02UT+YgeXAMeBCwPSaFCbhSqDcGGvP9fCMXq4vnkA9cCPQicU2+0HeuqGDKUVJvlPwiIJM wqLGXsC+PLrbGFp5lQHXhhlWc4B+I6x259yoha228M5/X8vhAVtwU8K3ttAw9QKTASpaKbOF5vQA 9+TR/1VAWM8N08PlQIkxNtwXrlIuH3qd1mI+A/ZYsNh1WNs+jUsAbZV0K/jETeRNGf8x+j1AV5iE g+rSiit6R9GMhZVIMC3AGGsEdbdJuDtMwu06pP2YnWulVNBAEQ97/VSGOVhsVoo6K8HOdCfTAdIt JC1YjXA0j34ze7s43BpSCFTqsDLn0f2B1vUyyxY6UsIBW9hlC522sHPGJabZQnNKOJ0S3rWFRlv4 cgTOOW7o/TSK/fBUAOGGXA9X9HGzLWxPCftTLs9428/0HtIpYUdK+CIlbEm3ZA8C8pyumBXU4igI fxxA2NGlYph40tB5KqriYV6ORN7R+20YKAFOG/pqoqqUygKUe62tQHm1Tfb0w8MeQ8/RgO0xVKzL Ub0o4O8CFP/ztPzngZcM+W6IkTTsfnhymNOIfm1o0VXKX67liCbol33vWJ1nLQpIM81DgYlXKbs6 h7yFozV6NHdLR4AXgtIqHXdpgSYX1owgfVMBpxwmSq+0MgoL7zP0IL5+DRQ7sFSG5r8jIbxrmMip Hg+kn/XmmjZ+ZS0kNOET3kP9cIvA1wJdAscGYJHyXc/4iB/S1zKqGdSybIHwnp6/MxknuBVo9Bsv kHF859MC37iw9k+Y6MBygZ9yeLgJ+KAIntgHjzrwK/kLi7GBZ/yrYDmwROB3H+Eu44O4QYTbYZPA HwID+jmnUPYlIvgG/krqR4HHz0GZBVZCb1sKent8lVA5bBHYeB6muLDKuvrtLRoPa6+IwF8uPOT9 1wc3CRwQuOifswJvCnR6fRdeFugQaHHhlfF4IR4jRowYMWLEiBHDxL9n5GmO270lnAAAAABJRU5E rkJggg==
// @version			0.2.5
// @copyright		2015, Myriades
// ==/UserScript==

/***	Bootstrap et inits	***/
function BPS_Bootstrap(){
    if (typeof unsafeWindow === "undefined") {
        unsafeWindow    = ( function () {
            var dummyElem = document.createElement('p');
            dummyElem.setAttribute('onclick', 'return window');
            return dummyElem.onclick();
        }) ();
    }
	console.info('BPS_Bootstrap ok');
    BPS_Initialise();
}

function BPS_Initialise(){
	_isBetaTester = null;
	_helpers = new helpers();
	_helpers.checkUserGroup('WME beta testers');
	_BPSimgs = new imgs();
	_helpers.log('BPS_Initialise', 'info', 'Done');
	BPS_check_Waze_Els();
}

function BPS_check_Waze_Els(){
	//	Waze object needed
	if(typeof(unsafeWindow.Waze) == 'undefined'){
		_helpers.log('BPS_check_Waze_Els', 'error', 'unsafeWindow.Waze NOK', unsafeWindow.Waze);
		window.setTimeout(BPS_check_Waze_Els, 500);
		return;
	}
	_Waze = unsafeWindow.Waze;
	if(typeof(_Waze.loginManager) == 'undefined'){
		_helpers.log('BPS_check_Waze_Els', 'error', 'Waze.loginManager NOK', _Waze.loginManager);
		window.setTimeout(BPS_check_Waze_Els, 500);
		return;
	}
	_loginManager = _Waze.loginManager;
	if(_loginManager.user == null){
		_helpers.log('BPS_check_Waze_Els', 'error', 'You are not logged!');
		window.setTimeout(BPS_check_Waze_Els, 1000);
		return;
	}
	//	Waze UI
	if(_helpers.getId('edit-buttons') === null){
		setTimeout(BPS_check_Waze_Els, 250);
		return;
	}
	_layerSwitcher = _helpers.getId('edit-buttons');
	WME_env = /www/.test(location.href);
	var WME_beta = /editor-beta/.test(location.href);
	if(!WME_env && !WME_beta){
		setTimeout(BPS_check_Waze_Els, 250);
		return;
	}
	//	Check user as a beta tester
	if(WME_env){
		switch(_isBetaTester){
			case null:
				_helpers.log('BPS_check_Waze_Els', 'info', 'User groups not acquired, waiting');
				window.setTimeout(BPS_check_Waze_Els, 500);
				return;
			case false:
				_helpers.log('BPS_check_Waze_Els', 'info', 'You are not an editor beta tester (if you are, please subscribes @https://www.waze.com/forum/ucp.php?i=167 . Exiting script!');
				return;
		}
	}
	_helpers.log('BPS_check_Waze_Els', 'info', 'Done');
	BPS_html();
}

/***	HELPERS		***/
function helpers(){
	this.log = function(fName, type, text){
		var text = GM_info.script.name + ' V' + GM_info.script.version + ' ' + fName + ' : ' + text;
		switch(type){
			case 'info':
				console.info(text);
				break;
			case 'error':
				console.error(text);
				break;
			case 'warn':
				console.warn(text);
				break;
			// case 'debug':
				// console.debug(text);
				// break;
			default:
				console.log(text);
				break;
		}
		if(arguments[3] != null){
			switch(typeof(arguments[3])){
				case 'string':
				case 'boolean':
					console.log(arguments[3]);
					break;
				default:
					console.dir(arguments[3]);
					break;
			}
		}
	}

	this.insertAfter = function(element, target){
		this.insertBefore(element, target.nextSibling);
	}

	this.insertBefore = function(element, target){
		target.parentNode.insertBefore(element, target);
	}

	this.getId = function(node){
		if(node != '')return document.getElementById(node);
		return false;
	}
	
	this.checkUserGroup = function(group){
		var xmlhttp=new XMLHttpRequest();
		xmlhttp.open('GET', 'https://www.waze.com/forum/ucp.php?i=167', true);
		xmlhttp.onreadystatechange = function(aEvt){
			if (xmlhttp.readyState == 4){
				if(xmlhttp.status == 200){
					var tmp = xmlhttp.responseText.replace(/(\n|\r|\t)/g, '');
					var patt = new RegExp("Change default group.{0,140}(" + group + ")");
					var test = tmp.match(patt);
					if(test != null)_isBetaTester = true;
					else _isBetaTester = false;
				}
				else _helpers.log('checkUserGroup', 'error', 'Error :', xmlhttp.status);
			}
		};
		xmlhttp.send(null);
	}
}

function imgs(){
	var basePng = 'data:image/png;base64,';
	this.beta_active = basePng + 'iVBORw0KGgoAAAANSUhEUgAAADwAAAA3CAYAAABQOymxAAAABGdBTUEAALGPC/xhBQAAAAZiS0dE ANAANgA2n+rInQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB98BHxMBBBqwglIAAAa4SURB VGje7ZptbFtXGcd/z/F1bKeh2dq0abO2y9qKxSErTZyGbkOwQVXUAWMSAyRQpgnYAGkfYOq6KW22 rKgdCSqaNj50dENofIF9Kogy2KQJRhfK7UvWZo3TNOnLuq1NG7IlK04d2/fhg6/L3V0q5cXE+eC/ dOXr4+c+Pv9znuc5/3NsKKKIIooooog5A5mK8ZtNTTpB8yVV7c2I7Gq07T/MRqdz/Vhr2zLVZ810 vnCtbcta25YPLl4MpxznHkSut2Bv17p1P5zrM2xm8vAdZ84k1x061Jl2nO9m40U2z3XCVj6cvD8+ fnxxOIzACn/YfXDxYnh+RUW7MebbCgvrbTsAcLipaaNRbRWRBlRFRY44sD1m2694fR9pamoWeEJg BaonFdoLNsM5LAgG6wAU3vZ/Vl5R8VAGfrO3tHTpR8jCyyISuGJMbSKdrhEwBl4+3NS0MffsoVhs g4EXgQuJVGp1Ip3ehMiDBZvhv1VXh+ZVVDQEjPkVAKq7/MVwIJm07+3uftM3yo8LmJTjbF5v22dd co9YgcB+o9oKvAVctozZCpB2nEdu6+p6G+BgY+OWoDFvzCphX7UeUtV4WuSexoMH/wJ8GqjLfdh8 /HjVx5YG1QZESIZCx3JtmUDgmJUdtEZgD0BKtSGYtevO2TnGdM/6DF9jOfga8DqwDCjPNY45zshU fGs2OjYAJYlMxik3Zu5UaR/6XH9VwDxP+3sfIyVyBCCUTK652hHHuQVgYGzsMlACcHJszADsP39+ k99uLhCOA88ACb8w8Rs6sF3BsYzp6KyvX3EoFltuGdPhqOquc+cW5uyefy87VqtKS3f/vrZ2VWd9 /QrLmI65QrgGeAKI+Nr/7TeM2fYrDmxCVUstq9cy5oSA/Glo6OEDo6ODObsDo6O0DgwQNmbBykik t9Sy/uio7pkr63lnNgVR4F/AL91qO1V8Eujx+MpdZ4Eb54qAedrTsZPAciAMfHOa/mJk13Qv4SvA D6aq//8faAAG3U4lgbvy5PcOH2EH+LU7kAVDAGgF0m6nDgCL8uj/KR/po8CSQhatsCs0Am6HjgMf 5pHwbmDYq2J9S96sEy4HanNiCTgNpPJI+H3A9ry/3r0KRvg6V2i4IonL7mu+kHArveO+n+dVcYUg HAHKpnuCMgk4bkg7c0Vaht38zev+2odx332ikITV56vCNwD5gHq+J+GmTcEIJ4AxzxL1qQmk5Uwg wCc8/RycSKrOJuERYMgnQhbnkXAQuMkTNT3AaCEJX/aN+FLgO3kkXOZGTW7ZO+qJqIIgDLzgVlGv Ivpcnvzf5RJVN5xjhdbRAnzfHXUv4dNA/TQj7uvuAcBNrp+cz2fy1eFJI9oR9YsKRzOaSA4mS0a6 RkqGXx/21u0e4KvAqcn6jW+JC9AN/MOtB59xTWzg1nysx9PK4fiWuMS3xCWeiFtO2rkFZaDyy5VU 3l3pNat198i3T8F1Tkn9yCWrwABwX77Ex8yKVhva19p3RsZlI8D8+vl+i8opSsEKn3K7AjwJnMjn ScXMK1dlOKUoEhT1pklZtGz/svuX/UREfoeiCG+pozt6H+v980RpEu2InnEj6Kp0LW8qf7Lq3qoX XQmSBM4q+lL6nfRP+5/tH5/tGZaan9Xc6EScZwHSI+lO4F2AyMpI5ob7b7gVKJGM1MuYVCs6IEb2 1bTX3OdND8/9V1yyjitq3o1URcLDfx/eLgkpS2pyMbBHRLYFlwfbZm2GJyheoIxZ11nfc8Py8cq7 K2NGzMJMKvNQ79beAYC6HXWbM8FMsyBbyf6EMtFmpBt4FTgMdF/Ye6EPSA7uy57txR6MPZ1Ynfg5 8C2gZVYIe2fl5vabl4pIu4g0G8t0kD2Q/0ZoaegCQCAYOBbtiLrKIZN7bNU1XP/VrdDDQGpl28pF oUhot4puAJYIYiX+t3eoLkgOn3j0xPnVO1c/HLSCzcAX3OZREVGAZCK5+FTbqUuTdPeh98QkVBr6 LfAlQZ5KpVO/6G/pH6puqw5FSiNXppuOeTmXdsYdccP66vCLig0QDoU/P4n90LUODW4DcIacnf0t /UMA4XB4fUGrdM2OmiUE6ciqGLn6l4eMZrYZMa9h6Ii2R8+l3kl1BSuDS9TSO0Xkgfij8c965M95 oKp2Z220p6Un7hkHW5AvygJ5YM3mNc+lFqTqVGZ2EG+mW7RylwTlNMp6Vd0ZvBT8cc6m77G+N5yM c7uKHkXYZy23/kMJ/xSRjSra8lG55mxVdFAt7fEWRFVtVtWXELalFqWGNaDPKdpGEUUUUUQRRRRR RBFFFB7/BQ+8e1fSS3wMAAAAAElFTkSuQmCC';
	this.prod_active = basePng + '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 YII=';
}
/***	le script	***/
function BPS_html(){
	var container = document.createElement('div');
	container.className = 'toolbar-button';
	var myImg = document.createElement('img');
    if(WME_env){
        myImg.src = _BPSimgs.prod_active;
        myImg.title = "Switch to Beta editor";
    }
    else{
        myImg.src = _BPSimgs.beta_active;
        myImg.title = "Switch to Prod editor";
    }
	myImg.style.width = '100%';
	myImg.style.height = '100%';
	container.appendChild(myImg);
	_helpers.insertBefore(container, _layerSwitcher);
	var separator = document.createElement('div');
	separator.className = 'toolbar-separator';
	_helpers.insertBefore(separator, _layerSwitcher);
	container.onclick = BPS_check_perma;
	_helpers.log('BPS_html', 'info', 'Ready');

	function BPS_check_perma(e){
		var _href = document.getElementsByClassName('WazeControlPermalink')[0].getElementsByClassName('icon-link')[0].href;
		if(WME_env)_href = _href.replace(/www/, 'editor-beta');
		else _href = _href.replace(/editor-beta/, 'www');
		if(e.ctrlKey)window.open(_href, '_blank');
		else location.replace(_href);
	}
}

BPS_Bootstrap();