forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			57 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
|  | <script lang="ts"> | ||
|  |   /** | ||
|  |    * Shows one or more wikidata info boxes or wikipedia articles in a tabbed component. | ||
|  |    */ | ||
|  |   import type { FullWikipediaDetails } from "../../Logic/Web/Wikipedia"; | ||
|  |   import Wikipedia from "../../Logic/Web/Wikipedia"; | ||
|  |   import Locale from "../i18n/Locale"; | ||
|  |   import { Store } from "../../Logic/UIEventSource"; | ||
|  |   import { Tab, TabGroup, TabList, TabPanel, TabPanels } from "@rgossiaux/svelte-headlessui"; | ||
|  |   import WikipediaTitle from "./WikipediaTitle.svelte"; | ||
|  |   import WikipediaArticle from "./WikipediaArticle.svelte"; | ||
|  |   import { onDestroy } from "svelte"; | ||
|  | 
 | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Either a wikidata item or a '<language>:<article>' link | ||
|  |    */ | ||
|  |   export let wikiIds: Store<string[]>; | ||
|  |   let wikipediaStores: Store<Store<FullWikipediaDetails>[]> = Locale.language.bind(language => | ||
|  |     wikiIds.map(wikiIds => wikiIds.map(id => Wikipedia.fetchArticleAndWikidata(id, language)))); | ||
|  |   let _wikipediaStores; | ||
|  |   onDestroy(wikipediaStores.addCallbackAndRunD(wikipediaStores => { | ||
|  |     _wikipediaStores = wikipediaStores; | ||
|  |   })); | ||
|  | </script> | ||
|  | {#if _wikipediaStores !== undefined} | ||
|  |   <TabGroup> | ||
|  |     <TabList> | ||
|  |       {#each _wikipediaStores as store (store.tag)} | ||
|  |         <Tab class={({selected}) => selected ? "tab-selected" : "tab-unselected"}> | ||
|  |           <WikipediaTitle wikipediaDetails={store} /> | ||
|  |         </Tab> | ||
|  |       {/each} | ||
|  |     </TabList> | ||
|  |     <TabPanels> | ||
|  | 
 | ||
|  |       {#each _wikipediaStores as store (store.tag)} | ||
|  |         <TabPanel> | ||
|  |           <WikipediaArticle wikipediaDetails={store} /> | ||
|  | 
 | ||
|  |         </TabPanel> | ||
|  |       {/each} | ||
|  |     </TabPanels> | ||
|  |   </TabGroup> | ||
|  | {/if} | ||
|  | <style> | ||
|  |     .tab-selected { | ||
|  |         background-color: rgb(59 130 246); | ||
|  |         color: rgb(255 255 255); | ||
|  |     } | ||
|  | 
 | ||
|  |     .tab-unselected { | ||
|  |         background-color: rgb(255 255 255); | ||
|  |         color: rgb(0 0 0); | ||
|  |     } | ||
|  | </style> |