Suradnik:Ivi104/Skripte/RevisionID.js

Izvor: Wikipedija

Napomena: Nakon objave možda ćete trebati očistiti međuspremnik svog preglednika kako biste vidjeli promjene.

  • Firefox / Safari: držite Shift i pritisnite Reload, ili pritisnite bilo Ctrl-F5 ili Ctrl-R (⌘-R na Macu)
  • Google Chrome: pritisnite Ctrl-Shift-R (⌘-Shift-R na Macu)
  • Internet Explorer / Edge: držite Ctrl i kliknite Refresh, ili pritisnite Ctrl-F5
  • Opera: pritisnite Ctrl-F5.
/*** Show Revision ID ***/

// Shows the revison id on history pages
// Documentation at [[User:BrandonXLF/ShowRevisionID]]
// By [[User:BrandonXLF]]

/* jshint esversion: 6, unused: true */

$(document).ready(function () {
    var lang = {
        "default": {
            dateTimeSplit: null,
            DTSplit: null,
            patrolString: "Patrolled by ",
            summaryMale: 'Restored revision [[Special:Diff/$1|$1]] entered by $4',
            summaryFemale: 'Restored revision [[Special:Diff/$1|$1]] entered by $4',
            copied: 'Copied: ',
            contribsPageLocal: 'Special:Contributions',
            diffPageLocal: 'Special:Diff'
        },
        "en": {
            dateTimeSplit: 'as of ',
            DTSplit: ', ',
            patrolString: "Patrolled by ",
            summaryMale: 'Restored revision [[Special:Diff/$1|$1]] entered on $2 at $3 by $4',
            summaryFemale: 'Restored revision [[Special:Diff/$1|$1]] entered on $2 at $3 by $4',
            copied: 'Copied: ',
            contribsPageLocal: 'Special:Contributions',
            diffPageLocal: 'Special:Diff'
        },
        "hr": {
            dateTimeSplit: 'od ',
            DTSplit: ' u ',
            patrolString: "Ophodio ",
            summaryMale: "Vraćanje na inačicu [[Special:Diff/$1|$1]] koju je $3 u $2 unio $4",
            summaryFemale: "Vraćanje na inačicu [[Special:Diff/$1|$1]] koju je $3 u $2 unijela $4",
            copied: 'Kopirano: ',
            contribsPageLocal: 'Posebno:Dopinosi',
            diffPageLocal: 'Posebno:Diff'
        },
        "bs": {
            dateTimeSplit: 'na dan ',
            DTSplit: ' u ',
            patrolString: "Odobrio ",
            summaryMale: "Vraćanje na inačicu [[Special:Diff/$1|$1]] koju je $3 u $2 unio $4",
            summaryFemale: "Vraćanje na inačicu [[Special:Diff/$1|$1]] koju je $3 u $2 unijela $4",
            copied: 'Kopirano: ',
            contribsPageLocal: 'Posebno:Dopinosi',
            diffPageLocal: 'Posebno:Diff'
        },
        "sr": {
            dateTimeSplit: 'на датум ',
            DTSplit: ' у ',
            patrolString: "Испатролирао ",
            summaryMale: "Ручно враћање на измену бр. [[Special:Diff/$1|$1]] коју је унео $4 на датум $3 у $2",
            summaryFemale: "Ручно враћање на измену бр. [[Special:Diff/$1|$1]] коју је унела $4 на датум $3 у $2",
            copied: 'Копирано: ',
            contribsPageLocal: 'Посебно:Доприноси',
            diffPageLocal: 'Посебно:Разлике'
        },
        "sr-el": {
            dateTimeSplit: 'na dan ',
            DTSplit: ' u ',
            patrolString: "Ispatrolirao ",
            summaryMale: "Ručno vraćanje na izmenu br. [[Special:Diff/$1|$1]] koju je uneo $4 na datum $3 u $2",
            summaryFemale: "Ručno vraćanje na izmenu br. [[Special:Diff/$1|$1]] koju je unela $4 na datum $3 u $2",
            copied: 'Kopirano: ',
            contribsPageLocal: 'Posebno:Doprinosi',
            diffPageLocal: 'Posebno:Razlike'
        },
        "sr-ec": {
            dateTimeSplit: 'на датум ',
            DTSplit: ' у ',
            patrolString: "Испатролирао ",
            summaryMale: "Ручно враћање на измену бр. [[Special:Diff/$1|$1]] коју је унео $4 на датум $2 у $3",
            summaryFemale: "Ручно враћање на измену бр. [[Special:Diff/$1|$1]] коју је унела $4 на датум $2 у $3",
            copied: 'Копирано: ',
            contribsPageLocal: 'Посебно:Доприноси',
            diffPageLocal: 'Посебно:Разлике'
        },
    };
    var langVar = mw.config.exists('wgUserVariant') ? mw.config.get('wgUserVariant') : mw.config.get('wgUserLanguage');
    console.log("RevID LANG:", langVar);

    var config = lang["default"];

    if (lang[langVar]) {
        config = lang[langVar];
    }

    var items;
    if (mw.config.get("wgCanonicalSpecialPageName") == "Contributions" || mw.config.get("wgAction") == "history") {
        items = document.querySelectorAll('li[data-mw-revid]');
        for (var i = 0; i < items.length; i++) {
            items[i].getElementsByClassName('mw-changeslist-date')[0].after(document.createTextNode(' | ' + items[i].getAttribute('data-mw-revid')));
        }
    } else if (location.href.includes('Special:Diff') || mw.config.get("wgDiffNewId") != null ||
        location.href.includes('diff') || location.href.includes('oldid')) {

        mw.hook('wikipage.diff').add(function () {
            osvjeziRevID(config);
            console.log("RevID: wikipage.diff hook fired");
        });
    }
});

