LetterboxMarker

Fügt auf auf Letterboxing Germany eine Merker-Spalte hinzu.

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name           LetterboxMarker
// @namespace      http://dosensuche.de
// @description    Fügt auf auf Letterboxing Germany eine Merker-Spalte hinzu.
// @include        http://*michael-wilhelm.info/forum/viewforum.php*
// @include        http://*michael-wilhelm.info/lbg_forum/*
// @include        http://*letterboxing-germany.info/lbg_forum/*
// @grant	   GM_getValue
// @grant	   GM_setValue
// @grant	   GM_listValues
// @version       2015.3.1
// ==/UserScript==


var markerValues=new Array("","gefunden","vorgemerkt","ignoriert");
var ignoreForums=new Array(1,7,15,8,9,10,11,12,29,31);

var bs=document.getElementsByTagName("th");
var themen=null;
for(var i=0;i<bs.length;i++) {
	if(bs[i].firstChild && bs[i].firstChild.data && bs[i].firstChild.data.substr(1,6)=="Themen") {
		themen=bs[i].parentNode;
	}
}

if(!themen) {
	log("unbekanntes/unpassendes HTML");
} else {
	var url=document.URL;
	var reForum=/viewforum\.php\?f=(\d+)/;
	reForum.exec(url);
	var forum=RegExp.$1;
	var ignore=false;
	for(var i=0;i<ignoreForums.length;i++) {
		if(ignoreForums[i]==forum) ignore=true;
	}
	if(!ignore) displayMarkers();
}

function displayMarkers() {
	var trs=themen.parentNode.getElementsByTagName("tr");
	var themenseen=false;
	for(var i=0;i<trs.length-1;i++) {
		if(trs[i]==themen) {themenseen=true;}
		else if(themenseen==true) {
			var tds=trs[i].getElementsByTagName("td");
			if(!tds || tds.length<2) continue;
			var as=tds[1].getElementsByTagName("a");
			var topiclink=null;
			for(var j=0;j<as.length;j++) {
				var classString=as[j].getAttribute("class");
				if(classString=="topictitle link-new" || classString=="topictitle") topicLink=as[j].getAttribute("href");
			}
			var regexp=/viewtopic\.php\?f=(\d+)&t=(\d+)/;
			regexp.exec(topicLink);
			var topic=RegExp.$2;
			var newCell=tds[0].cloneNode(false);
			newCell.appendChild(getMarker(topic));
			tds[0].parentNode.appendChild(newCell);
		}
	}
	trs[trs.length-1].getElementsByTagName("td")[0].setAttribute("colspan","7");
	trs[trs.length-1].id="letterboxmarker_lastrow";
	trs[1].id="letterboxmarker_firstrow";
	var headerCell=themen.getElementsByTagName("th")[0].cloneNode(false);
	var title=document.createElement("b");
	var titletext=document.createTextNode("LetterboxMarker");
	title.appendChild(titletext);
	title.setAttribute("class","gensmall");
	title.setAttribute("font-size","smaller");
	var titlespan=document.createElement("span");
	titlespan.addEventListener("click",insertStoreControl,false);
	titlespan.appendChild(title);
	headerCell.appendChild(titlespan);
	headerCell.setAttribute("colspan","1");
//	themen.parentNode.insertBefore(headerCell,themen);
	themen.appendChild(headerCell);
}

function getMarker(topic) {
	var select=document.createElement("select");
	var selected=getStoredMarker(topic);
	for(var i=0;i<markerValues.length;i++) {
		var option=document.createElement("option");
		option.setAttribute("value",i);
		if(i==selected) {
			option.setAttribute("selected","selected");
		}
		option.appendChild(document.createTextNode(markerValues[i]));
		select.appendChild(option);
	}
	select.addEventListener("change",getEventHandler(topic),false);
	return select;
}

function getEventHandler(topic) {
	return function() {
		var val=this.value;
		setStoredMarker(topic,val);
	}	
}

function getStoredMarker(topic) {
	var val=getValue(topic);
	if(!val) {
		val=0;
	}
	return val;
}

function setStoredMarker(topic, value) {
//	log(topic+"->"+value);
	if(value==0) {
		deleteValue(topic);
	} else {
		setValue(topic,value);
	}
	if(storeControlActive()) {
		document.getElementById("letterboxmarker_markerstring").setAttribute("value",getMarkerString());
	}
}

