User:Anomie/unsignedhelper.js

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.months[ts.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(pos[0]!=pos[1]){                txt=e.value.substring(pos[0],pos[1]);                pos=pos[1];            } else {                pos=pos[1];                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=$(' Examining revision 1... ').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(' Error: Bad response from API '); 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.pages[k].revisions[0]; 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(' Error: Text was not found in the starting revision! Did you edit it? '); 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 = $( ' ' ) .append(                                       'The ',                                        $( '' ).prop( { href: '/w/index.php?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(' Error: No revisions found in the page! '); },               error:function(xhr,textStatus,errorThrown){ if(!dialog.dialog('isOpen')) return; dialog.html(' Error: '+textStatus+' '+errorThrown+' '); }           };            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;