Hilfe:Edittools.js: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
test charinsert |
K var load_edittools = true; |
||
| Zeile 731: | Zeile 731: | ||
The special characters to insert are defined at [[MediaWiki:Edittools]]. | The special characters to insert are defined at [[MediaWiki:Edittools]]. | ||
*/ | */ | ||
var load_edittools = true; | |||
// Globals: getElementsByClassName, hookEvent, addEvent (from wikibits.js) | // Globals: getElementsByClassName, hookEvent, addEvent (from wikibits.js) | ||
Version vom 21. Oktober 2010, 01:33 Uhr
//<source lang="javascript">
//Diese Seite wird von MediaWiki:Monobook.js aus geladen, sobald eine Seite bearbeitet wird
// anzeigen & verbergen (siehe bald Diskussionsseite)
function einaus (inhalt, einblenden, ausblenden) {
var thisLevel = document.getElementById(inhalt);
var otherLevel = document.getElementById(einblenden);
var linkLevel = document.getElementById(ausblenden);
if (thisLevel.style.display == 'none') {
thisLevel.style.display = 'block';
otherLevel.style.display = 'none';
linkLevel.style.display = 'inline';
} else {
thisLevel.style.display = 'none';
otherLevel.style.display = 'inline';
linkLevel.style.display = 'none';
}
}
/** fügt Klick-Kat (kat) am Ende des Textes im Editierfensters ein */ function add_cat(kat) {
document.editform.wpTextbox1.value += '\n';
}
//-----------Holt aus einer Vorlage den Text zwischen dem ersten "
{{" und "}}" raus
//-----------und patched das ins Eingabefeld
function Get_Page(Page){
jQuery.ajax({
url: wgScript,
context: document.body,
dataType: "text",
data: 'title='+Page+'&action=raw&templates=expand',
success: function(data){
var x = data.split("<pre>");
if (x[1]){
var y = x[1].replace(/\s*/,"").split("");
insertVorlage(, , y[0]); }else{
alert("kein verwertbares Objekt.
vorhanden?");
}
}
});
}
//------------------------------------------------------------------------------------
/** bastelt die Edittools-Box */
addOnloadHook(function() {
var kategorieNamen = [
"Abkürzung",
"Adel",
"Affen",
"Ägypten",
"Aliens",
"Alkohol",
"Amphibien",
"Anatomie",
"Architektur",
"Artikel, die wo so aussehen, wie die Dinge, die sie beschreiben tun",
"Artikel und Kamele mit eigenem Skin",
"Astronomie",
"Aua",
"Ausgestorben",
"Auto",
"Bahn",
"Bären",
"Baum",
"Bayern",
"Behörden",
"Beruf",
"Bildung",
"Biographie",
"Biologie",
"Böses Kamel",
"Botanik",
"Brauchtum",
"Chamäleons",
"Chemie",
"China",
"Computer",
"Denkmal",
"Desserts & Salate",
"Deutschland",
"Dichter & Denker",
"Dickhäuter",
"Dienstleistung",
"Drogen",
"Eier",
"Elektrotechnik",
"Entdecker",
"Enten",
"Erfinder",
"Eulen",
"Fabelwesen",
"Fäkalien",
"Farben",
"Fastfood",
"Feminismus",
"Film",
"Firma",
"Fische",
"Fleisch",
"Fluss",
"Freizeit",
"Frisuren",
"Gastronomie",
"Gebäck",
"Gebirge",
"Geheim",
"Geheimdienst",
"Geistlicher",
"Genie & Wahnsinn",
"Geographie",
"Geologie",
"Geschichte",
"Gesellschaft",
"Getränk",
"Gewässer",
"Gilden",
"Google",
"Götter",
"Grammatik",
"Gutes Kamel",
"Gutmenschentum",
"Häh?",
"Haushaltsgeräte",
"Herdenverhalten",
"Helden",
"Hornträger",
"Hunde",
"Hygiene",
"Industrie",
"Insekten",
"Inseln",
"Jahrestag",
"Japan",
"Kalender",
"Kamele",
"Kamelkunde",
"Kamelopedia",
"Kasusativ",
"Katzen",
"Kleidung",
"Komische Kamele",
"Komische Typen",
"Komische Viecher",
"Kommunikation",
"Kosmetik",
"Krabbeltiere",
"Krankheiten",
"Krieg",
"Kriminalität",
"Kulinarik",
"Kulturgut",
"Kunst",
"Kunstrichtung",
"Künstler",
"Land & Leute",
"Landschaften",
"Landwirtschaft",
"Lied",
"Listen",
"Literatur",
"Löcher",
"Logik",
"Luft & Raumfahrt",
"Lyrik",
"Märchen",
"Maschinen",
"Maßeinheit",
"Mathematik",
"Mechanik",
"Medien",
"Medizin",
"Microsoft",
"Mikroben",
"Milch & Käse",
"Militär & Polizei",
"Mischwesen",
"Möbel",
"Mode",
"Muscheln & Schnecken",
"Musik",
"Musiker",
"Musikinstrument",
"Musikrichtungen",
"Mythologie",
"Nachrichten",
"Nagetiere",
"Name",
"Natur",
"Nudeln & Pasta",
"Oberflächliches",
"Obst & Gemüse",
"Optik & Lichttechnik",
"Organisationen",
"Ort",
"Pferde & Esel",
"Philosophie",
"Physik",
"Pilze",
"Planeten",
"Plem-Plem",
"Politik",
"Politiker",
"Projekt",
"Psychologie",
"Pyramiden",
"Raubtier",
"Re(h)kursion",
"Recht",
"Religion",
"Rezepte",
"Rindviecher",
"Rohstoffe",
"Sammelartikel",
"Saurier",
"Schach",
"Schafe",
"Schauspieler & Entertainer",
"ScheibchenWelt",
"Schifffahrt",
"Schlangen",
"Schöner Wohnen",
"Schule",
"Schweine",
"Schweiz",
"Sexualität",
"Soziologie",
"Spezies",
"Spiel",
"Sport",
"Sportler",
"Sprache",
"Sprachwissenschaft",
"Staat",
"Stadt",
"Stuchbabe",
"Süßigkeiten",
"Suppen & Soßen",
"Technik",
"Textilien",
"Theorie",
"Tiger",
"Tisch",
"Touristik",
"Uhren",
"Umfrage",
"Unternehmer",
"Unterwasser",
"USA",
"Verkehr",
"Verkehrsmittel",
"Verpackung",
"Verschwörungstheorien",
"Verwechslungen",
"Vögel",
"Waffen",
"Wale",
"Wärmetechnik",
"Werbung",
"Werkzeuge & Geräte",
"Wetter",
"Wikipedia",
"Wirtschaft",
"Wissenschaft",
"Wissenschaftler",
"Wortsinn & Tiefsinn",
"WTF-8",
"Würmer",
"Wüste",
"Wurst",
"Zahl",
"Zauberei",
"Zeit",
"Zeitgeschehen",
"Zum Kotzen",
"Zusammenrottung"
];
function kategorienHTML() {
var html = '<a href="javascript:einaus(\'kats\',\'clickein\',\'clickaus\')">[anzeigen]</a><a href="javascript:einaus(\'kats\',\'clickein\',\'clickaus\')">[verbergen]</a>
';
return html;
}
function sonderzeichenHTML() {
var html = 'Sonderzeichen:
';
html += '<a href="javascript:einaus(\'sonder\',\'sonderein\',\'sonderaus\')">[anzeigen]</a><a href="javascript:einaus(\'sonder\',\'sonderein\',\'sonderaus\')">[verbergen]</a>
';
return html;
}
//------------------------------------------------------------------
//Jeder Eintrag besteht aus max. 3 Parametern, die mit einem "°" getrennt werden:
// P1: wenn leer: Wird P2 als neue Überschrift eingefügt
// wenn nicht leer: P1 wird als klickbarer Titel dargestellt und auch in das Editfeld gepatched
// ausser P2 ist vorhanden
// P2: wenn vorhanden: Wird anstatt von P1 ins Editfeld gepatched ausser P2=Load
// wenn P2=Load : Wird die Seite/Vorlage in P3 geladen und der Inhalt zwischen
// dem ersten "Vorlage:" und "" ins Editfeld gepatched
var VorlagenNamen = [];
// Spezialvorlagen für die Bürokraten - nur im Bürokratenspiel ganz nach oben:
if (wgPageName.substring(0,23) == "Projekt:Bürokratenspiel")
VorlagenNamen = VorlagenNamen.concat([
"°Bürokratie",
"Ablehnung°Bürokratenspiel/Formulare/Ablehnung",
"Abstimmung°Bürokratenspiel/Formulare/Abstimmung",
"Anfechtung°Bürokratenspiel/Formulare/Anfechtung",
"Anfrage°Bürokratenspiel/Formulare/Anfrage",
"Anmerkung°Bürokratenspiel/Formulare/Anmerkung",
"Antrag°Bürokratenspiel/Formulare/Antrag",
"Anweisung°Bürokratenspiel/Formulare/Anweisung",
"Bearbeitung°Bürokratenspiel/Formulare/Bearbeitung",
"Beschluss°Bürokratenspiel/Formulare/Beschluss",
"Beschwerde°Bürokratenspiel/Formulare/Beschwerde",
"Feststellung°Bürokratenspiel/Formulare/Feststellung",
"Formfehler°Bürokratenspiel/Formulare/Formfehler",
"Genehmigung°Bürokratenspiel/Formulare/Genehmigung",
"Gutachten°Bürokratenspiel/Formulare/Gutachten",
"Interne Mitteilung°Bürokratenspiel/Formulare/Interne Mitteilung",
"Kenntnisnahme°Bürokratenspiel/Formulare/Kenntnisnahme",
"Maßnahme°Bürokratenspiel/Formulare/Maßnahme",
"Mecklenburg-Vorpommer°Bürokratenspiel/Formulare/Mecklenburg-Vorpommer",
"Mitteilung°Bürokratenspiel/Formulare/Mitteilung",
"Nicht zuständig°Bürokratenspiel/Formulare/Nicht zuständig",
"Rechenschaftsbericht°Bürokratenspiel/Formulare/Rechenschaftsbericht",
"Rechtshinweis°Bürokratenspiel/Formulare/Rechtshinweis",
"Rückzug°Bürokratenspiel/Formulare/Rückzug",
"Rüge°Bürokratenspiel/Formulare/Rüge",
"Stellungnahme°Bürokratenspiel/Formulare/Stellungnahme",
"Ungültig°Bürokratenspiel/Formulare/Ungültig",
"Verfügung°Bürokratenspiel/Formulare/Verfügung",
"Verwarnung°Bürokratenspiel/Formulare/Verwarnung"
]);
// Allgemeine Vorlagen
VorlagenNamen = VorlagenNamen.concat([
"°Hinweise",
"siehe°s",
"siehe auch°sa",
"besuche bitte°bb",
"siehe vielleicht°sv",
"Lies mal°lm",
"siehe besser°sb",
"Siehe dazu lieber°sl",
"negativ beeinflussen°nb",
"Dann geh doch°gd",
"siehe nicht°sn2",
"Siehe besser nicht°sn",
"auf gar keinen Fall°sk",
"siehe eben nicht°sn",
"Hier wartet man°hwm",
"nichts zu tun mit°nt",
"Vergleiche mit°vg",
"verwechseln mit°zv",
"Nicht zu verwechseln°nv",
"Tut nichts zur Sache°st",
"Siehe aber°Sab",
"Beachte jedoch°Bj",
"WWW°sw",
"siehe Kamelionary°sy",
"°Auszeichnungen",
"GaGAWahl",
"GanzGut (Artikel)°GanzGut",
"GanzGut2 (Abbildung)°GanzGut2",
"GanzGut3 (Animation)°GanzGut3",
"GanzGut4 (Anomalie)°GanzGut4",
"GanzGut5 (Audio)°GanzGut5",
"Hw",
"Exzellent",
"Wahl°Wahl | Start = ~~~~~ | Stimmen =
",
"Wahlende",
"Geschmiedet",
"°Qualitätssicherung",
"Trash",
"Begraben",
"Überarbeiten",
"Humorantrag",
"Relevanz",
"Kompatibel",
"Privatkram",
"Weltbild",
"Kuhdorf",
"Dorftrottel",
"Schlechtschreibung",
"Glossar",
"Urv",
"°Ab da wirds nett",
"Stub",
"Gleicht",
"Nicht versenken",
"Schizophren",
"Was",
"Text fehlt°Text",
"Mager",
"°Praktisches",
"Bügeln",
"Fortsetzung",
"Schon gewusst",
"GaGA Teaser°GaGATeaser
| Kopfzeile = Schlagzeile
| Bild = Bildname ohne "Bild:"
| Grösse = Bildbreite ohne "px"
| Bildausrichtung = right oder left
| Text = Teasertext
| Fußzeile = Weitere...
| Bildunterschrift =
",
"Dieser Artikel",
"Schmiede",
"Untot",
"Nix kapiche",
"BegriffsklärungWP",
"WPTitel",
"Kamelionary°Load°Vorlage:Kamelionary/preload",
"°Für Bilder",
"img°img
| Bildname (ohne Bild:)
| alt =
| name =
| title = Tooltip
| link =
| width =
| height =
",
"Drexxzeuch",
"NichtGNU",
"Wiki doof",
"TempBild",
"ROSTklärung°ROSTklärung|~~~",
"°Listen",
"Listenartikel",
"TOC",
"°Andere Welt",
"Gesungene Kamelopedia",
"°Kamelbox positiv",
"Moin",
"Glückwunsch",
"Glückwunsch2",
"Hallo",
"Keks",
"Preis",
"Hinweise",
"DankeKAT",
"Lesezirkelwerbung",
"Pate",
"Patenkind",
"Patenkind?",
"°Kamelbox negativ",
"Artikelschwemme",
"Vorschau",
"Urlaub",
"Vermisst",
"Rüge",
"Kacka",
"Gangsta",
"Plonk",
"URV-Mahnung",
"Versiegelt",
"°Artikelschmuck",
"Begriffsklärung",
"Begriffsklärung2",
"Begriffsklärung3",
"BegriffsklärungVoll",
"BegriffsklärungWP",
"Begriffsverzerrung",
"Cool",
"Elektrohinweis",
"Erklärbär",
"Gesichtet",
"Gesundheitshinweis",
"Kotzen",
"Merkelsatz",
"Merksatz",
"Mürrebär",
"Navbox",
"Ref°Ref|1",
"Note°Note|1|Norddeutsches Amtsblatt",
"Rechtshinweis",
"Religionshinweis",
"Scherz",
"Selbstlöschung",
"Spoiler",
"Systematik°Load°Vorlage:Systematik",
"Systematik Film°Load°Vorlage:Systematik_Film",
"Systematik Bühne°Load°Vorlage:Systematik_Bühne",
"Tipp",
"Topsecret",
"Traurig",
"Vorlagenfrei",
"Vorlagenwahn",
"Warnung°Warnung|Grund",
"Wikipedia",
"Zitat°Zitat|Zitattext|Zitierter|Thema",
"°Artikel-Navis",
"Alphabet",
"Europa",
"Farben",
"Kapst",
"Klassiker",
"Kontinente",
"Mammon",
"PSE",
"PSEBIG",
"Partei",
"Pronomen",
"Sinn",
"Umwelt",
"WOMO",
"Werbeblock",
"Zahlen",
"Zahlenstrahl"
]);
function add_Templ(T) {
var Teil = T.split("°");
if (Teil[0]){
var html = "<a href=\"javascript:insertVorlage('\{\{','\}\}','";
if (Teil[1]){
if (Teil[1]=="Load"){
var html = "<a href=\"javascript:Get_Page('" + Teil[2] + "');\">"
}else{
var html = "<a href=\"javascript:insertVorlage('\{\{','\}\}','" + Teil[1] + "');\">"
}
}else{
var html = "<a href=\"javascript:insertVorlage('\{\{','\}\}','" + Teil[0] + "');\">"
}
html +="" + Teil[0] + "</a>";
}else{
var html = "
"+Teil[1]+"";
}
return html;
}
function VorlagenHTML() {
var html = 'Vorlagen:
';
html += '<a href="javascript:einaus(\'Templ\',\'Templein\',\'Templaus\')">[anzeigen]</a><a href="javascript:einaus(\'Templ\',\'Templein\',\'Templaus\')">[verbergen]</a>
';
return html;
}
//-------------------------------------------------------------------------------
var inhalt = 'Klick-Kategorien: <a href="/index.php/Hilfe:Edittools" target="_blank" title="Hilfe (in neuem Fenster)">?</a>
';
inhalt += kategorienHTML();
inhalt += "
";
inhalt += sonderzeichenHTML();
inhalt += "
";
inhalt += VorlagenHTML();
inhalt += "
";
var kat_div_2 = document.createElement('div');
kat_div_2.id = 'kat_div_2';
kat_div_2.innerHTML += inhalt;
document.getElementById('editform').insertBefore(kat_div_2, document.getElementById('antispam-container'));
// Leerzeilen am Ende des Artikeltextes entfernen
document.editform.wpTextbox1.value = document.editform.wpTextbox1.value.replace(/\s+$/, "");
});
//----------------------------------------------------------------------------
//Brauche ich wegen NL-Problem bei der Paramter-Übergabe für Vorlagen:
//selText = sampleText.replace(/
/g,"\n");
function insertVorlage(tagOpen, tagClose, sampleText) {
var txtarea;
if (document.editform) {
txtarea = document.editform.wpTextbox1;
} else {
// some alternate form? take the first one we can find
var areas = document.getElementsByTagName('textarea');
txtarea = areas[0];
}
var selText, isSample = false;
if (document.selection && document.selection.createRange) { // IE/Opera
//save window scroll position
if (document.documentElement && document.documentElement.scrollTop){
var winScroll = document.documentElement.scrollTop;
}else if (document.body){
var winScroll = document.body.scrollTop;
}
//get current selection
txtarea.focus();
var range = document.selection.createRange();
selText = range.text;
//insert tags
selText = sampleText.replace(/
/g,"\n");
range.text = tagOpen + selText + tagClose;
//mark sample text as selected
if (range.moveStart) {
if (window.opera){tagClose = tagClose.replace(/\n/g,);}
range.moveStart('character', - tagClose.length);
range.moveEnd('character', - tagClose.length);
}
range.select();
//restore window scroll position
if (document.documentElement && document.documentElement.scrollTop){
document.documentElement.scrollTop = winScroll;
}else if (document.body){
document.body.scrollTop = winScroll;
}
} else if (txtarea.selectionStart || txtarea.selectionStart == '0') { // Mozilla
//save textarea scroll position
var textScroll = txtarea.scrollTop;
//get current selection
txtarea.focus();
var startPos = txtarea.selectionStart;
var endPos = txtarea.selectionEnd;
selText = txtarea.value.substring(startPos, endPos);
//insert tags
selText = sampleText.replace(/
/g,"\n");
txtarea.value = txtarea.value.substring(0, startPos) + tagOpen + selText + tagClose + txtarea.value.substring(endPos, txtarea.value.length);
//set new selection
txtarea.selectionStart = startPos + tagOpen.length + selText.length;
txtarea.selectionEnd = startPos + tagOpen.length + selText.length;
//restore textarea scroll position
txtarea.scrollTop = textScroll;
}
}
// <source lang="javascript">
/*
EditTools support: add a selector, change into true buttons, enable for all text input fields
The special characters to insert are defined at MediaWiki:Edittools.
*/
var load_edittools = true;
// Globals: getElementsByClassName, hookEvent, addEvent (from wikibits.js)
if ( load_edittools == true ) { // Legacy. Do we really need this?
if ( typeof( EditTools_set_focus ) == 'undefined' ) {
var EditTools_set_focus = true;
}
if ( typeof( EditTools_set_focus_initially ) == 'undefined' ) {
var EditTools_set_focus_initially = EditTools_set_focus;
}
if ( typeof( EditTools_initial_subset ) == 'undefined' ) {
var EditTools_initial_subset = 0;
}
var EditTools = {
createSelector: function() {
var spec = document.getElementById( 'specialchars' );
if ( !spec ) {
return;
}
var sb = getElementsByClassName( spec, 'p', 'specialbasic' );
if ( sb.length <= 1 ) {
return; // Only care if there is more than one
}
var sel = document.createElement( 'select' );
sel.style.display = 'inline';
// sel.setAttribute( 'onchange', 'EditTools.chooseCharSubset( selectedIndex, true );' );
// Apparently, this doesn't work on IE6. Use an explicit event handling function instead:
sel.onchange = EditTools.handleOnchange;
var initial = EditTools_initial_subset;
if ( isNaN( initial ) || initial < 0 || initial >= sb.length ) {
initial = 0;
}
for ( var i = 0; i < sb.length; i++ ) {
var o = document.createElement( 'option' );
// Ugh. We have encoded Unicode characters in the names...
var id = sb[i].id.replace( /.([0-9A-F][0-9A-F])/g, '%$1' ).replace( /_/g, ' ' );
if ( i == initial ) {
o.selected = 'selected';
}
o.appendChild( document.createTextNode( decodeURIComponent( id ) ) );
sel.appendChild( o );
}
spec.insertBefore( sel, spec.firstChild );
EditTools.chooseCharSubset(
initial,
( wgAction != 'submit' ) &&
EditTools_set_focus_initially &&
( wgCanonicalNamespace != 'Special' || wgCanonicalSpecialPageName != 'Upload' )
);
},
handleOnchange: function( evt ) {
var e = evt || window.event; // W3C, IE
var node = e.target || e.srcElement; // W3C, IE
EditTools.chooseCharSubset( node.selectedIndex, true );
return true;
},
chooseCharSubset: function( selected, set_focus ) {
var sb = getElementsByClassName( document.getElementById( 'specialchars' ), 'p', 'specialbasic' );
EditTools.makeButtons( sb[selected] );
for ( var i = 0; i < sb.length; i++ ) {
sb[i].style.display = i == selected ? 'inline' : 'none';
}
if ( set_focus && EditTools_set_focus ) {
var txtarea = EditTools.getTextArea();
if ( txtarea ) {
txtarea.focus();
}
}
},
fixateWidth: function() {
var edit_bar = document.getElementById( 'specialchars' );
if ( !edit_bar ) {
return;
}
// Try to fixate the width of that bar, otherwise IE6 may make it wider, which will lead to
// a table re-layout on the upload form resulting in the right column extending beyond the
// right edge of the window.
edit_bar.setAttribute( 'width', + ( edit_bar.clientWidth || edit_bar.offsetWidth ) );
edit_bar.style.maxWidth = + ( edit_bar.clientWidth || edit_bar.offsetWidth ) + 'px';
// If we're inside a table, fixate the containing table cell, too.
var parent = edit_bar.parentNode;
while ( parent && parent != document.body && parent.nodeName.toLowerCase() != 'td' ) {
parent = parent.parentNode;
}
if ( parent && parent != document.body ) {
parent.setAttribute( 'width', + ( parent.clientWidth || parent.offsetWidth ) );
parent.style.maxWidth = + ( parent.clientWidth || parent.offsetWidth ) + 'px';
}
},
makeButtons: function( section ) {
var edit_bar = section || document.getElementById( 'specialchars' );
if ( !edit_bar ) {
return;
}
var links = edit_bar.getElementsByTagName( 'a' );
// 'links' is a *live* collection!
var b = null;
while ( links.length ) {
b = document.createElement( 'input' );
b.type = 'button';
b.style.fontSize = '0.9em';
b.style.paddingLeft = '1px';
b.style.paddingRight = '1px';
b.style.marginLeft = '1px';
b.onclick = links[0].onclick;
b.value = links[0].firstChild.data;
var parent = links[0].parentNode;
parent.replaceChild( b, links[0] ); // This removes links[0] from links!
b.blur(); // IE6 insists on marking some buttons as having the focus...
var margin_added = false;
// Remove text nodes (nodeType == Node.TEXT_NODE, but IE6 doesn't know that...)
// Insert some spacing where desired.
while ( b.nextSibling && b.nextSibling.nodeType == 3 ) {
if ( !margin_added && b.nextSibling.data.search( /\S/ ) >= 0 ) {
b.style.marginRight = '4px';
margin_added = true;
}
parent.removeChild( b.nextSibling );
}
}
},
enableForAllFields: function() {
if ( typeof( insertTags ) != 'function' ) {
return;
}
// insertTags from the site-wide /skins-1.5/common/edit.js just inserts in the first
// textarea in the document. Evidently, that's not good if we have multiple textareas.
// My first idea was to simply add a hidden textarea as the first one, and redefine
// insertTags such that it copied first the last active textareas contents over to that hidden
// field, set the cursor or selection there, let the standard insertTags do its thing, and
// then copy the hidden field's text, cursor position and selection back to the currently
// active field. Unfortunately, that is just as complex as simply copying the whole code
// from wikibits to here and let it work on the right text field in the first place.
var texts = document.getElementsByTagName( 'textarea' );
for ( var i = 0; i < texts.length; i++ ) {
addEvent( texts[i], 'focus', EditTools.registerTextField );
}
// While we're at it, also enable it for input fields
texts = document.getElementsByTagName( 'input' );
for ( var i = 0; i < texts.length; i++ ) {
if ( texts[i].type == 'text' ) {
addEvent( texts[i], 'focus', EditTools.registerTextField );
}
}
insertTags = EditTools.insertTags; // Redefine the global insertTags
},
last_active_textfield: null,
registerTextField: function( evt ) {
var e = evt || window.event;
var node = e.target || e.srcElement;
if ( !node ) {
return;
}
EditTools.last_active_textfield = node.id;
return true;
},
getTextArea: function() {
var txtarea = null;
if ( EditTools.last_active_textfield && EditTools.last_active_textfield != )
txtarea = document.getElementById( EditTools.last_active_textfield );
if ( !txtarea ) {
// Fallback option: old behaviour
if ( document.editform ) {
txtarea = document.editform.wpTextbox1;
} else {
// Some alternate form? Take the first one we can find
txtarea = document.getElementsByTagName( 'textarea' );
if ( txtarea.length > 0 ) {
txtarea = txtarea[0];
} else {
txtarea = null;
}
}
}
return txtarea;
},
insertTags: function( tagOpen, tagClose, sampleText ) {
/* Usability initiative compatibility */
if ( typeof $j != 'undefined' && typeof $j.fn.textSelection != 'undefined' ) {
$j( '#wpTextbox1' ).textSelection(
'encapsulateSelection', { 'pre': tagOpen, 'peri': sampleText, 'post': tagClose }
);
return;
}
var txtarea = EditTools.getTextArea ();
if ( !txtarea ) {
return;
}
var selText, isSample = false;
function checkSelectedText() {
if ( !selText ) {
selText = sampleText;
isSample = true;
} else if ( selText.charAt( selText.length - 1 ) == ' ' ) { // Exclude ending space char
selText = selText.substring( 0, selText.length - 1 );
tagClose += ' ';
}
}
if ( document.selection && document.selection.createRange ) { // IE/Opera
// Save window scroll position
var winScroll = 0;
if ( document.documentElement && document.documentElement.scrollTop ) {
winScroll = document.documentElement.scrollTop;
} else if ( document.body ) {
winScroll = document.body.scrollTop;
}
// Get current selection
txtarea.focus();
var range = document.selection.createRange();
selText = range.text;
// Insert tags
checkSelectedText ();
range.text = tagOpen + selText + tagClose;
// Mark sample text as selected
if ( isSample && range.moveStart ) {
if ( window.opera ) {
tagClose = tagClose.replace( /\n/g, );
}
range.moveStart( 'character', - tagClose.length - selText.length );
range.moveEnd( 'character', - tagClose.length );
}
range.select();
// Restore window scroll position
if ( document.documentElement && document.documentElement.scrollTop ) {
document.documentElement.scrollTop = winScroll;
} else if ( document.body ) {
document.body.scrollTop = winScroll;
}
} else if ( txtarea.selectionStart || txtarea.selectionStart == '0' ) { // Mozilla
// Save textarea scroll position
var textScroll = txtarea.scrollTop;
// Get current selection
txtarea.focus();
var startPos = txtarea.selectionStart;
var endPos = txtarea.selectionEnd;
selText = txtarea.value.substring( startPos, endPos );
// Insert tags
checkSelectedText();
txtarea.value = txtarea.value.substring( 0, startPos ) +
tagOpen + selText + tagClose +
txtarea.value.substring( endPos );
// Set new selection
if ( isSample ) {
txtarea.selectionStart = startPos + tagOpen.length;
txtarea.selectionEnd = startPos + tagOpen.length + selText.length;
} else {
txtarea.selectionStart = startPos + tagOpen.length + selText.length + tagClose.length;
txtarea.selectionEnd = txtarea.selectionStart;
}
// Restore textarea scroll position
txtarea.scrollTop = textScroll;
}
}, // end insertTags
setup: function() {
EditTools.fixateWidth();
EditTools.createSelector();
EditTools.enableForAllFields();
}
} // end EditTools
// Do not use addOnloadHook; it runs *before* the onload event fires. At that time, onclick or
// onfocus handlers may not yet be set up properly.
hookEvent( 'load', EditTools.setup );
} // end if
// </source>