forked from MapComplete/MapComplete
		
	Add Wikipedia page box
This commit is contained in:
		
							parent
							
								
									df34239256
								
							
						
					
					
						commit
						9df263c362
					
				
					 12 changed files with 3605 additions and 3457 deletions
				
			
		|  | @ -62,9 +62,29 @@ export class UIEventSource<T> { | ||||||
|         return source; |         return source; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * Converts a promise into a UIVentsource, sets the UIEVentSource when the result is calculated. | ||||||
|  |      * If the promise fails, the value will stay undefined | ||||||
|  |      * @param promise | ||||||
|  |      * @constructor | ||||||
|  |      */ | ||||||
|     public static FromPromise<T>(promise : Promise<T>): UIEventSource<T>{ |     public static FromPromise<T>(promise : Promise<T>): UIEventSource<T>{ | ||||||
|         const src = new UIEventSource<T>(undefined) |         const src = new UIEventSource<T>(undefined) | ||||||
|         promise?.then(d => src.setData(d)) |         promise?.then(d => src.setData(d)) | ||||||
|  |         promise?.catch(err => console.warn("Promise failed:", err)) | ||||||
|  |         return src | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Converts a promise into a UIVentsource, sets the UIEVentSource when the result is calculated. | ||||||
|  |      * If the promise fails, the value will stay undefined | ||||||
|  |      * @param promise | ||||||
|  |      * @constructor | ||||||
|  |      */ | ||||||
|  |     public static FromPromiseWithErr<T>(promise : Promise<T>): UIEventSource<{success: T} | {error: any}>{ | ||||||
|  |         const src = new UIEventSource<{success: T}|{error: any}>(undefined) | ||||||
|  |         promise?.then(d => src.setData({success:d})) | ||||||
|  |         promise?.catch(err => src.setData({error: err})) | ||||||
|         return src |         return src | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,49 @@ | ||||||
|  | /** | ||||||
|  |  * Some usefull utility functions around the wikipedia API | ||||||
|  |  */ | ||||||
|  | import {Utils} from "../../Utils"; | ||||||
|  | import WikipediaBox from "../../UI/WikipediaBox"; | ||||||
|  | 
 | ||||||
|  | export default class Wikipedia { | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * When getting a wikipedia page data result, some elements (e.g. navigation, infoboxes, ...) should be removed if 'removeInfoBoxes' is set. | ||||||
|  |      * We do this based on the classes. This set contains a blacklist of the classes to remove | ||||||
|  |      * @private | ||||||
|  |      */ | ||||||
|  |     private static readonly classesToRemove = [ | ||||||
|  |         "shortdescription", | ||||||
|  |         "sidebar", | ||||||
|  |         "infobox", | ||||||
|  |         "mw-editsection", | ||||||
|  |         "hatnote" // Often redirects
 | ||||||
|  |     ] | ||||||
|  | 
 | ||||||
|  |     public static async GetArticle(options: { | ||||||
|  |         pageName: string, | ||||||
|  |         language?: "en" | string, | ||||||
|  |         section?: number, | ||||||
|  |     }): Promise<string> { | ||||||
|  | 
 | ||||||
|  |         let section = "" | ||||||
|  |         if (options.section !== undefined) { | ||||||
|  |             section = "§ion=" + options.section | ||||||
|  |         } | ||||||
|  |         const url = `https://${options.language ?? "en"}.wikipedia.org/w/api.php?action=parse${section}&format=json&origin=*&prop=text&page=` + options.pageName | ||||||
|  |         const response = await Utils.downloadJson(url) | ||||||
|  |         const html = response["parse"]["text"]["*"]; | ||||||
|  | 
 | ||||||
|  |         const div = document.createElement("div") | ||||||
|  |         div.innerHTML = html | ||||||
|  |         const content = Array.from(div.children)[0] | ||||||
|  | 
 | ||||||
|  |         for (const forbiddenClass of Wikipedia.classesToRemove) { | ||||||
|  |            const toRemove = content.getElementsByClassName(forbiddenClass) | ||||||
|  |             for (const toRemoveElement of Array.from(toRemove)) { | ||||||
|  |                 toRemoveElement.parentElement?.removeChild(toRemoveElement) | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return content.innerHTML; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -1,7 +1,17 @@ | ||||||
| import {FixedUiElement} from "./FixedUiElement"; | import {FixedUiElement} from "./FixedUiElement"; | ||||||
|  | import {Translation} from "../i18n/Translation"; | ||||||
|  | import Combine from "./Combine"; | ||||||
|  | import Svg from "../../Svg"; | ||||||
|  | import Translations from "../i18n/Translations"; | ||||||
| 
 | 
 | ||||||
| export default class Loading extends FixedUiElement { | export default class Loading extends Combine { | ||||||
|     constructor() { |     constructor(msg?: Translation | string) { | ||||||
|         super("Loading..."); // TODO to be improved
 |         const t = Translations.T(msg ) ?? Translations.t.general.loading.Clone(); | ||||||
|  |         t.SetClass("pl-2") | ||||||
|  |         super([ | ||||||
|  |             Svg.loading_svg().SetClass("animate-spin").SetStyle("width: 1.5rem; height: 1.5rem; margin-bottom: 4px;"), | ||||||
|  |             t  | ||||||
|  |         ]) | ||||||
|  |         this.SetClass("flex m-1") | ||||||
|     } |     } | ||||||
| } | } | ||||||
							
								
								
									
										53
									
								
								UI/WikipediaBox.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								UI/WikipediaBox.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,53 @@ | ||||||
|  | import {UIEventSource} from "../Logic/UIEventSource"; | ||||||
|  | import {VariableUiElement} from "./Base/VariableUIElement"; | ||||||
|  | import Wikipedia from "../Logic/Web/Wikipedia"; | ||||||
|  | import Loading from "./Base/Loading"; | ||||||
|  | import {FixedUiElement} from "./Base/FixedUiElement"; | ||||||
|  | import Combine from "./Base/Combine"; | ||||||
|  | import BaseUIElement from "./BaseUIElement"; | ||||||
|  | import Title from "./Base/Title"; | ||||||
|  | import Translations from "./i18n/Translations"; | ||||||
|  | import Svg from "../Svg"; | ||||||
|  | 
 | ||||||
|  | export default class WikipediaBox extends Combine{ | ||||||
|  |      | ||||||
|  |     constructor(options: { | ||||||
|  |         pagename: string, | ||||||
|  |         language: string | ||||||
|  |     }) { | ||||||
|  |          | ||||||
|  |         const htmlContent = UIEventSource.FromPromiseWithErr(Wikipedia.GetArticle({ | ||||||
|  |             pageName: options.pagename, | ||||||
|  |             language: options.language, | ||||||
|  |             removeInfoBoxes: true | ||||||
|  |         })) | ||||||
|  |          | ||||||
|  |         const contents : UIEventSource<string | BaseUIElement> = htmlContent.map(htmlContent => { | ||||||
|  |             if(htmlContent === undefined){ | ||||||
|  |                 // Still loading
 | ||||||
|  |                 return new Loading("Loading wikipedia page").SetClass("p-4") | ||||||
|  |             } | ||||||
|  |             if(htmlContent["success"] !== undefined){ | ||||||
|  |                 return new FixedUiElement(htmlContent["success"]).SetClass("wikipedia-article") | ||||||
|  |             } | ||||||
|  |             if(htmlContent["error"]){ | ||||||
|  |                 return new FixedUiElement(htmlContent["error"]).SetClass("alert p-4") | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             return undefined | ||||||
|  |              | ||||||
|  |         }) | ||||||
|  |          | ||||||
|  |         const scrollable = new Combine([new VariableUiElement(contents).SetClass("block pl-6 pt-2")]) | ||||||
|  |             .SetClass("block overflow-auto normal-background rounded-lg") | ||||||
|  |         super([ | ||||||
|  |             new Combine([Svg.wikipedia_svg().SetStyle("width: 1.5rem").SetClass("mr-3"),  | ||||||
|  |                 new Title(Translations.t.general.wikipedia.wikipediaboxTitle, 2)]).SetClass("flex"), | ||||||
|  |             scrollable]) | ||||||
|  |          | ||||||
|  |         this | ||||||
|  |             .SetClass("block rounded-xl subtle-background m-1 p-2 flex flex-col") | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |      | ||||||
|  | } | ||||||
|  | @ -3,16 +3,12 @@ | ||||||
|    xmlns:dc="http://purl.org/dc/elements/1.1/" |    xmlns:dc="http://purl.org/dc/elements/1.1/" | ||||||
|    xmlns:cc="http://creativecommons.org/ns#" |    xmlns:cc="http://creativecommons.org/ns#" | ||||||
|    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||||||
|         xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" |    xmlns:svg="http://www.w3.org/2000/svg" | ||||||
|         xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" |  | ||||||
|    xmlns="http://www.w3.org/2000/svg" |    xmlns="http://www.w3.org/2000/svg" | ||||||
|         class="animate-spin -ml-1 mr-3 h-5 w-5 text-white" |  | ||||||
|    fill="none" |    fill="none" | ||||||
|         viewBox="0 0 24 24" |    viewBox="0 0 25 25" | ||||||
|    version="1.1" |    version="1.1" | ||||||
|         id="svg6" |    id="svg6"> | ||||||
|         sodipodi:docname="loading.svg" |  | ||||||
|         inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"> |  | ||||||
|   <metadata |   <metadata | ||||||
|      id="metadata12"> |      id="metadata12"> | ||||||
|     <rdf:RDF> |     <rdf:RDF> | ||||||
|  | @ -20,44 +16,23 @@ | ||||||
|          rdf:about=""> |          rdf:about=""> | ||||||
|         <dc:format>image/svg+xml</dc:format> |         <dc:format>image/svg+xml</dc:format> | ||||||
|         <dc:type |         <dc:type | ||||||
|                         rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> |            rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||||
|  |         <dc:title></dc:title> | ||||||
|       </cc:Work> |       </cc:Work> | ||||||
|     </rdf:RDF> |     </rdf:RDF> | ||||||
|   </metadata> |   </metadata> | ||||||
|   <defs |   <defs | ||||||
|             id="defs10"/> |      id="defs10" /> | ||||||
|     <sodipodi:namedview |  | ||||||
|             pagecolor="#ffffff" |  | ||||||
|             bordercolor="#666666" |  | ||||||
|             borderopacity="1" |  | ||||||
|             objecttolerance="10" |  | ||||||
|             gridtolerance="10" |  | ||||||
|             guidetolerance="10" |  | ||||||
|             inkscape:pageopacity="0" |  | ||||||
|             inkscape:pageshadow="2" |  | ||||||
|             inkscape:window-width="1920" |  | ||||||
|             inkscape:window-height="1003" |  | ||||||
|             id="namedview8" |  | ||||||
|             showgrid="false" |  | ||||||
|             inkscape:zoom="13.906433" |  | ||||||
|             inkscape:cx="14.114788" |  | ||||||
|             inkscape:cy="9.6469257" |  | ||||||
|             inkscape:window-x="1024" |  | ||||||
|             inkscape:window-y="1080" |  | ||||||
|             inkscape:window-maximized="1" |  | ||||||
|             inkscape:current-layer="svg6"/> |  | ||||||
|   <circle |   <circle | ||||||
|      class="opacity-25" |      class="opacity-25" | ||||||
|             cx="12" |      cx="12.529661" | ||||||
|             cy="12" |      cy="12.529661" | ||||||
|             r="10" |      r="10.441384" | ||||||
|      id="circle2" |      id="circle2" | ||||||
|             stroke-width="4" |      style="stroke:#000000;stroke-width:4.17655373;stroke-opacity:0.33976835" /> | ||||||
|             stroke="currentColor" |  | ||||||
|             style="stroke:#000000;stroke-opacity:0.33976835"/> |  | ||||||
|   <path |   <path | ||||||
|  |      style="fill:currentColor;stroke-width:1.04413843" | ||||||
|      class="opacity-75" |      class="opacity-75" | ||||||
|             fill="currentColor" |      d="M 4.1765537,12.529661 A 8.3531073,8.3531073 0 0 1 12.529661,4.1765537 V 0 C 5.6101557,0 0,5.6101557 0,12.529661 Z m 2.0882768,5.524536 A 8.3134301,8.3134301 0 0 1 4.1765537,12.529661 H 0 c 0,3.176269 1.1850971,6.081062 3.1324153,8.288371 z" | ||||||
|             d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" |      id="path4" /> | ||||||
|             id="path4"/> |  | ||||||
| </svg> | </svg> | ||||||
|  |  | ||||||
| Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.2 KiB | 
|  | @ -812,6 +812,10 @@ video { | ||||||
|   margin: 0px; |   margin: 0px; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .m-4 { | ||||||
|  |   margin: 1rem; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .m-2 { | .m-2 { | ||||||
|   margin: 0.5rem; |   margin: 0.5rem; | ||||||
| } | } | ||||||
|  | @ -820,8 +824,8 @@ video { | ||||||
|   margin: 0.75rem; |   margin: 0.75rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .m-4 { | .m-6 { | ||||||
|   margin: 1rem; |   margin: 1.5rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .my-2 { | .my-2 { | ||||||
|  | @ -844,18 +848,14 @@ video { | ||||||
|   margin-right: 1rem; |   margin-right: 1rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .-ml-1 { |  | ||||||
|   margin-left: -0.25rem; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .mr-3 { |  | ||||||
|   margin-right: 0.75rem; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .ml-3 { | .ml-3 { | ||||||
|   margin-left: 0.75rem; |   margin-left: 0.75rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .ml-2 { | ||||||
|  |   margin-left: 0.5rem; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .mb-2 { | .mb-2 { | ||||||
|   margin-bottom: 0.5rem; |   margin-bottom: 0.5rem; | ||||||
| } | } | ||||||
|  | @ -892,10 +892,6 @@ video { | ||||||
|   margin-top: 0px; |   margin-top: 0px; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .ml-2 { |  | ||||||
|   margin-left: 0.5rem; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .mt-4 { | .mt-4 { | ||||||
|   margin-top: 1rem; |   margin-top: 1rem; | ||||||
| } | } | ||||||
|  | @ -916,10 +912,18 @@ video { | ||||||
|   margin-bottom: 0.25rem; |   margin-bottom: 0.25rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .mr-3 { | ||||||
|  |   margin-right: 0.75rem; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .mb-4 { | .mb-4 { | ||||||
|   margin-bottom: 1rem; |   margin-bottom: 1rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .ml-4 { | ||||||
|  |   margin-left: 1rem; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .box-border { | .box-border { | ||||||
|   box-sizing: border-box; |   box-sizing: border-box; | ||||||
| } | } | ||||||
|  | @ -968,10 +972,6 @@ video { | ||||||
|   height: 100%; |   height: 100%; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .h-5 { |  | ||||||
|   height: 1.25rem; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .h-24 { | .h-24 { | ||||||
|   height: 6rem; |   height: 6rem; | ||||||
| } | } | ||||||
|  | @ -988,6 +988,10 @@ video { | ||||||
|   height: 3rem; |   height: 3rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .h-5 { | ||||||
|  |   height: 1.25rem; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .h-screen { | .h-screen { | ||||||
|   height: 100vh; |   height: 100vh; | ||||||
| } | } | ||||||
|  | @ -1032,10 +1036,6 @@ video { | ||||||
|   width: 100%; |   width: 100%; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .w-5 { |  | ||||||
|   width: 1.25rem; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .w-10 { | .w-10 { | ||||||
|   width: 2.5rem; |   width: 2.5rem; | ||||||
| } | } | ||||||
|  | @ -1394,6 +1394,18 @@ video { | ||||||
|   padding: 0px; |   padding: 0px; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .pl-6 { | ||||||
|  |   padding-left: 1.5rem; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .pt-2 { | ||||||
|  |   padding-top: 0.5rem; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .pl-2 { | ||||||
|  |   padding-left: 0.5rem; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .pt-3 { | .pt-3 { | ||||||
|   padding-top: 0.75rem; |   padding-top: 0.75rem; | ||||||
| } | } | ||||||
|  | @ -1422,10 +1434,6 @@ video { | ||||||
|   padding-top: 1.5rem; |   padding-top: 1.5rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .pl-2 { |  | ||||||
|   padding-left: 0.5rem; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .pl-5 { | .pl-5 { | ||||||
|   padding-left: 1.25rem; |   padding-left: 1.25rem; | ||||||
| } | } | ||||||
|  | @ -1787,6 +1795,7 @@ svg, img { | ||||||
|   width: 100%; |   width: 100%; | ||||||
|   height: 100%; |   height: 100%; | ||||||
|   display: unset; |   display: unset; | ||||||
|  |   vertical-align: unset; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .mapcontrol svg path { | .mapcontrol svg path { | ||||||
|  | @ -1876,6 +1885,11 @@ li::marker { | ||||||
|   color: var(--subtle-detail-color-contrast); |   color: var(--subtle-detail-color-contrast); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .normal-background { | ||||||
|  |   background: var(--background-color); | ||||||
|  |   color: var(--foreground-color) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .subtle-lighter { | .subtle-lighter { | ||||||
|   color: var(--subtle-detail-color-light-contrast); |   color: var(--subtle-detail-color-light-contrast); | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										32
									
								
								css/wikipedia.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								css/wikipedia.css
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | ||||||
|  | /* This stylesheet reimplements a few classes from wikipedia to show their articles prettily */ | ||||||
|  | 
 | ||||||
|  | .wikipedia-article { | ||||||
|  |     font-family: sans-serif; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .wikipedia-article .tright { | ||||||
|  |     float: right; | ||||||
|  |     clear: right; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .wikipedia-article .thumb { | ||||||
|  |     background: var(--subtle-detail-color); | ||||||
|  |     margin: 1rem; | ||||||
|  |     padding: 0.5rem; | ||||||
|  |     border: 1px solid var(--subtle-detail-color-light-contrast); | ||||||
|  |     border-radius: 0.5rem; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .wikipedia-article a { | ||||||
|  |     color: #0645ad; | ||||||
|  |     background: none; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .wikipedia-article a:hover a:focus { | ||||||
|  |     text-decoration: underline; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .wikipedia-article p { | ||||||
|  |     margin-bottom: 0.5rem; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @ -92,6 +92,7 @@ svg, img { | ||||||
|     width: 100%; |     width: 100%; | ||||||
|     height: 100%; |     height: 100%; | ||||||
|     display: unset; |     display: unset; | ||||||
|  |     vertical-align: unset; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .mapcontrol svg path { | .mapcontrol svg path { | ||||||
|  | @ -179,6 +180,11 @@ li::marker { | ||||||
|     color: var(--subtle-detail-color-contrast); |     color: var(--subtle-detail-color-contrast); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .normal-background { | ||||||
|  |     background: var(--background-color); | ||||||
|  |     color: var(--foreground-color) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .subtle-lighter { | .subtle-lighter { | ||||||
|     color: var(--subtle-detail-color-light-contrast); |     color: var(--subtle-detail-color-light-contrast); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -62,6 +62,7 @@ | ||||||
|         "readMessages": "You have unread messages. Read these before deleting a point - someone might have feedback" |         "readMessages": "You have unread messages. Read these before deleting a point - someone might have feedback" | ||||||
|     }, |     }, | ||||||
|     "general": { |     "general": { | ||||||
|  |         "loading": "Loading...", | ||||||
|         "pdf": { |         "pdf": { | ||||||
|             "generatedWith": "Generated with MapComplete.osm.be", |             "generatedWith": "Generated with MapComplete.osm.be", | ||||||
|             "attr": "Map data © OpenStreetMap Contributors, reusable under ODbL", |             "attr": "Map data © OpenStreetMap Contributors, reusable under ODbL", | ||||||
|  | @ -215,6 +216,9 @@ | ||||||
|         }, |         }, | ||||||
|         "histogram": { |         "histogram": { | ||||||
|             "error_loading": "Could not load the histogram" |             "error_loading": "Could not load the histogram" | ||||||
|  |         }, | ||||||
|  |         "wikipedia": { | ||||||
|  |             "wikipediaboxTitle": "Wikipedia" | ||||||
|         } |         } | ||||||
|     }, |     }, | ||||||
|     "favourite": { |     "favourite": { | ||||||
|  |  | ||||||
|  | @ -10,6 +10,8 @@ | ||||||
|     <link href="./css/mobile.css" rel="stylesheet"/> |     <link href="./css/mobile.css" rel="stylesheet"/> | ||||||
|     <link href="./css/openinghourstable.css" rel="stylesheet"/> |     <link href="./css/openinghourstable.css" rel="stylesheet"/> | ||||||
|     <link href="./css/tagrendering.css" rel="stylesheet"/> |     <link href="./css/tagrendering.css" rel="stylesheet"/> | ||||||
|  |     <link href="./css/index-tailwind-output.css" rel="stylesheet"/> | ||||||
|  |     <link href="./css/wikipedia.css" rel="stylesheet"/> | ||||||
|     <link href="css/ReviewElement.css" rel="stylesheet"/> |     <link href="css/ReviewElement.css" rel="stylesheet"/> | ||||||
|     <link href="vendor/MarkerCluster.css" rel="stylesheet"/> |     <link href="vendor/MarkerCluster.css" rel="stylesheet"/> | ||||||
|     <link href="vendor/MarkerCluster.Default.css" rel="stylesheet"/> |     <link href="vendor/MarkerCluster.Default.css" rel="stylesheet"/> | ||||||
|  |  | ||||||
							
								
								
									
										33
									
								
								test.ts
									
										
									
									
									
								
							
							
						
						
									
										33
									
								
								test.ts
									
										
									
									
									
								
							|  | @ -1,31 +1,14 @@ | ||||||
| import {AllKnownLayouts} from "./Customizations/AllKnownLayouts"; | import Wikipedia from "./Logic/Web/Wikipedia"; | ||||||
| import TagRenderingQuestion from "./UI/Popup/TagRenderingQuestion"; | import {FixedUiElement} from "./UI/Base/FixedUiElement"; | ||||||
| import {UIEventSource} from "./Logic/UIEventSource"; | import WikipediaBox from "./UI/WikipediaBox"; | ||||||
| import {VariableUiElement} from "./UI/Base/VariableUIElement"; | import Loading from "./UI/Base/Loading"; | ||||||
| 
 | 
 | ||||||
| const theme = AllKnownLayouts.allKnownLayouts.get("charging_stations") |  | ||||||
| 
 | 
 | ||||||
| const tagRendering = theme.layers[0].tagRenderings.filter(tr => tr.id === "Available_charging_stations (generated)")[0] | new WikipediaBox({ | ||||||
| const tag = new UIEventSource({ |     pagename: "Poertoren", | ||||||
|     id: "node/42", |     language: "nl" | ||||||
|     amenity:"charging_station", |  | ||||||
|     bicycle:"yes", |  | ||||||
|     car:"no", |  | ||||||
|     "motorcar":"no", |  | ||||||
|     "hgv":"no", |  | ||||||
|     bus:"no" |  | ||||||
| }) | }) | ||||||
| window.tags = tag |     .SetStyle("max-height: 20rem;") | ||||||
| 
 |  | ||||||
| //const q =
 |  | ||||||
| new VariableUiElement(tag.map(_ => new  TagRenderingQuestion(tag, tagRendering) )) |  | ||||||
|    .SetStyle("width: 100px") |  | ||||||
|     .AttachTo("maindiv") |     .AttachTo("maindiv") | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| window.setTimeout(_ => { |  | ||||||
|     tag.data.bicycle="no" |  | ||||||
|     tag.data.car = "yes" |  | ||||||
|     tag.ping() |  | ||||||
|     console.log("Pinged") |  | ||||||
| }, 2500) |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue