// ==UserScript==
// @name DS Gruppen auf Karte markieren
// @description Fügt auf der Karte Farbmarkierungen für bestimmte Gruppen zu Dörfern hinzu
// @author Michael Richter
// @namespace
http://osor.de/
// @include
http://ch*.staemme.ch/staemme.php?screen=overview_villages&intro
// ==/UserScript==
// -----------------------------------------------------------------------------
// Modifikationen dieses Scripts benötigen die Zustimmung des Autors.
// -----------------------------------------------------------------------------
(function(){
// --------- Einstellungen ---------
// Hier werden die Gruppennamen und die jeweiligen Farben eingetragen
var groups = [
['Off', 'orange'],
['Deff', 'red'],
['Späher', 'green'],
];
// Ecke wählen (1 = links oben, 2 = rechts oben, 3 = rechts unten, 4 = links unten)
var position = 2;
// Rechung wählen (1 = waagerecht, 2 = senkrecht)
var orientation = 2;
// Größe der einzelnn Markierungen in Pixel
var size = 8;
// --------- Ende ---------
// folgender Code sollte nicht verändert werden.
var $x = function(p, context) {
if(!context)
context = document;
var i, arr = [], xpr = document.evaluate(p, context, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (i = 0; item = xpr.snapshotItem(i); i++)
arr.push(item);
return arr;
};
var spacer = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
var createIcon = function(idx) {
var img = document.createElement('img');
img.src = spacer;
img.title = groups[idx][0];
img.setAttribute('style', 'width: ' + size + 'px; height: ' + size + 'px; background-color: ' + groups[idx][1]);
return img;
};
var legend = $x('//form/table[@class="map_container"]/parent::*/parent::td');
if(legend.length > 0) {
var div = document.createElement('div');
div.style.padding = '10px';
div.innerHTML = '<h3>Legende</h3>';
for(var i = 0; i < groups.length; i++) {
div.innerHTML += '<div><img style="border: 1px solid #333; background-color: ' + groups
[1] + '; width: ' + size + 'px; height: ' + size + 'px;" src="' + spacer + '" alt="' + groups[0] + '" title="' + groups[0] + '" /> ' + groups[0] + '</div>';
}
legend[0].appendChild(div);
}
var fields = $x('//div[@id="maNew" or @id="mapOld"]/table[@class="map"]/tbody/tr/td/a/img');
var search = /map_popup\('.*', '.*', '.*', \d+, '.*', '.*', '(.*)', .*, \d+, \d+\)/;
var match, bg, vil;
for(var i = 0; i < fields.length; i++) {
bg = fields.parentNode.parentNode.style.backgroundColor;
if((bg == '#ffffff' || bg == '#f0c800' || bg == 'rgb(255, 255, 255)' || bg == 'rgb(240, 200, 0)')
&& (match = search.exec(fields.getAttribute('onmouseover')))) {
var icodiv = document.createElement('div');
icodiv.style.position = 'absolute';
icodiv.style.border = '1px solid #333';
for(var j = 0; j < groups.length; j++) {
var vilgrps = match[1].split(', ');
for(var k = 0; k < vilgrps.length; k++) {
if(vilgrps[k] == groups[j][0]) {
icodiv.appendChild(createIcon(j));
if(orientation == 2) {
icodiv.appendChild(document.createElement('br'));
}
}
}
}
vil = fields.parentNode.firstChild;
fields.parentNode.insertBefore(icodiv, vil);
switch(position) {
default:
case 1:
if(orientation == 1)
icodiv.style.left = (icodiv.offsetLeft + 10) + 'px';
else
icodiv.style.top = (icodiv.offsetTop + 10) + 'px';
break;
case 2:
icodiv.style.left = (icodiv.offsetLeft + vil.offsetWidth - icodiv.offsetWidth) + 'px';
break;
case 3:
icodiv.style.left = (icodiv.offsetLeft + vil.offsetWidth - icodiv.offsetWidth) + 'px';
icodiv.style.top = (icodiv.offsetTop + vil.offsetHeight - icodiv.offsetHeight) + 'px';
break;
case 4:
icodiv.style.top = (icodiv.offsetTop + vil.offsetHeight - icodiv.offsetHeight) + 'px';
break;
}
}
}
})();