/** * Add attributes to Thebe blocks to initialize thebe properly */ var initThebe = () => { // If Thebelab hasn't loaded, wait a bit and try again. This // happens because we load ClipboardJS asynchronously. if (window.thebelab === undefined) { console.log("thebe not loaded, retrying..."); setTimeout(initThebe, 500) return } console.log("Adding thebe to code cells..."); // Load thebe config in case we want to update it as some point thebe_config = $('script[type="text/x-thebe-config"]')[0] // If we already detect a Thebe cell, don't re-run if (document.querySelectorAll('div.thebe-cell').length > 0) { return; } // Update thebe buttons with loading message $(".thebe-launch-button").each((ii, button) => { button.innerHTML = `
`; }) // Set thebe event hooks var thebeStatus; thebelab.on("status", function (evt, data) { console.log("Status changed:", data.status, data.message); $(".thebe-launch-button ") .removeClass("thebe-status-" + thebeStatus) .addClass("thebe-status-" + data.status) .find(".loading-text").html("Launching from mybinder.org: " + data.status + ""); // Now update our thebe status thebeStatus = data.status; // Find any cells with an initialization tag and ask thebe to run them when ready if (data.status === "ready") { var thebeInitCells = document.querySelectorAll('.thebe-init, .tag_thebe-init'); thebeInitCells.forEach((cell) => { console.log("Initializing Thebe with cell: " + cell.id); cell.querySelector('.thebelab-run-button').click(); }); } }); // Find all code cells, replace with Thebe interactive code cells const codeCells = document.querySelectorAll(thebe_selector) codeCells.forEach((codeCell, index) => { const codeCellId = index => `codecell${index}`; codeCell.id = codeCellId(index); codeCellText = codeCell.querySelector(thebe_selector_input); codeCellOutput = codeCell.querySelector(thebe_selector_output); // Clean up the language to make it work w/ CodeMirror and add it to the cell dataLanguage = detectLanguage(kernelName); if (codeCellText) { codeCellText.setAttribute('data-language', dataLanguage); codeCellText.setAttribute('data-executable', 'true'); // If we had an output, insert it just after the `pre` cell if (codeCellOutput) { $(codeCellOutput).attr("data-output", ""); $(codeCellOutput).insertAfter(codeCellText); } } }); // Init thebe thebelab.bootstrap(); } // Helper function to munge the language name var detectLanguage = (language) => { if (language.indexOf('python') > -1) { language = "python"; } else if (language === 'ir') { language = "r" } return language; }