From 345fee20a9c8a836efe23db7ca28ab7c9da565ec Mon Sep 17 00:00:00 2001 From: Robert Lanzafame Date: Sat, 31 Aug 2024 17:53:25 +0200 Subject: [PATCH 1/3] add teachbooks --- book/_toc.yml | 2 ++ book/features/custom_toc.md | 18 ++++++++++++++---- book/features/teachbooks.md | 16 ++++++++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 book/features/teachbooks.md diff --git a/book/_toc.yml b/book/_toc.yml index 071ff04..61616c5 100644 --- a/book/_toc.yml +++ b/book/_toc.yml @@ -38,6 +38,8 @@ parts: - file: basic-features/utterances - file: features/overview sections: + - file: features/teachbooks + title: TeachBooks Package - file: external/deploy-book-workflow/README.md - file: features/remove_from_publish - file: features/custom_toc.md diff --git a/book/features/custom_toc.md b/book/features/custom_toc.md index fe178c0..b75a238 100644 --- a/book/features/custom_toc.md +++ b/book/features/custom_toc.md @@ -1,3 +1,4 @@ +(remove-from-publish)= # Exclude parts of book from published book ```{admonition} User types @@ -5,7 +6,7 @@ This section is useful for user type 3-5. ``` -A new feature is added to enable testing of all interactive features on the web server (i.e., in the draft book) while preventing students from seeing it. Pages in the draft book (`main` branch) can be manually stripped out of the table of contents when a merge request from `main` to `publish` is made using a tag `REMOVE-FROM-PUBLISH`. Pages marked with this feature are still visible in the draft book and books build from source on personal computers. The tag is applied as follows: +A feature to enable viewing of work-in-progress (e.g., in the draft book) or testing of content (e.g., interactive programming pages) while preventing students from seeing it is available via the {ref}`teachbooks-package `. Lines of text in a `*.yml` file can be removed prior to the book build process by surrounding the lines with a tag `REMOVE-FROM-PUBLISH`. For example, pages in a draft book (e.g., `main` branch) can be manually stripped out of the table of contents when a merge request from `main` to `publish`, preventing the page being included in the published book. Pages marked with this feature are still visible in the draft book and books build from source on personal computers. Lines tagged in the configuration file `_config.yml` can be used in exactly the same manner. The tag is applied as follows: ``` format: jb-book @@ -20,8 +21,17 @@ parts: - file: files_to_remove # END REMOVE-FROM-PUBLISH ``` -There is no limit to the number of stripped sections, they can be sequential and indentation does not matter. The action is implemented in shell script `build-book.sh` and is executed at run time (see line in script [here](https://gitlab.tudelft.nl/mude/book/-/blob/main/build-book.sh#L13)). +There is no limit to the number of stripped sections, they can be sequential and indentation does not matter. + +To invoke the tag and remove content during the book build process, use the following optional argument when building the book with the `teachbooks` package: + +``` +teachbooks build --publish book +``` + +Note that `teachbooks build book` would build a book without stripping the tagged lines, just as `jupyter book build book` would. ```{note} -The `REMOVE-FROM-PUBLISH` feature was developed to retain testing of all interactive features on the web server and we recommended incorporating this in all books that rely on these features. It avoids problems associated with building the book on various platforms and virtual environments, rather than the actualy webserver where the book will be deployed. -``` \ No newline at end of file +The `REMOVE-FROM-PUBLISH` feature was originally deployed using Bash and Shell scripts in the pipeline of our book build processes. The MUDE book contained the scripts on the server, whereas the `interactivetextbooks-citg` contained this in the GitLab CI files or `*.sh` scripts. These workflows will eventually be replaced with a simplified pipeline setup (i.e., a GitLab CI file or GitHub workflow) that uses the commands `teachbooks build book` and `teachbook build --publish book` for the published and draft versions of the book, resepctively. We recommend you do the same. A working example can be found in our [Template repository workflow on GitHub](https://github.com/TeachBooks/deploy-book-workflow/blob/main/.github/workflows/deploy-book.yml) or in the [MUDE book on GitLab](https://gitlab.tudelft.nl/mude/book/-/blob/main/.gitlab-ci.yml?ref_type=heads). +``` + diff --git a/book/features/teachbooks.md b/book/features/teachbooks.md new file mode 100644 index 0000000..076436d --- /dev/null +++ b/book/features/teachbooks.md @@ -0,0 +1,16 @@ +(teachbooks-package)= +# TeachBooks: Our Custom Python Package + +TeachBooks has created a Python package and released it on PyPI. It can easily be used like this: +``` +pip install teachbooks +``` + +The source code is hosted in a repository on GitHub, [github.com/teachBooks/teachbooks](https://github.com/teachBooks/teachbooks), and is accompanied by a documentation website, [teachbooks.github.io/TeachBooks/](https://teachbooks.github.io/TeachBooks/). + +The features and documentation will increase with time; for now, there are two important reasons to use the teachbooks package: +1. Use the `REMOVE-FROM-PUBLISH` feature to more easily maintain draft and published versions of your TeachBook (see {ref}`this page ` for more details). +2. Easily start and stop a local Python server to better test your book while writing (e.g., the interactive Python features require a local server to properly check certain TeachBooks features) + +For case 1, the `teachbooks` package is meant to be used instead of `jupyter book build book` to build your book (it executes `jupyter book build book` for you). Case 2 is meant to be used independently, for example, once you have successfully built a book, simply run `teachbooks serve` and open the resulting URL that is printed in the terminal. To stop the server use `teachbooks serve stop` + From 779b10f1244987787f1b3b1a7016a8ef3b8a387a Mon Sep 17 00:00:00 2001 From: Robert Lanzafame Date: Sat, 31 Aug 2024 18:08:56 +0200 Subject: [PATCH 2/3] banner --- book/_toc.yml | 2 ++ book/basic-features/banner.md | 46 ++++++++++++++++++++++++++++ book/basic-features/banner_mude.png | Bin 0 -> 58413 bytes 3 files changed, 48 insertions(+) create mode 100644 book/basic-features/banner.md create mode 100644 book/basic-features/banner_mude.png diff --git a/book/_toc.yml b/book/_toc.yml index 61616c5..aa2a6b8 100644 --- a/book/_toc.yml +++ b/book/_toc.yml @@ -34,6 +34,8 @@ parts: - file: basic-features/References.md - file: basic-features/code.md - file: basic-features/Code_block_figures + - file: basic-features/banner + title: Banner or Announcement - file: basic-features/hypothesis - file: basic-features/utterances - file: features/overview diff --git a/book/basic-features/banner.md b/book/basic-features/banner.md new file mode 100644 index 0000000..5f4b0d1 --- /dev/null +++ b/book/basic-features/banner.md @@ -0,0 +1,46 @@ +# Banners and Announcements + +A banner can be added to the top of a Jupyter Book: + +```{figure} banner_mude.png +--- +width: 70% +name: banner_mude +--- +Example of a banner in the MUDE book. +``` + +This is a commonly used feature, desribed in the [Jupyter Book manual here](https://jupyterbook.org/en/stable/web/announcements.html). However, note that if you are using the Sphinx-Thebe interactive Python feature, or other features that customize the top part of a Jupyter Book website (for example, the download page buttons), the banner does not always work. In this case, the banner should be specified using the `announcement` option in the `html_theme_options` setting in the `_config.yml` file: + +``` +sphinx: + config: + ... + html_theme_options: + ... + announcement : "This book is under construction ✍🏻; it's continuously updated from September 2024 through January 2025 📅" + ... +``` + +```{tip} +Note that you should always enclose your announcement in quotes to make it a complete string. Use a different type of quote if your announcement itself contains them (for example, "like 'this'"`). If you are using HTML elements, it is best to make your announcement a complete HTML tag, not Markdown with HTML inside. + +Markdown links do not work in the announcement, in which case you must use HTML! +``` + +## Known Issue + +Note that there seems to be a bug if you only use the `announcement` and `launch_buttons: thebe: true` option; including additional buttons seems to fix this issue (see [Issue 65](https://gitlab.tudelft.nl/mude/book/-/issues/65) in the MUDE book), for example: + +``` +sphinx: + config: + ... + html_theme_options: + repository_url: "https://github.com/TeachBooks/mechanics-BSc" + use_repository_button: true + use_issues_button : true + announcement : "This book is under construction ✍🏻; it's continuously updated from September 2024 through January 2025 📅" + launch_buttons: + thebe: true +``` diff --git a/book/basic-features/banner_mude.png b/book/basic-features/banner_mude.png new file mode 100644 index 0000000000000000000000000000000000000000..4c4620586a0aafa410ba6cb0db54e8ae866f19b2 GIT binary patch literal 58413 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 Date: Sat, 31 Aug 2024 18:27:54 +0200 Subject: [PATCH 3/3] update local server page and typoes --- book/basic-features/banner.md | 4 ++-- book/features/teachbooks.md | 6 ++++-- book/installation-and-setup/jupyter-book-setup.md | 15 ++++++++++++--- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/book/basic-features/banner.md b/book/basic-features/banner.md index 5f4b0d1..63db4e0 100644 --- a/book/basic-features/banner.md +++ b/book/basic-features/banner.md @@ -23,14 +23,14 @@ sphinx: ``` ```{tip} -Note that you should always enclose your announcement in quotes to make it a complete string. Use a different type of quote if your announcement itself contains them (for example, "like 'this'"`). If you are using HTML elements, it is best to make your announcement a complete HTML tag, not Markdown with HTML inside. +Note that you should always enclose your announcement in quotes to make it a complete string. Use a different type of quote if your announcement itself contains them (for example, `"like 'this'"`). If you are using HTML elements, it is best to make your announcement a complete HTML tag, not Markdown with HTML inside. Markdown links do not work in the announcement, in which case you must use HTML! ``` ## Known Issue -Note that there seems to be a bug if you only use the `announcement` and `launch_buttons: thebe: true` option; including additional buttons seems to fix this issue (see [Issue 65](https://gitlab.tudelft.nl/mude/book/-/issues/65) in the MUDE book), for example: +Note that there seems to be a bug if you only use the `announcement` and `launch_buttons:thebe:true` option; including additional buttons seems to fix this issue (see [Issue 65](https://gitlab.tudelft.nl/mude/book/-/issues/65) in the MUDE book), for example: ``` sphinx: diff --git a/book/features/teachbooks.md b/book/features/teachbooks.md index 076436d..244f3ff 100644 --- a/book/features/teachbooks.md +++ b/book/features/teachbooks.md @@ -8,9 +8,11 @@ pip install teachbooks The source code is hosted in a repository on GitHub, [github.com/teachBooks/teachbooks](https://github.com/teachBooks/teachbooks), and is accompanied by a documentation website, [teachbooks.github.io/TeachBooks/](https://teachbooks.github.io/TeachBooks/). -The features and documentation will increase with time; for now, there are two important reasons to use the teachbooks package: +The features and documentation will increase with time; until then, note there are two important reasons to use the teachbooks package: 1. Use the `REMOVE-FROM-PUBLISH` feature to more easily maintain draft and published versions of your TeachBook (see {ref}`this page ` for more details). 2. Easily start and stop a local Python server to better test your book while writing (e.g., the interactive Python features require a local server to properly check certain TeachBooks features) -For case 1, the `teachbooks` package is meant to be used instead of `jupyter book build book` to build your book (it executes `jupyter book build book` for you). Case 2 is meant to be used independently, for example, once you have successfully built a book, simply run `teachbooks serve` and open the resulting URL that is printed in the terminal. To stop the server use `teachbooks serve stop` +For case 1, the `teachbooks` package is meant to be used instead of `jupyter book build book` to build your book (it executes `jupyter book build book` for you). + +Case 2 is meant to be used independently, for example, once you have successfully built a book, simply run `teachbooks serve` and open the resulting URL that is printed in the terminal. To stop the server use `teachbooks serve stop`; see {ref}`this page ` for additional explanation for how to use this feature and why it is needed. diff --git a/book/installation-and-setup/jupyter-book-setup.md b/book/installation-and-setup/jupyter-book-setup.md index 811db35..b18f00a 100644 --- a/book/installation-and-setup/jupyter-book-setup.md +++ b/book/installation-and-setup/jupyter-book-setup.md @@ -28,9 +28,18 @@ Bookmark the (local) file location for easy access! ## View the book using a local webserver Some features like JupyterLite and Grasple only work when a webserver serves the HTML content for a book. Rather than building the book in your repository and updating the website on the internet, you can use a local webserver to view the book: +1. Make sure you have the TeachBooks Python package installed (e.g., `pip install teachbooks`) +2. Start a server from the command line with: `teachbooks serve` +3. The command line output will return the URL where you can access your book +4. You should reload the page if you are editing and rebuilding the book. You can try `CTRL+R` `ctrl`+`F5`. If this does not work, on Chrome try right-clicking somewhere on the page, select \"Inspect\", open the \"Network\" tab, then reload with `CTRL+R`. +5. All interactive features like the JupyterLite consoles, Grasple/H5p iframe exercises, Sphinx-thebe python interactivity and HTML/Javascript elements should now work as well. +6. When you no longer need the server, simply run `teachbooks serve stop` + +### How to create a local server without the TeachBooks package + +Here is how to set up a local server with only standard Python libraries: + 1. Start a server from the command line with: `python -m http.server -b 127.0.0.1` (add ` &` if you want to keep using the terminal for other tasks). 2. Port 8000 is usually used by default, but depending on your OS it will tell you in the output. 3. To visit your site, just enter the address in your web browser, followed by a colon, and then the port number. By default, that would be: `127.0.0.1:8000`. -4. You will get a website that looks like a file browser, to visit your site just navigate to `book/_build/html/` (if you've started this command from this folder you see the book immediately -5. You may need to reload the page once the rebuild is complete. You can do this on Chrome by right-clicking somewhere on the page, select \"Inspect\", open the \"Network\" tab, then reload with `CTRL+R`. Or try `ctrl`+`F5`\n" -6. All interactive features like the JupyterLite consoles, Grasple/H5p iframe exercises, Sphinx-thebe python interactivity and HTML/Javascript elements should now work as well. +4. You will get a website that looks like a file browser, to visit your site just navigate to `book/_build/html/` (if you've started this command from this folder you see the book immediately) \ No newline at end of file