Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtooltips.js
More file actions
Latest commit
88 lines (72 loc) · 2.48 KB
/
Copy pathtooltips.js
File metadata and controls
88 lines (72 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
;(function(){
'use strict'
functionremoveIds(elem){
if(eleminstanceofElement){
elem.removeAttribute('id')
for(vari=0,n=elem.childElementCount;i<n;++i)
removeIds(elem.children[i])
}
returnelem
}
functionaddTips(){
vartips=[]
functionheaderOf(elem){
if(!elem)returnnull
if(/^H[1-6]$/.test(elem.tagName))returnelem
if(elem.previousElementSibling)
returnheaderOf(elem.previousElementSibling)
returnheaderOf(elem.parentElement)
}
functioncontextOf(elem){
if(!elem)returnnull
if(/^H[1-6]$/.test(elem.tagName))returnelem
if(/^(P|LI)$/.test(elem.tagName))returnelem
returncontextOf(elem.parentElement)
}
Array.prototype.slice
.call(document.querySelectorAll('a'))
.forEach(function(link){
varhref=link.getAttribute('href')
if(!href||href[0]!=='#'||href==='#')return
if(link.onclick)return
vartarget=document.querySelector(href)
varcontext=contextOf(target)
if(!context)return
if(contextOf(link)===context)return
if(/^(P|LI)$/.test(context.tagName)){
vartargetHeader=headerOf(context)
if(!targetHeader)return
vartargetSibling=document.createElement('p')
varchild=context.firstChild
while(child){
targetSibling.appendChild(removeIds(child.cloneNode(true)))
child=child.nextSibling
}
tips.push({
link: link,
targetHeader: removeIds(targetHeader.cloneNode(true)),
targetSibling: targetSibling
})
}else{
vartargetHeader=context
vartargetSibling=targetHeader.nextElementSibling
if(!targetSibling)return
if(targetSibling.tagName!=='P')return
tips.push({
link: link,
targetHeader: removeIds(targetHeader.cloneNode(true)),
targetSibling: removeIds(targetSibling.cloneNode(true))
})
}
})
tips.forEach(function(args){
varpreview=document.createElement('div')
preview.setAttribute('class','preview')
if(args.targetHeader)preview.appendChild(args.targetHeader)
preview.appendChild(args.targetSibling)
args.link.setAttribute('class','preview-anchor')
args.link.appendChild(preview)
})
}
window.addEventListener('load',addTips)
})()