您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
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); })();