aboutsummaryrefslogtreecommitdiff
path: root/docs/_book/gitbook/gitbook-plugin-code/plugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'docs/_book/gitbook/gitbook-plugin-code/plugin.js')
-rw-r--r--docs/_book/gitbook/gitbook-plugin-code/plugin.js91
1 files changed, 91 insertions, 0 deletions
diff --git a/docs/_book/gitbook/gitbook-plugin-code/plugin.js b/docs/_book/gitbook/gitbook-plugin-code/plugin.js
new file mode 100644
index 0000000..555d724
--- /dev/null
+++ b/docs/_book/gitbook/gitbook-plugin-code/plugin.js
@@ -0,0 +1,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));
+ });
+ });
+
+});