// ==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;
}
}