You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					109 lines
				
				2.9 KiB
			
		
		
			
		
	
	
					109 lines
				
				2.9 KiB
			| 
											3 years ago
										 | /* global anchors */ | ||
|  | 
 | ||
|  | // add anchor links to headers
 | ||
|  | anchors.options.placement = 'left' | ||
|  | anchors.add('h3') | ||
|  | 
 | ||
|  | // Filter UI
 | ||
|  | var tocElements = document.getElementById('toc').getElementsByTagName('li') | ||
|  | 
 | ||
|  | document.getElementById('filter-input').addEventListener('keyup', function (e) { | ||
|  |   var i, element, children | ||
|  | 
 | ||
|  |   // enter key
 | ||
|  |   if (e.keyCode === 13) { | ||
|  |     // go to the first displayed item in the toc
 | ||
|  |     for (i = 0; i < tocElements.length; i++) { | ||
|  |       element = tocElements[i] | ||
|  |       if (!element.classList.contains('display-none')) { | ||
|  |         location.replace(element.firstChild.href) | ||
|  |         return e.preventDefault() | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   var match = function () { | ||
|  |     return true | ||
|  |   } | ||
|  | 
 | ||
|  |   var value = this.value.toLowerCase() | ||
|  | 
 | ||
|  |   if (!value.match(/^\s*$/)) { | ||
|  |     match = function (element) { | ||
|  |       return element.firstChild.innerHTML.toLowerCase().indexOf(value) !== -1 | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   for (i = 0; i < tocElements.length; i++) { | ||
|  |     element = tocElements[i] | ||
|  |     children = Array.from(element.getElementsByTagName('li')) | ||
|  |     if (match(element) || children.some(match)) { | ||
|  |       element.classList.remove('display-none') | ||
|  |     } else { | ||
|  |       element.classList.add('display-none') | ||
|  |     } | ||
|  |   } | ||
|  | }) | ||
|  | 
 | ||
|  | var toggles = document.getElementsByClassName('toggle-step-sibling') | ||
|  | for (var i = 0; i < toggles.length; i++) { | ||
|  |   toggles[i].addEventListener('click', toggleStepSibling) | ||
|  | } | ||
|  | 
 | ||
|  | function toggleStepSibling() { | ||
|  |   var stepSibling = this.parentNode.parentNode.parentNode.getElementsByClassName('toggle-target')[0] | ||
|  |   var klass = 'display-none' | ||
|  |   if (stepSibling.classList.contains(klass)) { | ||
|  |     stepSibling.classList.remove(klass) | ||
|  |     stepSibling.innerHTML = '▾' | ||
|  |   } else { | ||
|  |     stepSibling.classList.add(klass) | ||
|  |     stepSibling.innerHTML = '▸' | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | var items = document.getElementsByClassName('toggle-sibling') | ||
|  | for (var j = 0; j < items.length; j++) { | ||
|  |   items[j].addEventListener('click', toggleSibling) | ||
|  | } | ||
|  | 
 | ||
|  | function toggleSibling() { | ||
|  |   var stepSibling = this.parentNode.getElementsByClassName('toggle-target')[0] | ||
|  |   var icon = this.getElementsByClassName('icon')[0] | ||
|  |   var klass = 'display-none' | ||
|  |   if (stepSibling.classList.contains(klass)) { | ||
|  |     stepSibling.classList.remove(klass) | ||
|  |     icon.innerHTML = '▾' | ||
|  |   } else { | ||
|  |     stepSibling.classList.add(klass) | ||
|  |     icon.innerHTML = '▸' | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | function showHashTarget(targetId) { | ||
|  |   var hashTarget = document.getElementById(targetId) | ||
|  |   // new target is hidden
 | ||
|  |   if ( | ||
|  |     hashTarget && | ||
|  |     hashTarget.offsetHeight === 0 && | ||
|  |     hashTarget.parentNode.parentNode.classList.contains('display-none') | ||
|  |   ) { | ||
|  |     hashTarget.parentNode.parentNode.classList.remove('display-none') | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | window.addEventListener('hashchange', function () { | ||
|  |   showHashTarget(location.hash.substring(1)) | ||
|  | }) | ||
|  | 
 | ||
|  | showHashTarget(location.hash.substring(1)) | ||
|  | 
 | ||
|  | var toclinks = document.getElementsByClassName('pre-open') | ||
|  | for (var k = 0; k < toclinks.length; k++) { | ||
|  |   toclinks[k].addEventListener('mousedown', preOpen, false) | ||
|  | } | ||
|  | 
 | ||
|  | function preOpen() { | ||
|  |   showHashTarget(this.hash.substring(1)) | ||
|  | } |