generate hello.htm content, especially on quick guide steps
This commit is contained in:
		
							parent
							
								
									bfabc7506e
								
							
						
					
					
						commit
						89526aa882
					
				
					 1 changed files with 135 additions and 19 deletions
				
			
		|  | @ -7,45 +7,161 @@ | |||
| import {global} from "/scripts/secretariat.js"; | ||||
| import Page from "/scripts/pages/page.js"; | ||||
| import texts from "/scripts/mapping/read.js"; | ||||
| import filters from "/scripts/filters.js"; | ||||
| import logging from "/scripts/logging.js"; | ||||
| import nested from "/scripts/utils/nested.js"; | ||||
| 
 | ||||
| class Page_MiniConfig extends Page { | ||||
| 	constructor () { | ||||
| 		super(); | ||||
| 		this.#get(); | ||||
| 		this.content(); | ||||
| 		super({"headers": {"CSS": [`/styles/hello.css`]}}); | ||||
| 		this.#set(); | ||||
| 		this.#content(); | ||||
| 		this.#navigate(); | ||||
| 	}; | ||||
| 
 | ||||
| 	/* | ||||
| 	Get all elements needed for content(). | ||||
| 	Set the default options.  | ||||
| 	*/ | ||||
| 	#get() { | ||||
| 		this.elements = (this.elements) ? this.elements : {}; | ||||
| 		this.elements[`1`] = (this.elements[`1`]) ? this.elements[`1`] : {}; | ||||
| 	#set() { | ||||
| 		(!this.window.tabs.OOBE.selected) ? this.window.tabs.open(`OOBE`, `OOBE_Hello`) : false; | ||||
| 
 | ||||
| 		this.elements[`1`]["headline"] = document.querySelectorAll(`[for="GUI_welcome_headline"]`); | ||||
| 		// Update the storage to mark that the OOBE page has been viewed. 
 | ||||
| 		global.write([`init`], true, 1, {"silent": true}); | ||||
| 	} | ||||
| 
 | ||||
