MediaWiki:Skin/Spezial:Hochladen.js: Unterschied zwischen den Versionen

aus Kamelopedia, der wüsten Enzyklopädie
Zur Navigation springen Zur Suche springen
(danke für deinen letzten Edit, Nachteule, hätte ich sonst nicht so schnell bemerkt!)
Zeile 36: Zeile 36:
 
  */
 
  */
  
var imgklick =  
+
/*
[
+
* generieren der Datenstruktur aus DPL-Ergebnissen - #1: AJAX-Request
{
+
*/
name: "Quellen",
+
var imgklick = new Array();
arg: "Quellen",
+
 
prefix: "Bildquelle",
+
addOnloadHook(mk_ajax);
opts:
+
function mk_ajax()
[
+
{
{
+
 
name: "Kamelopedia",
+
var imgAjax = new Ajax.Request(
info: "Das Bild stammt aus der Kamelopedia.",
+
            wgScript,
vorlage: "Kamelo",
+
            {
args:
+
                method: 'get',  
[
+
                parameters: 'title=Kamelopedia:Bildsuche/Klick-Tpl&action=raw&templates=expand',
{ arg: "1", type: "text", info: "Bildname (ohne 'Bild:'):", pre: "" }
+
                onComplete: function( req ) { gen_imgklick( req.responseText ); mkALL(); }
]
+
            }
 +
  );
 +
}
  
},
+
/*
{
+
* generieren der Datenstruktur aus DPL-Ergebnissen - #2: Parser
name: "Wikimedia Commons",
+
*/
info: "Das Bild stammt aus den Wikimedia Commons.",
+
function gen_imgklick( txt )
vorlage: "WikiCommons",
+
{
args:
+
        txt = txt.replace(/ *[|¦] */g, "|");
[
+
        txt = txt.replace(/[\n\r]+/g, "\n" );
{ arg: "1", type: "text", info: "Bildname (ohne 'Bild:'):", pre: "" }
 
]
 
  
},
+
        /* Sicherheits-Feature: HTML-Tags weg (bis auf <br>) */
{
+
        txt = txt.replace(/[<]/g, "&lt;" );
name: "Wikipedia (deutsch)",
+
        txt = txt.replace(/[>]/g, "&gt;" );
info: "Das Bild stammt aus der deutschen Wikipedia.<br/>Wenn das Bild aus den Wikimedia Commons in die Wikipedia eingebunden wurde, wähle lieber 'Wikimedia Commons' aus!<br/>",
+
        txt = txt.replace( /&lt;br *\/? *&gt;/g, "<br/>" );
vorlage: "Wiki",
 
args:
 
[
 
{ arg: "1", type: "text", info: "Bildname (ohne 'Bild:'):", pre: "" }
 
]
 
  
},
+
        lines = txt.split( "\n" );
{
+
        for( i=0; i<lines.length; i++ )
name: "Stupidedia",
+
        {
info: "Das Bild stammt aus der Stupidedia.",
+
                //zeile auslesen
vorlage: "Stupi",
+
                type = lines[i].substring(0,1);
args:
+
                lines[i] = lines[i].substring(1);
[
+
                elements = lines[i].split( "|" );
{ arg: "1", type: "text", info: "Bildname (ohne 'Bild:')", pre: "" }
+
               
]
+
                if( type == ";" ) // Vorlage
},
+
                {
{
+
                if ( elements[4] == "no" ) // ignorieren-Flag gesetzt
name: "Scan",
+
                        continue;
info: "Das wurde gescannt.",
+
                if ( elements[2] == "" )
vorlage: "Scan",
+
                        elements[2] = elements[1];
args:
+
                if ( ! imgklick[0] || imgklick[imgklick.length-1].name != elements[0] )
[
+
                        imgklick.push( { name: elements[0], arg: elements[0], prefix:elements[0], opts: [ ] } );
{ arg: "1", type: "text", info: "Was hast du eingescannt:", pre: "" }
+
                imgklick[imgklick.length-1].opts.push( { name: elements[2], info: elements[3], vorlage: elements[1], args: [ ], selected: elements[4] } );
]
+
                }
},
+
                else if( type == "*" ) // Argument
{
+
                {
name: "Screenshot",
+
                opts = imgklick[imgklick.length-1].opts
info: "Das wurde gescreenshottet.",
+
                opts[opts.length-1].args.push( { arg: elements[0], type: elements[1], info: elements[2], pre: elements[3], options: elements.slice(4) } );
vorlage: "Screen",
+
                }
args:
+
        }
[
+
}
{ arg: "1", type: "text", info: "Wo? (Webseite oder Programm)", pre: "" }
 
]
 
},
 
