home-erp

git clone git://archive.git.mtrnord.blog/MTRNord/home-erp.git
Log | Files | Refs | README

theme-default-4.25.0.js (5371B)


      1 document.addEventListener('DOMContentLoaded', function() {
      2     const updateHash = function (id) {
      3         window.location.hash = `#${id}`;
      4     };
      5 
      6     const navButton = document.getElementById('nav-button');
      7     const menuWrapper = document.querySelector('.tocify-wrapper');
      8     function toggleSidebar(event) {
      9         event.preventDefault();
     10         if (menuWrapper) {
     11             menuWrapper.classList.toggle('open');
     12             navButton.classList.toggle('open');
     13         }
     14     }
     15     function closeSidebar() {
     16         if (menuWrapper) {
     17             menuWrapper.classList.remove('open');
     18             navButton.classList.remove('open');
     19         }
     20     }
     21     navButton.addEventListener('click', toggleSidebar);
     22 
     23     window.hljs.highlightAll();
     24 
     25     const wrapper = document.getElementById('toc');
     26     // https://jets.js.org/
     27     window.jets = new window.Jets({
     28         // *OR - Selects elements whose values contains at least one part of search substring
     29         searchSelector: '*OR',
     30         searchTag: '#input-search',
     31         contentTag: '#toc li',
     32         didSearch: function(term) {
     33             wrapper.classList.toggle('jets-searching', String(term).length > 0)
     34         },
     35         // map these accent keys to plain values
     36         diacriticsMap: {
     37             a: 'ÀÁÂÃÄÅàáâãäåĀāąĄ',
     38             c: 'ÇçćĆčČ',
     39             d: 'đĐďĎ',
     40             e: 'ÈÉÊËèéêëěĚĒēęĘ',
     41             i: 'ÌÍÎÏìíîïĪī',
     42             l: 'łŁ',
     43             n: 'ÑñňŇńŃ',
     44             o: 'ÒÓÔÕÕÖØòóôõöøŌō',
     45             r: 'řŘ',
     46             s: 'ŠšśŚ',
     47             t: 'ťŤ',
     48             u: 'ÙÚÛÜùúûüůŮŪū',
     49             y: 'ŸÿýÝ',
     50             z: 'ŽžżŻźŹ'
     51         }
     52     });
     53 
     54     function hashChange() {
     55         const currentItems = document.querySelectorAll('.tocify-subheader.visible, .tocify-item.tocify-focus');
     56         Array.from(currentItems).forEach((elem) => {
     57             elem.classList.remove('visible', 'tocify-focus');
     58         });
     59 
     60         const currentTag = document.querySelector(`a[href="${window.location.hash}"]`);
     61         if (currentTag) {
     62             const parent = currentTag.closest('.tocify-subheader');
     63             if (parent) {
     64                 parent.classList.add('visible');
     65             }
     66 
     67             const siblings = currentTag.closest('.tocify-header');
     68             if (siblings) {
     69                 Array.from(siblings.querySelectorAll('.tocify-subheader')).forEach((elem) => {
     70                     elem.classList.add('visible');
     71                 });
     72             }
     73 
     74             currentTag.parentElement.classList.add('tocify-focus');
     75 
     76             // wait for dom changes to be done
     77             setTimeout(() => {
     78                 currentTag.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' });
     79                 // only close the sidebar on level-2 events
     80                 if (currentTag.parentElement.classList.contains('level-2')) {
     81                     closeSidebar();
     82                 }
     83             }, 1500);
     84         }
     85     }
     86 
     87     let languages = JSON.parse(document.body.getAttribute('data-languages'));
     88     // Support a key => value object where the key is the name, or an array of strings where the value is the name
     89     if (!Array.isArray(languages)) {
     90         languages = Object.values(languages);
     91     }
     92     // if there is no language use the first one
     93     const currentLanguage = window.localStorage.getItem('language') || languages[0];
     94     const languageStyle = document.getElementById('language-style');
     95     const langSelector = document.querySelectorAll('.lang-selector button.lang-button');
     96 
     97     function setActiveLanguage(newLanguage) {
     98         window.localStorage.setItem('language', newLanguage);
     99         if (!languageStyle) {
    100             return;
    101         }
    102 
    103         const newStyle = languages.map((language) => {
    104             return language === newLanguage
    105                 // the current one should be visible
    106                 ? `body .content .${language}-example pre { display: block; }`
    107                 // the inactive one should be hidden
    108                 : `body .content .${language}-example pre { display: none; }`;
    109         }).join(`\n`);
    110 
    111         Array.from(langSelector).forEach((elem) => {
    112             elem.classList.toggle('active', elem.getAttribute('data-language-name') === newLanguage);
    113         });
    114 
    115         const activeHash = window.location.hash.slice(1);
    116 
    117         languageStyle.innerHTML = newStyle;
    118 
    119         setTimeout(() => {
    120             updateHash(activeHash);
    121         }, 200);
    122     }
    123 
    124     setActiveLanguage(currentLanguage);
    125 
    126     Array.from(langSelector).forEach((elem) => {
    127         elem.addEventListener('click', () => {
    128             const newLanguage = elem.getAttribute('data-language-name');
    129             setActiveLanguage(newLanguage);
    130         });
    131     });
    132 
    133     window.addEventListener('hashchange', hashChange, false);
    134 
    135     const divs = document.querySelectorAll('.content h1[id], .content h2[id]');
    136 
    137     document.addEventListener('scroll', () => {
    138         divs.forEach(item => {
    139             const rect = item.getBoundingClientRect();
    140             if (rect.top > 0 && rect.top < 150) {
    141                 const location = window.location.toString().split('#')[0];
    142                 history.replaceState(null, null, location + '#' + item.id);
    143                 hashChange();
    144             }
    145         });
    146     });
    147 
    148     hashChange();
    149 });