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))
							 | 
						||
| 
								 | 
							
								}
							 |