MediaWiki:Common.js: Difference between revisions

No edit summary
Undo revision 6527 by Vaishnavi (talk)
Tag: Undo
 
(5 intermediate revisions by the same user not shown)
Line 5: Line 5:
     var LS_SCRIPT_KEY = 'grantha_reader_script';
     var LS_SCRIPT_KEY = 'grantha_reader_script';
     var currentScript = 'deva';
     var currentScript = 'deva';
    function devanagariToTamil(text) {
        var CONSONANTS = {
            'क': 'க', 'ख': 'க', 'ग': 'க', 'घ': 'க', 'ङ': 'ங',
            'च': 'ச', 'छ': 'ச', 'ज': 'ஜ', 'झ': 'ஜ', 'ञ': 'ஞ',
            'ट': 'ட', 'ठ': 'ட', 'ड': 'ட', 'ढ': 'ட', 'ण': 'ண',
            'त': 'த', 'थ': 'த', 'द': 'த', 'ध': 'த', 'न': 'ந',
            'प': 'ப', 'फ': 'ப', 'ब': 'ப', 'भ': 'ப', 'म': 'ம',
            'य': 'ய', 'र': 'ர', 'ल': 'ல', 'ळ': 'ள', 'व': 'வ',
            'श': 'ஶ', 'ष': 'ஷ', 'स': 'ஸ', 'ह': 'ஹ'
        };
        var DIACRITICS = {
            'ा': 'ா', 'ि': 'ி', 'ी': 'ீ', 'ु': 'ு', 'ू': 'ூ',
            'े': 'ே', 'ै': 'ை', 'ो': 'ோ', 'ौ': 'ௌ'
        };
        var VOWELS = {
            'अ': 'அ', 'आ': 'ஆ', 'इ': 'இ', 'ई': 'ஈ', 'उ': 'உ', 'ऊ': 'ஊ',
            'ए': 'ஏ', 'ऐ': 'ஐ', 'ओ': 'ஓ', 'औ': 'ஔ', 'ऽ': 'ऽ'
        };
        var MISC = {
            'ं':'ம்', 'ः':':', 'ँ':'ம்', 'ॐ':'ௐ',
            '०': '0', '१': '1', '२': '2', '३': '3', '४': '4',
            '५': '5', '६': '6', '७': '7', '८': '8', '९': '9'
        };
        var HALANTA = '्';
        var chars = Array.from(text), result = '', i = 0;
        while (i < chars.length) {
            var ch = chars[i], next = chars[i + 1];
            if (CONSONANTS[ch]) {
                var base = CONSONANTS[ch];
                if (next === HALANTA) { result += base + '்'; i += 2; }
                else if (next === 'ृ') { result += base + '்ரி'; i += 2; }
                else if (next === 'ॄ') { result += base + '்ரீ'; i += 2; }
                else if (DIACRITICS[next]) { result += base + DIACRITICS[next]; i += 2; }
                else { result += base; i++; }  // inherent 'a'
            }
            else if (ch === 'ऋ') { result += 'ரி'; i++; }
            else if (ch === 'ॠ') { result += 'ரீ'; i++; }
            else if (VOWELS[ch]) { result += VOWELS[ch]; i++; }
            else if (MISC[ch]) { result += MISC[ch]; i++; }
            else { result += ch; i++; }
        }
        return result;
    }


     function devanagariToIAST(text) {
     function devanagariToIAST(text) {
Line 30: Line 74:
         };
         };
         var HALANTA = '्';
         var HALANTA = '्';
         var chars = Array.from(text);
         var chars = Array.from(text), result = '', i = 0;
        var result = '';
        var i = 0;
         while (i < chars.length) {
         while (i < chars.length) {
             var ch = chars[i];
             var ch = chars[i], next = chars[i + 1];
            var next = chars[i + 1];
             if (CONSONANTS[ch]) {
             if (CONSONANTS[ch]) {
                 var base = CONSONANTS[ch];
                 var base = CONSONANTS[ch];
Line 42: Line 83:
                 else if (next === 'ं' || next === 'ः') { result += base + 'a' + MISC[next]; i += 2; }
                 else if (next === 'ं' || next === 'ः') { result += base + 'a' + MISC[next]; i += 2; }
                 else { result += base + 'a'; i++; }
                 else { result += base + 'a'; i++; }
             } else if (VOWELS[ch]) { result += VOWELS[ch]; i++; }
             }
            else if (VOWELS[ch]) { result += VOWELS[ch]; i++; }
             else if (DIACRITICS[ch]) { result += DIACRITICS[ch]; i++; }
             else if (DIACRITICS[ch]) { result += DIACRITICS[ch]; i++; }
             else if (MISC[ch]) { result += MISC[ch]; i++; }
             else if (MISC[ch]) { result += MISC[ch]; i++; }
Line 52: Line 94:
     var SCRIPT_MAP = {
     var SCRIPT_MAP = {
         kn: {
         kn: {
             'अ': 'ಅ', 'आ': 'ಆ', 'इ': 'ಇ', 'ई': 'ಈ', 'उ': 'ಉ', 'ऊ': 'ಊ', 'ऋ': 'ಋ',
             'अ': 'ಅ', 'आ': 'ಆ', 'इ': 'ಇ', 'ई': 'ಈ', 'उ': 'ಉ', 'ऊ': 'ಊ', 'ऋ': 'ಋ', 'ॠ': 'ೠ',
             'ए': 'ಏ', 'ऐ': 'ಐ', 'ओ': 'ಓ', 'औ': 'ಔ', 'ऽ': 'ಽ',
             'ए': 'ಏ', 'ऐ': 'ಐ', 'ओ': 'ಓ', 'औ': 'ಔ', 'ऽ': 'ಽ',
             'क': 'ಕ', 'ख': 'ಖ', 'ग': 'ಗ', 'घ': 'ಘ', 'ङ': 'ಙ',
             'क': 'ಕ', 'ख': 'ಖ', 'ग': 'ಗ', 'घ': 'ಘ', 'ङ': 'ಙ',
Line 59: Line 101:
             'त': 'ತ', 'थ': 'ಥ', 'द': 'ದ', 'ध': 'ಧ', 'न': 'ನ',
             'त': 'ತ', 'थ': 'ಥ', 'द': 'ದ', 'ध': 'ಧ', 'न': 'ನ',
             'प': 'ಪ', 'फ': 'ಫ', 'ब': 'ಬ', 'भ': 'ಭ', 'म': 'ಮ',
             'प': 'ಪ', 'फ': 'ಫ', 'ब': 'ಬ', 'भ': 'ಭ', 'म': 'ಮ',
             'य': 'ಯ', 'र': 'ರ', 'ल': 'ಲ', 'व': 'ವ',
             'य': 'ಯ', 'र': 'ರ', 'ल': 'ಲ', 'ळ': 'ಳ', 'व': 'ವ',
             'श': 'ಶ', 'ष': 'ಷ', 'स': 'ಸ', 'ह': 'ಹ',
             'श': 'ಶ', 'ष': 'ಷ', 'स': 'ಸ', 'ह': 'ಹ',
             'ा': 'ಾ', 'ि': 'ಿ', 'ी': 'ೀ', 'ु': 'ು', 'ू': 'ೂ',
             'ा': 'ಾ', 'ि': 'ಿ', 'ी': 'ೀ', 'ु': 'ು', 'ू': 'ೂ',
             'ृ': 'ೃ', 'े': 'ೇ', 'ै': 'ೈ', 'ो': 'ೋ', 'ौ': 'ೌ',
             'ृ': 'ೃ', 'ॄ': 'ೄ', 'े': 'ೇ', 'ै': 'ೈ', 'ो': 'ೋ', 'ौ': 'ೌ',
             'ं': 'ಂ', 'ः': 'ಃ', '्': '್',
             'ं': 'ಂ', 'ः': 'ಃ', '्': '್', 'ँ': 'ಁ',
             '०': '೦', '१': '೧', '२': '೨', '३': '೩', '४': '೪',
             '०': '೦', '१': '೧', '२': '೨', '३': '೩', '४': '೪',
             '५': '೫', '६': '೬', '७': '೭', '८': '೮', '९': '೯'
             '५': '೫', '६': '೬', '७': '೭', '८': '೮', '९': '೯'
         },
         },
         ta: {
         te: {
             'अ': '', 'आ': '', 'इ': '', 'ई': '', 'उ': '', 'ऊ': '',
             'अ': '', 'आ': '', 'इ': '', 'ई': '', 'उ': '', 'ऊ': '', 'ऋ': '', 'ॠ': '',
            'ऋ': 'ரு', 'ॠ': 'ரூ',
             'ए': '', 'ऐ': '', 'ओ': '', 'औ': 'ఔ', 'ऽ': 'ఽ',
             'ए': '', 'ऐ': '', 'ओ': '', 'औ': '',
             'क': '', 'ख': '', 'ग': '', 'घ': '', 'ङ': '',
             'क': '', 'ख': '', 'ग': '', 'घ': '', 'ङ': '',
             'च': '', 'छ': '', 'ज': '', 'झ': '', 'ञ': '',
             'च': '', 'छ': '', 'ज': '', 'झ': '', 'ञ': '',
             '': '', 'ठ': '', 'ड': '', 'ढ': '', '': '',
             '': '', 'ठ': '', 'ड': '', 'ढ': '', '': '',
             'त': '', 'थ': '', 'द': '', 'ध': '', 'न': '',
             'त': '', 'थ': '', 'द': '', 'ध': '', 'न': '',
             'प': '', 'फ': '', 'ब': '', 'भ': '', 'म': '',
             'प': '', 'फ': '', 'ब': '', 'भ': '', 'म': '',
             'य': '', 'र': '', 'ल': '', 'ळ': '', 'व': '',
             'य': '', 'र': '', 'ल': '', 'ळ': '', 'व': '',
             'श': '', 'ष': '', 'स': '', 'ह': '',
             'श': '', 'ष': '', 'स': '', 'ह': '',
             'ा': '', 'ि': 'ి', 'ी': '', 'ु': '', 'ू': '',
             'ा': '', 'ि': 'ி', 'ी': '', 'ु': '', 'ू': '',
             'ृ': '', 'ॄ': '', 'े': '', '': '', 'ो': '', 'ौ': '',
             'ृ': '', 'ॄ': '',
             'ं': '', 'ः': '', '्': '', '': '',
            'े': '', '': '', 'ो': '', 'ौ': '',
             '०': '', '१': '', '२': '', '३': '', '४': '',
             'ं': 'ம்', 'ः': ':', 'ँ': 'ம்', '्': '', 'ॐ': 'ௐ', 'ऽ': '',
             '५': '', '६': '', '७': '', '८': '', '९': ''
             '०': '0', '१': '1', '२': '2', '३': '3', '४': '4',
             '५': '5', '६': '6', '७': '7', '८': '8', '९': '9'
         }
         }
     };
     };
Line 95: Line 135:
     function transliterateText(text, script) {
     function transliterateText(text, script) {
         if (script === 'en') return devanagariToIAST(text);
         if (script === 'en') return devanagariToIAST(text);
        if (script === 'ta') return devanagariToTamil(text);
         var map = SCRIPT_MAP[script];
         var map = SCRIPT_MAP[script];
         if (!map) return text;
         if (!map) return text;
Line 598: Line 639:
         try { localStorage.setItem('gr_home_view', v); } catch (e) { }
         try { localStorage.setItem('gr_home_view', v); } catch (e) { }
     }
     }
    function initHomeToggle() {
        var gBtn = document.getElementById('gr-toggle-grantha');
        var aBtn = document.getElementById('gr-toggle-author');
        if (!gBtn || !aBtn) return;
        gBtn.addEventListener('click', function () { grHomeView('grantha'); });
        aBtn.addEventListener('click', function () { grHomeView('author'); });
        [gBtn, aBtn].forEach(function (btn) { btn.addEventListener('keydown', function (e) { if (e.key === 'Enter' || e.key === ' ') btn.click(); }); });
        var saved; try { saved = localStorage.getItem('gr_home_view'); } catch (e) { }
        if (saved === 'author') grHomeView('author');
    }
    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', initHomeToggle);
    else initHomeToggle();
}());
}());


