From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.

// CHECK THAT I'VE REMEMBERED TO SIGN TALK PAGES AND IF SURE DO IT AUTOMATIC:

// *** aut. signing / (automatische Unterschrift) *** [[User:Olliminatore/signing.js]]

// created 23.04.2006 by [[User:Olliminatore]]

// updated 23.04.2006 by [[:en:User:Ilmari Karonen]]

// current version 1.56 13.03.2007

// Interwiki <noinclude>[[de:User:Olliminatore/signing.js]]</noinclude>

//<pre><nowiki>



String.prototype.trim = function(){return this.replace(/^\s*|\s*$/g,"")};



if (typeof usersignature == 'undefined') usersignature = ' --\~\~\~\~\n';



if (typeof regpages == 'undefined') { // list of all none talk pages

    var regpages = 

    ':Village pump',

    ':Articles for deletion',

    ':Requests for ',

    ':Reference desk',

    ':Deletion review',

    ':Templates for deletion',

    '.*noticeboard.*',

    ':checkuser',

    ':arbitration',

    ':feedback',

    ':page protection',

    'mediation)',

    ':Bot requests',

    ':Help desk',

    ':Editor review',

    ':Adminship survey',

    ':Cleanup',

    ':Miscellany for deletion',

    ':New contributors\' help page',

    ':Media copyright questions'

    ];

} 



    // regarded pages type encoded

if (mw.config.get('wgCanonicalNamespace').match(/talk$/i)) var regpages = "";

for (p in regpages) if (mw.config.get('wgPageName').indexOf(regpagesp]) != -1){regpages=false; break}



if (!regpages) 

addOnloadHook(function(){

    if (!(window.editform = document.forms'editform'])) return;

    // Add a new checkbox to the Wiki editOptions.

    sigBox = document.createElement("input");

    sigBox.setAttribute('type','checkbox');

    sigBox.setAttribute('name','wpSigning');

    sigBox.setAttribute('id','wpSigning');

    sigBox.setAttribute('checked','checked');

    sigBox.defaultChecked=true;

    neuB = document.createElement("label");

    neuB.appendChild(sigBox);

    neuB.appendChild(document.createTextNode("Sign"));

    neuB.setAttribute('for','wpSigning');

    neuB.setAttribute('title','Sign this edit automatic.');

    

    function setSigBox() { // switch enable box

        if (editform.wpMinoredit.checked) sigBox.setAttribute('disabled','disabled');

        else sigBox.removeAttribute('disabled');

    };



    var txtarea=editform.elements'wpTextbox1'];

    var txtOld=txtarea.value.trim();

    // txtOld_l=txtOld.length

    var txtOldEnd=txtOld.slice(-24);

    var sig = /~{3}/g;



    if (!tNode){

        //editform.insertBefore(neuB, editform.elements['wpWatchthis']); // maybe FIXME: raised an NS_DOM_ERR!

        var tNode = editform.elements'wpMinoredit'].parentNode;  // DOM workaround!?

        tNode.divs = tNode.getElementsByTagName("DIV");

        tNode.divs = tNode.divs.item(tNode.divs.length-1); // last div

        tNode.insertBefore(neuB, tNode.divs);

        setSigBox();

    }

    

    function doSign(event){

        if(editform.onsubmit==''){ // only once!

            removeEvent(editform.wpSave,"click",doSign);

            removeEvent(editform.wpPreview,"click",doSign);

        }

        if(editform.onsubmit=='') removeEvent(editform.wpSave,"click",doSign); // only once!

        if(editform.wpMinoredit.checked || !sigBox.checked) return;

        txtarea.focus();

        var cOld = txtOld.match(/<nowiki>.*?~{3}.*?<\/nowiki>/g); // exception for nowiki

        if (cOld) cOld = cOld.length;

        cNew = txtarea.value.match(sig); if (cNew) cNew = cNew.length;

        if (cNew > cOld){ // if there are a sign, check for true

            var cNew2 = txtarea.value.match(/\{\{subst\:unsig.*?~{3}\}\}/); // exception for Template:unsigned

            cNew -= (cNew2)?cNew2.length:0;

        }

        if(cNew <= cOld){ // if nothing then search a set position

            txt=txtarea.value.trim();

            txtEnd=txt.slice(-24);

            if(txtOldEnd!=txtEnd) return txtarea.value = txt + usersignature;  // aut. underwrite

            else { // post between

                pos = getCaretPos(txtarea);

                pos = txt.indexOf('\n', pos); // go to the post-end

                txtEnds = txt.substr(pos,24).replace(/(^\s*)/,""); // after

                txtpEnds = txt.slice(pos-18,pos); // before

                oldp = txtOld.indexOf(txtEnds);

                if(oldp!=-1 && oldp < pos - 3 && txtOld.indexOf(txtpEnds+RegExp.$1+txtEnds)==-1) // if some added

                    return txtarea.value = txt.slice(0,pos).trim() + usersignature + txt.slice(pos+1);

            }

         // FIXME: then the edit-end is not found!?

        }

        else if(!sig.test(txtOld) || cOld < cNew) return;

        if (event) event=(window.Event)? event.target: event.srcElement;

        if (event.name == 'wpPreview') return; // not for preview

        return editform.onsubmit=new Function("editform.onsubmit='';"

          +"return confirm('No signing was found. Continue anyway?')"); //warn if saving without signature

    };

    addEvent(editform.wpSave,"click", doSign);

    addEvent(editform.wpPreview,"click", doSign);

    addEvent(editform.wpMinoredit,"click", setSigBox);

});



