Package: jupytercards
JupyterCardsJupyterCardsis a tool for displayinginteractive flash cards in Jupyter notebooks and Jupyter Book.JupyterCardsis part of my effort to makeopen source tools for developing modern, interactive textbooks.The other part of this effort is my interactive self-assessment quiz tool,JupyterQuiz.You can see both tools in action in my
(in-progress) textbookFoundations of Data Science with Python.Here is an animated GIF showing JupyterCards in action:Flash card content can be loaded from:a Python list of dict,a JSON local file,via a URL to a JSON file.As of version 1.7, JupyterCards supports switching cards by swiping left on touch devices.Note:JupyterCards always requires MathJax to be loaded. If you are using JupyterBook,
it may not always load MathJax if you do not have any LaTeX on your page. To resolve this,
you can include the invisible math command$\,\!$in any Markdown cell. I hope to remove
this requirement in the future.InstallationJupyterCardsis available via pip:pip install jupytercardsKeyboard ControlsVerson 2.0.0rc1 adds keyboard controls:Space to flip card overEnter, right arrow, or j to slide to next cardThis version is a release candidate, so install likepip install jupytercards==2.0.0rc1Notes:In Jupyter Book, you may have to click the card to get focus before using the keyboard shortcuts.In Jupyter Lab, hovering your mouse over the body of the card should be sufficient to send key presses to Jupyter Cards.In both, you may need to avoid math typeset by MathJax because that can intercept key presses.You may disable keyboard control usingkeyControlkeyword parameter:display_flashcards(ref, keyControl = False).If you test the keyboard controls, please add your feedback to the related Issue, or email me/tweet at me.Notes on JSON File FormatThe JSON file should contain a single JSON array of JSON objects. Each JSON object should have two keys
that will be utilized:"front": a string containing the text to be shown on thefrontof the card"back": a string containing the text to be shown on thebackof the cardAlthough using JSON objects for each flashcard is overkill, this model was
chosen to support future extensions to this library.JupyterLiteAs of version 2.5.0, JupyterCards should work on JupyterLite after loading the modulue viamicropip:importmicropipawaitmicropip.install('jupytercards')fromjupytercardsimportdisplay_flashcardsgithub='https://raw.githubusercontent.com/jmshea/foundations-of-data-science-with-python/main/04-probability1/flashcards/'display_flashcards(github+'outcomes-samplespaces-events.json')Making flashcards in MarkdownAs of version 1.9.0, I have added helper functions to convert flashcards created in Markdown to the
JSON format that JupyterCards expects. In its simplest version, just put the front text in a Markdown
heading (line starting with #) and put the back text below.   See (Markdown-flashcards.ipynb) for
more discussion and examples of how to use this functionality.Example of generating flashcard files from JupyterBook notebooksIn my Jupyter notebooks that are used as input to JupyterBook, I use panels with
the heading "DEFINITION" to call out definitions in the text. I have provided a
helper programextractdefinitions.pythat I use to scan files for the
DEFINITION header and extract the appropriate lines that follow. The resulting
terms and definitions are dumped to corresponding JSON files in a "flashcards"
directory. An additional JSON file is generated for the whole chapter.extractdefinitions.pytakes 2 arguments: the directory to parse and the
chapter number to use to label the overall JSON definitions file.This program
is very specific to my workflow and I am offering it only as reference in case
it can help someone else with a similar situation.