| 
									
										
										
										
											2021-06-15 00:28:59 +02:00
										 |  |  | import BaseUIElement from "../BaseUIElement"; | 
					
						
							| 
									
										
										
										
											2021-09-13 01:16:56 +02:00
										 |  |  | import {FixedUiElement} from "./FixedUiElement"; | 
					
						
							| 
									
										
										
										
											2021-12-05 02:06:14 +01:00
										 |  |  | import {Utils} from "../../Utils"; | 
					
						
							| 
									
										
										
										
											2021-06-15 00:28:59 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  | export default class Title extends BaseUIElement { | 
					
						
							| 
									
										
										
										
											2022-01-26 21:40:38 +01:00
										 |  |  |     private static readonly defaultClassesPerLevel = ["", "text-3xl font-bold", "text-2xl font-bold", "text-xl font-bold", "text-lg font-bold"] | 
					
						
							| 
									
										
										
										
											2021-11-25 22:16:00 +01:00
										 |  |  |     public readonly title: BaseUIElement; | 
					
						
							|  |  |  |     public readonly level: number; | 
					
						
							| 
									
										
										
										
											2022-01-18 18:52:42 +01:00
										 |  |  |     public readonly id: string | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  |     constructor(embedded: string | BaseUIElement, level: number = 3) { | 
					
						
							| 
									
										
										
										
											2021-06-15 00:28:59 +02:00
										 |  |  |         super() | 
					
						
							| 
									
										
										
										
											2022-01-18 18:52:42 +01:00
										 |  |  |         if (embedded === undefined) { | 
					
						
							| 
									
										
										
										
											2021-12-05 02:06:14 +01:00
										 |  |  |             throw "A title should have some content. Undefined is not allowed" | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-11-07 16:34:51 +01:00
										 |  |  |         if (typeof embedded === "string") { | 
					
						
							| 
									
										
										
										
											2021-11-25 22:16:00 +01:00
										 |  |  |             this.title = new FixedUiElement(embedded) | 
					
						
							| 
									
										
										
										
											2021-11-07 16:34:51 +01:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2021-11-25 22:16:00 +01:00
										 |  |  |             this.title = embedded | 
					
						
							| 
									
										
										
										
											2021-09-13 01:16:56 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-11-25 22:16:00 +01:00
										 |  |  |         this.level = level; | 
					
						
							| 
									
										
										
										
											2022-01-18 18:52:42 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         let innerText: string = undefined; | 
					
						
							|  |  |  |         if (typeof embedded === "string") { | 
					
						
							| 
									
										
										
										
											2021-11-30 22:50:48 +01:00
										 |  |  |             innerText = embedded | 
					
						
							| 
									
										
										
										
											2022-01-18 18:52:42 +01:00
										 |  |  |         } else if (embedded instanceof FixedUiElement) { | 
					
						
							| 
									
										
										
										
											2021-11-30 22:50:48 +01:00
										 |  |  |             innerText = embedded.content | 
					
						
							| 
									
										
										
										
											2022-01-18 18:52:42 +01:00
										 |  |  |         } else { | 
					
						
							|  |  |  |             if (Utils.runningFromConsole) { | 
					
						
							|  |  |  |                 console.log("Not constructing an anchor for title with embedded content of " + embedded) | 
					
						
							|  |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2021-12-05 02:06:14 +01:00
										 |  |  |                 innerText = embedded.ConstructElement()?.innerText | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2021-11-30 22:50:48 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-01-18 18:52:42 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-30 22:50:48 +01:00
										 |  |  |         this.id = innerText?.replace(/ /g, '-') | 
					
						
							|  |  |  |             ?.replace(/[?#.;:/]/, "") | 
					
						
							|  |  |  |             ?.toLowerCase() ?? "" | 
					
						
							| 
									
										
										
										
											2021-11-30 21:29:17 +01:00
										 |  |  |         this.SetClass(Title.defaultClassesPerLevel[level] ?? "") | 
					
						
							| 
									
										
										
										
											2021-06-15 00:28:59 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  |     AsMarkdown(): string { | 
					
						
							| 
									
										
										
										
											2021-11-25 22:16:00 +01:00
										 |  |  |         const embedded = " " + this.title.AsMarkdown() + " "; | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-25 22:16:00 +01:00
										 |  |  |         if (this.level == 1) { | 
					
						
							| 
									
										
										
										
											2021-11-08 02:36:01 +01:00
										 |  |  |             return "\n\n" + embedded + "\n" + "=".repeat(embedded.length) + "\n\n" | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-25 22:16:00 +01:00
										 |  |  |         if (this.level == 2) { | 
					
						
							| 
									
										
										
										
											2021-11-08 02:36:01 +01:00
										 |  |  |             return "\n\n" + embedded + "\n" + "-".repeat(embedded.length) + "\n\n" | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-25 22:16:00 +01:00
										 |  |  |         return "\n\n" + "#".repeat(this.level) + embedded + "\n\n"; | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-15 00:28:59 +02:00
										 |  |  |     protected InnerConstructElement(): HTMLElement { | 
					
						
							| 
									
										
										
										
											2021-11-25 22:16:00 +01:00
										 |  |  |         const el = this.title.ConstructElement() | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  |         if (el === undefined) { | 
					
						
							| 
									
										
										
										
											2021-06-15 00:28:59 +02:00
										 |  |  |             return undefined; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-11-25 22:16:00 +01:00
										 |  |  |         const h = document.createElement("h" + this.level) | 
					
						
							| 
									
										
										
										
											2021-06-15 00:28:59 +02:00
										 |  |  |         h.appendChild(el) | 
					
						
							| 
									
										
										
										
											2021-11-26 02:45:39 +01:00
										 |  |  |         el.id = this.id | 
					
						
							| 
									
										
										
										
											2021-06-15 00:28:59 +02:00
										 |  |  |         return h; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |