mirror of
				https://github.com/Eledio/superfaktura-client.git
				synced 2025-10-31 16:11:20 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			228 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			228 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const themeFlyoutDisplay = "hidden";
 | |
| const themeVersionSelector = true;
 | |
| const themeLanguageSelector = true;
 | |
| 
 | |
| if (themeFlyoutDisplay === "attached") {
 | |
|   function renderLanguages(config) {
 | |
|     if (!config.projects.translations.length) {
 | |
|       return "";
 | |
|     }
 | |
| 
 | |
|     // Insert the current language to the options on the selector
 | |
|     let languages = config.projects.translations.concat(config.projects.current);
 | |
|     languages = languages.sort((a, b) => a.language.name.localeCompare(b.language.name));
 | |
| 
 | |
|     const languagesHTML = `
 | |
|       <dl>
 | |
|         <dt>Languages</dt>
 | |
|         ${languages
 | |
|           .map(
 | |
|             (translation) => `
 | |
|         <dd ${translation.slug == config.projects.current.slug ? 'class="rtd-current-item"' : ""}>
 | |
|           <a href="${translation.urls.documentation}">${translation.language.code}</a>
 | |
|         </dd>
 | |
|         `,
 | |
|           )
 | |
|           .join("\n")}
 | |
|       </dl>
 | |
|     `;
 | |
|     return languagesHTML;
 | |
|   }
 | |
| 
 | |
|   function renderVersions(config) {
 | |
|     if (!config.versions.active.length) {
 | |
|       return "";
 | |
|     }
 | |
|     const versionsHTML = `
 | |
|       <dl>
 | |
|         <dt>Versions</dt>
 | |
|         ${config.versions.active
 | |
|           .map(
 | |
|             (version) => `
 | |
|         <dd ${version.slug === config.versions.current.slug ? 'class="rtd-current-item"' : ""}>
 | |
|           <a href="${version.urls.documentation}">${version.slug}</a>
 | |
|         </dd>
 | |
|         `,
 | |
|           )
 | |
|           .join("\n")}
 | |
|       </dl>
 | |
|     `;
 | |
|     return versionsHTML;
 | |
|   }
 | |
| 
 | |
|   function renderDownloads(config) {
 | |
|     if (!Object.keys(config.versions.current.downloads).length) {
 | |
|       return "";
 | |
|     }
 | |
|     const downloadsNameDisplay = {
 | |
|       pdf: "PDF",
 | |
|       epub: "Epub",
 | |
|       htmlzip: "HTML",
 | |
|     };
 | |
| 
 | |
|     const downloadsHTML = `
 | |
|       <dl>
 | |
|         <dt>Downloads</dt>
 | |
|         ${Object.entries(config.versions.current.downloads)
 | |
|           .map(
 | |
|             ([name, url]) => `
 | |
|           <dd>
 | |
|             <a href="${url}">${downloadsNameDisplay[name]}</a>
 | |
|           </dd>
 | |
|         `,
 | |
|           )
 | |
|           .join("\n")}
 | |
|       </dl>
 | |
|     `;
 | |
|     return downloadsHTML;
 | |
|   }
 | |
| 
 | |
|   document.addEventListener("readthedocs-addons-data-ready", function (event) {
 | |
|     const config = event.detail.data();
 | |
| 
 | |
|     const flyout = `
 | |
|       <div class="rst-versions" data-toggle="rst-versions" role="note">
 | |
|         <span class="rst-current-version" data-toggle="rst-current-version">
 | |
|           <span class="fa fa-book"> Read the Docs</span>
 | |
|           v: ${config.versions.current.slug}
 | |
|           <span class="fa fa-caret-down"></span>
 | |
|         </span>
 | |
|         <div class="rst-other-versions">
 | |
|           <div class="injected">
 | |
|             ${renderLanguages(config)}
 | |
|             ${renderVersions(config)}
 | |
|             ${renderDownloads(config)}
 | |
|             <dl>
 | |
|               <dt>On Read the Docs</dt>
 | |
|               <dd>
 | |
|                 <a href="${config.projects.current.urls.home}">Project Home</a>
 | |
|               </dd>
 | |
|               <dd>
 | |
|                 <a href="${config.projects.current.urls.builds}">Builds</a>
 | |
|               </dd>
 | |
|               <dd>
 | |
|                 <a href="${config.projects.current.urls.downloads}">Downloads</a>
 | |
|               </dd>
 | |
|             </dl>
 | |
|             <dl>
 | |
|               <dt>Search</dt>
 | |
|               <dd>
 | |
|                 <form id="flyout-search-form">
 | |
|                   <input
 | |
|                     class="wy-form"
 | |
|                     type="text"
 | |
|                     name="q"
 | |
|                     aria-label="Search docs"
 | |
|                     placeholder="Search docs"
 | |
|                     />
 | |
|                 </form>
 | |
|               </dd>
 | |
|             </dl>
 | |
|             <hr />
 | |
|             <small>
 | |
|               <span>Hosted by <a href="https://about.readthedocs.org/?utm_source=&utm_content=flyout">Read the Docs</a></span>
 | |
|             </small>
 | |
|           </div>
 | |
|         </div>
 | |
|     `;
 | |
| 
 | |
|     // Inject the generated flyout into the body HTML element.
 | |
|     document.body.insertAdjacentHTML("beforeend", flyout);
 | |
| 
 | |
|     // Trigger the Read the Docs Addons Search modal when clicking on the "Search docs" input from inside the flyout.
 | |
|     document
 | |
|       .querySelector("#flyout-search-form")
 | |
|       .addEventListener("focusin", () => {
 | |
|         const event = new CustomEvent("readthedocs-search-show");
 | |
|         document.dispatchEvent(event);
 | |
|       });
 | |
|   })
 | |
| }
 | |