{
 
name: "Selbst",
 
info: "Das Bild wurde komplett selbst erzeugt.",
 
vorlage: "Selbst",
 
args:
 
[ /* keine */ ]
 
},
 
{
 
name: "Unzureichend",
 
info: "Die Quellenangabe des Bildes ist unzureichend!",
 
vorlage: "Unzureichend",
 
args:
 
[
 
/* { arg: "1", type: "textarea", info: "Bitte begründe hier, warum die Quellenangabe unzureichend ist:", pre: "" } */
 
]
 
}
 
  
]
+
/*
},
+
* Benutzer-Rückmeldungen:
{
+
*/
name: "Lizenz",
+
msg_OK =
arg: "Lizenz",
+
[
prefix: "Bildlizenz",
+
"In Ordnung.",
opts:
+
"Aber gerne.",
[
+
"Bitteschön.",
{
+
"Klar doch!",
name: "GNU FDL",
+
"Kein Problem.",
info: "Das Bild steht unter der GNU FDL (wie auch sonst hier alles).",
+
"Jawohl.",
vorlage: "GNU_FDL",
+
"Gerne doch."
args:
 
[ /* keine */ ]
 
},
 
{
 
name: "Public Domain",
 
info: "Das Bild ist gemeinfrei.",
 
vorlage: "PD",
 
args:
 
[ /* keine */ ]
 
},
 
{
 
name: "Creative Commons",
 
info: "Das Bild steht unter einer Kommunisten-Lizenz",
 
vorlage: "CCS1",
 
args:
 
[ /* keine */ ]
 
}
 
]
 
 
},
 
{
 
name: "Bildtechnik",
 
arg: "Technik",
 
prefix: "Bildtechnik",
 
opts:
 
[
 
{
 
name: "Unbekannt",
 
info: "Es wurde keine Bildtechnik angegeben.",
 
vorlage: "Unbekannt",
 
args: [ /* keine */ ]
 
},
 
{
 
name: "Animation",
 
info: "Das Bild wurde animiert.",
 
vorlage:"Animation",
 
args: [ /* keine */ ]
 
},
 
{
 
name: "Audio",
 
info: "Das Bild wurde vertont.",
 
vorlage:"Audio",
 
args: [ /* keine */ ]
 
},
 
{
 
name: "Grafik",
 
info: "Das Bild ist eine Grafik.",
 
vorlage:"Grafik",
 
args: [ /* keine */ ]
 
},
 
{
 
name: "Malerei",
 
info: "Das Bild wurde gemalt.",
 
vorlage:"Foto",
 
args: [ /* keine */ ]
 
},
 
{
 
name: "Mischtechnik",
 
info: "Das Bild ist eine Mischtechnik.",
 
vorlage:"Mix",
 
args: [ /* keine */ ]
 
},
 
{
 
name: "Foto",
 
info: "Das Bild wurde fotographiert",
 
vorlage:"Foto",
 
args: [ /* keine */ ]
 
},
 
{
 
name: "Sonstiges",
 
info: "",
 
vorlage: "Sonstige",
 
args:
 
[
 
{ arg: "Technik", type: "text", info: "Das Bild ist ein(e) ... ", pre: ""}
 
]
 
}
 
]
 
},
 
{
 
name: "Malware",
 
arg: "Malware",
 
prefix: "Malware",
 
opts:
 
[
 
{
 
name: "Keine",
 
info: "Es wurde keine Malware benutzt",
 
vorlage: "keine",
 
args: [ /* keine */ ]
 
},
 
{
 
name: "Gimp",
 
info: "Das Bild wurde gegimpt.",
 
vorlage: "Gimp",
 
args: [ /* keine */ ]
 
},
 
{
 
name: "Inkscape",
 
info: "Das Bild wurde geinkscapet.",
 
vorlage: "Inkscape",
 
args: [ /* keine */ ]
 
},
 
{
 
name: "Paint",
 
info: "Das Bild wurde gepaintet.",
 
vorlage: "Paint",
 
args: [ /* keine */ ]
 
},
 
{
 
name: "Sonstige",
 
info: "",
 
vorlage: "Sonstige",
 
args:
 
[
 
{ arg: "Malware", type: "text", info: "Das Bild wurde ...", pre: ""}
 
]
 
}
 
]
 
}
 
 
];
 
];
 +
  
 
// name: Wie heißt die Grundvorlage?
 
// name: Wie heißt die Grundvorlage?
Zeile 265: Zeile 122:
 
/* Programmablauf */
 
/* Programmablauf */
  
 +
/*
 +
* Den Nachrichtenzähler auf irgendwas setzen
 +
*/
 +
