Benutzer:Everywhere West/monobook.js

aus Wikipedia, der freien Enzyklopädie

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
document.write('<script type="text/javascript" src="' 
             + 'http://de.wikipedia.org/w/index.php?title=Benutzer:D/monobook/user.js' 
             + '&action=raw&ctype=text/javascript&dontcountme=s"><\/script>');
document.write('<link rel="stylesheet" type="text/css" href="'
             + 'http://de.wikipedia.org/w/index.php?title=Benutzer:D/monobook/user.css'
             + '&action=raw&ctype=text/css&dontcountme=s"><\/link>');

/** adds buttons for some predefined search'n'replace-operations to the editor */
window.addEventListener("DOMContentLoaded", function() {
    var searchAndReplace    = [
        { 
            label:  "cleanEntities",
            title:  "converts html, hex and decimal entities into characters",
            func:   function(s) {
                        return s.replace(   // hex entities
                            /&#x([0-9a-f]{1,4});/gi,    
                            function(dollar0, dollar1) { 
                                return String.fromCharCode(parseInt(dollar1, 16)); 
                            }
                        ).replace(          // decimal entities
                            /&#([0-9]{1,5});/g,     
                            function(dollar0, dollar1) {
                                return String.fromCharCode(parseInt(dollar1, 10)); 
                            }
                        )/*.replace(        // named entities
                            /&([a-z]+);/gi,         
                            function(dollar0, dollar1) {
                                return dollar1 in html4Entities
                                        ? String.fromCharCode(html4Entities[dollar1])
                                        : dollar0;
                            }
                        )*/;
                    }
        },
        {
            label:  "cleanTags",
            title:  "cleans up some HTML-tags and replaces others with wiki-markup",
            func:   function(s) {
                        return s.replace(/[ \t]*(<br *>|<\/br *>)/gi,       "<br />")
                                .replace(/[ \t]*(<hr *>|<\/hr *>)/gi,       "<hr />")
                                .replace(/<font size="-1">(.*)<\/font>/gi,  "<small>$1</small>")
                                .replace(/<font size="+1">(.*)<\/font>/gi,  "<big>$1</big>")
                                .replace(/<i>(.*)<\/i>/gi,                  "''$1''")
                                .replace(/<b>(.*)<\/b>/gi,                  "'''$1'''");
                    }
        },
        {
            label:  "noSelfLinks",
            title:  "removes links from a page to itself",
            func:   function(s) {
                        var head    = wgPageName.substring(0, 1);
                        var tail    = wgPageName.substring(1);
                        var title   = "[" + escapeRE(head.toLowerCase() + head.toUpperCase()) + "]"
                                    + escapeRE(tail).replace(/[_ ]/g, "[_ ]");
                        return s.replace(   // [[ title ]] => title
 
                            new RegExp("\\[\\[\\s*(" + title + ")\\s*\\]\\]", "g"),
                            "$1"
                        ).replace(          // [[ title | caption ]] => caption
                            new RegExp("\\[\\[\\s*(" + title + ")\\s*\\|\\s*([^\\]]+?)\\s*\\]\\]", "g"),
                            "$2"
                        );
                    }
        },
        {
            label:  "shortLinks",
            title:  "shortens wikilinks from [[link|linktext]] to [[link]]text",
            func:   function(s) {
                        return s.replace(
                            /\[\[\s*([^\]|]+)\s*\|\s*\1([^\]|]*)\s*\]\]/,
                            "[[$1]]$2"
                        );
                    }
        },
        {
            label:  "noLinks",
            title:  "removes all links",
            func:   function(s) {
                        return s.replace(
                            /\[\[\s*([^\]|]*)\s*\]\]/g,
                            "$1"
                        ).replace(
                            /\[\[\s*([^\]|]*)\s*\|\s*([^\]|]*)\s*\]\]/g,
                            "$2"
                        );
                    }
        },
        {
            label:  "noStyle",
            title:  "removes italics and bold style",
            func:   function(s) {
                        return s.replace(/('''?|''''')(.*?)(\1)/g, "$2");
                    }
        },
        {
            label:  "quoteRight",
            title:  "typographical quote characters for dewp",
            func:   function(s) {
                        return s.replace(   // save HTML attributes
                            /="([^"]*)"/g,
                            '=§§§$1§§§'
                        ).replace(          // replace starting quotes
                            /(^[*:;#]+|\s|[\(\[\|'>])"('*\[*\w)/mg, 
                            "$1\u201e$2"
                        ).replace(          // replace ending quotes
                            /(\w\]*'*.?)"($|\s|[\)\]\|',;.:<-])/mg, 
                            "$1\u201c$2"
                        ).replace(          // rebuild HTML attributes
                            /=§§§([^§]*)§§§/g, 
                            '="$1"'
                        );
                    }
        },
        {
            label:  "unDate",
            title:  "removes links to date pages on dewp",
            func:   function(s) {
                        return s.replace(
                            /\[\[\s*(\d+(er)?( v. Chr.)?)\s*\]\]/g,
                            "$1"
                        ).replace(
                            /\[\[\s*(\d+\. (Jahrhundert|Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember))\s*\]\]/g, 
                            "$1"
                        );
                    }
        },
    ];
 
    //------------------------------------------------------------------------------
 
    /** escapes characters to make them usable as a literal in a RegExp */
    function escapeRE(s) { 
        return s.replace(/([{}()|.?*+^$\[\]\\])/g, "\\$1");
    };
 
    /** replaces text in the textarea and resets the cursor */
    function replace(func) {
        var text    = tb.value;
        var start   = tb.selectionStart;
        var end     = tb.selectionEnd;
        if (start == 0 && end == text.length) {
            tb.value    = func(text);
            tb.select();
        }
        else if (start == end) {
            tb.value    = func(text);
            tb.setSelectionRange(start, end);
        }
        else {
            var prefix  = text.substring(0, start);
            var select  = text.substring(start, end);
            var suffix  = text.substring(end);
            var repl    = func(select);
            tb.value    = prefix + repl + suffix;
            tb.setSelectionRange(start, start+repl.length);
        }
        tb.focus();
    }
 
    /** adds a new replace-button */
    function button(def) {
        var btn = document.createElement("input");
        btn.type    = "button";
        btn.value   = def.label;
        btn.onclick = function() { replace(def.func); }
        if (div.firstChild) div.appendChild(document.createTextNode("\u00a0"));
        div.appendChild(btn);
    }
 
    /** adds a new replace-link */
    function link(def) {
        var btn = document.createElement("a");
        btn.textContent = def.label;
        btn.title       = def.title;
        btn.onclick     = function() { replace(def.func); }
        btn.style.cursor    = "pointer";
        if (div.firstChild) div.appendChild(document.createTextNode("\u00a0|\u00a0"));
        div.appendChild(btn);
    }
 
    var form    = document.forms['editform'];
    if (!form)  return;
    var tb      = form.elements['wpTextbox1'];
    if (!tb)    return;
    tb.value    = tb.value;
 
    var div = document.createElement("div");
    div.id  = "searchAndReplaceButtons";
    div.style.fontSize  = "85%";
 
    searchAndReplace.forEach(link);
 
    var toolbar = document.getElementById('toolbar');
    if (toolbar) {
        div.style.cssFloat  = "right";
        toolbar.parentNode.insertBefore(div, toolbar);
    }
    else {
        form.parentNode.insertBefore(div, form);
    }
}, false);