mirror of
				https://github.com/MarioSpore/Grinch-AP.git
				synced 2025-10-21 20:21:32 -06:00 
			
		
		
		
	 1f01404ca4
			
		
	
	1f01404ca4
	
	
	
		
			
			* WebHost: Modernized anchor code * WebHost: Fixed scrolling to anchors * WebHost: Fixed scrolling to anchors when fonts are being loaded * WebHost: Anchor PR changes requested by LegendaryLinux
		
			
				
	
	
		
			59 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| window.addEventListener('load', () => {
 | |
|     const tutorialWrapper = document.getElementById('tutorial-wrapper');
 | |
|     new Promise((resolve, reject) => {
 | |
|         const ajax = new XMLHttpRequest();
 | |
|         ajax.onreadystatechange = () => {
 | |
|             if (ajax.readyState !== 4) { return; }
 | |
|             if (ajax.status === 404) {
 | |
|                 reject("Sorry, the tutorial is not available in that language yet.");
 | |
|                 return;
 | |
|             }
 | |
|             if (ajax.status !== 200) {
 | |
|                 reject("Something went wrong while loading the tutorial.");
 | |
|                 return;
 | |
|             }
 | |
|             resolve(ajax.responseText);
 | |
|         };
 | |
|         ajax.open('GET', `${window.location.origin}/static/generated/docs/` +
 | |
|             `${tutorialWrapper.getAttribute('data-game')}/${tutorialWrapper.getAttribute('data-file')}_` +
 | |
|             `${tutorialWrapper.getAttribute('data-lang')}.md`, true);
 | |
|         ajax.send();
 | |
|     }).then((results) => {
 | |
|         // Populate page with HTML generated from markdown
 | |
|         showdown.setOption('tables', true);
 | |
|         showdown.setOption('strikethrough', true);
 | |
|         showdown.setOption('literalMidWordUnderscores', true);
 | |
|         showdown.setOption('disableForced4SpacesIndentedSublists', true);
 | |
|         tutorialWrapper.innerHTML += (new showdown.Converter()).makeHtml(results);
 | |
|         adjustHeaderWidth();
 | |
| 
 | |
|         const title = document.querySelector('h1')
 | |
|         if (title) {
 | |
|             document.title = title.textContent;
 | |
|         }
 | |
| 
 | |
|         // Reset the id of all header divs to something nicer
 | |
|         for (const header of document.querySelectorAll('h1, h2, h3, h4, h5, h6')) {
 | |
|             const headerId = header.innerText.replace(/\s+/g, '-').toLowerCase();
 | |
|             header.setAttribute('id', headerId);
 | |
|             header.addEventListener('click', () => {
 | |
|                 window.location.hash = `#${headerId}`;
 | |
|                 header.scrollIntoView();
 | |
|             });
 | |
|         }
 | |
| 
 | |
|         // Manually scroll the user to the appropriate header if anchor navigation is used
 | |
|         document.fonts.ready.finally(() => {
 | |
|             if (window.location.hash) {
 | |
|                 const scrollTarget = document.getElementById(window.location.hash.substring(1));
 | |
|                 scrollTarget?.scrollIntoView();
 | |
|             }
 | |
|         });
 | |
|     }).catch((error) => {
 | |
|         console.error(error);
 | |
|         tutorialWrapper.innerHTML =
 | |
|             `<h2>This page is out of logic!</h2>
 | |
|             <h3>Click <a href="${window.location.origin}/tutorial">here</a> to return to safety.</h3>`;
 | |
|     });
 | |
| });
 |