msg_OK_counter = Math.floor( Math.random() * msg_OK.length );
 +
 +
function add_msg( obj )
 +
{
 +
if( obj.innerHTML == msg_OK[msg_OK_counter] )
 +
msg_counter_up();
 +
obj.innerHTML = msg_OK[msg_OK_counter];
 +
msg_counter_up();
 +
}
 +
 +
function msg_counter_up()
 +
{
 +
msg_OK_counter++;
 +
if ( msg_OK_counter >= msg_OK.length )
 +
msg_OK_counter = 0;
 +
}
 
/*
 
/*
 
  * fügt zu einer Auswahl die Optionsbeschreibung und die Argumente ein.
 
  * fügt zu einer Auswahl die Optionsbeschreibung und die Argumente ein.
Zeile 284: Zeile 160:
 
function create_opts( element, val )
 
function create_opts( element, val )
 
{
 
{
var out = imgklick[element].opts[val].info + " ";
+
var out = imgklick[element].opts[val].info + " ";
for ( i = 0; i<imgklick[element].opts[val].args.length; i++ )
+
for ( i = 0; i<imgklick[element].opts[val].args.length; i++ )
{
+
{
arg = imgklick[element].opts[val].args[i];
+
arg = imgklick[element].opts[val].args[i];
if ( arg.type == "textarea" )
+
if ( arg.type == "textarea" )
out += arg.info + " <textarea style='width: 90%;' id='"+imgklick[element].name+"_arg_" + i+"'>"+arg.pre+"</textarea>";
+
out += arg.info + " <textarea style='width: 90%;' id='"+imgklick[element].name+"_arg_" + i+"'>"+arg.pre+"</textarea>";
else
+
                else if ( arg.type == "select" && imgklick[element].opts[val].args[i].options != null && imgklick[element].opts[val].args[i].options[0] != null)
out += arg.info + " <input type='" + arg.type + "' value='"+arg.pre+"' id='"+imgklick[element].name+"_arg_" + i + "'/>";
+
                {
}
+
 
return out;
+
                        out += arg.info + " <select id='"+imgklick[element].name+"_arg_" + i+"'>";
 +
                        for ( opt=0; opt<imgklick[element].opts[val].args[i].options.length; opt++ )
 +
                        {
 +
 
 +
                                pos =  imgklick[element].opts[val].args[i].options[opt].indexOf("=");
 +
                                var optkey; var optval;
 +
 
 +
                                if ( pos == -1 )
 +
                                {
 +
                                        optkey = imgklick[element].opts[val].args[i].options[opt];
 +
                                        optval = imgklick[element].opts[val].args[i].options[opt];
 +
                                }
 +
                                else
 +
                                {
 +
                                        optval = imgklick[element].opts[val].args[i].options[opt].substring(0,pos);
 +
                                        optkey = imgklick[element].opts[val].args[i].options[opt].substring(pos+1);
 +
                                }
 +
                                var sel = "";
 +
                                if ( optkey == imgklick[element].opts[val].args[i].pre )
 +
                                        sel = "select='selected'";
 +
                                out += "<option value='"+optval+"' "+sel+">"+optkey+"</option>";
 +
                               
 +
                        }
 +
                        out += "</select>";
 +
                }
 +
else
 +
out += arg.info + " <input type='" + arg.type + "' value='"+arg.pre+"' id='"+imgklick[element].name+"_arg_" + i + "'/>&nbsp;";
 +
}
 +
return out;
 
}
 
}
  
Zeile 309: Zeile 213:
  
 
var val = "{{"+imgklick[element].prefix+"/"+obj.vorlage+args+"}}";
 
var val = "{{"+imgklick[element].prefix+"/"+obj.vorlage+args+"}}";
+
 
        var arg = imgklick[element].arg;
+
var arg = imgklick[element].arg;
 
var reg = new RegExp("[{][{]"+grundvorlage.name+"[\s\n\r]*([|](.|\n|\r)*)?[}][}]");
 
var reg = new RegExp("[{][{]"+grundvorlage.name+"[\s\n\r]*([|](.|\n|\r)*)?[}][}]");
 
var reg_has_arg = new RegExp("([{][{]"+grundvorlage.name+"[\s\n\r]*([|](.|\n|\r)*)?[|][\s\n]*"+arg+"=)((.|\n|\r)*}})");
 
var reg_has_arg = new RegExp("([{][{]"+grundvorlage.name+"[\s\n\r]*([|](.|\n|\r)*)?[|][\s\n]*"+arg+"=)((.|\n|\r)*}})");
Zeile 319: Zeile 223:
 
alert("Grundvorlage nicht gefunden.\n\n Falls du die Grundvorlage noch nicht eingefügt hast, solltest du das zu allererst tun und erst dann hiermit weitermachen. Den Knopf dafür findest du ein kleines Stückchen weiter oben!");
 
alert("Grundvorlage nicht gefunden.\n\n Falls du die Grundvorlage noch nicht eingefügt hast, solltest du das zu allererst tun und erst dann hiermit weitermachen. Den Knopf dafür findest du ein kleines Stückchen weiter oben!");
 
}
 
}
else if ( -1 != box.value.search(reg_has_arg))
 
box.value = box.value.replace( reg_has_arg, "$1\n"+val+"$4" );
 
 
else
 
else
box.value = box.value.replace( reg_hasnt_arg, "$1|"+arg+"=\n"+val+"\n$2");
+
{
+
if ( -1 != box.value.search(reg_has_arg))
};
+
box.value = box.value.replace( reg_has_arg, "$1\n"+val+"$4" );
 +
else
 +
box.value = box.value.replace( reg_hasnt_arg, "$1|"+arg+"=\n"+val+"\n$2");
 +
 
 +
add_msg( document.getElementById(imgklick[element].name+"_msg") );
 +
};
 +
}
  
 
/*
 
/*
Zeile 335: Zeile 243:
 
out += "<form><h4>Grundvorlage einfügen</h4>";
 
out += "<form><h4>Grundvorlage einfügen</h4>";
 
out += "Als erstes brauchst du eine Grundvorlage: <input type='button' value='Hinzufügen!' onclick='mk_add_g();'>";
 
out += "Als erstes brauchst du eine Grundvorlage: <input type='button' value='Hinzufügen!' onclick='mk_add_g();'>";
 +
out += " <span id='g_msg'></span>";
 
out += "</form>";
 
out += "</form>";
 
out += "</div>";
 
out += "</div>";
        return out;
+
return out;
 
}
 
}
  
Zeile 345: Zeile 254:
 
out += "<div style='border: 1px red dotted; margin: 5px; padding: 5px;'>";
 
out += "<div style='border: 1px red dotted; margin: 5px; padding: 5px;'>";
 
out += "<form><h4>Tags einfügen</h4>";
 
out += "<form><h4>Tags einfügen</h4>";
        out += "Hier kannst du Schlüsselwörter angeben, bitte durch Komma trennen! Angeben kannst du z.B. Motiv, Farben, Besonderheiten, … :<br/><textarea id='tag_box' style='width:95%;'></textarea><br/>";
+
out += "Hier kannst du Schlüsselwörter angeben, bitte durch Komma trennen! Angeben kannst du z.B. Motiv, Farben, Besonderheiten, … :<br/><textarea id='tag_box' style='width:95%;'></textarea><br/>";
 
out += "<input type='button' value='Hinzufügen!' onclick='mk_add_tags();'>";
 
out += "<input type='button' value='Hinzufügen!' onclick='mk_add_tags();'>";
 +
out += " <span id='tag_msg'></span>";
 
out += "</form>";
 
out += "</form>";
 
out += "</div>";
 
out += "</div>";
        return out;
+
return out;
 
}
 
}
  
Zeile 355: Zeile 265:
 
{
 
{
 
var val = document.getElementById("tag_box").value;
 
var val = document.getElementById("tag_box").value;
+
 
 
var reg = new RegExp("[{][{]"+grundvorlage.name+"[\s\n\r]*([|](.|\n|\r)*)?[}][}]");
 
var reg = new RegExp("[{][{]"+grundvorlage.name+"[\s\n\r]*([|](.|\n|\r)*)?[}][}]");
var reg_has_arg = new RegExp("([{][{]"+grundvorlage.name+"[\s\n\r]*([|](.|\n|\r)*)?[|][\s\n\r]*"+tag_arg+"=[\s\n\r]*[{][{]Bildmotiv[\s\n\r]*[|][\n\r\s]*Tags=[\n\r]?)((.|\n|\r)*[}][}])");
+
var reg_has_arg = new RegExp("([{][{]"+grundvorlage.name+"[\s\n\r]*([|](.|\n|\r)*)?[|][\s\n\r]*"+tag_arg+"=[\s\n\r]*)((.|\n|\r)*[}][}])");
 
var reg_hasnt_arg = new RegExp("([{][{]"+grundvorlage.name+"[\s\n\r]*)(([|](.|\n|\r)*)?[}][}])");
 
var reg_hasnt_arg = new RegExp("([{][{]"+grundvorlage.name+"[\s\n\r]*)(([|](.|\n|\r)*)?[}][}])");
  
Zeile 363: Zeile 273:
 
{ // kein Grundvorlage
 
{ // kein Grundvorlage
 
alert("Grundvorlage nicht gefunden.\n\n Falls du die Grundvorlage noch nicht eingefügt hast, solltest du das zu allererst tun und erst dann hiermit weitermachen. Den Knopf dafür findest du ein kleines Stückchen weiter oben!");
 
alert("Grundvorlage nicht gefunden.\n\n Falls du die Grundvorlage noch nicht eingefügt hast, solltest du das zu allererst tun und erst dann hiermit weitermachen. Den Knopf dafür findest du ein kleines Stückchen weiter oben!");
                return;
+
return;
 
}
 
}
else if ( -1 != box.value.search(reg_has_arg))
 
box.value = box.value.replace( reg_has_arg, "$1"+val+", $4" );
 
 
else
 
else
box.value = box.value.replace( reg_hasnt_arg, "$1|"+tag_arg+"=\n{{Bildmotiv|Tags="+val+"}}\n$2");
+
{
 +
if ( -1 != box.value.search(reg_has_arg))
 +
box.value = box.value.replace( reg_has_arg, "$1"+val+", $4" );
 +
else
 +
box.value = box.value.replace( reg_hasnt_arg, "$1|"+tag_arg+"=\n"+val+"\n$2");
 +
add_msg(document.getElementById("tag_msg"));
 +
}
 
}
 
}
  
Zeile 377: Zeile 291:
 
{
 
{
 
if ( -1 == box.value.search(new RegExp("[{][{]"+grundvorlage.name+"(\s|\n|\r)*([|](.|\n|\r)*)?[}][}]")) )
 
if ( -1 == box.value.search(new RegExp("[{][{]"+grundvorlage.name+"(\s|\n|\r)*([|](.|\n|\r)*)?[}][}]")) )
        {
+
{
 
box.value += "{{"+grundvorlage.einfg+"}}";
 
box.value += "{{"+grundvorlage.einfg+"}}";
        }
+
add_msg(document.getElementById("g_msg"));
        else
+
}
                alert("Wiki sagt: Ich glaube, da gibt es schon eine Grundvorlage.");
+
else
 +
alert("Wiki sagt: Ich glaube, da gibt es schon eine Grundvorlage.");
 
}
 
}
  
Zeile 389: Zeile 304:
 
  * am Anfang alles reinladen
 
  * am Anfang alles reinladen
 
  */
 
  */