| 
 | |
| if (themeLanguageSelector || themeVersionSelector) {
 | |
|   function onSelectorSwitch(event) {
 | |
|     const option = event.target.selectedIndex;
 | |
|     const item = event.target.options[option];
 | |
|     window.location.href = item.dataset.url;
 | |
|   }
 | |
| 
 | |
|   document.addEventListener("readthedocs-addons-data-ready", function (event) {
 | |
|     const config = event.detail.data();
 | |
| 
 | |
|     const versionSwitch = document.querySelector(
 | |
|       "div.switch-menus > div.version-switch",
 | |
|     );
 | |
|     if (themeVersionSelector) {
 | |
|       let versions = config.versions.active;
 | |
|       if (config.versions.current.hidden || config.versions.current.type === "external") {
 | |
|         versions.unshift(config.versions.current);
 | |
|       }
 | |
|       const versionSelect = `
 | |
|     <select>
 | |
|       ${versions
 | |
|         .map(
 | |
|           (version) => `
 | |
|         <option
 | |
|   value="${version.slug}"
 | |
|   ${config.versions.current.slug === version.slug ? 'selected="selected"' : ""}
 | |
|               data-url="${version.urls.documentation}">
 | |
|               ${version.slug}
 | |
|           </option>`,
 | |
|         )
 | |
|         .join("\n")}
 | |
|     </select>
 | |
|   `;
 | |
| 
 | |
|       versionSwitch.innerHTML = versionSelect;
 | |
|       versionSwitch.firstElementChild.addEventListener("change", onSelectorSwitch);
 | |
|     }
 | |
| 
 | |
|     const languageSwitch = document.querySelector(
 | |
|       "div.switch-menus > div.language-switch",
 | |
|     );
 | |
| 
 | |
|     if (themeLanguageSelector) {
 | |
|       if (config.projects.translations.length) {
 | |
|         // Add the current language to the options on the selector
 | |
|         let languages = config.projects.translations.concat(
 | |
|           config.projects.current,
 | |
|         );
 | |
|         languages = languages.sort((a, b) =>
 | |
|           a.language.name.localeCompare(b.language.name),
 | |
|         );
 | |
| 
 | |
|         const languageSelect = `
 | |
|       <select>
 | |
|         ${languages
 | |
|           .map(
 | |
|             (language) => `
 | |
|               <option
 | |
|                   value="${language.language.code}"
 | |
|                   ${config.projects.current.slug === language.slug ? 'selected="selected"' : ""}
 | |
|                   data-url="${language.urls.documentation}">
 | |
|                   ${language.language.name}
 | |
|               </option>`,
 | |
|           )
 | |
|           .join("\n")}
 | |
|        </select>
 | |
|     `;
 | |
| 
 | |
|         languageSwitch.innerHTML = languageSelect;
 | |
|         languageSwitch.firstElementChild.addEventListener("change", onSelectorSwitch);
 | |
|       }
 | |
|       else {
 | |
|         languageSwitch.remove();
 | |
|       }
 | |
|     }
 | |
|   });
 | |
| }
 | |
| 
 | |
| document.addEventListener("readthedocs-addons-data-ready", function (event) {
 | |
|   // Trigger the Read the Docs Addons Search modal when clicking on "Search docs" input from the topnav.
 | |
|   document
 | |
|     .querySelector("[role='search'] input")
 | |
|     .addEventListener("focusin", () => {
 | |
|       const event = new CustomEvent("readthedocs-search-show");
 | |
|       document.dispatchEvent(event);
 | |
|     });
 | |
| }); |