blob: 555d7246713a0d864e39e749ee5095d46605592e (
plain) (
blame)
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
|
require(['gitbook', 'jQuery'], function(gitbook, $) {
const TERMINAL_HOOK = '**[terminal]'
var pluginConfig = {};
var timeouts = {};
function addCopyButton(wrapper) {
wrapper.append(
$('<i class="fa fa-clone t-copy"></i>')
.click(function() {
copyCommand($(this));
})
);
}
function addCopyTextarea() {
/* Add also the text area that will allow to copy */
$('body').append('<textarea id="code-textarea" />');
}
function copyCommand(button) {
pre = button.parent();
textarea = $('#code-textarea');
textarea.val(pre.text());
textarea.focus();
textarea.select();
document.execCommand('copy');
pre.focus();
updateCopyButton(button);
}
function initializePlugin(config) {
pluginConfig = config.code;
}
function format_code_block(block) {
/*
* Add line numbers for multiline blocks.
*/
code = block.children('code');
lines = code.html().split('\n');
if (lines[lines.length - 1] == '') {
lines.splice(-1, 1);
}
if (lines.length > 1) {
console.log(lines);
lines = lines.map(line => '<span class="code-line">' + line + '</span>');
console.log(lines);
code.html(lines.join('\n'));
}
// Add wrapper to pre element
wrapper = block.wrap('<div class="code-wrapper"></div>');
if (pluginConfig.copyButtons) {
addCopyButton(wrapper);
}
}
function updateCopyButton(button) {
id = button.attr('data-command');
button.removeClass('fa-clone').addClass('fa-check');
// Clear timeout
if (id in timeouts) {
clearTimeout(timeouts[id]);
}
timeouts[id] = window.setTimeout(function() {
button.removeClass('fa-check').addClass('fa-clone');
}, 1000);
}
gitbook.events.bind('start', function(e, config) {
initializePlugin(config);
if (pluginConfig.copyButtons) {
addCopyTextarea();
}
});
gitbook.events.bind('page.change', function() {
$('pre').each(function() {
format_code_block($(this));
});
});
});
|