| 
									
										
										
										
											2023-04-21 16:02:36 +02:00
										 |  |  | <script lang="ts"> | 
					
						
							|  |  |  |   /** | 
					
						
							|  |  |  |    * Shows one or more wikidata info boxes or wikipedia articles in a tabbed component. | 
					
						
							|  |  |  |    */ | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |   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" | 
					
						
							| 
									
										
										
										
											2023-04-21 16:02:36 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   /** | 
					
						
							|  |  |  |    * Either a wikidata item or a '<language>:<article>' link | 
					
						
							|  |  |  |    */ | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |   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 | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |   ) | 
					
						
							| 
									
										
										
										
											2023-04-21 16:02:36 +02:00
										 |  |  | </script> | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-21 16:02:36 +02:00
										 |  |  | {#if _wikipediaStores !== undefined} | 
					
						
							|  |  |  |   <TabGroup> | 
					
						
							|  |  |  |     <TabList> | 
					
						
							|  |  |  |       {#each _wikipediaStores as store (store.tag)} | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |         <Tab class={({ selected }) => (selected ? "tab-selected" : "tab-unselected")}> | 
					
						
							| 
									
										
										
										
											2023-04-21 16:02:36 +02:00
										 |  |  |           <WikipediaTitle wikipediaDetails={store} /> | 
					
						
							|  |  |  |         </Tab> | 
					
						
							|  |  |  |       {/each} | 
					
						
							|  |  |  |     </TabList> | 
					
						
							|  |  |  |     <TabPanels> | 
					
						
							|  |  |  |       {#each _wikipediaStores as store (store.tag)} | 
					
						
							|  |  |  |         <TabPanel> | 
					
						
							|  |  |  |           <WikipediaArticle wikipediaDetails={store} /> | 
					
						
							|  |  |  |         </TabPanel> | 
					
						
							|  |  |  |       {/each} | 
					
						
							|  |  |  |     </TabPanels> | 
					
						
							|  |  |  |   </TabGroup> | 
					
						
							|  |  |  | {/if} | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-21 16:02:36 +02:00
										 |  |  | <style> | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |   .tab-selected { | 
					
						
							|  |  |  |     background-color: rgb(59 130 246); | 
					
						
							|  |  |  |     color: rgb(255 255 255); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2023-04-21 16:02:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |   .tab-unselected { | 
					
						
							|  |  |  |     background-color: rgb(255 255 255); | 
					
						
							|  |  |  |     color: rgb(0 0 0); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2023-04-21 16:02:36 +02:00
										 |  |  | </style> |