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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
{{ $clipboard := resources.Get "js/clipboard.min.js" | resources.Fingerprint }}
<script defer src="{{ $clipboard.RelPermalink }}"></script>
{{ $prev := resources.Get "js/helper/prev.js" | resources.Minify }}
<script defer src="{{ $prev.RelPermalink }}"></script>
{{ $prop := resources.Get "js/helper/prop.js" | resources.Minify }}
<script defer src="{{ $prop.RelPermalink }}"></script>
<script>
'use strict';
document.addEventListener('DOMContentLoaded', function () {
// =========================== clipboard ===========================
var clipInit = false;
var preChromaElem = document.querySelectorAll('pre.chroma');
var langCodeElem = document.querySelectorAll('.language-code');
var dollarCodeElem = document.querySelectorAll('div.language-\\$');
var gtCodeElem = document.querySelectorAll('div.language-\\>');
var makeClipboard = function(elem) {
var code = elem,
text = elem.textContent;
if (text.length > 15) {
if (!clipInit) {
var text, clip = new ClipboardJS('.copy-to-clipboard', {
text: function (trigger) {
var codeElem = prev(trigger).querySelectorAll('code');
if (codeElem.length > 1) {
text = prev(trigger).querySelector('code[class^="language-"]').textContent;
} else {
text = prev(trigger).querySelector('code').textContent;
}
return text.replace(/^\$\s/gm, '');
}
});
var inPre;
clip.on('success', function (e) {
e.clearSelection();
inPre = prop(e.trigger.parentNode, 'tagName') == 'PRE';
e.trigger.setAttribute('aria-label', 'Copied to clipboard!');
e.trigger.classList.add('tooltipped');
e.trigger.classList.add('tooltipped-w');
});
clip.on('error', function (e) {
inPre = prop(e.trigger.parentNode, 'tagName') == 'PRE';
e.trigger.setAttribute('aria-label', e.action.toString());
e.trigger.classList.add('tooltipped');
e.trigger.classList.add('tooltipped-w');
});
clipInit = true;
}
var notAllowedClass = ['language-mermaid', 'language-viz', 'language-wave', 'language-chart', 'language-msc', 'language-flowchart'];
var isNotAllowedIncluded = false;
var curClassName = code.getAttribute('class');
for (var i = 0; i < notAllowedClass.length; i++) {
if (curClassName && curClassName.startsWith(notAllowedClass[i])) {
isNotAllowedIncluded = true;
break;
}
}
if (!isNotAllowedIncluded) {
if (curClassName) {
var newClipboardElem = document.createElement('span');
newClipboardElem.setAttribute('class', 'copy-to-clipboard');
newClipboardElem.setAttribute('title', 'Copy to clipboard');
elem.parentNode.parentNode.insertBefore(newClipboardElem, elem.parentNode.nextElementSibling);
}
}
}
}
var makeSymbolClipboard = function(elem) {
var clipboardSpan = document.createElement('span');
clipboardSpan.setAttribute('class', 'copy-to-clipboard');
clipboardSpan.setAttribute('title', 'Copy to clipboard');
elem.parentNode.parentNode.insertBefore(clipboardSpan, elem.parentNode.nextElementSibling);
}
preChromaElem ?
preChromaElem.forEach(function(elem) {
elem.querySelectorAll('code').forEach(function(codeElem) {
makeClipboard(codeElem);
});
}) : null;
langCodeElem ?
langCodeElem.forEach(function(elem) {
elem.querySelectorAll('code').forEach(function (codeElem) {
makeClipboard(codeElem);
});
}) : null;
dollarCodeElem ?
dollarCodeElem.forEach(function(elem) {
elem.querySelectorAll('code').forEach(function (codeElem) {
makeSymbolClipboard(codeElem);
});
}) : null;
gtCodeElem ?
gtCodeElem.forEach(function(elem) {
elem.querySelectorAll('code').forEach(function (codeElem) {
makeSymbolClipboard(codeElem);
});
}) : null;
// =================================================================
});
</script>
|