function getCaretPos(txtObj){

    if (txtObj.setSelectionRange) return txtObj.selectionStart; // NS like

    else if(!document.selection) return 0;  // not IE like

    var c="\001", pos=0;

    var range=document.selection.createRange();

    var txt=range.text, dul=range.duplicate();

    dul.moveToElementText(txtObj);

    range.text=txt+c;

    pos=(dul.text.indexOf(c));

    range.moveStart('character',-1);

    range.text="";

    return pos;

};



/* add/removeEvent Original idea by John Resig

 Tweaked by Scott Andrew LePera, Dean Edwards and Peter-Paul Koch

 Fixed for IE by Tino Zijdel (crisp) @date 2005-10 */

function addEvent(obj,type,fn){if(obj.addEventListener){obj.addEventListener(type,fn,false)}else if(obj.attachEvent){var eProp=type+fn;obj"e"+eProp=fn;objeProp=function(){obj"e"+eProp](window.event)};obj.attachEvent("on"+type,objeProp])}else{obj'on'+type=fn}};

function removeEvent(obj,type,fn){if(obj.removeEventListener){obj.removeEventListener(type,fn,false)}else if(obj.detachEvent){var eProp=type+fn;obj.detachEvent("on"+type,objeProp]);obj'e'+eProp=null;objeProp=null}else{obj'on'+type=null}};



// *** end *** </nowiki></pre>
From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.

// CHECK THAT I'VE REMEMBERED TO SIGN TALK PAGES AND IF SURE DO IT AUTOMATIC:

// *** aut. signing / (automatische Unterschrift) *** [[User:Olliminatore/signing.js]]

// created 23.04.2006 by [[User:Olliminatore]]

// updated 23.04.2006 by [[:en:User:Ilmari Karonen]]

// current version 1.56 13.03.2007

// Interwiki <noinclude>[[de:User:Olliminatore/signing.js]]</noinclude>

//<pre><nowiki>



String.prototype.trim = function(){return this.replace(/^\s*|\s*$/g,"")};



if (typeof usersignature == 'undefined') usersignature = ' --\~\~\~\~\n';



if (typeof regpages == 'undefined') { // list of all none talk pages

    var regpages = 

    ':Village pump',

    ':Articles for deletion',

    ':Requests for ',

    ':Reference desk',

    ':Deletion review',

    ':Templates for deletion',

    '.*noticeboard.*',

    ':checkuser',

    ':arbitration',

    ':feedback',

    ':page protection',

    'mediation)',

    ':Bot requests',

    ':Help desk',

    ':Editor review',

    ':Adminship survey',

    ':Cleanup',

    ':Miscellany for deletion',

    ':New contributors\' help page',

    ':Media copyright questions'

    ];

} 



    // regarded pages type encoded

if (mw.config.get('wgCanonicalNamespace').match(/talk$/i)) var regpages = "";

for (p in regpages) if (mw.config.get('wgPageName').indexOf(regpagesp]) != -1){regpages=false; break}



if (!regpages) 

