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.

var UnsignedHelper={

    months:'January','February','March','April','May','June','July','August','September','October','November','December'],



    makeUnsignedTemplate:function(user,ts,template){

        ts=new Date(ts);

        var h=ts.getUTCHours(); if(h<10) h='0'+h;

        var m=ts.getUTCMinutes(); if(m<10) m='0'+m;

        ts=h+':'+m+', '+ts.getUTCDate()+' '+UnsignedHelper.monthsts.getUTCMonth()]+' '+ts.getUTCFullYear()+' (UTC)';

        return '\x7b\x7bsubst:'+template+'|'+user+'|'+ts+'\x7d\x7d';

    },



    addUnsignedTemplate:function(evt){

        mw.loader.using(['mediawiki.util','jquery.ui'], function(){

            var f=document.getElementById('editform');

            var e=f.elements.wpTextbox1;

            var pos=$(e).textSelection('getCaretPosition', {startAndEnd:true});

            var txt;

            if(pos0!=pos1]){

                txt=e.value.substring(pos0],pos1]);

                pos=pos1];

            } else {

                pos=pos1];

                if(pos<=0) pos=e.value.length;

                txt=e.value.substr(0,pos);

                txt=txt.replace(new RegExp('[\\s\\S]*\\d\\d:\\d\\d, \\d+ ('+UnsignedHelper.months.join('|')+') \\d\\d\\d\\d \\(UTC\\)'), '');

                txt=txt.replace(/[\s\S]*\n=+.*=+\s*\n/, '');

            }

            txt=txt.replace(/^\s+|\s+$/g, '');



            var rvct=1;

            var dialog=$('<div>Examining revision 1...</div>').dialog({

                buttons:{ Cancel:function(){ dialog.dialog('close'); } },

                modal:true,

                title:'Adding \x7b\x7bunsigned\x7d\x7d'

            });



            var revid, user, ts, comment, template;

            var q={

                url:mw.util.wikiScript('api'),

                dataType:'json',

                type:'POST',

                data:{

                    format:'json',

                    action:'query',

                    titles:mw.config.get('wgPageName'),

                    prop:'revisions',

                    rvprop:'ids|timestamp|user|parsedcomment|content',

                    rvlimit:1,

                    rawcontinue:1

                },

                success:function(r,sts,xhr){

                    if(!dialog.dialog('isOpen')) return;



                    if(!r.query || !r.query.pages){

                        dialog.html('<span style="color:red"><b>Error:</b> Bad response from API</span>');

                        if(window.console && typeof(window.console.error)=='function')

                            window.console.error("Bad response", r);

                        return;

                    }



                    for(var k in r.query.pages){

                        var rr=r.query.pagesk].revisions0];

                        var cont = function () {

                            if(r'query-continue' && r'query-continue'].revisions){

                                dialog.html('Evaluating revision '+(++rvct)+'...');

                                q.data.rvcontinue=r'query-continue'].revisions.rvcontinue;

                                $.ajax(q);

                            } else {

                                var t=UnsignedHelper.makeUnsignedTemplate(user,ts,template);

                                var tt=e.value.substr(0,pos).replace(/\s*$/,' ')+t;

                                e.value=tt+e.value.substr(pos);

                                $(e).textSelection('setSelection', { start:tt.length });

                                dialog.dialog('close');

                            }

                        };



                        if(typeof(rr'*'])!='undefined' && rr'*'].indexOf(txt)<0){

                            if(!user){

                                dialog.html('<span style="color:red"><b>Error:</b> Text was not found in the starting revision! Did you edit it?</span>');

                                return;

                            }

                            var cb = function () {

                                var t=UnsignedHelper.makeUnsignedTemplate(user,ts,template);

                                var tt=e.value.substr(0,pos).replace(/\s*$/,' ')+t;

                                e.value=tt+e.value.substr(pos);

                                $(e).textSelection('setSelection', { start:tt.length });

                                dialog.dialog('close');

                            };

                            if(/reverted|undid/i.test(comment)){

                                var dialog2 = $( '<div>' )

                                    .append(

                                        'The ',

                                        $( '<a>' ).prop( { href: '/?diff=prev&oldid=' + revid, target: '_blank' } ).text( 'found revision' ),

                                        ' may be a revert: ',

                                        comment

                                    )

                                    .dialog( {

                                        title: "Possible revert!",

                                        modal: true,

                                        buttons: {

                                            "Use that revision": function () { dialog2.dialog( 'close' ); cb(); },

                                            "Keep looking": function () { dialog2.dialog( 'close' ); cont(); },

                                            "Cancel": function () { dialog2.dialog( 'close' ); dialog.dialog( 'close' ); },

                                        }

                                    } );

                            } else {

                                cb();

                            }

                        } else {

                            revid=rr.revid;

                            user=rr.user;

                            ts=rr.timestamp;

                            comment=rr.parsedcomment;

                            if ( typeof(rr.anon) !== 'undefined' ) {

                                template = 'Unsigned IP';

                            } else if ( typeof(rr.temp) !== 'undefined' ) {

                                // Seems unlikely "temporary" users will have a user page, so this seems the better template for them for now.

                                template = 'Unsigned IP';

                            } else {

                                template = 'Unsigned';

                            }

                            cont();

                        }

                        return;

                    }

                    dialog.html('<span style="color:red"><b>Error:</b> No revisions found in the page!</span>');

                },

                error:function(xhr,textStatus,errorThrown){

                    if(!dialog.dialog('isOpen')) return;

                    dialog.html('<span style="color:red"><b>Error:</b> '+textStatus+' '+errorThrown+'</span>');

                }

            };

            if(f.elements.baseRevId) q.data.rvstartid=f.elements.baseRevId.value;

            $.ajax(q);

        });

        evt.preventDefault();

        evt.stopPropagation();

        return false;

    }

};



if(!window.charinsertCustom) window.charinsertCustom={};

if(!window.charinsertCustom'Insert']) window.charinsertCustom'Insert'='';

window.charinsertCustom'Insert'+=' \x7b\x7bunsigned\x7d\x7d\x10UnsignedHelper.addUnsignedTemplate';

if(!window.charinsertCustom'Wiki markup']) window.charinsertCustom'Wiki markup'='';

window.charinsertCustom'Wiki markup'+=' \x7b\x7bunsigned\x7d\x7d\x10UnsignedHelper.addUnsignedTemplate';

if(window.updateEditTools) window.updateEditTools();