mirror of
				https://github.com/RGBCube/GitHubWrapper
				synced 2025-10-31 14:02:46 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			113 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use-strict';
 | |
| 
 | |
| let activeModal = null;
 | |
| let bottomHeightThreshold, sections;
 | |
| let hamburgerToggle;
 | |
| let mobileSearch;
 | |
| let sidebar;
 | |
| let toTop;
 | |
| 
 | |
| class Modal {
 | |
|   constructor(element) {
 | |
|     this.element = element;
 | |
|   }
 | |
| 
 | |
|   close() {
 | |
|     activeModal = null;
 | |
|     this.element.style.display = 'none'
 | |
|   }
 | |
| 
 | |
|   open() {
 | |
|     if (activeModal) {
 | |
|       activeModal.close();
 | |
|     }
 | |
|     activeModal = this;
 | |
|     this.element.style.display = 'flex'
 | |
|   }
 | |
| }
 | |
| 
 | |
| class SearchBar {
 | |
| 
 | |
|   constructor() {
 | |
|     this.box = document.querySelector('nav.mobile-only');
 | |
|     this.bar = document.querySelector('nav.mobile-only input[type="search"]');
 | |
|     this.openButton = document.getElementById('open-search');
 | |
|     this.closeButton = document.getElementById('close-search');
 | |
|   }
 | |
| 
 | |
|   open() {
 | |
|     this.openButton.hidden = true;
 | |
|     this.closeButton.hidden = false;
 | |
|     this.box.style.top = "100%";
 | |
|     this.bar.focus();
 | |
|   }
 | |
| 
 | |
|   close() {
 | |
|     this.openButton.hidden = false;
 | |
|     this.closeButton.hidden = true;
 | |
|     this.box.style.top = "0";
 | |
|   }
 | |
| 
 | |
| }
 | |
| 
 | |
| function scrollToTop() {
 | |
|   window.scrollTo({ top: 0, behavior: 'smooth' });
 | |
| }
 | |
| 
 | |
| document.addEventListener('DOMContentLoaded', () => {
 | |
|   mobileSearch = new SearchBar();
 | |
| 
 | |
|   bottomHeightThreshold = document.documentElement.scrollHeight - 30;
 | |
|   sections = document.querySelectorAll('section');
 | |
|   hamburgerToggle = document.getElementById('hamburger-toggle');
 | |
|   
 | |
|   toTop = document.getElementById('to-top');
 | |
|   toTop.hidden = !(window.scrollY > 0);
 | |
| 
 | |
|   if (hamburgerToggle) {
 | |
|     hamburgerToggle.addEventListener('click', (e) => {
 | |
|       sidebar.element.classList.toggle('sidebar-toggle');
 | |
|       let button = hamburgerToggle.firstElementChild;
 | |
|       if (button.textContent == 'menu') {
 | |
|         button.textContent = 'close';
 | |
|       }
 | |
|       else {
 | |
|         button.textContent = 'menu';
 | |
|       }
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   const tables = document.querySelectorAll('.py-attribute-table[data-move-to-id]');
 | |
|   tables.forEach(table => {
 | |
|     let element = document.getElementById(table.getAttribute('data-move-to-id'));
 | |
|     let parent = element.parentNode;
 | |
|     // insert ourselves after the element
 | |
|     parent.insertBefore(table, element.nextSibling);
 | |
|   });
 | |
| 
 | |
|   window.addEventListener('scroll', () => {
 | |
|     toTop.hidden = !(window.scrollY > 0);
 | |
|   });
 | |
| });
 | |
| 
 | |
| document.addEventListener('keydown', (event) => {
 | |
|   if (event.code == "Escape" && activeModal) {
 | |
|     activeModal.close();
 | |
|   }
 | |
| });
 | |
| 
 | |
| function searchBarClick(event, which) {
 | |
|   event.preventDefault();
 | |
| 
 | |
|   if (event.button === 1 || event.buttons === 4) {
 | |
|       which.target = "_blank";  // Middle mouse button was clicked. Set our target to a new tab.
 | |
|   }
 | |
|   else if (event.button === 2) {
 | |
|     return  // Right button was clicked... Don't do anything here.
 | |
|   }
 | |
|   else {
 | |
|     which.target = "_self";  // Revert to same window.
 | |
|   }
 | |
| 
 | |
|   which.submit();
 | |
| }
 | 