addOnloadHook(function(){

    if (!(window.editform = document.forms'editform'])) return;

    // Add a new checkbox to the Wiki editOptions.

    sigBox = document.createElement("input");

    sigBox.setAttribute('type','checkbox');

    sigBox.setAttribute('name','wpSigning');

    sigBox.setAttribute('id','wpSigning');

    sigBox.setAttribute('checked','checked');

    sigBox.defaultChecked=true;

    neuB = document.createElement("label");

    neuB.appendChild(sigBox);

    neuB.appendChild(document.createTextNode("Sign"));

    neuB.setAttribute('for','wpSigning');

    neuB.setAttribute('title','Sign this edit automatic.');

    

    function setSigBox() { // switch enable box

        if (editform.wpMinoredit.checked) sigBox.setAttribute('disabled','disabled');

        else sigBox.removeAttribute('disabled');

    };



    var txtarea=editform.elements'wpTextbox1'];

    var txtOld=txtarea.value.trim();

    // txtOld_l=txtOld.length

    var txtOldEnd=txtOld.slice(-24);

    var sig = /~{3}/g;



    if (!tNode){

        //editform.insertBefore(neuB, editform.elements['wpWatchthis']); // maybe FIXME: raised an NS_DOM_ERR!

        var tNode = editform.elements'wpMinoredit'].parentNode;  // DOM workaround!?

        tNode.divs = tNode.getElementsByTagName("DIV");

        tNode.divs = tNode.divs.item(tNode.divs.length-1); // last div

        tNode.insertBefore(neuB, tNode.divs);

        setSigBox();

    }

    

    function doSign(event){

        if(editform.onsubmit==''){ // only once!

            removeEvent(editform.wpSave,"click",doSign);

            removeEvent(editform.wpPreview,"click",doSign);

        }

        if(editform.onsubmit=='') removeEvent(editform.wpSave,"click",doSign); // only once!

        if(editform.wpMinoredit.checked || !sigBox.checked) return;

        txtarea.focus();

        var cOld = txtOld.match(/<nowiki>.*?~{3}.*?<\/nowiki>/g); // exception for nowiki

        if (cOld) cOld = cOld.length;

        cNew = txtarea.value.match(sig); if (cNew) cNew = cNew.length;

        if (cNew > cOld){ // if there are a sign, check for true

            var cNew2 = txtarea.value.match(/\{\{subst\:unsig.*?~{3}\}\}/); // exception for Template:unsigned

            cNew -= (cNew2)?cNew2.length:0;

        }

        if(cNew <= cOld){ // if nothing then search a set position

            txt=txtarea.value.trim();

            txtEnd=txt.slice(-24);

            if(txtOldEnd!=txtEnd) return txtarea.value = txt + usersignature;  // aut. underwrite

            else { // post between

                pos = getCaretPos(txtarea);

                pos = txt.indexOf('\n', pos); // go to the post-end

                txtEnds = txt.substr(pos,24).replace(/(^\s*)/,""); // after

                txtpEnds = txt.slice(pos-18,pos); // before

                oldp = txtOld.indexOf(txtEnds);

                if(oldp!=-1 && oldp < pos - 3 && txtOld.indexOf(txtpEnds+RegExp.$1+txtEnds)==-1) // if some added

                    return txtarea.value = txt.slice(0,pos).trim() + usersignature + txt.slice(pos+1);

            }

         // FIXME: then the edit-end is not found!?

        }

        else if(!sig.test(txtOld) || cOld < cNew) return;

        if (event) event=(window.Event)? event.target: event.srcElement;

        if (event.name == 'wpPreview') return; // not for preview

        return editform.onsubmit=new Function("editform.onsubmit='';"

          +"return confirm('No signing was found. Continue anyway?')"); //warn if saving without signature

    };

    addEvent(editform.wpSave,"click", doSign);

    addEvent(editform.wpPreview,"click", doSign);

    addEvent(editform.wpMinoredit,"click", setSigBox);

});



function getCaretPos(txtObj){

    if (txtObj.setSelectionRange) return txtObj.selectionStart; // NS like

    else if(!document.selection) return 0;  // not IE like

    var c="\001", pos=0;

    var range=document.selection.createRange();

    var txt=range.text, dul=range.duplicate();

    dul.moveToElementText(txtObj);

    range.text=txt+c;

    pos=(dul.text.indexOf(c));

    range.moveStart('character',-1);

    range.text="";

    return pos;

};



/* add/removeEvent Original idea by John Resig

 Tweaked by Scott Andrew LePera, Dean Edwards and Peter-Paul Koch

 Fixed for IE by Tino Zijdel (crisp) @date 2005-10 */

function addEvent(obj,type,fn){if(obj.addEventListener){obj.addEventListener(type,fn,false)}else if(obj.attachEvent){var eProp=type+fn;obj"e"+eProp=fn;objeProp=function(){obj"e"+eProp](window.event)};obj.attachEvent("on"+type,objeProp])}else{obj'on'+type=fn}};

function removeEvent(obj,type,fn){if(obj.removeEventListener){obj.removeEventListener(type,fn,false)}else if(obj.detachEvent){var eProp=type+fn;obj.detachEvent("on"+type,objeProp]);obj'e'+eProp=null;objeProp=null}else{obj'on'+type=null}};



// *** end *** </nowiki></pre>

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook