MediaWiki:Common.js: Difference between revisions

No edit summary
No edit summary
Line 75: Line 75:
     '५':'5','६':'6','७':'7','८':'8','९':'9',
     '५':'5','६':'6','७':'7','८':'8','९':'9',
   },
   },
   te: {/* devanagari → telugu */
   en: {/* devanagari → IAST */
     'अ':'','आ':'','इ':'','ई':'','उ':'','ऊ':'','ऋ':'',
     'अ':'a','आ':'ā','इ':'i','ई':'ī','उ':'u','ऊ':'ū',
    'ए':'','ऐ':'','ओ':'','औ':'','ऽ':'ఽ',
    'ऋ':'ṛ','ॠ':'ṝ','ए':'e','ऐ':'ai','ओ':'o','औ':'au','ऽ':"'",
     'क':'','ख':'','ग':'','घ':'','ङ':'',
     'क':'k','ख':'kh','ग':'g','घ':'gh','ङ':'',
     'च':'','छ':'','ज':'','झ':'','ञ':'',
     'च':'c','छ':'ch','ज':'j','झ':'jh','ञ':'ñ',
     'ट':'','ठ':'','ड':'','ढ':'','ण':'',
     'ट':'','ठ':'ṭh','ड':'','ढ':'ḍh','ण':'',
     'त':'','थ':'','द':'','ध':'','न':'',
     'त':'t','थ':'th','द':'d','ध':'dh','न':'n',
     'प':'','फ':'','ब':'','भ':'','म':'',
     'प':'p','फ':'ph','ब':'b','भ':'bh','म':'m',
     'य':'','र':'','ल':'','व':'',
     'य':'y','र':'r','ल':'l','ळ':'ḷ','व':'v',
     'श':'','ष':'','स':'','ह':'',
     'श':'ś','ष':'','स':'s','ह':'h',
     'ा':'','ि':'ి','ी':'','ु':'','ू':'',
     'ा':'ā','ि':'i','ी':'ī','ु':'u','ू':'ū',
     'ृ':'','े':'','ै':'','ो':'','ौ':'',
     'ृ':'ṛ','ॄ':'ṝ','े':'e','ै':'ai','ो':'o','ौ':'au',
     'ं':'','ः':'','्':'',
     'ं':'','ः':'','्':'','ँ':'m̐','ॐ':'oṃ',
     '०':'','१':'','२':'','३':'','४':'',
     '०':'0','१':'1','२':'2','३':'3','४':'4',
     '५':'','६':'','७':'','८':'','९':'',
     '५':'5','६':'6','७':'7','८':'8','९':'9',
   }
   }
};
};


function transliterateText(text, map) {
mw.loader.load('https://cdn.jsdelivr.net/npm/sanscript.js@1.1.2/sanscript.min.js');
   // preprocess anusvara clusters (from your PHP logic)
 
// Then in applyScript(), for 'en' script:
function transliterateText(text, map, script) {
  if (script === 'en') {
    return Sanscript.t(text, 'devanagari', 'iast');
  }
   // existing map-based logic for kn/ta
   const pre = [
   const pre = [
     [/ङ्क/g,'ंक'],[/ङ्ख/g,'ंख'],[/ङ्ग/g,'ंग'],[/ङ्घ/g,'ंघ'],
     [/ङ्क/g,'ंक'],[/ङ्ख/g,'ंख'],[/ङ्ग/g,'ंग'],[/ङ्घ/g,'ंघ'],
Line 108: Line 114:
   if (!content) return;
   if (!content) return;


  // restore original devanagari first
   content.querySelectorAll('[data-deva]').forEach(el => {
   content.querySelectorAll('[data-deva]').forEach(el => {
     el.textContent = el.getAttribute('data-deva');
     el.textContent = el.getAttribute('data-deva');
Line 116: Line 121:
   if (script === 'deva') return;
   if (script === 'deva') return;


   const map = SCRIPT_MAP[script];
   const map = SCRIPT_MAP[script]; // will be undefined for 'en', handled inside transliterateText
  if (!map) return;


  // transliterate all text nodes
   const walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT);
   const walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT);
   const nodes = [];
   const nodes = [];
Line 126: Line 129:
   nodes.forEach(node => {
   nodes.forEach(node => {
     const orig = node.textContent;
     const orig = node.textContent;
     const trans = transliterateText(orig, map);
     const trans = transliterateText(orig, map, script);
     if (trans !== orig) {
     if (trans !== orig) {
       const span = document.createElement('span');
       const span = document.createElement('span');
Line 145: Line 148:
     <a class="gr-script-btn" data-script="kn">ಕನ್ನಡ</a>
     <a class="gr-script-btn" data-script="kn">ಕನ್ನಡ</a>
     <a class="gr-script-btn" data-script="ta">தமிழ்</a>
     <a class="gr-script-btn" data-script="ta">தமிழ்</a>
     <a class="gr-script-btn" data-script="te">తెలుగు</a>
     <a class="gr-script-btn" data-script="en">English</a>
   `;
   `;