addOnloadHook(mkALL);
+
 
 
function mkALL()
 
function mkALL()
 
{
 
{
Zeile 410: Zeile 325:
  
 
var out = "";
 
var out = "";
        out += mk_g_box();
+
out += mk_g_box();
 
for ( e=0; e<imgklick.length; e++ )
 
for ( e=0; e<imgklick.length; e++ )
 
{
 
{
Zeile 418: Zeile 333:
 
for ( i = 0; i<imgklick[e].opts.length; i++ )
 
for ( i = 0; i<imgklick[e].opts.length; i++ )
 
{
 
{
out += "<option value='" + i + "'>" + imgklick[e].opts[i].name + "</option>";
+
                        if ( imgklick[e].opts[i].selected == "selected" )
 +
                                sel=' selected="selected" ';
 +
                        else
 +
                                sel = '';
 +
out += "<option value='" + i + "'"+sel+">" + imgklick[e].opts[i].name + "</option>";
 
}
 
}
 
out += "</select>";
 
out += "</select>";
 
out += " <span id='" + imgklick[e].name + "_opt'>"+create_opts( e, 0 )+"</span> <input type='button' value='Hinzufügen' onclick='mk_add("+e+");'>";
 
out += " <span id='" + imgklick[e].name + "_opt'>"+create_opts( e, 0 )+"</span> <input type='button' value='Hinzufügen' onclick='mk_add("+e+");'>";
 +
out += " <span id='" + imgklick[e].name + "_msg'></span>";
 
out += "</form>";
 
out += "</form>";
 
out += "</div>";
 
out += "</div>";
  
 
}
 
}
        out += mk_tag_box();
+
out += mk_tag_box();
 
document.getElementById("klicktag").innerHTML = out;
 
document.getElementById("klicktag").innerHTML = out;
 
};
 
};

