mirror of
				https://github.com/keiyoushi/extensions.git
				synced 2025-10-31 08:58:07 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			142 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!doctype html>
 | |
| <html lang="en">
 | |
| 
 | |
| <head>
 | |
|     <meta charset="UTF-8">
 | |
|     <meta name="viewport" content="width=device-width,initial-scale=1">
 | |
|     <meta name="robots" content="noindex">
 | |
|     <title>Keiyoushi</title>
 | |
|     <meta name="description" content="A repository of unofficial Tachiyomi extensions.">
 | |
|     <meta property="og:title" content="Keiyoushi">
 | |
|     <meta property="og:description" content="A repository of unofficial Tachiyomi extensions.">
 | |
|     <meta property="og:image" content="https://avatars.githubusercontent.com/u/113362897?v=4">
 | |
|     <meta property="og:url" content="https://keiyoushi.github.io/extensions/">
 | |
|     <meta name="theme-color" content="#2e84bf">
 | |
|     <link
 | |
|         rel="stylesheet"
 | |
|         media="(prefers-color-scheme:light)"
 | |
|         href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.5.2/cdn/themes/light.css"
 | |
|         integrity="sha384-0usmJJJTG5wZwRFlxdECle5gNAqtRYVm8rHBHjGO0+Cpgp83KTGEANVIFUYafjaO"
 | |
|         crossorigin="anonymous"
 | |
|     />
 | |
|     <link
 | |
|         rel="stylesheet"
 | |
|         media="(prefers-color-scheme:dark)"
 | |
|         href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.5.2/cdn/themes/dark.css"
 | |
|         onload="document.documentElement.classList.add('sl-theme-dark');"
 | |
|         integrity="sha384-2HpI1Tt4Zv7emgrwKyetd6ouDie+RKolEtNHOdD+KCVHLj1V2fjxryG48h50f0Rw"
 | |
|         crossorigin="anonymous"
 | |
|     />
 | |
|     <link rel="stylesheet" href="../index.css">
 | |
|     <script async type="module"
 | |
|         src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.5.2/cdn/shoelace-autoloader.js"
 | |
|         integrity="sha384-ILzDiPYY4je5i95gGzpVe0e88rFqVnoz3i7HPBsRbtEHxfkA7wR8E+PwjCgt1Bin"
 | |
|         crossorigin="anonymous"></script>
 | |
|     <script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.12.3/dist/cdn.min.js"
 | |
|         integrity="sha384-mPO6U7t0sNHfI1UIWNf5U6FDzprqWgAMKfOGW86JVGCKoU/7HPdy6DwBaWOsi4eV"
 | |
|         crossorigin="anonymous"></script>
 | |
|     <script src="extensions.js"></script>
 | |
|     <script data-goatcounter="https://keiyoushi.goatcounter.com/count"
 | |
|         async src="//gc.zgo.at/count.js"></script>
 | |
| </head>
 | |
| 
 | |
| <body>
 | |
|     <header class="header">
 | |
|         <p class="header__title">Keiyoushi</p>
 | |
|     </header>
 | |
|     <div class="description">
 | |
|         Join the <a class="description__anchor" href="https://discord.gg/3FbCpdKbdY">Discord server</a> for support. Make sure to star <a class="description__anchor" href="https://github.com/keiyoushi/extensions">the GitHub repo</a>.
 | |
|     </div>
 | |
|     <div class="sources" x-data="extensionList">
 | |
|         <h1 class="sources__title">Extensions</h1>
 | |
| 
 | |
|         <template x-if="loading === LoadingStatus.Loading">
 | |
|             <sl-spinner class="sources__status" style="font-size:3rem"></sl-spinner>
 | |
|         </template>
 | |
|         
 | |
|         <template x-if="loading === LoadingStatus.Error">
 | |
|             <div class="sources__status">Could not load extension list.</div>
 | |
|         </template>
 | |
|         
 | |
