require(['gitbook', 'jQuery'], function(gitbook, $) { const TERMINAL_HOOK = '**[terminal]' var pluginConfig = {}; var timeouts = {}; function addCopyButton(wrapper) { wrapper.append( $('') .click(function() { copyCommand($(this)); }) ); } function addCopyTextarea() { /* Add also the text area that will allow to copy */ $('body').append(''); } 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 => '' + line + ''); console.log(lines); code.html(lines.join('\n')); } // Add wrapper to pre element wrapper = block.wrap('
'); 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)); }); }); });