Version vom 19. Mai 2008, 10:54 Uhr

/* === Hochlade-Seite === */

/* Konfiguration */

/*
 * das imgklick-Objekt:
 * hier wird festgelegt, welche Einfügeboxen erzeugt werden, welche Auswahlmöglichkeiten es gibt, welche
 * Optionen, usw. Es wird auch festgelegt, welche Daten beim Hinzufügen ins Feld eingefügt werden.
 *
 * Erklärung:
 * var imgklick =
 * [
 * 	{ genau 1 Element pro Auswahlfeld
 * 		name: String, der als Titel angezeigt wird, z.B. "Bildtechnik" oder "Lizenzen" 
 *              arg: String, der Argumentname benutzt wird z.B. "Technik" wird dann zu "|Technik=",
 * 		prefix: String, Teil des Namens der Vorlage vor dem Schrägstrich, z.B. "Bildquelle",
 * 		opts: Array für die Auswahlmöglichkeiten
 * 		[
 * 			{ genau 1 Element pro Auswahlmöglichkeit
 * 				info: String, Beschreibungstext des Auswahlfeldes,
 * 				vorlage: String, Teil des Namens der Vorlage nach dem Schrägstrich, z.B. "Wiki",
 * 				args: Array für die zusätzlichen Optionen
 * 				[
 * 					{ genau 1 Element pro Option
 * 						arg: String, Name des Arguments, z.B. "1" ( wird dann zu "{{...|1=...}}" ),
 * 						type: String, "text" für Textbox, "textarea" für mehrere Zeilen,
 * 						info: String, Beschreibungstext für die Option
 * 					}
 * 				]
 * 			}
 * 		]
 * 	}
 * ]
 *
 * Sieht leider recht kompliziert aus, einfach mal unten ansehen:
 */