Line 940: Line 969:
     window.grStoreSearchHL = storeQueryForLink;
     window.grStoreSearchHL = storeQueryForLink;


}());
/* ═══════════════════════════════════════════════════════════════
  Mobile addon — only runs on Minerva (mobile) skin
  ═══════════════════════════════════════════════════════════════ */
(function () {
    if (!document.body.classList.contains('skin-minerva')) return;
    function injectMenuLinks() {
        if (document.getElementById('gr-mob-menu-items')) return;
        var navDrawer = document.querySelector('.navigation-drawer');
        if (!navDrawer) return;
        var wrap = document.createElement('div'); wrap.id = 'gr-mob-menu-items'; wrap.style.cssText = 'width:100%;background:#fff;margin-top:8px;';
        var itemStyle = 'display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;';
        function makeItem(href, label) { var a = document.createElement('a'); a.href = href; a.style.cssText = itemStyle; a.innerHTML = '<span>' + label + '</span>'; return a; }
        wrap.appendChild(makeItem('/Main_Page', 'Home'));
        wrap.appendChild(makeItem('/My_wiki:Help', 'Help'));
        wrap.appendChild(makeItem('/My_wiki:About', 'About'));
        var userName = window.mw ? mw.config.get('wgUserName') : null;
        if (userName) {
            wrap.appendChild(makeItem((window.mw && mw.util && mw.util.getUrl) ? mw.util.getUrl('Special:Profile') : '/Special:Profile', 'Profile'));
            var la = document.querySelector('a[href*="action=logout"]');
            wrap.appendChild(makeItem(la ? la.href : '/index.php?title=Special:UserLogout', 'Log out'));
        }
        else wrap.appendChild(makeItem('/index.php?title=Special:UserLogin', 'Log in'));
        var pageLeft = document.getElementById('mw-mf-page-left');
        if (pageLeft) { while (pageLeft.firstChild) pageLeft.removeChild(pageLeft.firstChild); pageLeft.style.removeProperty('display'); pageLeft.appendChild(wrap); }
        else navDrawer.appendChild(wrap);
    }
    function injectMoolaUllekhaLinks() {
        if (document.getElementById('gr-mob-doc-nav')) return;
        var pageName = (window.mw && mw.config && mw.config.get('wgPageName')) || '';
        if (pageName === 'Main_Page' || !pageName) return;
        function wikiUrl(slug) { if (window.mw && mw.util && mw.util.getUrl) return mw.util.getUrl(slug); return ((window.mw && mw.config.get('wgArticlePath')) || '/wiki/$1').replace('$1', encodeURIComponent(slug).replace(/%2F/g, '/')); }
        var teekaPage = document.querySelector('.gr-teeka-page');
        var primarySlug = teekaPage ? (teekaPage.getAttribute('data-primary') || pageName.split('/')[0]) : pageName.split('/')[0];
        var docTitleEl = document.querySelector('.gr-doc-title');
        var hasMoolaPage = docTitleEl && docTitleEl.getAttribute('data-has-moola') === '1';
        var hasUllekhaPage = docTitleEl && docTitleEl.getAttribute('data-has-ullekha') === '1';
        var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;
        if (!showMoolam && !showUllekha) return;
        var nav = document.createElement('div'); nav.id = 'gr-mob-doc-nav';
        nav.style.cssText = 'display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;';
        function makeLink(href, label) { var a = document.createElement('a'); a.href = href; a.textContent = label; a.style.cssText = 'display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;'; return a; }
        if (teekaPage) nav.appendChild(makeLink(wikiUrl(primarySlug), 'मूल'));
        else if (hasMoolaPage) nav.appendChild(makeLink(wikiUrl(primarySlug + '/Moola'), 'मूलम्'));
        if (showUllekha) nav.appendChild(makeLink(wikiUrl(primarySlug + '/Ullekha'), 'उल्लेख'));
        var h1 = document.getElementById('firstHeading') || document.querySelector('.page-heading, h1.firstHeading, .mw-first-heading');
        if (h1 && h1.parentNode) h1.parentNode.insertBefore(nav, h1.nextSibling);
        else { var ct = document.getElementById('mw-content-text'); if (ct) ct.insertBefore(nav, ct.firstChild); }
    }
    function boot() { injectMenuLinks(); injectMoolaUllekhaLinks();}
    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot);
    else boot();
    if (window.mw) mw.hook('wikipage.content');
}());
}());