Es soll ein Toolchen für Code-Muster und Zeichen-Transformationen erstellt werden. das Code-Pattern-Toolchen soll leicht erweitert und an persönliche Bedürfnisse angepaßt werden können.
Ausgangspunkt ist das HTML5-Grundgerüst einer Seite, das als Basis des Toolchen für Code-Muster und Zeichen-Manipulationen dienen soll. Diese Seite wird unter tools/pattern-tool.htm gespeichert.
Auch ist eine stete Erweiterung und Verbesserung der Homepage möglich, indem z.B. eine Info-Seite tools/pattern-infos.htm erstellt wird, die die Bedienung und Möglichkeiten des Pattern-Toolchens beschreibt.
Für die Entwicklung eines Pattern-Toolchen wird im body ein Formular verwendet, das 2 Textareas mit den globalen id0='ta0' und id1='ta1' hat.
<h1> Code-Pattern </h1> <span class="screenreader"> tue-beginn </span> <a href="javascript:void(0)" onclick="tue('vertauschen');"> vertausche <span class="screenreader"> ta0 und ta1-inhalt </span> </a> <span class="screenreader"> tue-ende </span> <form action="#"> <label for="ta0" class="screenreader">ta0 ist hier</label> <textarea id="ta0" cols="90" rows="20"> 0 text im ta0 </textarea> <label for="ta1" class="screenreader">ta1 ist hier</label> <textarea id="ta1" cols="90" rows="10"> 1 text im ta1 </textarea> </form>
Für Screenreader kann z.B. mit <span class="screenreader"> tue-beginn </span> HTML-Text eingefügt werden, der hörbar, aber nicht sehbar ist.
<style> .screenreader {position: absolute; top:0; left:-999em;} /* oder */ .screenreader {position: absolute !important;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);} </style>
Für die Entwicklung eines Pattern-Toolchen kann zunächst mit globalen ECMAScript-Funktionen gearbeiten werden. Hat ein Tag eine globale id0="ta0", so kann (nach dem Laden der Seite) auf dieses Tag zugegriffen werden mit var objekt = doc.getElementById(id0);
Nachfolgend sind die ('abgesicherten') Funktionen var obj = get_obj(id); und var str = get_string(id); und set_string(id, str);
Die Funktion tue(was) "ist das Arbeitstier". Mit var s0 = get_string(id0); kann z.B. der Text von id0 geholt, dann gewandelt und mit set_string(id1, str); wird das Ergebnis str in die Textarea id1 geschrieben.
Die Funktion tue(was) kann leicht erweitert werden. Existiert z.B. im switch(was) {...} ein case 'vertauschen', so lautet der Funktionsaufruf tue('vertauschen'); der die Inhalte von id0 und id1 vertauscht.
<script> var win = window; var doc = win.document; var id0 = 'ta0'; // id0 identifiziert textarea0 var id1 = 'ta1'; // id1 identifiziert textarea1 var data_objekte = {}; // fuer das Hinterlegen von bel. Daten function set_data(key, daten) {// hinterlege daten unter key data_objekte[key] = daten; } function get_data(key) {var r; // gibt zu key hinterlegte Daten r zurueck try { r = data_objekte[key]; // try, damit eine Fehlermeldung kommt, wenn key falsch ist } catch (e) { win.alert("Error: get_data("+key+" ???)" +e); return null; } return r; } function get_obj(id) { var r; //gibt in r das zugehoerige id-Objekt zurueck try { // try, damit bei falschen id eine Fehlermeldung kommt r = doc.getElementById(id); } catch (e) { win.alert("Error: get_obj("+id+" ???) " + e); return null; } return r; } function set_string(id, str) { // schreibt (bei input oder textarea) den str in idobj.value=str, sonst in idobj.innerHTML=str var typ, obj = get_obj(id); if (!obj) { return; } typ = obj.tagName.toLowerCase(); if (typ === 'input' || typ === 'textarea') { obj.value = str; obj.setAttribute('value', obj.value); } else { obj.innerHTML = str; } } function get_string(id) { // gibt (bei input oder textarea) den str von idobj.value zurueck, sonst idobj.innerHTML var typ, obj = get_obj(id); if (!obj) { return ''; } typ = obj.tagName.toLowerCase(); if (typ === 'input' || typ === 'textarea') { return obj.value; } else { return obj.innerHTML; } } function tue(was, use_key) { // diese Funktion tut-was reinprogramiert wird var temp, s1, s0 = get_string(id0); if (!s0) { return; } switch (was) { case 'vertauschen': // vertausche ta0-Inhalt mit ta1-Inhalt s1 = get_string(id1); set_string(id1, s0); set_string(id0, s1); return; case 'content_escapen': // wandelt s0 in einen %hexhex-String und schreibt diesen in ta1 //??? return; default: return;// default-case } // ende switch } // ende function tue </script>