/*
 * generieren der Datenstruktur aus DPL-Ergebnissen - #1: AJAX-Request
 */
var imgklick = new Array();

addOnloadHook(mk_ajax);
function mk_ajax()
{

var imgAjax = new Ajax.Request(
            wgScript,
            {
                method: 'get', 
                parameters: 'title=Kamelopedia:Bildsuche/Klick-Tpl&action=raw&templates=expand',
                onComplete: function( req ) { gen_imgklick( req.responseText ); mkALL(); }
            }
  );
}

/*
 * generieren der Datenstruktur aus DPL-Ergebnissen - #2: Parser
 */
function gen_imgklick( txt )
{
        txt = txt.replace(/ *[|¦] */g, "|");
        txt = txt.replace(/[\n\r]+/g, "\n" );

        /* Sicherheits-Feature: HTML-Tags weg (bis auf <br>) */
        txt = txt.replace(/[<]/g, "&lt;" );
        txt = txt.replace(/[>]/g, "&gt;" );
        txt = txt.replace( /&lt;br *\/? *&gt;/g, "<br/>" );

        lines = txt.split( "\n" );
        for( i=0; i<lines.length; i++ )
        {
                //zeile auslesen
                type = lines[i].substring(0,1);
                lines[i] = lines[i].substring(1);
                elements = lines[i].split( "|" );
                
                if( type == ";" ) // Vorlage
                {
                if ( elements[4] == "no" ) // ignorieren-Flag gesetzt
                        continue;
                if ( elements[2] == "" )
                        elements[2] = elements[1];
                if ( ! imgklick[0] || imgklick[imgklick.length-1].name != elements[0] )
                        imgklick.push( { name: elements[0], arg: elements[0], prefix:elements[0], opts: [ ] } );
                imgklick[imgklick.length-1].opts.push( { name: elements[2], info: elements[3], vorlage: elements[1], args: [ ], selected: elements[4] } );
                }
                else if( type == "*" ) // Argument
                {
                opts = imgklick[imgklick.length-1].opts
                opts[opts.length-1].args.push( { arg: elements[0], type: elements[1], info: elements[2], pre: elements[3], options: elements.slice(4) } );
                }
        }
}

/*
 * Benutzer-Rückmeldungen:
 */
msg_OK = 
[
	"In Ordnung.",
	"Aber gerne.",
	"Bitteschön.",
	"Klar doch!",
	"Kein Problem.",
	"Jawohl.",
	"Gerne doch."
];


// name: Wie heißt die Grundvorlage?
// einfg: Wie soll sie am Anfang eingefügt werden?
grundvorlage =
{ 
	name: "Bild",
	einfg: "Bild\n"
};

// Welches Argument ("|xxxx=") soll für die Tags verwendet werden?
tag_arg = "Motiv";

/* Programmablauf */

/*
 * Den Nachrichtenzähler auf irgendwas setzen
 */
msg_OK_counter = Math.floor( Math.random() * msg_OK.length );

function add_msg( obj )
{
	if( obj.innerHTML == msg_OK[msg_OK_counter] )
		msg_counter_up();
	obj.innerHTML = msg_OK[msg_OK_counter];
	msg_counter_up();
}

function msg_counter_up()
{
	msg_OK_counter++;
	if ( msg_OK_counter >= msg_OK.length )
		msg_OK_counter = 0;
}
/*
 * fügt zu einer Auswahl die Optionsbeschreibung und die Argumente ein.
 * element: nummer des Arrayelementes ( imgklick[?] )
 * t: das Auswahlelement (select)
 */
function mk_opts( element, t )
{
	out = create_opts( element, t.value );
	document.getElementById(imgklick[element].name+"_opt").innerHTML = out;
	return true;
};

/*
 * gibt zu einer Auswahl die Optionsbeschreibung zurück.
 * element: nummer des Arrayelementes imgklick[?]
 * val: nummer des Arrayelements imgklick[].opts[?] bzw. Nummer der Auswahl
 */
function create_opts( element, val )
{
	var out = imgklick[element].opts[val].info + " ";
	for ( i = 0; i<imgklick[element].opts[val].args.length; i++ )
	{
		arg = imgklick[element].opts[val].args[i];
		if ( arg.type == "textarea" )
			out += arg.info + " <textarea style='width: 90%;' id='"+imgklick[element].name+"_arg_" + i+"'>"+arg.pre+"</textarea>";
                else if ( arg.type == "select" && imgklick[element].opts[val].args[i].options != null && imgklick[element].opts[val].args[i].options[0] != null)
                {

                        out += arg.info + " <select id='"+imgklick[element].name+"_arg_" + i+"'>";
                        for ( opt=0; opt<imgklick[element].opts[val].args[i].options.length; opt++ )
                        {

                                pos =  imgklick[element].opts[val].args[i].options[opt].indexOf("=");
                                var optkey; var optval;

                                if ( pos == -1 )
                                {
                                         optkey = imgklick[element].opts[val].args[i].options[opt];
                                         optval = imgklick[element].opts[val].args[i].options[opt];
                                }
                                else
                                {
                                         optval = imgklick[element].opts[val].args[i].options[opt].substring(0,pos);
                                         optkey = imgklick[element].opts[val].args[i].options[opt].substring(pos+1);
                                }
                                var sel = "";
                                if ( optkey == imgklick[element].opts[val].args[i].pre )
                                        sel = "select='selected'"; 
                                out += "<option value='"+optval+"' "+sel+">"+optkey+"</option>";
                                
                        }
                        out += "</select>";
                }
		else
			out += arg.info + " <input type='" + arg.type + "' value='"+arg.pre+"' id='"+imgklick[element].name+"_arg_" + i + "'/>&nbsp;";
	}
	return out;
}

/*
 * fügt Text in die Textbox ein (eigentliches Klicktag)
 */
function mk_add( element )
{
	obj = imgklick[element].opts[document.getElementById(imgklick[element].name+"_select").value];
	var args = "";
	for( i=0; i<obj.args.length; i++ )
	{
		args += "|" + obj.args[i].arg + "=" + document.getElementById(imgklick[element].name+"_arg_"+i).value;
	}

	var val = "{{"+imgklick[element].prefix+"/"+obj.vorlage+args+"}}";

	var arg = imgklick[element].arg;
	var reg = new RegExp("[{][{]"+grundvorlage.name+"[\s\n\r]*([|](.|\n|\r)*)?[}][}]");
	var reg_has_arg = new RegExp("([{][{]"+grundvorlage.name+"[\s\n\r]*([|](.|\n|\r)*)?[|][\s\n]*"+arg+"=)((.|\n|\r)*}})");
	var reg_hasnt_arg = new RegExp("([{][{]"+grundvorlage.name+"[\s\n\r]*)(([|](.|\n|\r)*)?[}][}])");

	if ( -1 == box.value.search(reg) )
	{ // kein Grundvorlage
		alert("Grundvorlage nicht gefunden.\n\n Falls du die Grundvorlage noch nicht eingefügt hast, solltest du das zu allererst tun und erst dann hiermit weitermachen. Den Knopf dafür findest du ein kleines Stückchen weiter oben!");
	}
	else
	{
		if ( -1 != box.value.search(reg_has_arg))
			box.value = box.value.replace( reg_has_arg, "$1\n"+val+"$4" );
		else
			box.value = box.value.replace( reg_hasnt_arg, "$1|"+arg+"=\n"+val+"\n$2");

		add_msg( document.getElementById(imgklick[element].name+"_msg") );	
	};
}

/*
 * returnt eine Box zum Einfügen der übergeordneten Vorlage
 */