function getMarkerString() {
	var string="";
	var topics=listValues();
	for(i in topics) {
//		log("top "+i+": "+topics[i]);
		var val=getStoredMarker(topics[i]);
		if(val!=0) {
			if(string.length>0) string+=";";
			string+=topics[i]+":"+val;
		}
	}
//	log("markerstring "+string);
	return string;
}

function setMarkerString(string) {
//	log("setmarkerstring "+string);
	if(!string || string.length==0) return;
//	log("setmarkerstring1 "+string);
	var tops=string.split(";");
	for (var i in tops) {
		var top=tops[i];
		var re=/(\d+):(\d+)/;
		re.exec(top);
		var topic=RegExp.$1;
		var value=RegExp.$2;
//		log(topic+"->"+value);
		setStoredMarker(topic,value);
	}
}

function deleteStoredMarkers() {
	var topics=listValues();
	for (topic in topics) {
//		log("del "+topics[topic]);
		var val=setStoredMarker(topics[topic],0);
	}
}

function storeControlActive() {
	return document.getElementById("letterboxmarker_storecontrol");
}

function saveStore() {
	var val=document.getElementById("letterboxmarker_markerstring").value;
	if(document.getElementById("letterboxmarker_overwrite").checked && val) deleteStoredMarkers();
	setMarkerString(val);
	window.location.reload();
}

function insertStoreControl() {
	if(storeControlActive()) return;
	var lastrow=document.getElementById("letterboxmarker_lastrow");
	var tr=lastrow.cloneNode(false);;
	tr.id="letterboxmarker_storecontrol";
	var td=lastrow.getElementsByTagName("td")[0].cloneNode(false);
	td.setAttribute("colspan",7);
	tr.appendChild(td);
	var input=document.createElement("input");
	input.setAttribute("type","text");
	input.setAttribute("size","50");
	input.setAttribute("value",getMarkerString());
	input.id="letterboxmarker_markerstring";
	td.appendChild(input);
	var checkbox=document.createElement("input");
	checkbox.setAttribute("type","checkbox");
	checkbox.id="letterboxmarker_overwrite";
	td.appendChild(checkbox);
	td.appendChild(document.createTextNode("\u00fcberschreiben"));
	var button=document.createElement("input");
	button.setAttribute("type","button");
	button.setAttribute("value","\u00fcbernehmen");
	button.addEventListener("click",saveStore,false);
	td.appendChild(button);
	lastrow.parentNode.insertBefore(tr,document.getElementById("letterboxmarker_firstrow"));
}

function log(s) {
	if(typeof GM_log!="undefined") {GM_log(s);}
	else {
		opera.postError(s);
	}
}

function setValue(k,v,lifeTime) {
	if(typeof GM_setValue!="undefined") {GM_setValue(k,v);}
	else {
	if( lifeTime == "delete" ) { lifeTime = -10; } else { lifeTime = 31536000; }
	document.cookie = escape(k) + "=" + escape( v ) +
		";expires=" + ( new Date( ( new Date() ).getTime() + ( 1000 * 31536000 ) ) ).toGMTString() + ";path=/";

	}
}

function getValue(k) {
	if(typeof GM_getValue!="undefined") {return GM_getValue(k);}
	else {
		var cookieJar = document.cookie.split( "; " );
		for( var x = 0; x < cookieJar.length; x++ ) {
			var oneCookie = cookieJar[x].split( "=" );
			if( oneCookie[0] == escape(k) ) {
				try {
					eval('var footm = '+unescape( oneCookie[1] ));
				} catch(e) { return null; }
				return footm;
			}
		}
		return null;
	}
}

function deleteValue(k) {
	if(typeof GM_deleteValue!="undefined") {GM_deleteValue(k);}
	else {
		setValue( k, '', 'delete' );
	}
}

function listValues() {
	if(typeof GM_listValues!="undefined") {return GM_listValues();}
	else {
		var cookieJar = document.cookie.split( "; " );
		var arr=new Array();
//		log("found "+cookieJar.length+" in "+document.cookie);
		for( var x = 0; x < cookieJar.length; x++ ) {
			var oneCookie = cookieJar[x].split( "=" );
			var val=unescape(oneCookie[0]);
			if(!val.match(/\D/)) {
	//			log(oneCookie[0]);
				arr.push(val);
			}
		}
		return arr;
	}
}