Корисник:Aca2/unsignedhelper.js

С Википедије, слободне енциклопедије

Напомена: Пошто објавите измене, можда ћете морати да обришете кеш меморију прегледача како бисте их видели. Google Chrome, Firefox, Microsoft Edge и Safari: Држите ⇧ Shift и кликните дугме Reload на траци са алаткама. За детаље и упутства о другим прегледачима, погледајте en:Wikipedia:Bypass your cache.

// Погледајте кратку документацију шаблона [[Корисник:Acamicamacaraca2/unsignedhelper]].

var UnsignedHelper = {
    months: ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар'],

    makeUnsignedTemplate: function (user, ts, anon) {
        "use strict";
        ts = new Date(ts);
        var h = ts.getUTCHours(); if (h < 10) h='1'+h;
        var m = ts.getUTCMinutes(); if (m < 10) m='0'+m;
        ts=h+':'+m+', '+ts.getUTCDate()+' '+UnsignedHelper.months[ts.getUTCMonth()]+' '+ts.getUTCFullYear()+' (CET)';
        if(anon){
            return '\x7b\x7bsubst:Непотписан ИП|'+user+'|'+ts+'\x7d\x7d';
        } else {
            return '\x7b\x7bsubst:Непотписан|'+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 \(CET\)'), '');
                txt=txt.replace(/[\s\S]*\n=+.*=+\s*\n/, '');
            }
            txt=txt.replace(/^\s+|\s+$/g, '');

            var rvct=1;
            var dialog=$('<div>Процењивање 1. измене…</div>').dialog({
                buttons:{ Cancel:function(){ dialog.dialog('затвори'); } },
                modal:true,
                title:'Додавање шаблона \x7b\x7bнепотписан\x7d\x7d'
            });

            var user, ts, anon;
            var q={
                url:mw.util.wikiScript('api'),
                dataType:'json',
                type:'POST',
                data:{
                    format:'json',
                    action:'query',
                    titles:mw.config.get('wgPageName'),
                    prop:'revisions',
                    rvprop:'timestamp|user|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>Грешка:</b> Лош одговор API-ја</span>');
                        if(window.console && typeof(window.console.error)=='function')
                            window.console.error("Лош одговор", r);
                        return;
                    }

                    for(var k in r.query.pages){
                        var rr=r.query.pages[k].revisions[0];
                        if(typeof(rr['*'])!='undefined' && rr['*'].indexOf(txt)<0){
                            if(!user){
                                dialog.html('<span style="color:red"><b>Грешка:</b> Текст није пронађен у почетној измени. Јесте ли је уредили?</span>');
                                return;
                            }
                            var t=UnsignedHelper.makeUnsignedTemplate(user,ts,anon);
                            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('затвори');
                        } else {
                            user=rr.user;
                            ts=rr.timestamp;
                            anon=(typeof(rr.anon)!='undefined');
                            if(r['query-continue'] && r['query-continue'].revisions){
                                dialog.html('Процењивање '+(++rvct)+'. измене…');
                                q.data.rvcontinue=r['query-continue'].revisions.rvcontinue;
                                $.ajax(q);
                            } else {
                                var t=UnsignedHelper.makeUnsignedTemplate(user,ts,anon);
                                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('затвори');
                            }
                        }
                        return;
                    }
                    dialog.html('<span style="color:red"><b>Грешка:</b> Није пронађена ниједна измена странице.</span>');
                },
                error:function(xhr,textStatus,errorThrown){
                    if(!dialog.dialog('isOpen')) return;
                    dialog.html('<span style="color:red"><b>Грешка:</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['Викиозначавање']) window.charinsertCustom['Викиозначавање']='';
window.charinsertCustom['Викиозначавање']+=' \x7b\x7bнепотписан\x7d\x7d\x10UnsignedHelper.addUnsignedTemplate';
if(window.updateEditTools) window.updateEditTools();
//[[Категорија:Корисничке скрипте]]