New features for Capytale's Jupyter's notebooks : (1) admonition's question quick add, (1) admonition's note quick add, (3) Admonition's spoiler button feature, (4) restart & clear all cells outputs shortcut
// ==UserScript==
// @name Capytale Jupyter Notebook : more tools
// @namespace http://tampermonkey.net/
// @version 2025-01-20d
// @description New features for Capytale's Jupyter's notebooks : (1) admonition's question quick add, (1) admonition's note quick add, (3) Admonition's spoiler button feature, (4) restart & clear all cells outputs shortcut
// @author James Web (in the area)
// @supportURL https://codeberg.org/jrm-omg/userscripts
// @include https://capytale2.ac-paris.fr/p/basthon/**
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// Wait until Basthon's ready
let ticTac;
function myCallback() {
if (document.querySelector('#MathJax_Message')) {
// Basthon is ready, go go go !
clearInterval(ticTac);
// (1) Admonition's question button feature
function addAdmoQuestion() {
let cell = Jupyter.notebook.insert_cell_below('markdown')
cell.set_text('!!! question\n\n!!!')
}
let qEl = document.createElement('button');
qEl.className = 'btn btn-default';
qEl.title = 'Ajouter une admonition « question » après la cellule active';
qEl.innerHTML = '<i class="fa-question-circle fa"></i>';
qEl.addEventListener('click', addAdmoQuestion);
// (2) Admonition's note button feature
function addAdmoNote() {
let cell = Jupyter.notebook.insert_cell_below('markdown')
cell.set_text('!!! note\n\n!!!')
}
let nEl = document.createElement('button');
nEl.className = 'btn btn-default';
nEl.title = 'Ajouter une admonition « note » après la cellule active';
nEl.innerHTML = '<i class="fa-pencil fa"></i>';
nEl.addEventListener('click', addAdmoNote);
// (3) Admonition's spoiler button feature
function addAdmoSpoiler() {
let cell = Jupyter.notebook.insert_cell_below('markdown')
cell.set_text('??? quote Indice *— à ouvrir uniquement en cas de difficultés*\n\n???')
}
let sEl = document.createElement('button');
sEl.className = 'btn btn-default';
sEl.title = 'Ajouter une admonition « spoiler » après la cellule active';
sEl.innerHTML = '<i class="fa-envelope-o fa"></i>';
sEl.addEventListener('click', addAdmoSpoiler);
// (4) Restart & clear all cells outputs shortcut
function restartAndClean() {
document.querySelector('#restart_run_all').click();
setTimeout(()=>{
document.querySelector('.modal-footer .btn-danger').click();
setTimeout(()=>{
document.querySelector('#restart_clear_output').click();
setTimeout(()=>{
document.querySelector('.modal-footer .btn-danger').click();
}, 500)
}, 500)
}, 500)
}
let rEl = document.createElement('button');
rEl.className = 'btn btn-default';
rEl.title = 'Tout exécuter + Effacer les sorties';
rEl.innerHTML = '<i class="fa-truck fa"></i>';
rEl.addEventListener('click', restartAndClean);
// Hiding the #cmd_palette .btn-group (to get more space)
document.querySelector('#cmd_palette').style.display = 'none';
// Insert new buttons inside the user-scripts-group
let usgEl = document.querySelector('.user-scripts-group');
if (!usgEl) {
usgEl = document.createElement('div');
usgEl.className = 'btn-group user-scripts-group';
document.querySelector('#maintoolbar-container').append(usgEl);
}
usgEl.append(qEl);
usgEl.append(nEl);
usgEl.append(sEl);
usgEl.append(rEl);
}
}
ticTac = setInterval(myCallback, 500);
})();