function kopirajSazetak(revid, suradnik, datumiVrijeme, config) {
    var config = JSON.parse(config);

    var vrijeme = '';
    var datum = '';
    if (datumiVrijeme) {
        vrijeme = datumiVrijeme.split(config.DTSplit)[0];
        datum = datumiVrijeme.split(config.DTSplit)[1];
    }

    var spolAPI = $.getJSON(mw.config.get("wgScriptPath") + "/api.php?action=query&format=json&prop=&list=users&meta=&usprop=gender&ususers=" + suradnik)
        .done(function (query) {
            if (!query.query) { return; } // API fail
            query = query.query;
            var gender = (typeof query.users[0].gender == "string") ? query.users[0].gender : null;
            var string, dummy;
            if (gender == "female") {
                string = config.summaryFemale.replaceAll('$1', revid).replace('$2', datum).replace('$3', vrijeme).replace('$4', suradnik);
            }
            else {
                string = config.summaryMale.replaceAll('$1', revid).replace('$2', datum).replace('$3', vrijeme).replace('$4', suradnik);
            }
            //kopiraj u clipboard
            dummy = $('<input>').val(string).appendTo('body').select();
            document.execCommand('copy');
            document.body.lastElementChild.remove();

            console.log(config.copied + string);
        });
}

function osvjeziRevID(config) {

    var stringHrefPrev = $('#mw-diff-otitle1').children('strong').find('a', 'span>a').attr('href');
    var stringHrefCurr = $('#mw-diff-ntitle1').children('strong').find('a', 'span>a').attr('href');

    const urlParamsPrev = new URLSearchParams(stringHrefPrev);
    const urlParamsCurr = new URLSearchParams(stringHrefCurr);


    var revidPrev = stringHrefPrev && urlParamsPrev.get('oldid');
    var revidCurr = stringHrefCurr && urlParamsCurr.get('oldid');

    var userNamePrev = document.getElementsByClassName('mw-userlink')[0].children[0].innerHTML;
    var userNameCurr = document.getElementsByClassName('mw-userlink')[1].children[0].innerHTML;


    if (config.dateTimeSplit) {

        try {
            var datumiVrijemePrev = $('#mw-diff-otitle1').children('strong').find('a', 'span>a')[0].innerHTML.split(config.dateTimeSplit)[1];
            var datumiVrijemeCurr = $('#mw-diff-ntitle1').children('strong').find('a', 'span>a')[0].innerHTML.split(config.dateTimeSplit)[1];
        } catch (e) {
            return; // Uncaught TypeError: Cannot read property 'innerHTML' of undefined
        }
    }

    var idValuePrev = document.createElement('abbr');
    idValuePrev.className = 'revID-ivi';
    idValuePrev.innerHTML = ' | ' + revidPrev + ' | ';

    var idValueCurr = document.createElement('abbr');
    idValueCurr.className = 'revID-ivi';
    idValueCurr.innerHTML = ' | ' + revidCurr + ' | ';

    var patrolString = 'Patrolled by ';

    if (config.dateTimeSplit) {
        idValuePrev.addEventListener('click', function () {
            kopirajSazetak(revidPrev, userNamePrev, datumiVrijemePrev, JSON.stringify(config));
        });

        idValueCurr.addEventListener('click', function () {
            kopirajSazetak(revidCurr, userNameCurr, datumiVrijemeCurr, JSON.stringify(config));
        });

        patrolString = config.patrolString;
    } else {    // no config found
        idValuePrev.style.color = 'darkred';
        idValueCurr.style.color = 'darkred';

        idValuePrev.addEventListener('click', function () {
            kopirajSazetak(revidPrev, userNamePrev, null, JSON.stringify(config));
        });

        idValueCurr.addEventListener('click', function () {
            kopirajSazetak(revidCurr, userNameCurr, null, JSON.stringify(config));
        });

    }

    var wgPageName = mw.config.get('wgCanonicalNamespace') == 'Special' ? mw.config.get('wgRelevantPageName') : mw.config.get('wgPageName');


    // check if wiki uses FlaggedRevs
    var FlaggedRevsCheck = {
        "action": "query",
        "format": "json",
        "meta": "siteinfo",
        "siprop": "extensions"
    };
    var wikiHasFlaggedRevs = 0;
    var api = new mw.Api();
    api.get(FlaggedRevsCheck).done(function (data) {

        if (data.query.extensions.some(e => e.name == 'FlaggedRevs')) {
            wikiHasFlaggedRevs = 1;
        }
    }).then(function () {
        var checkPatroller = {};
        if (wikiHasFlaggedRevs) {

            checkPatroller = {
                "action": "query",
                "format": "json",
                "list": "logevents",
                "leprop": "details|user|type",
                "letype": "review",
                "letitle": wgPageName
            };

            api.get(checkPatroller).done(function (query) {
                if (!query.query) { return; } // API fail
                query = query.query;

                query.logevents.forEach(function (entry) {
                    if (revidPrev > entry.params[1] && revidPrev <= entry.params[0] && entry.action.includes("approve")) {
                        idValuePrev.setAttribute('title', patrolString + entry.user + (entry.action == "approve-a" ? ' (auto)' : ''));
                    }
                    if (revidCurr > entry.params[1] && revidCurr <= entry.params[0] && entry.action.includes("approve")) {
                        idValueCurr.setAttribute('title', patrolString + entry.user + (entry.action == "approve-a" ? ' (auto)' : ''));
                    }
                });
            });

        } else {

            checkPatroller = {
                "action": "query",
                "format": "json",
                "list": "logevents",
                "leprop": "details|user",
                "letype": "patrol",
                "letitle": wgPageName
            };

            api.get(checkPatroller).done(function (query) {
                if (!query.query) { return; } // API fail
                query = query.query;

                query.logevents.forEach(function (entry) {
                    if (entry.params.curid == revidPrev) {
                        idValuePrev.setAttribute('title', patrolString + entry.user);
                    } else if (entry.params.curid == revidCurr) {
                        idValueCurr.setAttribute('title', patrolString + entry.user);
                    }
                });
            });
        }
        $('#mw-diff-otitle1').children('strong').find('a', 'span>a')[0].after(idValuePrev);

        $('#mw-diff-ntitle1').children('strong').find('a', 'span>a')[0].after(idValueCurr);
    });
}