|         <template x-if="loading === LoadingStatus.Loaded">
 | |
|             <div>
 | |
|                 <div class="source-search" x-effect="updateFilteredList">
 | |
|                     <div class="source-search__nsfw-wrapper">
 | |
|                         <span class="source-search__nsfw-label">Display mode: </span>
 | |
|                         <sl-radio-group size="small" 
 | |
|                             name="nsfw" 
 | |
|                             value="all" 
 | |
|                             @sl-change="nsfw = $event.target.value">
 | |
|                             <sl-radio-button value="all">Show all</sl-radio-button>
 | |
|                             <sl-radio-button value="nsfw">NSFW</sl-radio-button>
 | |
|                             <sl-radio-button value="safe">SFW</sl-radio-button>
 | |
|                         </sl-radio-group>
 | |
|                     </div>
 | |
|                     
 | |
|                     <sl-input class="source-search__title" 
 | |
|                         placeholder="Search by name or ID..."
 | |
|                         x-model="query">
 | |
|                     </sl-input>
 | |
|                     
 | |
|                     <sl-select class="source-search__language"
 | |
|                         multiple clearable
 | |
|                         placeholder="Filter by languages"
 | |
|                         @sl-change="selectedLanguages = event.target.value">
 | |
|                         <template x-for="(language, index) in languages" :key="index">
 | |
|                             <sl-option :value="language" x-text="languageName(language)"></sl-option>
 | |
|                         </template>
 | |
|                     </sl-select>
 | |
|                 </div>
 | |
|                 
 | |
|                 <template x-for="extension in filtered" :key="extension.pkg">
 | |
|                     <div class="source" 
 | |
|                         :id="extension.pkg.replace('eu.kanade.tachiyomi.extension.', '')">
 | |
|                         <a :href="`#${extension.pkg.replace('eu.kanade.tachiyomi.extension.', '')}`"
 | |
|                             class="source__anchor">
 | |
|                             #
 | |
|                         </a>
 | |
|                         
 | |
|                         <img class="source__icon"
 | |
|                             :alt="`Icon for ${extension.name}`"
 | |
|                             :src="`${$store.repoUrl}/icon/${extension.pkg}.png`"
 | |
|                             loading="lazy"
 | |
|                             width="42"
 | |
|                             height="42">
 | |
| 
 | |
|                         <div class="source__info">
 | |
|                             <div class="source__name">
 | |
|                                 <span x-text="extension.name.split(': ')[1]"></span> 
 | |
|                                 
 | |
|                                 <span class="source__version"
 | |
|                                     x-text="`v${extension.version}`"></span>
 | |
| 
 | |
|                                 <sl-tag class="content-rating content-rating--nsfw"
 | |
|                                     size="small" variant="danger"
 | |
|                                     x-cloak x-show="extension.nsfw === 1">
 | |
|                                     18+
 | |
|                                 </sl-tag>
 | |
|                             </div>
 | |
|                             <div class="source__version" x-text="simpleLanguageName(extension.lang)"></div>
 | |
|                         </div>
 | |
|                         <sl-button class="download-button" 
 | |
|                             pill 
 | |
|                             size="small" 
 | |
|                             download
 | |
|                             :href="`${$store.repoUrl}/apk/${extension.apk}`"
 | |
|                             @click="window.goatcounter?.count({ path: `/apk/${extension.apk}` })">
 | |
|                             <sl-icon name="download"></sl-icon>
 | |
|                         </sl-button>
 | |
|                     </div>
 | |
|                 </template>
 | |
|             </div>
 | |
|         </template>
 | |
|     </div>
 | |
|     <script>
 | |
|         Promise.allSettled(
 | |
|             ["sl-button", "sl-select"].map((e) => customElements.whenDefined(e))
 | |
|         )
 | |
|             .then(() => document.body.classList.add("ready"))
 | |
|     </script>
 | |
| </body>
 | |
| 
 | |
| </html> |