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 {global} from "/scripts/secretariat.js"; | ||||||
| import Page from "/scripts/pages/page.js"; | import Page from "/scripts/pages/page.js"; | ||||||
| import texts from "/scripts/mapping/read.js"; | import texts from "/scripts/mapping/read.js"; | ||||||
| import filters from "/scripts/filters.js"; | import nested from "/scripts/utils/nested.js"; | ||||||
| import logging from "/scripts/logging.js"; |  | ||||||
| 
 | 
 | ||||||
| class Page_MiniConfig extends Page { | class Page_MiniConfig extends Page { | ||||||
| 	constructor () { | 	constructor () { | ||||||
| 		super(); | 		super({"headers": {"CSS": [`/styles/hello.css`]}}); | ||||||
| 		this.#get(); | 		this.#set(); | ||||||
| 		this.content(); | 		this.#content(); | ||||||
|  | 		this.#navigate(); | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	/* | 	/* | ||||||
| 	Get all elements needed for content(). | 	Set the default options.  | ||||||
| 	*/ | 	*/ | ||||||
| 	#get() { | 	#set() { | ||||||
| 		this.elements = (this.elements) ? this.elements : {}; | 		(!this.window.tabs.OOBE.selected) ? this.window.tabs.open(`OOBE`, `OOBE_Hello`) : false; | ||||||
| 		this.elements[`1`] = (this.elements[`1`]) ? this.elements[`1`] : {}; |  | ||||||
| 
 | 
 | ||||||
| 		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.  | 	Build the additional content for the page.  | ||||||
| 	*/ | 	*/ | ||||||
| 	content() { | 	#content() { | ||||||
| 		if (this.elements[`1`][`headline`].length) { | 		const navigation = () => { | ||||||
| 			let RANDOM = Math.floor(Math.random() * 2) + 1; | 			Object.keys(this.window.tabs[`OOBE`][`elements`][`tabs`]).forEach((TAB, INDEX) => { | ||||||
| 			(this.elements[`1`]["headline"]).forEach((ELEMENT) => { | 				if (this.window.tabs[`OOBE`][`elements`][`tabs`][TAB][`body`] && INDEX < Object.keys(this.window.tabs[`OOBE`][`elements`][`tabs`]).length - 1) { | ||||||
| 				console.log(RANDOM, texts.localized(`OOBE_welcome_headline_`.concat(String(RANDOM)))); | 					let ELEMENT = document.createElement(`label`); | ||||||
| 				ELEMENT.textContent = texts.localized(`OOBE_welcome_headline_`.concat(String(RANDOM))); | 
 | ||||||
| 			}); | 					// 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.  | 	Assist with navigation.  | ||||||
| 	*/ | 	*/ | ||||||
| 	navigate() { | 	#navigate() { | ||||||
| 		this.navigation = (this.navigation) ? this.navigation : {}; | 		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