// Copyright (c) IPython-Contrib Team. // Distributed under the terms of the Modified BSD License. // Hide or display solutions in a notebook // dec 6, 2017 @jcb91: use bootstrap 'hidden' class to play nicely with collapsible_headings // december 30, 2015: update to notebook 4.1.x // updated on december 22, 2015 to allow consecutive exercises // exercise2: built by @jfbercher from an earlier work by @junasch october 2015) - see readme.md define([ 'base/js/namespace', 'jquery', 'require', 'base/js/events', ], function(IPython, $, requirejs, events) { "use strict"; var cfg = { add_button: true, use_hotkey: true, hotkey: 'Alt-D', }; /** * handle click event * * @method click_solution_lock * @param evt {Event} jquery event */ function click_solution_lock(evt) { var cell = IPython.notebook.get_selected_cell(); var is_locked = cell.metadata.solution2 === 'hidden'; cell.metadata.solution2 = is_locked ? 'shown' : 'hidden'; element_set_locked(cell, !is_locked); cell = IPython.notebook.get_next_cell(cell); while (cell !== null && cell.metadata.solution2 !== undefined && !cell.metadata.solution2_first) { cell.element.toggleClass('hidden', !is_locked); cell.metadata.solution2 = is_locked ? 'shown' : 'hidden'; cell = IPython.notebook.get_next_cell(cell); } } /** * Create or Remove an exercise in selected cells * * @method create_remove_exercise * */ function create_remove_exercise() { var lcells = IPython.notebook.get_selected_cells(); // It is possible that no cell is selected if (lcells.length < 1) { alert("Exercise extension: \nPlease select some cells..."); return; } var cell = lcells[0]; if (cell.metadata.solution2_first) { remove_element(cell); delete cell.metadata.solution2_first; while (cell !== null && cell.metadata.solution2 !== undefined && !cell.metadata.solution2_first) { delete cell.metadata.solution2; cell.element.removeClass('hidden'); cell = IPython.notebook.get_next_cell(cell); } } else { cell.metadata.solution2_first = true; cell.metadata.solution2 = 'hidden'; add_element(cell); for (var k = 1; k < lcells.length; k++) { cell = lcells[k]; cell.element.addClass('hidden'); cell.metadata.solution2 = 'hidden'; } } } /** * Add a lock control to the given cell */ var cbx = 0; function add_element(cell) { var ctrl = cell.element.find('.exercise'); if (ctrl.length > 0) return ctrl; var locked = cell.metadata.solution2 === 'hidden'; cell.element.css('flex-wrap', 'wrap'); cbx += 1; ctrl = $([ '