Amandanaga/common.js
//Benutzer:Schnark/js/letzteredit.js Program untuk melihat pengguna yang aktif

mw.loader.load('https://de.wikipedia.org/w/index.php?title=Benutzer:Schnark/js/letzteredit.js&action=raw&ctype=text/javascript');

var variant = 'ban-x-pku';

mw.hook('wikipage.content').add(function () {
    var contentModel = mw.config.get('wgPageContentModel');

    var action = mw.config.get('wgAction');

    var title = mw.config.get('wgTitle');

    

    if (contentModel === 'proofread-page') {

        fixProofreadPageCss();

        if (action === 'view') {

            getTransliterationVariant();

            addTransliteration(mw.config.get('wgPageName'), $('.pagetext .mw-parser-output'), 'appendTo', getTransliterateApi());

        } else if (action === 'edit') {

            mw.loader.using('mediawiki.ForeignApi', function () { 

                getTransliterationVariant();

                transcriberEdit(title);

            });

        }

    } else if (contentModel === 'proofread-index' && action === 'view') {

        mw.loader.using('mediawiki.ForeignApi', function () {

            getTransliterationVariant();

            transcriberView(title);

        });

    } else if (title.match(/^Ban\//) && action === 'view' && mw.config.get('wgCanonicalNamespace') === ) {

        fixPagenums();

        fixMainCss();

        getTransliterationVariant();

        addTransliterationForPages();

    }
});

function transcriberLoad() {
    mw.loader.load('https://tools-static.wmflabs.org/palmleaf-transcriber/transcriber.css?v6', 'text/css');

    mw.loader.load('https://tools-static.wmflabs.org/palmleaf-transcriber/transcriber.js?v16');
}

function transcriberEdit(title) {
    var filename, pagenum;

    var match = title.match(/^(.+)\/([0-9]+)$/);

    if (match) {

        filename = match[1];

        pagenum = match[2] - 1;

    } else {

        filename = title;

        pagenum = 0;

    }
var iaFile = getIaFile(filename);
    var imageUrl = $('.prp-page-image img').attr('src');

    if (!imageUrl) return;

    

    var textbox = document.getElementById('wpTextbox1');

    if (!textbox) return;

    textbox.style.fontFamily = "Noto Sans Balinese, Noto Serif Balinese, Vimala, monospace";

    getCommonsData(filename, pagenum).then(function (data) {

        if (!data) return;

        var imageData = data.iiifImageData;

        window.transcriberData = {

            mode: 'edit',

            textbox: textbox,

            imageUrl: imageUrl,

            leaf: pagenum,

            iaFile: iaFile,

            iaId: data.iaId,

            iiifBaseUrl: 'https:\/\/iiif.archivelab.org\/iiif',

            iiifDimensions: imageData ? (imageData.all || imageData.pages[pagenum]) : null,

            script: 'bali',

            language: 'ban-bali',

            variant: variant

        };

        transcriberLoad();

    });
}

function transcriberView(filename) {
    var iaFile = getIaFile(filename);

    var pagenum = 0;

    var wikipages = $('.prp-index-pagelist a').get().map(function (elt) {

        var href = elt.href;

        var match = href.match(/\/wiki\/(.+)$/);

        if (match) {

            return decodeURIComponent(match[1]);

        }

        match = href.match(/\btitle=(.+?)(?=&|$)/);

        if (match) {

            return decodeURIComponent(match[1]);

        }

        return null;

    });

    getCommonsData(filename, pagenum).then(function (data) {

        if (!data) return;

        window.transcriberData = {

            mode: 'view',

            commonsFile: filename,

            wikipages: wikipages,

            iaFile: iaFile,

            iaId: data.iaId,

            leaf: pagenum,

            iiifBaseUrl: 'https:\/\/iiif.archivelab.org\/iiif',

            iiifImageData: data.iiifImageData,

            script: 'bali',

            language: 'ban-bali',

            variant: variant

        };

        transcriberLoad();

    });
}

function getIaFile(filename) {

var match = filename.match(/^Bali-lontar-(.+)\.pdf$/i);

return match ? match[1] : null;

}

function getCommonsData(filename, pagenum) {
    var api = new mw.ForeignApi('https://commons.wikimedia.org/w/api.php');

    return new Promise(function (resolve, reject) {

        api.get({

            action: 'query',

            prop: 'iwlinks|revisions',

            titles: 'File:' + filename,

            rvprop: 'content',

            rvslots: '*',

            formatversion: 2,

            origin: '*'

        }, {

            xhrFields: { withCredentials: false }

        }).then(function (commonsRes) {

            var page = commonsRes.query.pages[0];

            if (page.missing) {

                resolve(null);

            } else {

                var transcriberData = {};

                page.iwlinks.some(function (link) {

                    if (link.prefix === 'iarchive') {

                        transcriberData.iaId = link.title;

                        return true; // short circuit

                    }

                    return false;

                });

                var match = page.revisions[0].slots.main.content.match(//);

                if (match) {

                    transcriberData.iiifImageData = JSON.parse(match[1]);

                }

                resolve(transcriberData);

            }

        }).catch(reject);

    });
}

function getTransliterationVariant() {
    var userVariant = mw.user.options.get('variant-ban');

    if (userVariant && userVariant !== 'ban') {

        variant = userVariant;

    }
}

function getTransliterateApi() {
    return new mw.Api();

    //return new mw.ForeignApi(transliterateApi);    
}

function addTransliteration(page, elt, where, api) {
    api.get({

        action: 'parse',

        prop: 'text',

        text: '==== Auto-transliteration ====\n',

        contentmodel: 'wikitext',

        disablelimitreport: 1,

        disableeditsection: 1,

        formatversion: 2

    })

    .then(function (res) {

        if (!res.error) {

            var div = $(res.parse.text)[where](elt);

        }

    });
}

function fixPagenums() {
    $('.ws-noexport').attr('style', null).append('

 ');
}

function addTransliterationForPages() {
    var api = getTransliterateApi();

    $('.ws-pagenum').each(function () {

        var page = this.getAttribute('title');

        var startSpan = $(this).parents('.ws-noexport').first().parent();

        var nextSpan = startSpan.nextAll("span:has('.ws-pagenum')").first();

        if (nextSpan.length) {

            addTransliteration(page, nextSpan, 'insertBefore', api);

        } else {

            addTransliteration(page, startSpan.parent(), 'appendTo', api);

        }

    });
}

function fixProofreadPageCss() {
    var sheet = document.styleSheets[0];

    sheet.insertRule('[lang="ban-Bali"] .pagetext { text-align: start !important; word-break: break-all !important; overflow-wrap: anywhere !important; }');
}

function fixMainCss() {
    var sheet = document.styleSheets[0];

    sheet.insertRule('.mw-body-content [lang="ban-Bali"] p { word-break: break-all !important; overflow-wrap: anywhere !important; }');
}