WME UR responses types

Add a dropdown list

当前为 2014-09-18 提交的版本,查看 最新版本

// ==UserScript==
// @name                WME UR responses types
// @namespace           @UR2T_Myriades
// @description         Add a dropdown list
// @include             https://www.waze.com/editor/*
// @include             https://www.waze.com/*/editor/*
// @icon                data:image/png;base64,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
// @version             0.0a2
// @copyright   		2014, Myriades
// ==/UserScript==

var UR2T = {};
UR2T.debug_level = 3;
UR2T.urIsSelected = false;
UR2T.answers = {};
UR2T.answers.UR = {};
//	Incorrect junction
UR2T.answers.UR[12] = {'name': 'Jonction incorrecte', 'objects': {}};
UR2T.answers.UR[12].objects[0] = {'question': 'Jonction Incorrecte', 'answer': 'Bonjour, vous avez signalé une jonction incorrecte sur votre parcours, pouvez-vous être plus précis afin que nous puissions traiter ce désagrément. Merci pour votre contribution à l\'amélioration de Waze.'};
//	Global vars
UR2T_UR_Selected = false;

/* bootstrap, will call UR2T_init() */
function UR2T_bootstrap(){
	UR2T_addLog(1, 'info', 'Init');
	if (typeof(unsafeWindow) === "undefined"){
		unsafeWindow = ( function () {
			var dummyElem = document.createElement('p');
			dummyElem.setAttribute('onclick', 'return window;');
			return dummyElem.onclick();
		}) ();
	}
	/* begin running the code! */
	setTimeout(UR2T_init, 1000);
}

/* helper functions */
// 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){
	if(node != '')return document.getElementById(node);
	return false;
}

function DOMDataFilter(obj){
	return JSON.parse(JSON.stringify(obj));
}

function getSelectedValue(node){
	var t = getId(node);
	return t.options[t.selectedIndex].value;
}

function getSelectedText(node){
	var t = getId(node);
	return t.options[t.selectedIndex].text;
}

function UR2T_addLog(UR2T_Level, UR2T_type, UR2T_text){
	if(UR2T_Level <= UR2T.debug_level){
		var HLaL_text = 'WME_UR2T_' + GM_info.script.version + ' : ' + UR2T_text;
		switch(UR2T_type){
			case 'info':
				console.info(HLaL_text);
				break;
			case 'error':
				console.error(HLaL_text);
				break;
			default:
				console.log(HLaL_text);
				break;
		}
		if(typeof(arguments[3]) !== 'undefined'){
			console.debug(HLaL_text);
			console.debug(arguments[3]);
		}
	}
}

function UR2T_init(){
	// Waze object needed
	if(typeof(unsafeWindow.Waze) == 'undefined'){	//	waze
		UR2T_addLog(1, 'error', 'unsafeWindow.Waze NOK', unsafeWindow.Waze);
		window.setTimeout(UR2T_init, 500);
		return;
	}
	UR2T_Waze = unsafeWindow.Waze;
	if(typeof(UR2T_Waze.model) == 'undefined'){	//	waze.model
		UR2T_addLog(1, 'error', 'UR2T_Waze.model NOK', UR2T_Waze.model);
		window.setTimeout(UR2T_init, 500);
		return;
	}
	UR2T_Waze_model = UR2T_Waze.model;
	if(typeof(UR2T_Waze_model.mapUpdateRequests) == 'undefined'){	//	waze.model.mapUpdateRequests
		UR2T_addLog(1, 'error', 'UR2T_Waze_model.mapUpdateRequests NOK', UR2T_Waze_model.mapUpdateRequests);
		window.setTimeout(UR2T_init, 500);
		return;
	}
	UR2T_model_mapUpdateRequests = UR2T_Waze_model.mapUpdateRequests;
	if(typeof(UR2T_Waze.updateRequestsControl) == 'undefined'){	//	waze.updateRequestsControl
		UR2T_addLog(1, 'error', 'UR2T_Waze.updateRequestsControl NOK', UR2T_Waze.updateRequestsControl);
		window.setTimeout(UR2T_init, 500);
		return;
	}
	UR2T_updateRequestsControl = UR2T_Waze.updateRequestsControl;
	UR2T_addLog(1, 'info', 'GVars done');
	lastURfid = null;
	UR2T_UR_Selected = null;
	//	Periodic updates
	window.setInterval(UR2T_detect_UR_selected, 250);	//	pas d'event de sélection sur les UR :/
	UR2T_addLog(1, 'info', 'Periodic uptdates done');
	//	Events
	UR2T_addLog(1, 'info', 'Events done');
	//	Init finished
	UR2T_addLog(1, 'info', 'Init done');
}

function UR2T_detect_UR_selected(){
	UR2T_currentRequest = UR2T_updateRequestsControl.currentRequest;
	//	UR sélectionnée ou pas
	if(UR2T_currentRequest === null){
		UR2T_UR_Selected = false;
		return;
	}
	//	Fast update?
	var URfid = UR2T_currentRequest.fid;
	if(URfid != lastURfid){
		lastURfid = URfid;
		UR2T_UR_Selected = false;
	}
	//	UR déjà sélectionnée
	if(UR2T_UR_Selected === true)return;
	//	Then wait for messages being visible.
	UR2T_UR_Selected = true;
	UR2T_Html();
}

function UR2T_Html(){
	if(typeof(document.getElementsByClassName('clearfix new-comment-form')[0]) === 'undefined'){
		window.setTimeout(UR2T_Html, 250);
		return;
	}
	var UR2T_MainTree = document.getElementsByClassName('clearfix new-comment-form')[0];
	var UR2T_insertBefore = UR2T_MainTree.getElementsByClassName('form-control new-comment-text')[0];
	//	Main container
	var UR2T_container = document.createElement('div');
	UR2T_container.style.textAlign = 'center';
	if(UR2T_MainTree.firstChild)UR2T_MainTree.insertBefore(UR2T_container, UR2T_insertBefore);
	//	Content
	var UR2T_content = document.createElement('select');
	UR2T_content.id = 'UR2T_msg_index';
	UR2T_content.style.backgroundColor = 'red';
	UR2T_container.appendChild(UR2T_content);
	//	Populate the select
	var dummy = document.createElement('option');
	dummy.text = 'Choisissez une réponse type';
	dummy.style.backgroundColor = 'red';
	UR2T_content.add(dummy);
	populateAnswers(UR2T_content);
	//	events
	getId('UR2T_msg_index').onchange = AutoComment;
}

function AutoComment(){
	var myTextArea = document.getElementsByClassName('form-control new-comment-text')[0];
	var UR2T_msg_index = getId('UR2T_msg_index');
	if(UR2T_msg_index.selectedIndex > 0){
		var indexes = getSelectedValue('UR2T_msg_index').split('-');
		myTextArea.value = UR2T.answers.UR[indexes[0]].objects[indexes[1]].answer;
		UR2T_msg_index.selectedIndex = 0;
	}
}

function populateAnswers(theSelect){
	var attr = UR2T_currentRequest.attributes;
	var cat_name = UR2T.answers.UR[attr.type].name;
	var dummy = document.createElement('option');
	dummy.text = UR2T.answers.UR[attr.type].name;
	dummy.disabled = true;
	dummy.style.backgroundColor = 'blue';
	theSelect.add(dummy);
	var answers = UR2T.answers.UR[attr.type].objects;
	for(var answer in answers){
		dummy = document.createElement('option');
		dummy.value = attr.type + '-' + answer;
		dummy.text = UR2T.answers.UR[attr.type].objects[answer].question;
		theSelect.add(dummy);
	}
}

UR2T_bootstrap();