/*

Kopioitu tänne sivulta ]:
https://en.wikipedia.orghttps://wiki95.com/fi/User:Anomie/unsignedhelper.js
ja lokalisoitu toimimaan fi-wikissä.


Tämä skripti helpottaa mallineiden ] ja ] lisäystä
lisäämällä ne muokkaustilan muokkauspainikkeisiin
ja hakemalla muutoshistoriasta kommentin tiedot automaattisesti.
Tämä käyttää ]-muokkaustyökalua:
https://en.wikipedia.orghttps://wiki95.com/fi/Help:CharInsert


Asennusohje:
	Lisää common.js-sivullesi eli sivulle
https://fi.wikipedia.orghttps://wiki95.com/fi/Toiminnot:Oma_sivu/common.js
	nämä kaksi riviä:
importScript('Käyttäjä:Atraie/Gadget-charinsert-core.js'); // Backlink: ]
importScript('Käyttäjä:Atraie/unsignedhelper.js'); // Backlink: ]


Käyttöohje:
	1) Maalaa wikiteksti-muokkaustilassa allekirjoittamattoman kommentin loppuosa
	2) Klikkkaa {{allekirjoittamaton}}-muokkauspainiketta muokkausruudun alapuolelta
	3) Odota, että skripti hakee kommentin tiedot

Yllä oleva ohje animaationa:
https://upload.wikimedia.org/wikipedia/commons/f/fe/Unsignedhelper_localized_in_fi-wiki.gif


Linkkejä:
]
]
]


Englanninkielinen ohjesivu:
https://en.wikipedia.orghttps://wiki95.com/fi/User:Anomie/unsignedhelper


Päivitetty viimeksi: 11.1.2023

*/
var UnsignedHelper={
    months:,

    makeUnsignedTemplate:function(user,ts,anon){
        ts=new Date(ts);
        var h=ts.getHours(); if(h<10) h='0'+h;
        var m=ts.getMinutes(); if(m<10) m='0'+m;
        ts=ts.getDate()+'. '+UnsignedHelper.months+' '+ts.getFullYear()+' kello '+h+'.'+m+' {\{subst:#ifeq: -120 | '+ts.getTimezoneOffset()+' | (EET) | (EEST)}}';
        if(anon){
            return '\x7b\x7bsubst:AllekirjoittamatonIP|'+user+'|'+ts+'\x7d\x7d';
        } else {
            return '\x7b\x7bsubst:Allekirjoittamaton|'+user+'|'+ts+'\x7d\x7d';
        }
    },

    addUnsignedTemplate:function(evt){
        mw.loader.using(, function(){
            var f=document.getElementById('editform');
            var e=f.elements.wpTextbox1;
            var pos=$(e).textSelection('getCaretPosition', {startAndEnd:true});
            var txt;
            if(pos!=pos){
                txt=e.value.substring(pos,pos);
                pos=pos;
            } else {
                pos=pos;
                if(pos<=0) pos=e.value.length;
                txt=e.value.substr(0,pos);
                txt=txt.replace(new RegExp('*\\d\\d:\\d\\d, \\d+ ('+UnsignedHelper.months.join('|')+') \\d\\d\\d\\d'), '');
                txt=txt.replace(/*\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\x7ballekirjoittamaton\x7d\x7d'
            });

            var revid, user, ts, comment, 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:'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.pages.revisions;
                        var cont = function () {
                            if(r && r.revisions){
                                dialog.html('Evaluating revision '+(++rvct)+'...');
                                q.data.rvcontinue=r.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('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,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('close');
                            };
                            if(/hylättiin|kumottiin|kumottu/i.test(comment)){
                                var dialog2 = $( '<div>' )
                                    .append(
                                        'The ',
                                        $( '<a>' ).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;
                            anon=(typeof(rr.anon)!='undefined');
                            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) window.charinsertCustom='';
window.charinsertCustom+=' \x7b\x7ballekirjoittamaton\x7d\x7d\x10UnsignedHelper.addUnsignedTemplate';
if(!window.charinsertCustom) window.charinsertCustom='';
window.charinsertCustom+=' \x7b\x7ballekirjoittamaton\x7d\x7d\x10UnsignedHelper.addUnsignedTemplate';
if(window.updateEditTools) window.updateEditTools();