1/* 2 Javascript for TWF HTML library 3*/ 4 5/* Do Matomo tracking of current page */ 6 7var _paq = window._paq = window._paq || []; 8_paq.push(['trackPageView']); 9_paq.push(['enableLinkTracking']); 10(function() { 11 var u="//thewordfoundation.org/matomo/"; 12 _paq.push(['setTrackerUrl', u+'matomo.php']); 13 _paq.push(['setSiteId', '1']); 14 var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; 15 g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); 16})(); 17 18/* Jump to another element on same page and scroll up past navigation buttons */ 19 20function JumpId(sId) { 21 document.location.href = '#' + sId; 22 const eNav = document.getElementById('defnav'); 23 window.scrollBy(0, -eNav.clientHeight); 24} // JumpId 25 26/* Toggle visibility of element */ 27 28function ShowHide(sItem) { 29 const eItem = document.getElementById(sItem); 30 eItem.className = (eItem.className === 'show') ? 'hide' : 'show'; 31} // ShowHide 32 33/* Toggle display of audio and play if displayed */ 34 35function ShowHidePlay(sItem) { 36 const eItem = document.getElementById(sItem); 37 if (eItem.className === 'show') { 38 eItem.className = 'hide'; 39 eItem.pause(); 40 } else { 41 eItem.className = 'show'; 42 eItem.play(); 43 } 44} // ShowHidePlay 45 46/* Toggle visibility of abbreviation popup, with abbreviation title */ 47 48function ShowHideAbbr(eAbbr) { 49 const eIns = eAbbr.nextElementSibling; 50 const sTerm = eAbbr.title + ' <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" class="close" onclick="HideAbbr(this);"><g transform="translate(+08,+08)"><line x1="-04" y1="-04" x2="+04" y2="+04" class="plot" /><line x1="-04" y1="+04" x2="+04" y2="-04" class="plot" /></g></svg>'; 51 if (!eIns.innerHTML) eIns.innerHTML = sTerm; 52 // eIns.className = (eIns.className === 'show') ? 'hide' : 'show'; 53 eIns.style.display = (eIns.style.display === 'inline') ? 'none' : 'inline'; 54} // ShowHideAbbr 55 56/* Close zodiacal abbreviation popup - called from close button in popup */ 57 58function HideAbbr(eSvg) { 59 const eIns = eSvg.parentElement; 60 // eIns.className = 'hide'; 61 eIns.style.display = 'none'; 62} // HideAbbr 63 64/* Toggle visibility of footnote - called from preceding element */ 65 66function ShowHideFootNote(eMark) { 67 const aIns = eMark.nextElementSibling.classList; 68 if (aIns.contains('show')) { 69 aIns.remove('show'); 70 aIns.add('hide'); 71 } else { 72 aIns.remove('hide'); 73 aIns.add('show'); 74 } 75} // ShowHideFootNote 76 77/* Close footnote - called from close button within footnote */ 78 79function HideFootNote(eSvg) { 80 const aIns = eSvg.parentElement.classList; 81 aIns.remove('show'); 82 aIns.add('hide'); 83} // HideFootNote 84 85/* Close opened menus */ 86 87function HideMenus() { 88 var eMenu; 89 eMenu = document.getElementById('mainmenu' ) 90 if (eMenu) eMenu.className = 'main'; 91 eMenu = document.getElementById('aboutmenu' ) 92 if (eMenu) eMenu.className = 'hide'; 93 eMenu = document.getElementById('librarymenu') 94 if (eMenu) eMenu.className = 'hide'; 95 eMenu = document.getElementById('ordermenu' ) 96 if (eMenu) eMenu.className = 'hide'; 97} // HideMenus 98 99/* Close dialog element - used by close button */ 100 101function CloseDialog(eSvg) { 102 const eDialog = eSvg.parentElement; 103 eDialog.close(); 104} // CloseDialog 105 106/* Close opened menus and footnotes when user clicks outside them */ 107 108window.onclick = (event) => { 109 if (!(event.target.matches('header nav *') || 110 event.target.matches('body > nav *') || 111 event.target.matches('article > nav *') )) 112 HideMenus(); 113 if (!(event.target.matches('article mark' ) || 114 event.target.matches('article abbr' ) || 115 event.target.matches('article ins' ) || 116 event.target.matches('article ins *') )) { 117 for (const eIns of document.getElementsByTagName('INS')) { 118 if (eIns.matches('mark+ins')) eIns.className = 'hide'; 119 if (eIns.matches('abbr+ins')) eIns.style.display = 'none'; 120 } 121 } 122 if (!(event.target.matches('article mark' ) || 123 event.target.matches('article figure.symbol') )) { 124 for (const eSymbol of document.getElementsByClassName('symbol')) { 125 if (eSymbol.tagName === 'IFRAME') eSymbol.style.display = 'none'; 126 } 127 } 128 const eShare = document.getElementById('share'); 129 if (event.target == eShare) { 130 eShare.close(); 131 } 132 const eAlpha = document.getElementById('alpha'); 133 if (event.target == eAlpha) { 134 eAlpha.close(); 135 } 136} // window.onclick 137 138/* Show share dialog - called from share button */ 139 140function ShowShare() { 141 const eTextArea = document.getElementById('sharetext'); 142 if (eTextArea.value == '') { 143 const sTitle = document.title + ' ⢠Harold W. Percival'; 144 const sCurl = document.querySelector("link[rel='canonical']").href; 145 eTextArea.value = sTitle + '\n' + sCurl; 146 } 147 document.getElementById('share').showModal() 148} // ShowShare 149 150/* Copy input text to clipboard */ 151 152function CopyText(sInput, sConfirm) { 153 const eInput = document.getElementById(sInput); 154 eInput.select(); 155 eInput.setSelectionRange(0, eInput.value.length); 156 navigator.clipboard.writeText(eInput.value); 157 const eConfirm = document.getElementById(sConfirm); 158 eConfirm.className = 'show'; 159 eConfirm.focus(); 160 setTimeout(() => {eConfirm.className = 'hide';}, 2000); 161} // CopyText 162 163/* Generate link from this site to social media site */ 164 165function ShareLink(eLink) { 166 const sECurl = encodeURIComponent(document.querySelector("link[rel='canonical']").href); 167 const sETitle = encodeURIComponent(document.title + ' ⢠Harold W. Percival'); 168 ShareLinkSite(eLink, sECurl, sETitle); 169} // ShareLink 170 171/* Go to social media site - used by ShareLink() and ShareLinkFragment() */ 172 173function ShareLinkSite(eLink, sECurl, sETitle) { 174 switch (eLink.className) { 175 case 'facebook': 176 eLink.href = 'https://facebook.com/sharer/sharer.php?u=' + sECurl; 177 break; 178 case 'twitter': 179 eLink.href = 'https://twitter.com/intent/tweet/?text=' + sETitle + '&url=' + sECurl; 180 break; 181 case 'email': 182 eLink.href = 'mailto:?subject=' + sETitle + '&body=' + sECurl; 183 break; 184 case 'sms': 185 eLink.href = 'sms:?body=' + sETitle + '%0D%0A' + sECurl; 186 break; 187 case 'pinterest': 188 eLink.href = 'https://pinterest.com/pin/create/button/?url=' + sECurl + '&media=' + sECurl + '&description=' + sETitle; 189 break; 190 case 'linkedin': 191 eLink.href = 'https://www.linkedin.com/sharing/share-offsite/?url=' + sECurl 192 break; 193 case 'reddit': 194 eLink.href = 'https://reddit.com/submit/?url=' + sECurl + '&resubmit=true&title=' + sETitle; 195 break; 196 case 'whatsapp': 197 eLink.href = 'whatsapp://send?text=' + sETitle + '%20' + sECurl; 198 break; 199 case 'telegram': 200 eLink.href = 'https://telegram.me/share/url?text=' + sETitle + '&url=' + sECurl; 201 break; 202 case 'addtoany': 203 eLink.href = 'https://www.addtoany.com/share#url=' + sECurl + '&title=' + sETitle 204 break; 205 } 206} // ShareLinkSite 207 208/* GTranslate */ 209 210function doGTranslate(lang_pair) { 211 if (lang_pair.value) lang_pair = lang_pair.value; 212 if (lang_pair == '') return; 213 const nlang = lang_pair.split('|')[1]; 214 if (typeof _gaq != 'undefined') {
215 _gaq.push(['_trackEvent', 'GTranslate', nlang, location.hostname + location.pathname + location.search]); 216 } else { 217 if(typeof ga != 'undefined') ga('send', 'event', 'GTranslate', nlang, location.hostname + location.pathname + location.search); 218 } 219 let plang = 'en'; 220 const domain = gt_request_uri.split('/')[2].split('.'); 221 if (domain.length === 3) { 222 plang = domain[0]; 223 } 224 if (plang == 'en') { 225 if (nlang == 'en') { 226 location.href = gt_request_uri; 227 } else { 228 location.href = gt_request_uri.replace('://', '://' + nlang + '.'); 229 } 230 } else { 231 if (nlang == 'en') { 232 location.href = gt_request_uri.replace('://' + plang + '.', '://'); 233 } else { 234 location.href = gt_request_uri.replace('://' + plang + '.', '://' + nlang + '.'); 235 } 236 } 237} 238 239function setGTranslate() { 240 const eSwitcher = document.getElementById("gtranslate_element"); 241 eSwitcher.innerHTML = ` 242 <select onchange="doGTranslate(this);" id="gtranslate_selector" aria-label="Website Language Selector"> 243 <option value="">Select Language</option> 244 <option value="en|af" class="notranslate">Afrikaans</option> 245 <option value="en|so" class="notranslate">Afsoomaali</option> 246 <option value="en|az" class="notranslate">AzÉrbaycan dili</option> 247 <option value="en|id" class="notranslate">Bahasa Indonesia</option> 248 <option value="en|ms" class="notranslate">Bahasa Melayu</option> 249 <option value="en|jw" class="notranslate">Basa Jawa</option> 250 <option value="en|su" class="notranslate">Basa Sunda</option> 251 <option value="en|bs" class="notranslate">Bosanski</option> 252 <option value="en|ca" class="notranslate">Català </option> 253 <option value="en|ceb" class="notranslate">Cebuano</option> 254 <option value="en|cs" class="notranslate">ÄeÅ¡tinaâ</option> 255 <option value="en|ny" class="notranslate">Chichewa</option> 256 <option value="en|co" class="notranslate">Corsu</option> 257 <option value="en|cy" class="notranslate">Cymraeg</option> 258 <option value="en|da" class="notranslate">Dansk</option> 259 <option value="en|de" class="notranslate">Deutsch</option> 260 <option value="en|et" class="notranslate">Eesti</option> 261 <option value="en|en" class="notranslate">English</option> 262 <option value="en|es" class="notranslate">Español</option> 263 <option value="en|eo" class="notranslate">Esperanto</option> 264 <option value="en|eu" class="notranslate">Euskara</option> 265 <option value="en|tl" class="notranslate">Filipino</option> 266 <option value="en|fr" class="notranslate">Français</option> 267 <option value="en|ga" class="notranslate">Gaelige</option> 268 <option value="en|gd" class="notranslate">Gà idhlig</option> 269 <option value="en|gl" class="notranslate">Galego</option> 270 <option value="en|ha" class="notranslate">Harshen Hausa</option> 271 <option value="en|hmn" class="notranslate">Hmong</option> 272 <option value="en|hr" class="notranslate">Hrvatski</option> 273 <option value="en|ig" class="notranslate">Igbo</option> 274 <option value="en|xh" class="notranslate">isiXhosa</option> 275 <option value="en|is" class="notranslate">Ãslenska</option> 276 <option value="en|it" class="notranslate">Italiano</option> 277 <option value="en|sw" class="notranslate">Kiswahili</option> 278 <option value="en|ht" class="notranslate">Kreyol ayisyen</option> 279 <option value="en|lv" class="notranslate">LatvieÅ¡u valoda</option> 280 <option value="en|lt" class="notranslate">Lietuvių kalba</option> 281 <option value="en|hu" class="notranslate">Magyar</option> 282 <option value="en|mg" class="notranslate">Malagasy</option> 283 <option value="en|mt" class="notranslate">Maltese</option> 284 <option value="en|nl" class="notranslate">Nederlands</option> 285 <option value="en|no" class="notranslate">Norsk bokmÃ¥l</option> 286 <option value="en|haw" class="notranslate">Ålelo HawaiÊ»i</option> 287 <option value="en|uz" class="notranslate">Oâzbekcha</option> 288 <option value="en|pl" class="notranslate">Polski</option> 289 <option value="en|pt" class="notranslate">Português</option> 290 <option value="en|ro" class="notranslate">RomânÄ</option> 291 <option value="en|st" class="notranslate">Sesotho</option> 292 <option value="en|sn" class="notranslate">Shona</option> 293 <option value="en|sq" class="notranslate">Shqip</option> 294 <option value="en|sk" class="notranslate">SlovenÄina</option> 295 <option value="en|sl" class="notranslate">SlovenÅ¡Äina</option> 296 <option value="en|fi" class="notranslate">Suomi</option> 297 <option value="en|sv" class="notranslate">Svenska</option> 298 <option value="en|mi" class="notranslate">Te Reo MÄori</option> 299 <option value="en|vi" class="notranslate">Tiếng Viá»t</option> 300 <option value="en|tr" class="notranslate">Türkçe</option> 301 <option value="en|yo" class="notranslate">Yorùbá</option> 302 <option value="en|zu" class="notranslate">Zulu</option> 303 <option value="en|el" class="notranslate">Îλληνικά</option> 304 <option value="en|be" class="notranslate">ÐелаÑÑÑÐºÐ°Ñ Ð¼Ð¾Ð²Ð°</option> 305 <option value="en|bg" class="notranslate">ÐÑлгаÑÑки</option> 306 <option value="en|kk" class="notranslate">ÒÐ°Ð·Ð°Ò ÑÑлÑ</option> 307 <option value="en|ky" class="notranslate">
307ÐÑÑгÑзÑа</option> 308 <option value="en|mk" class="notranslate">ÐакедонÑки Ñазик</option> 309 <option value="en|mn" class="notranslate">Ðонгол</option> 310 <option value="en|ru" class="notranslate">Ð ÑÑÑкий</option> 311 <option value="en|sr" class="notranslate">СÑпÑки Ñезик</option> 312 <option value="en|tg" class="notranslate">Тоҷикӣ</option> 313 <option value="en|uk" class="notranslate">УкÑаÑнÑÑка</option> 314 <option value="en|hy" class="notranslate">ÕÕ¡ÕµÕ¥ÖÕ¥Õ¶</option> 315 <option value="en|ka" class="notranslate">á¥áá áá£áá</option> 316 <option value="en|am" class="notranslate">á ááá</option> 317 <option value="en|yi" class="notranslate">××××ש</option> 318 <option value="en|iw" class="notranslate">×¢Ö´×ְרִ×ת</option> 319 <option value="en|ur" class="notranslate">اردÙ</option> 320 <option value="en|ar" class="notranslate">Ø§ÙØ¹Ø±Ø¨ÙØ©</option> 321 <option value="en|sd" class="notranslate">سÙÚÙ</option> 322 <option value="en|fa" class="notranslate">ÙØ§Ø±Ø³Û</option> 323 <option value="en|ku" class="notranslate">ÙÙØ±Ø¯Ûâ</option> 324 <option value="en|ps" class="notranslate">Ù¾ÚØªÙ</option> 325 <option value="en|ne" class="notranslate">नà¥à¤ªà¤¾à¤²à¥</option> 326 <option value="en|mr" class="notranslate">मराठà¥</option> 327 <option value="en|hi" class="notranslate">हिनà¥à¤¦à¥</option> 328 <option value="en|bn" class="notranslate">বাà¦à¦²à¦¾</option> 329 <option value="en|pa" class="notranslate">ਪੰà¨à¨¾à¨¬à©</option> 330 <option value="en|gu" class="notranslate">àªà«àªàª°àª¾àª¤à«</option> 331 <option value="en|ta" class="notranslate">தமிழà¯</option> 332 <option value="en|te" class="notranslate">à°¤à±à°²à±à°à±</option> 333 <option value="en|kn" class="notranslate">à²à²¨à³à²¨à²¡</option> 334 <option value="en|ml" class="notranslate">മലയാളà´</option> 335 <option value="en|si" class="notranslate">à·à·à¶à·à¶½</option> 336 <option value="en|th" class="notranslate">à¹à¸à¸¢</option> 337 <option value="en|lo" class="notranslate">àºàº²àºªàº²àº¥àº²àº§</option> 338 <option value="en|my" class="notranslate">ááá¬á á¬</option> 339 <option value="en|ko" class="notranslate">íêµì´</option> 340 <option value="en|km" class="notranslate">áá¶áá¶ááááá</option> 341 <option value="en|ja" class="notranslate">æ¥æ¬èª</option> 342 <option value="en|zh-CN" class="notranslate">ç®ä½ä¸æ</option> 343 <option value="en|zh-TW" class="notranslate">ç¹é«ä¸æ</option> 344 </select>`; 345} // setGTranslate
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.