function mk_g_box ()
{
	var out = "";
	out += "<div style='border: 1px red dotted; margin: 5px; padding: 5px;'>";
	out += "<form><h4>Grundvorlage einfügen</h4>";
	out += "Als erstes brauchst du eine Grundvorlage: <input type='button' value='Hinzufügen!' onclick='mk_add_g();'>";
	out += " <span id='g_msg'></span>";
	out += "</form>";
	out += "</div>";
	return out;
}

function mk_tag_box ()
{
	var out = "";
	out += "<div style='border: 1px red dotted; margin: 5px; padding: 5px;'>";
	out += "<form><h4>Tags einfügen</h4>";
	out += "Hier kannst du Schlüsselwörter angeben, bitte durch Komma trennen! Angeben kannst du z.B. Motiv, Farben, Besonderheiten, … :<br/><textarea id='tag_box' style='width:95%;'></textarea><br/>";
	out += "<input type='button' value='Hinzufügen!' onclick='mk_add_tags();'>";
	out += " <span id='tag_msg'></span>";
	out += "</form>";
	out += "</div>";
	return out;
}

function mk_add_tags ()
{
	var val = document.getElementById("tag_box").value;

	var reg = new RegExp("[{][{]"+grundvorlage.name+"[\s\n\r]*([|](.|\n|\r)*)?[}][}]");
	var reg_has_arg = new RegExp("([{][{]"+grundvorlage.name+"[\s\n\r]*([|](.|\n|\r)*)?[|][\s\n\r]*"+tag_arg+"=[\s\n\r]*)((.|\n|\r)*[}][}])");
	var reg_hasnt_arg = new RegExp("([{][{]"+grundvorlage.name+"[\s\n\r]*)(([|](.|\n|\r)*)?[}][}])");

	if ( -1 == box.value.search(reg) )
	{ // kein Grundvorlage
		alert("Grundvorlage nicht gefunden.\n\n Falls du die Grundvorlage noch nicht eingefügt hast, solltest du das zu allererst tun und erst dann hiermit weitermachen. Den Knopf dafür findest du ein kleines Stückchen weiter oben!");
		return;
	}
	else
	{
		if ( -1 != box.value.search(reg_has_arg))
			box.value = box.value.replace( reg_has_arg, "$1"+val+", $4" );
		else
			box.value = box.value.replace( reg_hasnt_arg, "$1|"+tag_arg+"=\n"+val+"\n$2");
		add_msg(document.getElementById("tag_msg"));
	}
}

/*
 * fügt die Grundvorlage ein
 */
function mk_add_g ()
{
	if ( -1 == box.value.search(new RegExp("[{][{]"+grundvorlage.name+"(\s|\n|\r)*([|](.|\n|\r)*)?[}][}]")) )
	{
		box.value += "{{"+grundvorlage.einfg+"}}";
		add_msg(document.getElementById("g_msg"));
	}
	else
		alert("Wiki sagt: Ich glaube, da gibt es schon eine Grundvorlage.");
}

var box; // Globale Variable

/*
 * am Anfang alles reinladen
 */

function mkALL()
{
	// die Zeile wird im "echten" Betrieb weggelöscht
	//mk_my_page();

	box = document.getElementById("wpUploadDescription");

	if ( ! box )
	{ // Bild wird nicht hochgeladen, sondern bearbeitet!
		box = document.getElementById("wpTextbox1");
		var ibox = document.createElement("div");
		ibox.id = "klicktag";
		tb = document.getElementById("toolbar");
		if ( tb )
			tb.parentNode.insertBefore(ibox, tb);
		else
			box.parentNode.insertBefore(ibox, box);
	}

	var out = "";
	out += mk_g_box();
	for ( e=0; e<imgklick.length; e++ )
	{
		out += "<div style='border: 1px red dotted; margin: 5px; padding: 5px;'>";
		out += "<form><h4>"+imgklick[e].name+" hinzufügen</h4>";
		out += "<select name='" + e + "' id='" + imgklick[e].name + "_select' size='1' onchange='mk_opts( "+e+", this );'>";
		for ( i = 0; i<imgklick[e].opts.length; i++ )
		{
                        if ( imgklick[e].opts[i].selected == "selected" )
                                sel=' selected="selected" ';
                        else
                                sel = '';
			out += "<option value='" + i + "'"+sel+">" + imgklick[e].opts[i].name + "</option>";
		}
		out += "</select>";
		out += " <span id='" + imgklick[e].name + "_opt'>"+create_opts( e, 0 )+"</span> <input type='button' value='Hinzufügen' onclick='mk_add("+e+");'>";
		out += " <span id='" + imgklick[e].name + "_msg'></span>";
		out += "</form>";
		out += "</div>";

	}
	out += mk_tag_box();
	document.getElementById("klicktag").innerHTML = out;
};