| 	/* | ||||
| 	Build the additional content for the page.  | ||||
| 	*/ | ||||
| 	content() { | ||||
| 		if (this.elements[`1`][`headline`].length) { | ||||
| 			let RANDOM = Math.floor(Math.random() * 2) + 1; | ||||
| 			(this.elements[`1`]["headline"]).forEach((ELEMENT) => { | ||||
| 				console.log(RANDOM, texts.localized(`OOBE_welcome_headline_`.concat(String(RANDOM)))); | ||||
| 				ELEMENT.textContent = texts.localized(`OOBE_welcome_headline_`.concat(String(RANDOM))); | ||||
| 			}); | ||||
| 	#content() { | ||||
| 		const navigation = () => { | ||||
| 			Object.keys(this.window.tabs[`OOBE`][`elements`][`tabs`]).forEach((TAB, INDEX) => { | ||||
| 				if (this.window.tabs[`OOBE`][`elements`][`tabs`][TAB][`body`] && INDEX < Object.keys(this.window.tabs[`OOBE`][`elements`][`tabs`]).length - 1) { | ||||
| 					let ELEMENT = document.createElement(`label`); | ||||
| 
 | ||||
| 					// Add the relevant properties. 
 | ||||
| 					ELEMENT.id = `tip`; | ||||
| 					ELEMENT.textContent = texts.localized(`OOBE_tip_next`); | ||||
| 
 | ||||
| 					// Inject the element to the end. 
 | ||||
| 					this.window.tabs[`OOBE`][`elements`][`tabs`][TAB][`body`].appendChild(ELEMENT); | ||||
| 				} | ||||
| 			}) | ||||
| 		} | ||||
| 
 | ||||
| 		const text_content = () => { | ||||
| 			// Set the headline.
 | ||||
| 			const step1_headline = () => { | ||||
| 				if (this.window.tabs[`OOBE`][`elements`][`tabs`][`OOBE_Hello`][`body`].querySelector(`[for="GUI_welcome_headline"]`)) { | ||||
| 					this.window.tabs[`OOBE`][`elements`][`tabs`][`OOBE_Hello`][`body`].querySelector(`[for="GUI_welcome_headline"]`).textContent = texts.localized(`OOBE_welcome_headline_`.concat(String(Math.floor(Math.random() * 2) + 1))); | ||||
| 				}; | ||||
| 			}; | ||||
| 
 | ||||
| 			/* | ||||
| 			Generate the cards for the steps.  | ||||
| 
 | ||||
| 			@param {String} name The name of the card. | ||||
| 			@param {Element} parent The parent element. | ||||
| 			*/ | ||||
| 			function generateCards(name) { | ||||
| 				let ELEMENTS = {}; | ||||
| 
 | ||||
| 				// The element types used during generation. 
 | ||||
| 				const ELEMENT_TYPES = { | ||||
| 					"container": { | ||||
| 						"container": "section", | ||||
| 						"image": "figure", | ||||
| 						"content": "figcaption" | ||||
| 					}, | ||||
| 					"image": "img", | ||||
| 					"content": "p" | ||||
| 				}; | ||||
| 
 | ||||
| 				for (let STEP_NUMBER = 1; texts.localized(name.concat(`_Step${STEP_NUMBER}`)); STEP_NUMBER++) { | ||||
| 					function set_elements(target, template) { | ||||
| 						Object.keys(template).forEach((PART) => { | ||||
| 							((typeof template[PART]).includes(`object`))  | ||||
| 								? target[PART] = set_elements({}, template[PART]) | ||||
| 								: target[PART] = document.createElement(template[PART]); | ||||
| 						}); | ||||
| 
 | ||||
| 						return (target); | ||||
| 					}; | ||||
| 
 | ||||
| 					const set_classes = () => { | ||||
| 						Object.keys(ELEMENTS[STEP_NUMBER][`container`]).forEach((PART) => { | ||||
| 							ELEMENTS[STEP_NUMBER][`container`][PART].classList.add(`card`.concat(([`container`].includes(PART)) ? `` : `-`.concat(PART))); | ||||
| 						}); | ||||
| 
 | ||||
| 						ELEMENTS[STEP_NUMBER][`container`][`container`].classList.add(`container`); | ||||
| 					} | ||||
| 
 | ||||
| 					const set_contents = () => { | ||||
| 						ELEMENTS[STEP_NUMBER][`content`].textContent = texts.localized(name.concat(`_Step${STEP_NUMBER}`)); | ||||
| 						ELEMENTS[STEP_NUMBER][`image`].src = `/media/screenshots/`.concat(name, `_Step${STEP_NUMBER}.png`); | ||||
| 					}; | ||||
| 
 | ||||
| 					const set_arrangement = () => { | ||||
| 						// Add elements to their parent. 
 | ||||
| 						[`image`, `content`].forEach((PART) => { | ||||
| 							ELEMENTS[STEP_NUMBER][`container`][PART].appendChild(ELEMENTS[STEP_NUMBER][PART]); | ||||
| 							ELEMENTS[STEP_NUMBER][`container`][`container`].appendChild(ELEMENTS[STEP_NUMBER][`container`][PART]); | ||||
| 						}); | ||||
| 					} | ||||
| 
 | ||||
| 					ELEMENTS[STEP_NUMBER] = set_elements({}, ELEMENT_TYPES); | ||||
| 					set_classes(); | ||||
| 					set_contents(); | ||||
| 					set_arrangement(); | ||||
| 				}; | ||||
| 
 | ||||
| 				return (ELEMENTS); | ||||
| 			} | ||||
| 
 | ||||
| 			let step3_cards = () => { | ||||
| 				let NAME = "OOBE_quickstart_tip"; | ||||
| 				let ELEMENTS = generateCards(NAME); | ||||
| 
 | ||||
| 				document.querySelectorAll(`[card-id="OOBE_quickstart_tip"]`).forEach((ELEMENT) => { | ||||
| 					Object.entries(ELEMENTS).forEach(([STEP, ELEMENTS]) => { | ||||
| 						ELEMENT.appendChild(ELEMENTS[`container`][`container`]); | ||||
| 					}); | ||||
| 				}); | ||||
| 
 | ||||
| 				// Merge the cards. 
 | ||||
| 				this.window.elements.cards = (this.window.elements.cards) ? this.window.elements.cards : {}; | ||||
| 				this.window.elements.cards[NAME] = ELEMENTS; | ||||
| 			}; | ||||
| 			 | ||||
| 			step1_headline(); | ||||
| 			step3_cards(); | ||||
| 		}; | ||||
| 
 | ||||
| 		navigation(); | ||||
| 		text_content(); | ||||
| 	}; | ||||
| 
 | ||||
| 	/* | ||||
| 	Assist with navigation.  | ||||
| 	*/ | ||||
| 	navigate() { | ||||
| 	#navigate() { | ||||
| 		this.navigation = (this.navigation) ? this.navigation : {}; | ||||
| 		this.navigation.selection = (this.navigation.selection) ? this.navigation.selection : 0; | ||||
| 		this.navigation.selection = this.window.tabs[`OOBE`].selected; | ||||
| 
 | ||||
| 		Object.keys(this.window.tabs[`OOBE`][`elements`][`tabs`]).forEach((TAB, INDEX) => { | ||||
| 			this.window.tabs[`OOBE`][`elements`][`tabs`][TAB][`header`].event = () => { | ||||
| 				Object.keys(this.window.tabs[`OOBE`][`elements`][`tabs`]).forEach((TAB) => { | ||||
| 					this.window.tabs[`OOBE`][`elements`][`tabs`][TAB][`header`].removeAttribute(`accesskey`); | ||||
| 				}); | ||||
| 
 | ||||
| 				if (INDEX < Object.keys(this.window.tabs[`OOBE`][`elements`][`tabs`]).length - 1) { | ||||
| 					this.window.tabs[`OOBE`][`elements`][`tabs`][Object.keys(this.window.tabs[`OOBE`][`elements`][`tabs`])[INDEX + 1]][`header`].setAttribute(`accesskey`, `n`); | ||||
| 				} | ||||
| 				if (INDEX > 0) { | ||||
| 					this.window.tabs[`OOBE`][`elements`][`tabs`][Object.keys(this.window.tabs[`OOBE`][`elements`][`tabs`])[INDEX - 1]][`header`].setAttribute(`accesskey`, `b`); | ||||
| 				} | ||||
| 			}; | ||||
| 
 | ||||
| 			this.window.tabs[`OOBE`][`elements`][`tabs`][TAB][`header`].addEventListener(`click`, () => {this.window.tabs[`OOBE`][`elements`][`tabs`][TAB][`header`].event()}); | ||||
| 		}); | ||||
| 		 | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue