Benutzer:Mnh/modern.js

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

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
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
// <nowiki>
/*
 * TODO: - Optionen vereinheitlichen, bessere Benamsung
 *       - Usability: work flow vereinheitlichen, [a] = middle button, [b] = left ist Mist
 *       - "Stellt Schrott ein"-Knopf so nutzlos, die Seite ist ja schon weg, wenn ich ihn mal brauche
 */
/* TOC-Filter-Optionen */
var txt_show = "[alle zeigen]";/* Defaulttext für TOC-Button, falls gefiltert */
var txt_hide = "[filtern]";    /* Defaulttext sonst                           */
var filter_by_default = true;  /* Standardansicht gefiltert?                  */

/* Revertknöppchen die ich haben will */
var rvl_linktexts = new Array('A|Vand', 'A|Revert', 'WDS|Revert', 'A|Quelle?', 'A|WP:WEB', 'WD|Offtopic', 'WD|KPA');
var rvl_revtexts  = new Array(
                 'Zurück auf Version von $1: Offenkundiger Vandalismus.',
                 'Zurück auf Version von $1: Keine Verbesserung des Artikels.',
                 'default', /* üblicher Zurücksetztext */
                 'Zurück auf Version von $1: Bitte [[WP:QA|Quelle angeben]].',
                 'Zurück auf Version von $1: Bitte [[Wikipedia:Weblinks]] beachten',
                 'Zurück auf Version von $1: Beitrag für die Diskussion nicht weiterführend.',
                 'Zurück auf Version von $1: Bitte [[WP:Keine persönlichen Angriffe]] und [[WP:Wikiquette]] beachten.');

/* Pseudokonstanten für bessere Lesbarkeit */
var NOT_THERE = -1;

/******
 * Utilitykrams 
 ******/
function strlen(str) {
    return(str.length);
}

/* 
 * konstruiert Namen der Diskussionsseite
 */
function talk_of(page) {
    var pos;

    if( (pos=page.indexOf('Diskussion:')) != NOT_THERE)
        return page;
    if( (pos=page.indexOf(':')) == NOT_THERE)
        return 'Diskussion:' + page;

    return page.substr(0,pos) + ' Diskussion' + page.substr(pos);
}

/*
 * grobe Prüfung des Benutzernamens, ob ip oder nicht
 */
function is_ip(user) {
    return (user.match("^\\d+\\.\\d+\\.\\d+\\.\\d+$") != null);
}
/* 
 * token holen, action = (delete|block|edit|protect|unblock)
 */
function api_token(title, action) {
    var req = new XMLHttpRequest();
    req.open('GET', 'http://de.wikipedia.org/w/api.php?action=query&prop=info&format=xml&intoken=' 
                  + action + '&titles='+title, false);
    req.send(null);
        
    var pos = req.responseText.indexOf(action + 'token="') + strlen(action + 'token="');
    var pos2= req.responseText.indexOf('"', pos);

    return req.responseText.substr(pos, pos2-pos-2) + "%2B\\";
}

/* 
 * api-aktion durchführen, action=(delete|edit|block|protect|review)
 */
function api_post(params, action) {
    var req = new XMLHttpRequest();
    req.open('POST', 'http://de.wikipedia.org/w/api.php?action=' + action, false);
    req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    req.send(params);
}

/*
 * Frontends für api_post()
 */
function api_delete(page, reason, token) {
    return api_post("reason=" + reason + "&token=" + token + "&title=" + page, "delete");
}
function api_block(user, expiry, reason, token) {
    return api_post("user="+ user + "&expiry=" + expiry + "&reason=" + reason 
                  + "&token=" + token, "block");
}  
function api_protect(page, protections, expiry, reason, token) {
    return api_post("title=" + page + "&protections=" + protections + "&expiry=" + expiry +
                  + "&reason=" + reason + "&token=" + token, "protect");
}

/* 
 * Guckt, ob die übergebene Seite existiert.
 */
function api_page_exists(page) {
    var req = new XMLHttpRequest();
    req.open('GET', 'http://de.wikipedia.org/w/api.php?action=query&format=xml&titles='+page, false);
    req.send(null);

    return (req.responseText.indexOf('missing=""') == NOT_THERE);
}

/******
 * Content
 ******/
function killDates() {
    var haystack = document.getElementById("wpTextbox1");
    haystack.value = haystack.value.replace(/\[\[([0-9]{3,4})\]\]/g,"$1");    
    haystack.value = haystack.value.replace(/\[\[([0-9]{1,2}\. (Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember))\]\]/g, "$1");
    
    document.getElementById("wpSummary").value+= "Daten gemäß [[WP:Verlinken#Daten verlinken]] entlinkt";
}

/* Knopfbeschriftungen */
var portletLabels = {
   'ca-talk':          "Disk",
   'ca-edit':          "Edit",
   'ca-viewsource':    "Quelltext",
   'ca-history':       "Wer war das?",
   'ca-protect':       "Schützen",
   'ca-unprotect':     "Freigeben",
   'ca-delete':        "Löschen",
   'ca-undelete':      "Gelöschtes",
   'ca-move':          "Schubsen",
   'ca-watch':         "Merken",
   'ca-unwatch':       "Vergessen",
   'ca-nstab-user' :   "Seite",
   'pt-mytalk':        "Disk",
   'pt-watchlist':     "Beo",
   'pt-preferences':   "Conf",
   'pt-mycontris':     "Contribs",
   'pt-logout':        "",  // Ausgeloggt wird nicht
   't-permalink':      "Perma",
   't-contributions':  "Beiträge",
   't-blockip':        "Sperren",
   't-log':            "Logs",
   't-whatlinkshere':  "Links hierhin"
};
function labelItems(labels) {
    var elem, link;

    for (var id in labels) {
        if( (elem=document.getElementById(id)) == null)
            continue;
        if( (link=elem.getElementsByTagName("a")[0]) != null)
            link.textContent = labels[id];
    }
}
$(function() { labelItems(portletLabels); });

/** TODO: Fremdcode loswerden
Imports a user javascript page from any wikipedia project into the actual document.
 
@version 0.1
@date 2007/03/22
@author: based on function importPage from [[de:User:PDD]]s monobook.js, extended by [[de:User:Revvar]]
@param page Name of the user page without the "user:" prefix and the ".js" appendix
@param lang (optional) Language code of the corresponding wikipedia project. Default is the callers project.
@return "true" on success, "false" otherwise
*/
 
function importJavascriptL(page, lang) {
    try {
        /* check the parameters and set defaults */
        if(!page) throw("importJavascriptL: Missing parameter page.");
        if(!lang) lang = wgContentLanguage;
 
        /* create import url */
        var import_url = 'http://' + lang + '.wikipedia.org' + wgScriptPath + '/index.php?title=User:' + page +
           '.js&action=raw&ctype=text/javascript&smaxage=0';
 
        /* import page */
        var Head = document.getElementsByTagName('head').item(0);
        var Script = document.createElement('script');
        Script.setAttribute('type', 'text/javascript');
        Script.setAttribute('src', import_url);
        Script.setAttribute('charset', 'utf-8');
        Head.appendChild(Script);
 
        return true;
    } catch(e) {
        alert(e.message);
        return false;
    }
}


/** Jump to TOC: Fügt an fester Position einen Link ein, der einen direkten Sprung zum Inhaltsverzeichnis erlaubt **/
function jumptotoc() {
    var toc;
 
    if( (toc=document.getElementById("toctitle")) == null)
        return;
 
    toc.innerHTML = toc.innerHTML + '<div style="position:fixed; bottom:5px; left: 5px;">'
                  + '<a href="#toc" style="font-size:x-large; border: 1px solid gray; margin-left:1em;">'
                  + '&nbsp;↑&nbsp;</a></div>';
}
$(jumptotoc);

/*
 * Schnelles Löschen für Schrott
 */
function cb_trash_this(reason) {
    api_delete(wgPageName, reason, api_token(wgTitle, "delete"));
    jsMsg(wgTitle + " successfully deleted.");
    window.location.reload();
}
function trash_this() {
    var text;              /* Linktext   */
    var reason;            /* Löschgrund */

    /* Nicht in allen Namensräumen darstellen */
    if(wgCanonicalNamespace == "") {
        
        /* Sicherung, den Knopf nur in neueren Artikeln darstellen. 
         * NOTE: 4435000 entspricht neuen Artikeln May 2009, braucht gelegentliche Anpassung.
         *       Besser wäre nach Größe/Anzahl Versionen, aber API zu teuer
         */ 
        if(parseInt(wgArticleId) < 4435000)
            return;
        text   = "Schrott";
        reason = "[[WP:ART|Kein Artikel]] oder [[WP:WWNI|kein enzyklopädischer Inhalt]]";
    } else if(wgCanonicalNamespace == "File") {
        text   = "Commons";
        reason = "Bild auf Commons, lokale Seite Unfug";
    } else if(wgCanonicalNamespace.match(/[tT]alk/) && (wgCanonicalNamespace!="User_talk") ) {
        text   = "Schrott";
        reason = "Diskussionsseite nur Unfug.";
    } else {
        return;
    }

    var link = '&nbsp;&nbsp;&nbsp;&nbsp;'
             + '[<a href="javascript:void(0);" style="color:#CD3700; font-weight:bold;"'
             + " onclick=\"cb_trash_this('" + reason + "')\">" + text + "</a>]";
    var elem = document.getElementById('p-cactions');
    var pos  = elem.innerHTML.indexOf('</ul>');
    elem.innerHTML = elem.innerHTML.substr(0, pos) + link + elem.innerHTML.substr(pos);
}
// addOnloadHook(trash_this);

/*
 * schneller vandalblock aus dem diff
 */
function cb_2hours(user, cause) {
    var reason;
    
    if(cause == "vandal") 
        reason = "[[WP:Vandalismus|Unsinnige Bearbeitungen]]";
    else if(cause == "junk")
        reason = "Erstellen unerwünschter Einträge, vergleiche dazu [[Wikipedia:Artikel]]";

    var tok   = api_token(user, "block");
    var state = api_block(user, "2 hours", reason, tok);

    jsMsg(user + " blocked for 2 hours");
    location.href = "http://de.wikipedia.org/wiki/Spezial:Beiträge/" + user;
}
function vandal_2hours() {
    var user;          /* Der Delinquent */
    var div, pos, pos2;

    /* in diffs einbauen */
    if(location.href.indexOf("diff=") != NOT_THERE) {
        /* Namen extrahieren */
        if( (div=document.getElementById('mw-diff-ntitle2')) == null)
            return;
        pos  = div.innerHTML.indexOf('mw-userlink">') + strlen('mw-userlink">');
        pos2 = div.innerHTML.indexOf('</a>', pos);
        user = div.innerHTML.substr(pos, pos2-pos);
 
        /* Die zwei Stunden sind nur bei IPs sinnvoll */
        if(is_ip(user) == false)
            return;

        /* Link bauen und einfügen */
        var link = '<a href="javascript:void(0);" style="color:#CD3700; font-weight:bold;"'
                 + " onclick=\"cb_2hours('"+ user +"', 'vandal')\">Unfug</a>";

        div = document.getElementById("mw-diff-ntitle2");
        pos = div.innerHTML.indexOf('Sperren</a>') + strlen('Sperren</a>');
        div.innerHTML = div.innerHTML.substr(0, pos) + " | " + link + div.innerHTML.substr(pos);
    }
}
// addOnloadHook(vandal_2hours);

importJavascriptL('Mnh/ui','de');
importJavascriptL('Mnh/unterseiten','de');
importJavascriptL('Mnh/revlinks','de');
// importJavascriptL('Mnh/lktools','de');
// importJavascriptL('Jan_eissfeldt/contribsrange.js'); 
// </nowiki>