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>
   `;
   `;