//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 ====\nGalat: Atribut tag Langconvert from miwah to nénten dados puyung miwah patut medaging kode BCP 47 antuk soroh sané prasida kakonvérsi saking basa sané pateh.',
       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; }');

}