MediaWiki:Common.js: Difference between revisions
No edit summary |
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; | ||
while (i < chars.length) { | while (i < chars.length) { | ||
var ch = chars[i] | var ch = chars[i], 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: | ||
'त': 'ತ', 'थ': 'ಥ', 'द': 'ದ', 'ध': 'ಧ', 'न': 'ನ', | 'त': 'ತ', 'थ': 'ಥ', 'द': 'ದ', 'ध': 'ಧ', 'न': 'ನ', | ||
'प': 'ಪ', 'फ': 'ಫ', 'ब': 'ಬ', 'भ': 'ಭ', 'म': 'ಮ', | 'प': 'ಪ', 'फ': 'ಫ', 'ब': 'ಬ', 'भ': 'ಭ', 'म': 'ಮ', | ||
'य': 'ಯ', 'र': 'ರ', 'ल': 'ಲ', 'व': 'ವ', | 'य': 'ಯ', 'र': 'ರ', 'ल': 'ಲ', 'ळ': 'ಳ', 'व': 'ವ', | ||
'श': 'ಶ', 'ष': 'ಷ', 'स': 'ಸ', 'ह': 'ಹ', | 'श': 'ಶ', 'ष': 'ಷ', 'स': 'ಸ', 'ह': 'ಹ', | ||
'ा': 'ಾ', 'ि': 'ಿ', 'ी': 'ೀ', 'ु': 'ು', 'ू': 'ೂ', | 'ा': 'ಾ', 'ि': 'ಿ', 'ी': 'ೀ', 'ु': 'ು', 'ू': 'ೂ', | ||
'ृ': 'ೃ', 'े': 'ೇ', 'ै': 'ೈ', 'ो': 'ೋ', 'ौ': 'ೌ', | 'ृ': 'ೃ', 'ॄ': 'ೄ', 'े': 'ೇ', 'ै': 'ೈ', 'ो': 'ೋ', 'ौ': 'ೌ', | ||
'ं': 'ಂ', 'ः': 'ಃ', '्': '್', | 'ं': 'ಂ', 'ः': 'ಃ', '्': '್', 'ँ': 'ಁ', | ||
'०': '೦', '१': '೧', '२': '೨', '३': '೩', '४': '೪', | '०': '೦', '१': '೧', '२': '೨', '३': '೩', '४': '೪', | ||
'५': '೫', '६': '೬', '७': '೭', '८': '೮', '९': '೯' | '५': '೫', '६': '೬', '७': '೭', '८': '೮', '९': '೯' | ||
}, | }, | ||
te: { | |||
'अ': ' | 'अ': 'అ', 'आ': 'ఆ', 'इ': 'ఇ', 'ई': 'ఈ', 'उ': 'ఉ', 'ऊ': 'ఊ', 'ऋ': 'ఋ', 'ॠ': 'ౠ', | ||
'ए': 'ఏ', 'ऐ': 'ఐ', 'ओ': 'ఓ', 'औ': 'ఔ', 'ऽ': 'ఽ', | |||
'ए': ' | 'क': 'క', 'ख': 'ఖ', 'ग': 'గ', 'घ': 'ఘ', 'ङ': 'ఙ', | ||
'क': ' | 'च': 'చ', 'छ': 'ఛ', 'ज': 'జ', 'झ': 'ఝ', 'ञ': 'ఞ', | ||
'च': ' | 'ट': 'ట', 'ठ': 'ఠ', 'ड': 'డ', 'ढ': 'ఢ', 'ण': 'ణ', | ||
' | 'त': 'త', 'थ': 'థ', 'द': 'ద', 'ध': 'ధ', 'न': 'న', | ||
'त': ' | 'प': 'ప', 'फ': 'ఫ', 'ब': 'బ', 'भ': 'భ', 'म': 'మ', | ||
'प': ' | 'य': 'య', 'र': 'ర', 'ल': 'ల', 'ळ': 'ళ', 'व': 'వ', | ||
'य': ' | 'श': 'శ', 'ष': 'ష', 'स': 'స', 'ह': 'హ', | ||
'श': ' | 'ा': 'ా', 'ि': 'ి', 'ी': 'ీ', 'ु': 'ు', 'ू': 'ూ', | ||
'ा': ' | 'ृ': 'ృ', 'ॄ': 'ౄ', 'े': 'ే', 'ै': 'ై', 'ो': 'ో', 'ौ': 'ౌ', | ||
'ृ': ' | 'ं': 'ం', 'ः': 'ః', '्': '్', 'ँ': 'ఁ', | ||
'०': '౦', '१': '౧', '२': '౨', '३': '౩', '४': '౪', | |||
'ं': ' | '५': '౫', '६': '౬', '७': '౭', '८': '౮', '९': '౯' | ||
'०': ' | |||
'५': ' | |||
} | } | ||
}; | }; | ||
| 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) { } | ||
} | } | ||
}()); | }()); | ||
| 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'); | |||
}()); | }()); | ||