Rename to `RetroLab` (#121)

* Rename text to RetroLab

* More renaming

* More renaming

* Rename files

* Update deps

* Update logo

* Lint

* Update README.md

* Minor CSS fix

* Update tour

* Update screencasts in README.md
pull/6294/head
Jeremy Tuloup 5 years ago committed by GitHub
parent 278233d653
commit 2047e3a5e4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -3,12 +3,12 @@ current_version = 0, 1, 10, 'final', 0
commit = False
tag = False
parse = (?P<major>\d+)\,\ (?P<minor>\d+)\,\ (?P<patch>\d+)\,\ \'(?P<release>\S+)\'\,\ (?P<build>\d+)
serialize =
serialize =
{major}, {minor}, {patch}, '{release}', {build}
[bumpversion:part:release]
optional_value = final
values =
values =
alpha
beta
candidate
@ -16,4 +16,4 @@ values =
[bumpversion:part:build]
[bumpversion:file:jupyterlab_classic/_version.py]
[bumpversion:file:retrolab/_version.py]

@ -19,7 +19,7 @@ jobs:
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/${PR_HEAD_USERREPO}/${PR_HEAD_REF}?urlpath=classic/tree) :point_left: Launch JupyterLab Classic on Binder`
body: `[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/${PR_HEAD_USERREPO}/${PR_HEAD_REF}?urlpath=retro/tree) :point_left: Launch RetroLab on Binder`
})
env:
PR_HEAD_REF: ${{ github.event.pull_request.head.ref }}

@ -47,8 +47,8 @@ jobs:
- name: Install the package
run: |
python -m pip install .
jupyter labextension list 2>&1 | grep -ie "@jupyterlab-classic/lab-extension.*enabled.*ok" -
jupyter server extension list 2>&1 | grep -ie "jupyterlab_classic.*enabled" -
jupyter labextension list 2>&1 | grep -ie "@retrolab/lab-extension.*enabled.*ok" -
jupyter server extension list 2>&1 | grep -ie "retrolab.*enabled" -
python -m jupyterlab.browser_check
- name: Lint
run: |
@ -114,9 +114,9 @@ jobs:
python: ['3.6', '3.9']
include:
- python: '3.6'
dist: 'jupyterlab-classic*.tar.gz'
dist: 'retrolab*.tar.gz'
- python: '3.9'
dist: 'jupyterlab_classic*.whl'
dist: 'retrolab*.whl'
- os: windows
py_cmd: python
- os: macos
@ -147,11 +147,11 @@ jobs:
- name: Validate the install
run: |
jupyter labextension list
jupyter labextension list 2>&1 | grep -ie "@jupyterlab-classic/lab-extension.*enabled.*ok" -
jupyter labextension list 2>&1 | grep -ie "@retrolab/lab-extension.*enabled.*ok" -
jupyter server extension list
jupyter server extension list 2>&1 | grep -ie "jupyterlab_classic.*enabled" -
jupyter classic --version
jupyter classic --help
jupyter server extension list 2>&1 | grep -ie "retrolab.*enabled" -
jupyter retro --version
jupyter retro --help
end2end:
needs: [build]
@ -178,7 +178,7 @@ jobs:
- name: Install the package
run: |
cd dist
python -m pip install -vv jupyterlab_classic*.whl
python -m pip install -vv retrolab*.whl
- uses: microsoft/playwright-github-action@v1
- name: Test
run: |

@ -38,7 +38,7 @@ jobs:
run: |
# TODO: improve this with a mock package?
# This step is to ensure the workflow always starts with a final version
sed -i -E "s/VersionInfo\(.*\)/VersionInfo\(9, 8, 7, 'final', 0\)/" jupyterlab_classic/_version.py
sed -i -E "s/VersionInfo\(.*\)/VersionInfo\(9, 8, 7, 'final', 0\)/" retrolab/_version.py
sed -i -E "s/current_version = .*/current_version = 9, 8, 7, 'final', 0/" .bumpversion.cfg
jlpm run lerna version 9.8.7 --no-push --force-publish --no-git-tag-version --yes
git commit -am "Release 9.8.7"

@ -47,8 +47,8 @@ jobs:
- name: Install the package
run: |
python -m pip install .
jupyter labextension list 2>&1 | grep -ie "@jupyterlab-classic/lab-extension.*enabled.*ok" -
jupyter server extension list 2>&1 | grep -ie "jupyterlab_classic.*enabled" -
jupyter labextension list 2>&1 | grep -ie "@retrolab/lab-extension.*enabled.*ok" -
jupyter server extension list 2>&1 | grep -ie "retrolab.*enabled" -
python -m jupyterlab.browser_check
- name: Lint
run: |
@ -114,9 +114,9 @@ jobs:
python: ['3.6', '3.9']
include:
- python: '3.6'
dist: 'jupyterlab-classic*.tar.gz'
dist: 'retrolab*.tar.gz'
- python: '3.9'
dist: 'jupyterlab_classic*.whl'
dist: 'retrolab*.whl'
- os: windows
py_cmd: python
- os: macos
@ -147,11 +147,11 @@ jobs:
- name: Validate the install
run: |
jupyter labextension list
jupyter labextension list 2>&1 | grep -ie "@jupyterlab-classic/lab-extension.*enabled.*ok" -
jupyter labextension list 2>&1 | grep -ie "@retrolab/lab-extension.*enabled.*ok" -
jupyter server extension list
jupyter server extension list 2>&1 | grep -ie "jupyterlab_classic.*enabled" -
jupyter classic --version
jupyter classic --help
jupyter server extension list 2>&1 | grep -ie "retrolab.*enabled" -
jupyter retro --version
jupyter retro --help
release:
if: startsWith(github.ref, 'refs/tags/')
@ -217,7 +217,7 @@ jobs:
docker run --rm -v "$(pwd)":/usr/local/src/your-app \
-e CHANGELOG_GITHUB_TOKEN=${CHANGELOG_GITHUB_TOKEN} \
ferrarimarco/github-changelog-generator \
github_changelog_generator -u jtpio -p jupyterlab-classic --usernames-as-github-logins --no-issues --no-unreleased \
github_changelog_generator -u jtpio -p retrolab --usernames-as-github-logins --no-issues --no-unreleased \
--since-tag ${{ steps.previous_tag.outputs.tag }} --header "" --pr-label "## Changes"
head -n -1 CHANGELOG.md > CHANGELOG
- name: Create Release

4
.gitignore vendored

@ -113,8 +113,8 @@ dmypy.json
_temp_extension
junit.xml
[uU]ntitled*
jupyterlab_classic/static
jupyterlab_classic/labextension
retrolab/static
retrolab/labextension
# playwright
app/artifacts/videos

@ -1,6 +1,6 @@
# Contributing to JupyterLab Classic
# Contributing to RetroLab
Thanks for contributing to JupyterLab Classic!
Thanks for contributing to RetroLab!
Make sure to follow [Project Jupyter's Code of Conduct](https://github.com/jupyter/governance/blob/master/conduct/code_of_conduct.md)
for a friendly and welcoming collaborative environment.
@ -16,16 +16,16 @@ The `jlpm` command is JupyterLab's pinned version of [yarn](https://yarnpkg.com/
```bash
# create a new environment
mamba create -n jupyterlab-classic -c conda-forge python nodejs -y
mamba create -n retrolab -c conda-forge python nodejs -y
# activate the environment
conda activate jupyterlab-classic
conda activate retrolab
# Install package in development mode
pip install -e .
```
`jupyterlab-classic` follows a monorepo structure. To build all the packages at once:
`retrolab` follows a monorepo structure. To build all the packages at once:
```bash
jlpm build
@ -37,19 +37,19 @@ There is also a `watch` script to watch for changes and rebuild the app automati
jlpm watch
```
To make sure the `jupyterlab_classic` server extension is installed:
To make sure the `retrolab` server extension is installed:
```bash
$ jupyter server extension list
Config dir: /home/username/.jupyter
Config dir: /home/username/miniforge3/envs/jupyterlab-classic/etc/jupyter
Config dir: /home/username/miniforge3/envs/retrolab/etc/jupyter
jupyterlab enabled
- Validating jupyterlab...
jupyterlab 3.0.0 OK
jupyterlab_classic enabled
- Validating jupyterlab_classic...
jupyterlab_classic 0.1.0rc2 OK
retrolab enabled
- Validating retrolab...
retrolab 0.1.0rc2 OK
nbclassic enabled
- Validating nbclassic...
nbclassic OK
@ -57,10 +57,10 @@ Config dir: /home/username/miniforge3/envs/jupyterlab-classic/etc/jupyter
Config dir: /usr/local/etc/jupyter
```
Then start JupyterLab Classic with:
Then start RetroLab with:
```bash
jupyter classic
jupyter retro
```
## Running Tests

@ -1,6 +1,6 @@
BSD 3-Clause License
Copyright (c) 2020, JupyterLab Classic Contributors
Copyright (c) 2020, RetroLab Contributors
All rights reserved.
Redistribution and use in source and binary forms, with or without

@ -1,15 +1,15 @@
include LICENSE
include README.md
include pyproject.toml
include jupyter-config/jupyterlab-classic.json
include jupyter-config/retrolab.json
include package.json
include install.json
include ts*.json
graft jupyterlab_classic/labextension
graft jupyterlab_classic/static
graft jupyterlab_classic/templates
graft retrolab/labextension
graft retrolab/static
graft retrolab/templates
# Javascript files
graft src

@ -1,41 +1,41 @@
![jupyterlab-classic-logo](./jupyterlab-classic.png)
![retrolab-logo](./retrolab.png)
![Github Actions Status](https://github.com/jtpio/jupyterlab-classic/workflows/Build/badge.svg)
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gist/jtpio/795608163800b4a7d34d60a015c3d27c/master?urlpath=/classic/notebooks/tour.ipynb)
[![Binder main](https://img.shields.io/badge/launch-main-E66581.svg?logo=data:image/png;base64,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)](https://mybinder.org/v2/gh/jtpio/jupyterlab-classic/main?urlpath=classic/tree)
[![PyPI](https://img.shields.io/pypi/v/jupyterlab-classic.svg)](https://pypi.org/project/jupyterlab-classic)
[![conda-forge](https://img.shields.io/conda/vn/conda-forge/jupyterlab-classic.svg)](https://anaconda.org/conda-forge/jupyterlab-classic)
![Github Actions Status](https://github.com/jtpio/retrolab/workflows/Build/badge.svg)
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gist/jtpio/795608163800b4a7d34d60a015c3d27c/master?urlpath=/retro/notebooks/tour.ipynb)
[![Binder main](https://img.shields.io/badge/launch-main-E66581.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFkAAABZCAMAAABi1XidAAAB8lBMVEX///9XmsrmZYH1olJXmsr1olJXmsrmZYH1olJXmsr1olJXmsrmZYH1olL1olJXmsr1olJXmsrmZYH1olL1olJXmsrmZYH1olJXmsr1olL1olJXmsrmZYH1olL1olJXmsrmZYH1olL1olL0nFf1olJXmsrmZYH1olJXmsq8dZb1olJXmsrmZYH1olJXmspXmspXmsr1olL1olJXmsrmZYH1olJXmsr1olL1olJXmsrmZYH1olL1olLeaIVXmsrmZYH1olL1olL1olJXmsrmZYH1olLna31Xmsr1olJXmsr1olJXmsrmZYH1olLqoVr1olJXmsr1olJXmsrmZYH1olL1olKkfaPobXvviGabgadXmsqThKuofKHmZ4Dobnr1olJXmsr1olJXmspXmsr1olJXmsrfZ4TuhWn1olL1olJXmsqBi7X1olJXmspZmslbmMhbmsdemsVfl8ZgmsNim8Jpk8F0m7R4m7F5nLB6jbh7jbiDirOEibOGnKaMhq+PnaCVg6qWg6qegKaff6WhnpKofKGtnomxeZy3noG6dZi+n3vCcpPDcpPGn3bLb4/Mb47UbIrVa4rYoGjdaIbeaIXhoWHmZYHobXvpcHjqdHXreHLroVrsfG/uhGnuh2bwj2Hxk17yl1vzmljzm1j0nlX1olL3AJXWAAAAbXRSTlMAEBAQHx8gICAuLjAwMDw9PUBAQEpQUFBXV1hgYGBkcHBwcXl8gICAgoiIkJCQlJicnJ2goKCmqK+wsLC4usDAwMjP0NDQ1NbW3Nzg4ODi5+3v8PDw8/T09PX29vb39/f5+fr7+/z8/Pz9/v7+zczCxgAABC5JREFUeAHN1ul3k0UUBvCb1CTVpmpaitAGSLSpSuKCLWpbTKNJFGlcSMAFF63iUmRccNG6gLbuxkXU66JAUef/9LSpmXnyLr3T5AO/rzl5zj137p136BISy44fKJXuGN/d19PUfYeO67Znqtf2KH33Id1psXoFdW30sPZ1sMvs2D060AHqws4FHeJojLZqnw53cmfvg+XR8mC0OEjuxrXEkX5ydeVJLVIlV0e10PXk5k7dYeHu7Cj1j+49uKg7uLU61tGLw1lq27ugQYlclHC4bgv7VQ+TAyj5Zc/UjsPvs1sd5cWryWObtvWT2EPa4rtnWW3JkpjggEpbOsPr7F7EyNewtpBIslA7p43HCsnwooXTEc3UmPmCNn5lrqTJxy6nRmcavGZVt/3Da2pD5NHvsOHJCrdc1G2r3DITpU7yic7w/7Rxnjc0kt5GC4djiv2Sz3Fb2iEZg41/ddsFDoyuYrIkmFehz0HR2thPgQqMyQYb2OtB0WxsZ3BeG3+wpRb1vzl2UYBog8FfGhttFKjtAclnZYrRo9ryG9uG/FZQU4AEg8ZE9LjGMzTmqKXPLnlWVnIlQQTvxJf8ip7VgjZjyVPrjw1te5otM7RmP7xm+sK2Gv9I8Gi++BRbEkR9EBw8zRUcKxwp73xkaLiqQb+kGduJTNHG72zcW9LoJgqQxpP3/Tj//c3yB0tqzaml05/+orHLksVO+95kX7/7qgJvnjlrfr2Ggsyx0eoy9uPzN5SPd86aXggOsEKW2Prz7du3VID3/tzs/sSRs2w7ovVHKtjrX2pd7ZMlTxAYfBAL9jiDwfLkq55Tm7ifhMlTGPyCAs7RFRhn47JnlcB9RM5T97ASuZXIcVNuUDIndpDbdsfrqsOppeXl5Y+XVKdjFCTh+zGaVuj0d9zy05PPK3QzBamxdwtTCrzyg/2Rvf2EstUjordGwa/kx9mSJLr8mLLtCW8HHGJc2R5hS219IiF6PnTusOqcMl57gm0Z8kanKMAQg0qSyuZfn7zItsbGyO9QlnxY0eCuD1XL2ys/MsrQhltE7Ug0uFOzufJFE2PxBo/YAx8XPPdDwWN0MrDRYIZF0mSMKCNHgaIVFoBbNoLJ7tEQDKxGF0kcLQimojCZopv0OkNOyWCCg9XMVAi7ARJzQdM2QUh0gmBozjc3Skg6dSBRqDGYSUOu66Zg+I2fNZs/M3/f/Grl/XnyF1Gw3VKCez0PN5IUfFLqvgUN4C0qNqYs5YhPL+aVZYDE4IpUk57oSFnJm4FyCqqOE0jhY2SMyLFoo56zyo6becOS5UVDdj7Vih0zp+tcMhwRpBeLyqtIjlJKAIZSbI8SGSF3k0pA3mR5tHuwPFoa7N7reoq2bqCsAk1HqCu5uvI1n6JuRXI+S1Mco54YmYTwcn6Aeic+kssXi8XpXC4V3t7/ADuTNKaQJdScAAAAAElFTkSuQmCC)](https://mybinder.org/v2/gh/jtpio/retrolab/main?urlpath=retro/tree)
[![PyPI](https://img.shields.io/pypi/v/retrolab.svg)](https://pypi.org/project/retrolab)
[![conda-forge](https://img.shields.io/conda/vn/conda-forge/retrolab.svg)](https://anaconda.org/conda-forge/retrolab)
The next gen old-school Notebook UI.
`RetroLab` (also known as _JupyterLab Retro_, previously called _JupyterLab Classic_) is an _unofficial_ [JupyterLab](https://github.com/jupyterlab/jupyterlab) distribution with a retro look and feel.
![image](https://user-images.githubusercontent.com/591645/101378325-400fa280-38b3-11eb-81a5-4c7a1aca780e.png)
![image](https://user-images.githubusercontent.com/591645/118792690-2f1e8080-b898-11eb-98fb-1b8a22b8a07d.png)
## Install
`jupyterlab-classic` can be installed with `pip`:
`retrolab` can be installed with `pip`:
```bash
pip install jupyterlab-classic
pip install retrolab
```
With `mamba`:
```bash
mamba install -c conda-forge jupyterlab-classic
mamba install -c conda-forge retrolab
```
With `conda`:
```bash
conda install -c conda-forge jupyterlab-classic
conda install -c conda-forge retrolab
```
## Usage
`jupyterlab-classic` can be started as a standalone app with:
`retrolab` can be started as a standalone app with:
```bash
jupyter classic
jupyter retro
```
Existing federated JupyterLab extensions listed via:
@ -44,7 +44,7 @@ Existing federated JupyterLab extensions listed via:
jupyter labextension list
```
Should also be available when starting `jupyterlab-classic`.
Should also be available when starting `retrolab`.
### Files 📂 and Running Sessions 🏃‍♀️
@ -56,7 +56,7 @@ Should also be available when starting `jupyterlab-classic`.
### Open in a new Browser Tab by default
![new-browser-tab](https://user-images.githubusercontent.com/591645/101954309-21374600-3bfc-11eb-80fc-447dce4e6ac6.gif)
![new-browser-tab](https://user-images.githubusercontent.com/591645/118811914-d9ed6980-b8ad-11eb-8362-f38627199f71.gif)
### Command Palette 🎨
@ -74,7 +74,7 @@ Support for existing JupyterLab themes!
### Terminals 🖥️
![terminals](https://user-images.githubusercontent.com/591645/101954217-fc42d300-3bfb-11eb-84c3-fbf84896b829.gif)
![terminals](https://user-images.githubusercontent.com/591645/118793525-fc28bc80-b898-11eb-9e02-d5a80ad8ddb8.gif)
### File Editor 🖊️
@ -88,11 +88,11 @@ Support for existing JupyterLab themes!
Install new extensions easily!
![federated-extensions](https://user-images.githubusercontent.com/591645/101954127-dd444100-3bfb-11eb-96be-fee87db5171d.gif)
![federated-extensions](https://user-images.githubusercontent.com/591645/118813222-38671780-b8af-11eb-835b-f2865bab5c62.gif)
### Switch between JupyterLab and JupyterLab Classic easily ↔️
### Switch between JupyterLab and RetroLab easily ↔️
![jupyterlab-switch](https://user-images.githubusercontent.com/591645/101954746-ec77be80-3bfc-11eb-85ed-7ac0922e365c.gif)
![jupyterlab-switch](https://user-images.githubusercontent.com/591645/118816963-05bf1e00-b8b3-11eb-92a2-899288471011.gif)
## Contributing
@ -106,18 +106,18 @@ However in some cases, having a leaner, simpler, and more focused interface to w
The single document mode as currently implemented in JupyterLab helps address this issue, but still displays a couple of visual cues that can be distracting to some users.
The goal of the `jupyterlab-classic` project is to provide an alternative JupyterLab distribution with the look and feed of the classic notebook UI, while leveraging the efforts put in the development of JupyterLab itself and its extension system.
The goal of the `retrolab` project is to provide an alternative JupyterLab distribution with the look and feed of the classic notebook UI, while leveraging the efforts put in the development of JupyterLab itself and its extension system.
Technically speaking, `jupyterlab-classic` reuses **many** of the existing plugins for JupyterLab (notebook, toolbar), and also supports prebuilt (federated) third-party extensions using the new distribution system added in 3.0. That way, extensions built for JupyterLab should also be compatible with `jupyterlab-classic`, as long as they can be added to the application shell provided by JupyterLab Classic.
Technically speaking, `retrolab` reuses **many** of the existing plugins for JupyterLab (notebook, toolbar), and also supports prebuilt (federated) third-party extensions using the new distribution system added in 3.0. That way, extensions built for JupyterLab should also be compatible with `retrolab`, as long as they can be added to the application shell provided by RetroLab.
## Relation to other Jupyter frontends
Jupyterlab Classic is an alternative frontend built using the latest JupyterLab components, with the look and feel of the Classic Jupyter Notebook UI. Below is a short comparison to know where it stands when compared to other Jupyter UI projects:
RetroLab is an alternative frontend built using the latest JupyterLab components, with the look and feel of the Classic Jupyter Notebook UI. Below is a short comparison to know where it stands when compared to other Jupyter UI projects:
- Classic Jupyter Notebook - Classic frontend, classic notebook server.
- NBClassic - Classic frontend, new Jupyter Server.
- JupyterLab - Jupyterlab frontend, new Jupyter Server (or Classic Notebook Server). Extensions are not compatible with the Classic Jupyter Notebook since it is built with different components. With version 3.0 onwards, it uses the new Jupyter Server and supports federated extensions that don't need to be rebuilt on the end-user machine.
- Jupyterlab Classic - JupyterLab frontend built with JupyterLab components, with the look and feel of the Classic Notebook. Consistent with the latest version of Jupyterlab. Extensions built for Jupyterlab should work as long as the components they depend on are part of this classic interface (for install JupyterLab Classic doesn't have the `left`, `right` and `bottom` areas).
- RetroLab - JupyterLab frontend built with JupyterLab components, with the look and feel of the Classic Notebook. Consistent with the latest version of Jupyterlab. Extensions built for Jupyterlab should work as long as the components they depend on are part of this classic interface (for install RetroLab doesn't have the `left`, `right` and `bottom` areas).
## Prior art
@ -128,9 +128,10 @@ This project is mostly a reboot of the two previous attempts at making something
These projects really expressed the need for a stripped down, minimal version of the Jupyter Notebook UI.
`jupyterlab-classic` contributes to that space with the added features:
`retrolab` contributes to that space with the added features:
- Support for existing federated (prebuilt) JupyterLab extensions
- Zen Mode
- Repo structure, similar to JupyterLab
- Reusing as much as possible from upstream JupyterLab
- Serve as a template and reference implementation for other alternative JupyterLab distributions

@ -1,4 +1,4 @@
# Releasing JupyterLab Classic
# Releasing RetroLab
## Automated releases
@ -29,7 +29,7 @@ The release workflow also creates a GitHub release with the new changes generate
If you would still like to do the release manually instead, read below.
## Making a nanual new release of JupyterLab Classic
## Making a nanual new release of RetroLab
This process is still a bit manual and consists in running a couple of commands.
@ -38,8 +38,8 @@ This process is still a bit manual and consists in running a couple of commands.
Creating a new environment can help avoid pushing local changes and any extra tag.
```bash
mamba create -q -y -n jupyterlab-classic-release -c conda-forge twine nodejs jupyter-packaging jupyterlab -y
conda activate jupyterlab-classic-release
mamba create -q -y -n retrolab-release -c conda-forge twine nodejs jupyter-packaging jupyterlab -y
conda activate retrolab-release
```
Alternatively, the local repository can be cleaned with:
@ -52,10 +52,10 @@ git clean -fdx
Make sure the `dist/` folder is empty.
1. Update [jupyterlab_classic/\_version.py](./jupyterlab_classic/_version.py) with the new version number
1. Update [retrolab/\_version.py](./retrolab/_version.py) with the new version number
2. Commit the changes
- `git add jupyterlab_classic/_version.py`
- `git add retrolab/_version.py`
- `git commit -m "Release x.y.z"`
3. Bump the frontend packages:
@ -65,7 +65,7 @@ Make sure the `dist/` folder is empty.
4. Run: `python setup.py sdist bdist_wheel`
5. Double check the size of the bundles in the `dist/` folder
6. Test the release by installing the wheel or sdist: `python -m pip install ./dist/jupyterlab_classic-x.y.z-py3-none-any.whl
6. Test the release by installing the wheel or sdist: `python -m pip install ./dist/retrolab-x.y.z-py3-none-any.whl
7. `export TWINE_USERNAME=mypypi_username`
8. `twine upload dist/*`
@ -75,7 +75,7 @@ The simplest is to wait for the bot to automatically open the PR.
Alternatively, to do the update manually:
1. Open a new PR on https://github.com/conda-forge/jupyterlab-classic-feedstock to update the `version` and the `sha256` hash
1. Open a new PR on https://github.com/conda-forge/retrolab-feedstock to update the `version` and the `sha256` hash
2. Wait for the tests
3. Merge the PR

@ -76,19 +76,19 @@ async function main() {
require('@jupyterlab/vega5-extension')
];
const App = require('@jupyterlab-classic/application').App;
const App = require('@retrolab/application').App;
const app = new App({ mimeExtensions });
const disabled = [];
// TODO: formalize the way the set of initial extensions and plugins are specified
let mods = [
// @jupyterlab-classic plugins
require('@jupyterlab-classic/application-extension'),
require('@jupyterlab-classic/docmanager-extension'),
require('@jupyterlab-classic/help-extension'),
require('@jupyterlab-classic/notebook-extension'),
// @retrolab plugins
require('@retrolab/application-extension'),
require('@retrolab/docmanager-extension'),
require('@retrolab/help-extension'),
require('@retrolab/notebook-extension'),
// to handle opening new tabs after creating a new terminal
require('@jupyterlab-classic/terminal-extension'),
require('@retrolab/terminal-extension'),
// @jupyterlab plugins
require('@jupyterlab/apputils-extension').default.filter(({ id }) =>
@ -130,11 +130,11 @@ async function main() {
// The motivation here is to only load a specific set of plugins dependending on
// the current page
const page = PageConfig.getOption('classicPage');
const page = PageConfig.getOption('retroPage');
switch (page) {
case 'tree': {
mods = mods.concat([
require('@jupyterlab-classic/tree-extension'),
require('@retrolab/tree-extension'),
require('@jupyterlab/running-extension')
]);
break;
@ -161,8 +161,8 @@ async function main() {
require('@jupyterlab/fileeditor-extension').default.filter(({ id }) =>
['@jupyterlab/fileeditor-extension:plugin'].includes(id)
),
require('@jupyterlab-classic/tree-extension').default.filter(({ id }) =>
['@jupyterlab-classic/tree-extension:factory'].includes(id)
require('@retrolab/tree-extension').default.filter(({ id }) =>
['@retrolab/tree-extension:factory'].includes(id)
)
]);
break;

@ -1,5 +1,5 @@
{
"name": "@jupyterlab-classic/app",
"name": "@retrolab/app",
"version": "0.1.10",
"private": true,
"scripts": {
@ -8,7 +8,7 @@
"build:test": "tsc --build tsconfig.test.json",
"clean": "rimraf build && jlpm run clean:static",
"clean:artifacts": "rimraf artifacts",
"clean:static": "rimraf ../jupyterlab_classic/static",
"clean:static": "rimraf ../retrolab/static",
"prepublishOnly": "yarn run build",
"test:cov": "jest --collect-coverage",
"test:debug": "node --inspect-brk node_modules/.bin/jest --runInBand",
@ -18,14 +18,14 @@
"watch": "webpack --config ./webpack.config.watch.js"
},
"resolutions": {
"@jupyterlab-classic/application": "~0.1.10",
"@jupyterlab-classic/application-extension": "~0.1.10",
"@jupyterlab-classic/docmanager-extension": "~0.1.10",
"@jupyterlab-classic/help-extension": "~0.1.10",
"@jupyterlab-classic/notebook-extension": "~0.1.10",
"@jupyterlab-classic/terminal-extension": "~0.1.10",
"@jupyterlab-classic/tree-extension": "~0.1.10",
"@jupyterlab-classic/ui-components": "~0.1.10",
"@retrolab/application": "~0.1.10",
"@retrolab/application-extension": "~0.1.10",
"@retrolab/docmanager-extension": "~0.1.10",
"@retrolab/help-extension": "~0.1.10",
"@retrolab/notebook-extension": "~0.1.10",
"@retrolab/terminal-extension": "~0.1.10",
"@retrolab/tree-extension": "~0.1.10",
"@retrolab/ui-components": "~0.1.10",
"@jupyterlab/application": "~3.0.7",
"@jupyterlab/apputils": "~3.0.5",
"@jupyterlab/apputils-extension": "~3.0.7",
@ -84,14 +84,14 @@
"react-dom": "~17.0.2"
},
"dependencies": {
"@jupyterlab-classic/application": "^0.1.10",
"@jupyterlab-classic/application-extension": "^0.1.10",
"@jupyterlab-classic/docmanager-extension": "^0.1.10",
"@jupyterlab-classic/help-extension": "^0.1.10",
"@jupyterlab-classic/notebook-extension": "^0.1.10",
"@jupyterlab-classic/terminal-extension": "^0.1.10",
"@jupyterlab-classic/tree-extension": "^0.1.10",
"@jupyterlab-classic/ui-components": "^0.1.10",
"@retrolab/application": "^0.1.10",
"@retrolab/application-extension": "^0.1.10",
"@retrolab/docmanager-extension": "^0.1.10",
"@retrolab/help-extension": "^0.1.10",
"@retrolab/notebook-extension": "^0.1.10",
"@retrolab/terminal-extension": "^0.1.10",
"@retrolab/tree-extension": "^0.1.10",
"@retrolab/ui-components": "^0.1.10",
"@jupyterlab/apputils-extension": "^3.0.0",
"@jupyterlab/celltags": "^3.0.0",
"@jupyterlab/codemirror-extension": "^3.0.0",
@ -142,14 +142,14 @@
"whatwg-fetch": "^3.0.0"
},
"jupyterlab": {
"name": "JupyterLab Classic",
"name": "RetroLab",
"extensions": [
"@jupyterlab-classic/application-extension",
"@jupyterlab-classic/docmanager-extension",
"@jupyterlab-classic/help-extension",
"@jupyterlab-classic/notebook-extension",
"@jupyterlab-classic/terminal-extension",
"@jupyterlab-classic/tree-extension",
"@retrolab/application-extension",
"@retrolab/docmanager-extension",
"@retrolab/help-extension",
"@retrolab/notebook-extension",
"@retrolab/terminal-extension",
"@retrolab/tree-extension",
"@jupyterlab/apputils-extension",
"@jupyterlab/codemirror-extension",
"@jupyterlab/completer-extension",

@ -6,7 +6,7 @@ import { chromium, firefox, Browser } from 'playwright';
import { BrowserName, BASE_URL } from './utils';
const NOTEBOOK_PATH = 'app/test/data/example.ipynb';
const NOTEBOOK_URL = `${BASE_URL}classic/notebooks/${NOTEBOOK_PATH}`;
const NOTEBOOK_URL = `${BASE_URL}retro/notebooks/${NOTEBOOK_PATH}`;
describe('Notebook', () => {
let browser: Browser;
@ -26,9 +26,9 @@ describe('Notebook', () => {
await page.goto(NOTEBOOK_URL);
await page.waitForTimeout(2000);
const href = await page.evaluate(() => {
return document.querySelector('#jp-ClassicLogo')?.getAttribute('href');
return document.querySelector('#jp-RetroLogo')?.getAttribute('href');
});
expect(href).toContain('/classic/tree');
expect(href).toContain('/retro/tree');
});
});

@ -25,7 +25,7 @@ describe('Smoke', () => {
const tree = await context.newPage();
// Open the tree page
await tree.goto(`${BASE_URL}classic/tree`);
await tree.goto(`${BASE_URL}retro/tree`);
await tree.click('text="Running"');
await tree.click('text="Files"');

@ -18,7 +18,7 @@ describe('Tree', () => {
describe('File Browser', () => {
it('should render a New Notebook button', async () => {
const page = await browser.newPage();
await page.goto(`${BASE_URL}classic/tree`);
await page.goto(`${BASE_URL}retro/tree`);
const button = await page.$('text="New Notebook"');
expect(button).toBeDefined();

@ -158,7 +158,7 @@ module.exports = [
mode: 'development',
entry: ['./publicpath.js', './' + path.relative(__dirname, entryPoint)],
output: {
path: path.resolve(__dirname, '..', 'jupyterlab_classic/static/'),
path: path.resolve(__dirname, '..', 'retrolab/static/'),
library: {
type: 'var',
name: ['_JUPYTERLAB', 'CORE_OUTPUT']

@ -1,4 +1,4 @@
name: jupyterlab-classic
name: retrolab
channels:
- conda-forge
dependencies:

File diff suppressed because one or more lines are too long

@ -1,15 +1,15 @@
{
"name": "@jupyterlab-classic/buildutils",
"name": "@retrolab/buildutils",
"version": "0.1.10",
"private": true,
"description": "JupyterLab Classic - Build Utilities",
"homepage": "https://github.com/jtpio/jupyterlab-classic",
"description": "RetroLab - Build Utilities",
"homepage": "https://github.com/jtpio/retrolab",
"bugs": {
"url": "https://github.com/jtpio/jupyterlab-classic/issues"
"url": "https://github.com/jtpio/retrolab/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/jtpio/jupyterlab-classic.git"
"url": "https://github.com/jtpio/retrolab.git"
},
"license": "BSD-3-Clause",
"author": "Project Jupyter",

@ -1,7 +1,7 @@
{
"NotebookApp": {
"nbserver_extensions": {
"jupyterlab_classic": true
"retrolab": true
}
}
}

@ -1,7 +1,7 @@
{
"ServerApp": {
"jpserver_extensions": {
"jupyterlab_classic": true
"retrolab": true
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

@ -1,5 +0,0 @@
import sys
from jupyterlab_classic.app import main
sys.exit(main())

@ -1,15 +1,15 @@
{
"private": true,
"homepage": "https://github.com/jtpio/jupyterlab-classic",
"homepage": "https://github.com/jtpio/retrolab",
"bugs": {
"url": "https://github.com/jtpio/jupyterlab-classic/issues"
"url": "https://github.com/jtpio/retrolab/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/jtpio/jupyterlab-classic"
"url": "https://github.com/jtpio/retrolab"
},
"license": "BSD-3-Clause",
"author": "JupyterLab Classic Contributors",
"author": "RetroLab Contributors",
"workspaces": {
"packages": [
"app",
@ -32,14 +32,14 @@
"release:bump": "node ./buildutils/lib/release-bump.js",
"release:npm": "node ./buildutils/lib/release-npm.js",
"release:patch": "node ./buildutils/lib/release-patch.js",
"start": "jupyter classic --config ./app/test/jupyter_server_config.py --no-browser",
"start": "jupyter retro --config ./app/test/jupyter_server_config.py --no-browser",
"test": "lerna run test",
"test:e2e": "lerna run test:e2e --stream",
"test:ci": "(jlpm run start&) && jlpm run test:e2e",
"update:dependency": "node ./node_modules/@jupyterlab/buildutils/lib/update-dependency.js --lerna",
"watch": "run-p watch:lib watch:app",
"watch:lib": "lerna exec --stream --scope @jupyterlab-classic/metapackage jlpm watch",
"watch:app": "lerna exec --stream --scope \"@jupyterlab-classic/app\" jlpm watch"
"watch:lib": "lerna exec --stream --scope @retrolab/metapackage jlpm watch",
"watch:app": "lerna exec --stream --scope \"@retrolab/app\" jlpm watch"
},
"husky": {
"hooks": {

@ -1,18 +1,18 @@
{
"name": "@jupyterlab-classic/metapackage",
"name": "@retrolab/metapackage",
"private": true,
"version": "0.1.0",
"description": "JupyterLab Classic - Metapackage",
"homepage": "https://github.com/jtpio/jupyterlab-classic",
"description": "RetroLab - Metapackage",
"homepage": "https://github.com/jtpio/retrolab",
"bugs": {
"url": "https://github.com/jtpio/jupyterlab-classic/issues"
"url": "https://github.com/jtpio/retrolab/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/jtpio/jupyterlab-classic.git"
"url": "https://github.com/jtpio/retrolab.git"
},
"license": "BSD-3-Clause",
"author": "JupyterLab Classic Contributors",
"author": "RetroLab Contributors",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"scripts": {
@ -20,15 +20,15 @@
"watch": "tsc -b -w --preserveWatchOutput"
},
"dependencies": {
"@jupyterlab-classic/application": "file:../application",
"@jupyterlab-classic/application-extension": "file:../application-extension",
"@jupyterlab-classic/docmanager-extension": "file:../docmanager-extension",
"@jupyterlab-classic/help-extension": "file:../help-extension",
"@jupyterlab-classic/lab-extension": "file:../lab-extension",
"@jupyterlab-classic/notebook-extension": "file:../notebook-extension",
"@jupyterlab-classic/terminal-extension": "file:../terminal-extension",
"@jupyterlab-classic/tree-extension": "file:../tree-extension",
"@jupyterlab-classic/ui-components": "file:../ui-components"
"@retrolab/application": "file:../application",
"@retrolab/application-extension": "file:../application-extension",
"@retrolab/docmanager-extension": "file:../docmanager-extension",
"@retrolab/help-extension": "file:../help-extension",
"@retrolab/lab-extension": "file:../lab-extension",
"@retrolab/notebook-extension": "file:../notebook-extension",
"@retrolab/terminal-extension": "file:../terminal-extension",
"@retrolab/tree-extension": "file:../tree-extension",
"@retrolab/ui-components": "file:../ui-components"
},
"devDependencies": {
"typescript": "~4.1.3"

@ -1,9 +1,9 @@
import '@jupyterlab-classic/application';
import '@jupyterlab-classic/application-extension';
import '@jupyterlab-classic/docmanager-extension';
import '@jupyterlab-classic/help-extension';
import '@jupyterlab-classic/lab-extension';
import '@jupyterlab-classic/notebook-extension';
import '@jupyterlab-classic/terminal-extension';
import '@jupyterlab-classic/tree-extension';
import '@jupyterlab-classic/ui-components';
import '@retrolab/application';
import '@retrolab/application-extension';
import '@retrolab/docmanager-extension';
import '@retrolab/help-extension';
import '@retrolab/lab-extension';
import '@retrolab/notebook-extension';
import '@retrolab/terminal-extension';
import '@retrolab/tree-extension';
import '@retrolab/ui-components';

@ -1,14 +1,14 @@
{
"name": "@jupyterlab-classic/application-extension",
"name": "@retrolab/application-extension",
"version": "0.1.10",
"description": "JupyterLab Classic - Application Extension",
"homepage": "https://github.com/jtpio/jupyterlab-classic",
"description": "RetroLab - Application Extension",
"homepage": "https://github.com/jtpio/retrolab",
"bugs": {
"url": "https://github.com/jtpio/jupyterlab-classic/issues"
"url": "https://github.com/jtpio/retrolab/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/jtpio/jupyterlab-classic.git"
"url": "https://github.com/jtpio/retrolab.git"
},
"license": "BSD-3-Clause",
"author": "Project Jupyter",
@ -39,8 +39,8 @@
"watch": "tsc -b --watch"
},
"dependencies": {
"@jupyterlab-classic/application": "^0.1.10",
"@jupyterlab-classic/ui-components": "^0.1.10",
"@retrolab/application": "^0.1.10",
"@retrolab/ui-components": "^0.1.10",
"@jupyterlab/application": "^3.0.0",
"@jupyterlab/apputils": "^3.0.0",
"@jupyterlab/celltags": "^3.0.0",

@ -25,13 +25,9 @@ import { IMainMenu } from '@jupyterlab/mainmenu';
import { ITranslator, TranslationManager } from '@jupyterlab/translation';
import {
App,
ClassicShell,
IClassicShell
} from '@jupyterlab-classic/application';
import { App, RetroShell, IRetroShell } from '@retrolab/application';
import { jupyterIcon } from '@jupyterlab-classic/ui-components';
import { jupyterIcon } from '@retrolab/ui-components';
import { Widget } from '@lumino/widgets';
@ -79,12 +75,12 @@ namespace CommandIDs {
* The logo plugin.
*/
const logo: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/application-extension:logo',
id: '@retrolab/application-extension:logo',
autoStart: true,
activate: (app: JupyterFrontEnd) => {
const baseUrl = PageConfig.getBaseUrl();
const node = document.createElement('a');
node.href = `${baseUrl}classic/tree`;
node.href = `${baseUrl}retro/tree`;
node.target = '_blank';
node.rel = 'noopener noreferrer';
const logo = new Widget({ node });
@ -95,7 +91,7 @@ const logo: JupyterFrontEndPlugin<void> = {
height: '28px',
width: 'auto'
});
logo.id = 'jp-ClassicLogo';
logo.id = 'jp-RetroLogo';
app.shell.add(logo, 'top', { rank: 0 });
}
};
@ -104,7 +100,7 @@ const logo: JupyterFrontEndPlugin<void> = {
* A plugin to open documents in the main area.
*/
const opener: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/application-extension:opener',
id: '@retrolab/application-extension:opener',
autoStart: true,
requires: [IRouter, IDocumentManager],
activate: (
@ -149,7 +145,7 @@ const opener: JupyterFrontEndPlugin<void> = {
* A plugin to dispose the Tabs menu
*/
const noTabsMenu: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/application-extension:no-tabs-menu',
id: '@retrolab/application-extension:no-tabs-menu',
requires: [IMainMenu],
autoStart: true,
activate: (app: JupyterFrontEnd, menu: IMainMenu) => {
@ -161,7 +157,7 @@ const noTabsMenu: JupyterFrontEndPlugin<void> = {
* Add commands to open the tree and running pages.
*/
const pages: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/application-extension:pages',
id: '@retrolab/application-extension:pages',
autoStart: true,
optional: [ICommandPalette, IMainMenu],
activate: (
@ -181,7 +177,7 @@ const pages: JupyterFrontEndPlugin<void> = {
app.commands.addCommand(CommandIDs.openTree, {
label: 'Open Files',
execute: () => {
window.open(`${baseUrl}classic/tree`);
window.open(`${baseUrl}retro/tree`);
}
});
@ -201,15 +197,15 @@ const pages: JupyterFrontEndPlugin<void> = {
};
/**
* The default paths for a JupyterLab Classic app.
* The default paths for a RetroLab app.
*/
const paths: JupyterFrontEndPlugin<JupyterFrontEnd.IPaths> = {
id: '@jupyterlab-classic/application-extension:paths',
id: '@retrolab/application-extension:paths',
autoStart: true,
provides: JupyterFrontEnd.IPaths,
activate: (app: JupyterFrontEnd): JupyterFrontEnd.IPaths => {
if (!(app instanceof App)) {
throw new Error(`${paths.id} must be activated in JupyterLab Classic.`);
throw new Error(`${paths.id} must be activated in RetroLab.`);
}
return app.paths;
}
@ -219,7 +215,7 @@ const paths: JupyterFrontEndPlugin<JupyterFrontEnd.IPaths> = {
* The default URL router provider.
*/
const router: JupyterFrontEndPlugin<IRouter> = {
id: '@jupyterlab-classic/application-extension:router',
id: '@retrolab/application-extension:router',
autoStart: true,
provides: IRouter,
requires: [JupyterFrontEnd.IPaths],
@ -244,42 +240,42 @@ const router: JupyterFrontEndPlugin<IRouter> = {
* The default session dialogs plugin
*/
const sessionDialogs: JupyterFrontEndPlugin<ISessionContextDialogs> = {
id: '@jupyterlab-classic/application-extension:session-dialogs',
id: '@retrolab/application-extension:session-dialogs',
provides: ISessionContextDialogs,
autoStart: true,
activate: () => sessionContextDialogs
};
/**
* The default JupyterLab Classic application shell.
* The default RetroLab application shell.
*/
const shell: JupyterFrontEndPlugin<IClassicShell> = {
id: '@jupyterlab-classic/application-extension:shell',
const shell: JupyterFrontEndPlugin<IRetroShell> = {
id: '@retrolab/application-extension:shell',
activate: (app: JupyterFrontEnd) => {
if (!(app.shell instanceof ClassicShell)) {
throw new Error(`${shell.id} did not find a ClassicShell instance.`);
if (!(app.shell instanceof RetroShell)) {
throw new Error(`${shell.id} did not find a RetroShell instance.`);
}
return app.shell;
},
autoStart: true,
provides: IClassicShell
provides: IRetroShell
};
/**
* A plugin to provide a spacer at rank 10000 for flex panels
*/
const spacer: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/application-extension:spacer',
id: '@retrolab/application-extension:spacer',
autoStart: true,
activate: (app: JupyterFrontEnd) => {
const top = new Widget();
top.id = DOMUtils.createDomID();
top.addClass('jp-ClassicSpacer');
top.addClass('jp-RetroSpacer');
app.shell.add(top, 'top', { rank: 10000 });
const menu = new Widget();
menu.id = DOMUtils.createDomID();
menu.addClass('jp-ClassicSpacer');
menu.addClass('jp-RetroSpacer');
app.shell.add(menu, 'menu', { rank: 10000 });
}
};
@ -288,10 +284,10 @@ const spacer: JupyterFrontEndPlugin<void> = {
* A plugin to display the document title in the browser tab title
*/
const tabTitle: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/application-extension:tab-title',
id: '@retrolab/application-extension:tab-title',
autoStart: true,
requires: [IClassicShell],
activate: (app: JupyterFrontEnd, shell: IClassicShell) => {
requires: [IRetroShell],
activate: (app: JupyterFrontEnd, shell: IRetroShell) => {
const setTabTitle = () => {
const current = shell.currentWidget;
if (!(current instanceof DocumentWidget)) {
@ -314,13 +310,13 @@ const tabTitle: JupyterFrontEndPlugin<void> = {
* A plugin to display and rename the title of a file
*/
const title: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/application-extension:title',
id: '@retrolab/application-extension:title',
autoStart: true,
requires: [IClassicShell],
requires: [IRetroShell],
optional: [IDocumentManager, IRouter],
activate: (
app: JupyterFrontEnd,
shell: IClassicShell,
shell: IRetroShell,
docManager: IDocumentManager | null,
router: IRouter | null
) => {
@ -366,7 +362,7 @@ const title: JupyterFrontEndPlugin<void> = {
return;
}
const encoded = encodeURIComponent(result.path);
router.navigate(`/classic/${route}/${encoded}`, {
router.navigate(`/retro/${route}/${encoded}`, {
skipRouting: true
});
};
@ -381,15 +377,15 @@ const title: JupyterFrontEndPlugin<void> = {
* Plugin to toggle the top header visibility.
*/
const topVisibility: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/application-extension:top',
requires: [IClassicShell],
id: '@retrolab/application-extension:top',
requires: [IRetroShell],
optional: [IMainMenu],
activate: (
app: JupyterFrontEnd<JupyterFrontEnd.IShell>,
classicShell: IClassicShell,
retroShell: IRetroShell,
menu: IMainMenu | null
) => {
const top = classicShell.top;
const top = retroShell.top;
app.commands.addCommand(CommandIDs.toggleTop, {
label: 'Show Header',
@ -405,9 +401,9 @@ const topVisibility: JupyterFrontEndPlugin<void> = {
const onChanged = (): void => {
if (app.format === 'desktop') {
classicShell.expandTop();
retroShell.expandTop();
} else {
classicShell.collapseTop();
retroShell.collapseTop();
}
};
@ -422,7 +418,7 @@ const topVisibility: JupyterFrontEndPlugin<void> = {
* A simplified Translator
*/
const translator: JupyterFrontEndPlugin<ITranslator> = {
id: '@jupyterlab-classic/application-extension:translator',
id: '@retrolab/application-extension:translator',
activate: (app: JupyterFrontEnd<JupyterFrontEnd.IShell>): ITranslator => {
const translationManager = new TranslationManager();
return translationManager;
@ -435,27 +431,27 @@ const translator: JupyterFrontEndPlugin<ITranslator> = {
* Zen mode plugin
*/
const zen: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/application-extension:zen',
id: '@retrolab/application-extension:zen',
autoStart: true,
optional: [ICommandPalette, IClassicShell, IMainMenu],
optional: [ICommandPalette, IRetroShell, IMainMenu],
activate: (
app: JupyterFrontEnd,
palette: ICommandPalette | null,
classicShell: IClassicShell | null,
retroShell: IRetroShell | null,
menu: IMainMenu | null
): void => {
const { commands } = app;
const elem = document.documentElement;
const toggleOn = () => {
classicShell?.collapseTop();
classicShell?.menu.setHidden(true);
retroShell?.collapseTop();
retroShell?.menu.setHidden(true);
zenModeEnabled = true;
};
const toggleOff = () => {
classicShell?.expandTop();
classicShell?.menu.setHidden(false);
retroShell?.expandTop();
retroShell?.menu.setHidden(false);
zenModeEnabled = false;
};

@ -4,7 +4,7 @@
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-ClassicSpacer {
.jp-RetroSpacer {
flex-grow: 1;
flex-shrink: 1;
}

@ -1,4 +1,4 @@
@import url('~@jupyterlab-classic/application/style/index.css');
@import url('~@retrolab/application/style/index.css');
@import url('~@lumino/widgets/style/index.css');
@import url('./base.css');

@ -1,4 +1,4 @@
import '@jupyterlab-classic/application/style/index.js';
import '@retrolab/application/style/index.js';
import '@lumino/widgets/style/index.js';
import './base.css';

@ -1,14 +1,14 @@
{
"name": "@jupyterlab-classic/application",
"name": "@retrolab/application",
"version": "0.1.10",
"description": "JupyterLab Classic - Application",
"homepage": "https://github.com/jtpio/jupyterlab-classic",
"description": "RetroLab - Application",
"homepage": "https://github.com/jtpio/retrolab",
"bugs": {
"url": "https://github.com/jtpio/jupyterlab-classic/issues"
"url": "https://github.com/jtpio/retrolab/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/jtpio/jupyterlab-classic.git"
"url": "https://github.com/jtpio/retrolab.git"
},
"license": "BSD-3-Clause",
"author": "Project Jupyter",

@ -14,21 +14,21 @@ import { IRenderMime } from '@jupyterlab/rendermime-interfaces';
import { Throttler } from '@lumino/polling';
import { IClassicShell, ClassicShell } from './shell';
import { IRetroShell, RetroShell } from './shell';
/**
* App is the main application class. It is instantiated once and shared.
*/
export class App extends JupyterFrontEnd<IClassicShell> {
export class App extends JupyterFrontEnd<IRetroShell> {
/**
* Construct a new App object.
*
* @param options The instantiation options for an application.
*/
constructor(options: App.IOptions = { shell: new ClassicShell() }) {
constructor(options: App.IOptions = { shell: new RetroShell() }) {
super({
...options,
shell: options.shell ?? new ClassicShell()
shell: options.shell ?? new RetroShell()
});
if (options.mimeExtensions) {
for (const plugin of createRendermimePlugins(options.mimeExtensions)) {
@ -41,7 +41,7 @@ export class App extends JupyterFrontEnd<IClassicShell> {
/**
* The name of the application.
*/
readonly name = 'JupyterLab Classic';
readonly name = 'RetroLab';
/**
* A namespace/prefix plugins may use to denote their provenance.
@ -145,11 +145,11 @@ export namespace App {
* The instantiation options for an App application.
*/
export interface IOptions
extends JupyterFrontEnd.IOptions<IClassicShell>,
extends JupyterFrontEnd.IOptions<IRetroShell>,
Partial<IInfo> {}
/**
* The information about a JupyterLab Classic application.
* The information about a RetroLab application.
*/
export interface IInfo {
/**

@ -16,16 +16,16 @@ import { ISignal, Signal } from '@lumino/signaling';
import { Panel, Widget, BoxLayout } from '@lumino/widgets';
/**
* The JupyterLab Classic application shell token.
* The RetroLab application shell token.
*/
export const IClassicShell = new Token<IClassicShell>(
'@jupyterlab-classic/application:IClassicShell'
export const IRetroShell = new Token<IRetroShell>(
'@retrolab/application:IRetroShell'
);
/**
* The JupyterLab Classic application shell interface.
* The RetroLab application shell interface.
*/
export interface IClassicShell extends ClassicShell {}
export interface IRetroShell extends RetroShell {}
/**
* The default rank for ranked panels.
@ -35,7 +35,7 @@ const DEFAULT_RANK = 900;
/**
* The application shell.
*/
export class ClassicShell extends Widget implements JupyterFrontEnd.IShell {
export class RetroShell extends Widget implements JupyterFrontEnd.IShell {
constructor() {
super();
this.id = 'main';
@ -78,7 +78,7 @@ export class ClassicShell extends Widget implements JupyterFrontEnd.IShell {
/**
* A signal emitted when the current widget changes.
*/
get currentChanged(): ISignal<ClassicShell, void> {
get currentChanged(): ISignal<RetroShell, void> {
return this._currentChanged;
}

@ -1,7 +1,7 @@
// Copyright (c) Jupyter Development Team.
// Distributed under the terms of the Modified BSD License.
import { ClassicShell, IClassicShell } from '@jupyterlab-classic/application';
import { RetroShell, IRetroShell } from '@retrolab/application';
import { JupyterFrontEnd } from '@jupyterlab/application';
@ -10,10 +10,10 @@ import { toArray } from '@lumino/algorithm';
import { Widget } from '@lumino/widgets';
describe('Shell', () => {
let shell: IClassicShell;
let shell: IRetroShell;
beforeEach(() => {
shell = new ClassicShell();
shell = new RetroShell();
Widget.attach(shell, document.body);
});
@ -23,7 +23,7 @@ describe('Shell', () => {
describe('#constructor()', () => {
it('should create a LabShell instance', () => {
expect(shell).toBeInstanceOf(ClassicShell);
expect(shell).toBeInstanceOf(RetroShell);
});
});

@ -1,14 +1,14 @@
{
"name": "@jupyterlab-classic/docmanager-extension",
"name": "@retrolab/docmanager-extension",
"version": "0.1.10",
"description": "JupyterLab Classic - Document Manager Extension",
"homepage": "https://github.com/jtpio/jupyterlab-classic",
"description": "RetroLab - Document Manager Extension",
"homepage": "https://github.com/jtpio/retrolab",
"bugs": {
"url": "https://github.com/jtpio/jupyterlab-classic/issues"
"url": "https://github.com/jtpio/retrolab/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/jtpio/jupyterlab-classic.git"
"url": "https://github.com/jtpio/retrolab.git"
},
"license": "BSD-3-Clause",
"author": "Project Jupyter",

@ -20,7 +20,7 @@ import { Kernel } from '@jupyterlab/services';
* TODO: remove and use a custom doc manager?
*/
const opener: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/docmanager-extension:opener',
id: '@retrolab/docmanager-extension:opener',
requires: [IDocumentManager],
autoStart: true,
activate: (app: JupyterFrontEnd, docManager: IDocumentManager) => {
@ -41,7 +41,7 @@ const opener: JupyterFrontEndPlugin<void> = {
}
const ext = PathExt.extname(path);
const route = ext === '.ipynb' ? 'notebooks' : 'edit';
window.open(`${baseUrl}classic/${route}/${path}`);
window.open(`${baseUrl}retro/${route}/${path}`);
return undefined;
};
}

@ -1,14 +1,14 @@
{
"name": "@jupyterlab-classic/help-extension",
"name": "@retrolab/help-extension",
"version": "0.1.10",
"description": "JupyterLab Classic - Help Extension",
"homepage": "https://github.com/jtpio/jupyterlab-classic",
"description": "RetroLab - Help Extension",
"homepage": "https://github.com/jtpio/retrolab",
"bugs": {
"url": "https://github.com/jtpio/jupyterlab-classic/issues"
"url": "https://github.com/jtpio/retrolab/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/jtpio/jupyterlab-classic.git"
"url": "https://github.com/jtpio/retrolab.git"
},
"license": "BSD-3-Clause",
"author": "Project Jupyter",
@ -39,7 +39,7 @@
"watch": "tsc -b --watch"
},
"dependencies": {
"@jupyterlab-classic/ui-components": "^0.1.10",
"@retrolab/ui-components": "^0.1.10",
"@jupyterlab/application": "^3.0.0",
"@jupyterlab/apputils": "^3.0.0",
"@jupyterlab/mainmenu": "^3.0.0"

@ -10,7 +10,7 @@ import { showDialog, Dialog } from '@jupyterlab/apputils';
import { IMainMenu } from '@jupyterlab/mainmenu';
import { jupyterlabClassicIcon } from '@jupyterlab-classic/ui-components';
import { retroIcon } from '@retrolab/ui-components';
import * as React from 'react';
@ -43,7 +43,7 @@ namespace CommandIDs {
* The help plugin.
*/
const plugin: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/help-extension:plugin',
id: '@retrolab/help-extension:plugin',
autoStart: true,
optional: [IMainMenu],
activate: (app: JupyterFrontEnd, menu: IMainMenu): void => {
@ -61,15 +61,15 @@ const plugin: JupyterFrontEndPlugin<void> = {
label: 'Keyboard Shortcuts',
execute: () => {
const title = (
<span className="jp-AboutClassic-about-header">
<div className="jp-AboutClassic-about-header-info">
<span className="jp-AboutRetro-about-header">
<div className="jp-AboutRetro-about-header-info">
Keyboard Shortcuts
</div>
</span>
);
const body = (
<table className="jp-AboutClassic-shortcuts">
<table className="jp-AboutRetro-shortcuts">
<thead>
<tr>
<th>Name</th>
@ -98,7 +98,7 @@ const plugin: JupyterFrontEndPlugin<void> = {
Dialog.createButton({
label: 'Dismiss',
className:
'jp-AboutClassic-about-button jp-mod-reject jp-mod-styled'
'jp-AboutRetro-about-button jp-mod-reject jp-mod-styled'
})
]
});
@ -110,29 +110,28 @@ const plugin: JupyterFrontEndPlugin<void> = {
execute: () => {
const title = (
<>
<span className="jp-AboutClassic-header">
<jupyterlabClassicIcon.react height="128px" width="auto" />
<span className="jp-AboutRetro-header">
<retroIcon.react height="128px" width="auto" />
</span>
</>
);
const classicNotebookURL =
'https://github.com/jtpio/jupyterlab-classic';
const retroNotebookURL = 'https://github.com/jtpio/retrolab';
const externalLinks = (
<span>
<a
href={classicNotebookURL}
href={retroNotebookURL}
target="_blank"
rel="noopener noreferrer"
className="jp-Button-flat jp-AboutClassic-about-externalLinks"
className="jp-Button-flat jp-AboutRetro-about-externalLinks"
>
JUPYTERLAB CLASSIC ON GITHUB
RETROLAB ON GITHUB
</a>
</span>
);
const body = (
<>
<span className="jp-AboutClassic-body">Version: {app.version}</span>
<span className="jp-AboutRetro-body">Version: {app.version}</span>
<div>{externalLinks}</div>
</>
);
@ -144,7 +143,7 @@ const plugin: JupyterFrontEndPlugin<void> = {
Dialog.createButton({
label: 'Dismiss',
className:
'jp-AboutClassic-about-button jp-mod-reject jp-mod-styled'
'jp-AboutRetro-about-button jp-mod-reject jp-mod-styled'
})
]
});

@ -1,15 +1,15 @@
.jp-AboutClassic-header {
.jp-AboutRetro-header {
display: flex;
flex-direction: row;
align-items: center;
padding: var(--jp-flat-button-padding);
}
.jp-AboutClassic-header-text {
.jp-AboutRetro-header-text {
margin-left: 16px;
}
.jp-AboutClassic-body {
.jp-AboutRetro-body {
display: flex;
font-size: var(--jp-ui-font-size2);
padding: var(--jp-flat-button-padding);
@ -20,11 +20,11 @@
overflow: hidden;
}
.jp-AboutClassic-about-body pre {
.jp-AboutRetro-about-body pre {
white-space: pre-wrap;
}
.jp-AboutClassic-about-externalLinks {
.jp-AboutRetro-about-externalLinks {
display: flex;
flex-direction: column;
justify-content: flex-start;
@ -33,11 +33,11 @@
color: var(--jp-warn-color0);
}
.jp-AboutClassic-shortcuts {
.jp-AboutRetro-shortcuts {
padding: 10px;
}
.jp-AboutClassic-shortcuts pre {
.jp-AboutRetro-shortcuts pre {
padding: 5px;
margin: 0 0 10px;
background: var(--jp-layout-color2);

@ -1,14 +1,14 @@
{
"name": "@jupyterlab-classic/lab-extension",
"name": "@retrolab/lab-extension",
"version": "0.1.10",
"description": "JupyterLab Classic - Lab Extension",
"homepage": "https://github.com/jtpio/jupyterlab-classic",
"description": "RetroLab - Lab Extension",
"homepage": "https://github.com/jtpio/retrolab",
"bugs": {
"url": "https://github.com/jtpio/jupyterlab-classic/issues"
"url": "https://github.com/jtpio/retrolab/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/jtpio/jupyterlab-classic.git"
"url": "https://github.com/jtpio/retrolab.git"
},
"license": "BSD-3-Clause",
"author": "Project Jupyter",
@ -38,7 +38,7 @@
"build:prod": "jlpm run build:lib && jlpm run build:labextension",
"clean": "jlpm run clean:lib",
"clean:all": "jlpm run clean:lib && jlpm run clean:labextension",
"clean:labextension": "rimraf ../../jupyterlab_classic/labextension",
"clean:labextension": "rimraf ../../retrolab/labextension",
"clean:lib": "rimraf lib tsconfig.tsbuildinfo",
"prepare": "jlpm run clean && jlpm run build:prod",
"watch": "run-p watch:src watch:labextension",
@ -46,7 +46,7 @@
"watch:src": "tsc -w"
},
"dependencies": {
"@jupyterlab-classic/ui-components": "^0.1.10",
"@retrolab/ui-components": "^0.1.10",
"@jupyterlab/application": "^3.0.0",
"@jupyterlab/apputils": "^3.0.0",
"@jupyterlab/coreutils": "^5.0.0",
@ -66,6 +66,6 @@
},
"jupyterlab": {
"extension": true,
"outputDir": "../../jupyterlab_classic/labextension"
"outputDir": "../../retrolab/labextension"
}
}

@ -34,16 +34,16 @@ namespace CommandIDs {
/**
* Toggle Top Bar visibility
*/
export const openClassic = 'jupyterlab-classic:open';
export const openRetro = 'retrolab:open';
}
/**
* A notebook widget extension that adds a jupyterlab classic button to the toolbar.
* A notebook widget extension that adds a retrolab button to the toolbar.
*/
class ClassicButton
class RetroButton
implements DocumentRegistry.IWidgetExtension<NotebookPanel, INotebookModel> {
/**
* Instantiate a new ClassicButton.
* Instantiate a new RetroButton.
* @param commands The command registry.
*/
constructor(commands: CommandRegistry) {
@ -55,13 +55,13 @@ class ClassicButton
*/
createNew(panel: NotebookPanel): IDisposable {
const button = new ToolbarButton({
tooltip: 'Open with JupyterLab Classic',
tooltip: 'Open with RetroLab',
icon: jupyterIcon,
onClick: () => {
this._commands.execute(CommandIDs.openClassic);
this._commands.execute(CommandIDs.openRetro);
}
});
panel.toolbar.insertAfter('cellType', 'jupyterlabClassic', button);
panel.toolbar.insertAfter('cellType', 'retro', button);
return button;
}
@ -71,8 +71,8 @@ class ClassicButton
/**
* A plugin for the checkpoint indicator
*/
const openClassic: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/lab-extension:open-classic',
const openRetro: JupyterFrontEndPlugin<void> = {
id: '@retrolab/lab-extension:open-retro',
autoStart: true,
optional: [INotebookTracker, ICommandPalette, IMainMenu, ILabShell],
activate: (
@ -82,9 +82,9 @@ const openClassic: JupyterFrontEndPlugin<void> = {
menu: IMainMenu | null,
labShell: ILabShell | null
) => {
// TODO: do not activate if already in a IClassicShell?
// TODO: do not activate if already in a IRetroShell?
if (!notebookTracker || !labShell) {
// to prevent showing the toolbar button in JupyterLab Classic
// to prevent showing the toolbar button in RetroLab
return;
}
@ -98,35 +98,35 @@ const openClassic: JupyterFrontEndPlugin<void> = {
);
};
commands.addCommand(CommandIDs.openClassic, {
label: 'Open in JupyterLab Classic',
commands.addCommand(CommandIDs.openRetro, {
label: 'Open in RetroLab',
execute: () => {
const current = notebookTracker.currentWidget;
if (!current) {
return;
}
const { context } = current;
window.open(`${baseUrl}classic/notebooks/${context.path}`);
window.open(`${baseUrl}retro/notebooks/${context.path}`);
},
isEnabled
});
if (palette) {
palette.addItem({ command: CommandIDs.openClassic, category: 'Other' });
palette.addItem({ command: CommandIDs.openRetro, category: 'Other' });
}
if (menu) {
menu.viewMenu.addGroup([{ command: CommandIDs.openClassic }], 1);
menu.viewMenu.addGroup([{ command: CommandIDs.openRetro }], 1);
}
const classicButton = new ClassicButton(commands);
docRegistry.addWidgetExtension('Notebook', classicButton);
const retroButton = new RetroButton(commands);
docRegistry.addWidgetExtension('Notebook', retroButton);
}
};
/**
* Export the plugins as default.
*/
const plugins: JupyterFrontEndPlugin<any>[] = [openClassic];
const plugins: JupyterFrontEndPlugin<any>[] = [openRetro];
export default plugins;

@ -1,14 +1,14 @@
{
"name": "@jupyterlab-classic/notebook-extension",
"name": "@retrolab/notebook-extension",
"version": "0.1.10",
"description": "JupyterLab Classic - Notebook Extension",
"homepage": "https://github.com/jtpio/jupyterlab-classic",
"description": "RetroLab - Notebook Extension",
"homepage": "https://github.com/jtpio/retrolab",
"bugs": {
"url": "https://github.com/jtpio/jupyterlab-classic/issues"
"url": "https://github.com/jtpio/retrolab/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/jtpio/jupyterlab-classic.git"
"url": "https://github.com/jtpio/retrolab.git"
},
"license": "BSD-3-Clause",
"author": "Project Jupyter",
@ -39,7 +39,7 @@
"watch": "tsc -b --watch"
},
"dependencies": {
"@jupyterlab-classic/application": "^0.1.10",
"@retrolab/application": "^0.1.10",
"@jupyterlab/application": "^3.0.0",
"@jupyterlab/apputils": "^3.0.0",
"@jupyterlab/docmanager": "^3.0.0",

@ -14,11 +14,7 @@ import { IDocumentManager } from '@jupyterlab/docmanager';
import { NotebookPanel } from '@jupyterlab/notebook';
import {
App,
ClassicShell,
IClassicShell
} from '@jupyterlab-classic/application';
import { App, RetroShell, IRetroShell } from '@retrolab/application';
import { Poll } from '@lumino/polling';
@ -27,40 +23,40 @@ import { Widget } from '@lumino/widgets';
/**
* The class for kernel status errors.
*/
const KERNEL_STATUS_ERROR_CLASS = 'jp-ClassicKernelStatus-error';
const KERNEL_STATUS_ERROR_CLASS = 'jp-RetroKernelStatus-error';
/**
* The class for kernel status warnings.
*/
const KERNEL_STATUS_WARN_CLASS = 'jp-ClassicKernelStatus-warn';
const KERNEL_STATUS_WARN_CLASS = 'jp-RetroKernelStatus-warn';
/**
* The class for kernel status infos.
*/
const KERNEL_STATUS_INFO_CLASS = 'jp-ClassicKernelStatus-info';
const KERNEL_STATUS_INFO_CLASS = 'jp-RetroKernelStatus-info';
/**
* The class to fade out the kernel status.
*/
const KERNEL_STATUS_FADE_OUT_CLASS = 'jp-ClassicKernelStatus-fade';
const KERNEL_STATUS_FADE_OUT_CLASS = 'jp-RetroKernelStatus-fade';
/**
* A plugin for the checkpoint indicator
*/
const checkpoints: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/application-extension:checkpoints',
id: '@retrolab/application-extension:checkpoints',
autoStart: true,
requires: [IDocumentManager],
optional: [IClassicShell],
optional: [IRetroShell],
activate: (
app: JupyterFrontEnd,
docManager: IDocumentManager,
classicShell: IClassicShell
retroShell: IRetroShell
) => {
const { shell } = app;
const widget = new Widget();
widget.id = DOMUtils.createDomID();
widget.addClass('jp-ClassicCheckpoint');
widget.addClass('jp-RetroCheckpoint');
app.shell.add(widget, 'top', { rank: 100 });
const onChange = async () => {
@ -83,8 +79,8 @@ const checkpoints: JupyterFrontEndPlugin<void> = {
)}`;
};
if (classicShell) {
classicShell.currentChanged.connect(onChange);
if (retroShell) {
retroShell.currentChanged.connect(onChange);
}
new Poll({
@ -103,10 +99,10 @@ const checkpoints: JupyterFrontEndPlugin<void> = {
* The kernel logo plugin.
*/
const kernelLogo: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/application-extension:kernel-logo',
id: '@retrolab/application-extension:kernel-logo',
autoStart: true,
requires: [IClassicShell],
activate: (app: JupyterFrontEnd, shell: IClassicShell) => {
requires: [IRetroShell],
activate: (app: JupyterFrontEnd, shell: IRetroShell) => {
const { serviceManager } = app;
const baseUrl = PageConfig.getBaseUrl();
@ -144,7 +140,7 @@ const kernelLogo: JupyterFrontEndPlugin<void> = {
img.title = spec.display_name;
node.appendChild(img);
widget = new Widget({ node });
widget.addClass('jp-ClassicKernelLogo');
widget.addClass('jp-RetroKernelLogo');
app.shell.add(widget, 'top', { rank: 10_010 });
};
@ -156,12 +152,12 @@ const kernelLogo: JupyterFrontEndPlugin<void> = {
* A plugin to display the kernel status;
*/
const kernelStatus: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/application-extension:kernel-status',
id: '@retrolab/application-extension:kernel-status',
autoStart: true,
requires: [IClassicShell],
activate: (app: JupyterFrontEnd, shell: IClassicShell) => {
requires: [IRetroShell],
activate: (app: JupyterFrontEnd, shell: IRetroShell) => {
const widget = new Widget();
widget.addClass('jp-ClassicKernelStatus');
widget.addClass('jp-RetroKernelStatus');
app.shell.add(widget, 'menu', { rank: 10_010 });
const removeClasses = () => {
@ -210,13 +206,13 @@ const kernelStatus: JupyterFrontEndPlugin<void> = {
};
/**
* The default paths for a JupyterLab Classic app.
* The default paths for a RetroLab app.
*/
const paths: JupyterFrontEndPlugin<JupyterFrontEnd.IPaths> = {
id: '@jupyterlab-classic/application-extension:paths',
id: '@retrolab/application-extension:paths',
activate: (app: JupyterFrontEnd): JupyterFrontEnd.IPaths => {
if (!(app instanceof App)) {
throw new Error(`${paths.id} must be activated in JupyterLab Classic.`);
throw new Error(`${paths.id} must be activated in RetroLab.`);
}
return app.paths;
},
@ -225,18 +221,18 @@ const paths: JupyterFrontEndPlugin<JupyterFrontEnd.IPaths> = {
};
/**
* The default JupyterLab Classic application shell.
* The default RetroLab application shell.
*/
const shell: JupyterFrontEndPlugin<IClassicShell> = {
id: '@jupyterlab-classic/application-extension:shell',
const shell: JupyterFrontEndPlugin<IRetroShell> = {
id: '@retrolab/application-extension:shell',
activate: (app: JupyterFrontEnd) => {
if (!(app.shell instanceof ClassicShell)) {
throw new Error(`${shell.id} did not find a ClassicShell instance.`);
if (!(app.shell instanceof RetroShell)) {
throw new Error(`${shell.id} did not find a RetroShell instance.`);
}
return app.shell;
},
autoStart: true,
provides: IClassicShell
provides: IRetroShell
};
/**

@ -4,7 +4,7 @@
| Distributed under the terms of the Modified BSD License.
|----------------------------------------------------------------------------*/
.jp-ClassicKernelLogo {
.jp-RetroKernelLogo {
flex: 0 0 auto;
display: flex;
align-items: center;
@ -12,13 +12,13 @@
margin-right: 8px;
}
.jp-ClassicKernelLogo img {
.jp-RetroKernelLogo img {
max-width: 28px;
max-height: 28px;
display: flex;
}
.jp-ClassicKernelStatus {
.jp-RetroKernelStatus {
font-size: var(--jp-ui-font-size1);
margin: 0;
font-weight: normal;
@ -29,19 +29,19 @@
padding-right: 5px;
}
.jp-ClassicKernelStatus-error {
.jp-RetroKernelStatus-error {
background-color: var(--jp-error-color0);
}
.jp-ClassicKernelStatus-warn {
.jp-RetroKernelStatus-warn {
background-color: var(--jp-warn-color0);
}
.jp-ClassicKernelStatus-info {
.jp-RetroKernelStatus-info {
background-color: var(--jp-info-color0);
}
.jp-ClassicKernelStatus-fade {
.jp-RetroKernelStatus-fade {
animation: 0.5s fade-out forwards;
}
@ -71,7 +71,7 @@
background: var(--jp-layout-color2);
}
.jp-ClassicCheckpoint {
.jp-RetroCheckpoint {
font-size: 14px;
margin-left: 5px;
margin-right: 5px;
@ -86,7 +86,7 @@
/* Mobile View */
body[data-format='mobile'] .jp-ClassicCheckpoint {
body[data-format='mobile'] .jp-RetroCheckpoint {
display: none;
}

@ -1,14 +1,14 @@
{
"name": "@jupyterlab-classic/terminal-extension",
"name": "@retrolab/terminal-extension",
"version": "0.1.10",
"description": "JupyterLab Classic - Terminal Extension",
"homepage": "https://github.com/jtpio/jupyterlab-classic",
"description": "RetroLab - Terminal Extension",
"homepage": "https://github.com/jtpio/retrolab",
"bugs": {
"url": "https://github.com/jtpio/jupyterlab-classic/issues"
"url": "https://github.com/jtpio/retrolab/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/jtpio/jupyterlab-classic.git"
"url": "https://github.com/jtpio/retrolab.git"
},
"license": "BSD-3-Clause",
"author": "Project Jupyter",

@ -17,7 +17,7 @@ import { find } from '@lumino/algorithm';
* A plugin to open terminals in a new tab
*/
const opener: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/terminal-extension:opener',
id: '@retrolab/terminal-extension:opener',
requires: [IRouter],
autoStart: true,
activate: (app: JupyterFrontEnd, router: IRouter) => {
@ -49,7 +49,7 @@ const opener: JupyterFrontEndPlugin<void> = {
* Open terminals in a new tab.
*/
const redirect: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/terminal-extension:redirect',
id: '@retrolab/terminal-extension:redirect',
requires: [ITerminalTracker],
autoStart: true,
activate: (app: JupyterFrontEnd, tracker: ITerminalTracker) => {
@ -61,7 +61,7 @@ const redirect: JupyterFrontEndPlugin<void> = {
return;
}
const name = terminal.content.session.name;
window.open(`${baseUrl}classic/terminals/${name}`, '_blank');
window.open(`${baseUrl}retro/terminals/${name}`, '_blank');
// dispose the widget since it is not used on this page
terminal.dispose();

@ -1,14 +1,14 @@
{
"name": "@jupyterlab-classic/tree-extension",
"name": "@retrolab/tree-extension",
"version": "0.1.10",
"description": "JupyterLab Classic - Tree Extension",
"homepage": "https://github.com/jtpio/jupyterlab-classic",
"description": "RetroLab - Tree Extension",
"homepage": "https://github.com/jtpio/retrolab",
"bugs": {
"url": "https://github.com/jtpio/jupyterlab-classic/issues"
"url": "https://github.com/jtpio/retrolab/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/jtpio/jupyterlab-classic.git"
"url": "https://github.com/jtpio/retrolab.git"
},
"license": "BSD-3-Clause",
"author": "Project Jupyter",
@ -39,7 +39,7 @@
"watch": "tsc -b --watch"
},
"dependencies": {
"@jupyterlab-classic/application": "^0.1.10",
"@retrolab/application": "^0.1.10",
"@jupyterlab/application": "^3.0.0",
"@jupyterlab/apputils": "^3.0.0",
"@jupyterlab/coreutils": "^5.0.0",

@ -125,7 +125,7 @@ namespace CommandIDs {
* new notebooks, files and terminals.
*/
const newFiles: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/tree-extension:buttons',
id: '@retrolab/tree-extension:buttons',
requires: [IFileBrowserFactory],
autoStart: true,
activate: (app: JupyterFrontEnd, filebrowser: IFileBrowserFactory) => {
@ -161,7 +161,7 @@ const newFiles: JupyterFrontEndPlugin<void> = {
* Plugin to add a "New Terminal" button to the file browser toolbar.
*/
const newTerminal: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/tree-extension:new-terminal',
id: '@retrolab/tree-extension:new-terminal',
requires: [IFileBrowserFactory],
autoStart: true,
activate: (app: JupyterFrontEnd, filebrowser: IFileBrowserFactory) => {
@ -191,7 +191,7 @@ const newTerminal: JupyterFrontEndPlugin<void> = {
*/
const browser: JupyterFrontEndPlugin<void> = {
activate: activateBrowser,
id: '@jupyterlab-classic/tree-extension:browser',
id: '@retrolab/tree-extension:browser',
requires: [
IFileBrowserFactory,
IDocumentManager,
@ -215,7 +215,7 @@ const browser: JupyterFrontEndPlugin<void> = {
*/
const factory: JupyterFrontEndPlugin<IFileBrowserFactory> = {
activate: activateFactory,
id: '@jupyterlab-classic/tree-extension:factory',
id: '@retrolab/tree-extension:factory',
provides: IFileBrowserFactory,
requires: [IDocumentManager, ITranslator],
optional: [IStateDB, IRouter, JupyterFrontEnd.ITreeResolver]

@ -15,7 +15,7 @@
.jp-TreePanel .lm-TabBar-tab {
color: var(--jp-ui-font-color0);
font-size: var(--jp-ui-font-size1);
padding: 8px;
padding: 6px;
}
.jp-TreePanel .lm-TabBar-tabLabel {

@ -1,14 +1,14 @@
{
"name": "@jupyterlab-classic/ui-components",
"name": "@retrolab/ui-components",
"version": "0.1.10",
"description": "JupyterLab Classic - UI components",
"homepage": "https://github.com/jtpio/jupyterlab-classic",
"description": "RetroLab - UI components",
"homepage": "https://github.com/jtpio/retrolab",
"bugs": {
"url": "https://github.com/jtpio/jupyterlab-classic/issues"
"url": "https://github.com/jtpio/retrolab/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/jtpio/jupyterlab-classic.git"
"url": "https://github.com/jtpio/retrolab.git"
},
"license": "BSD-3-Clause",
"author": "Project Jupyter",

@ -7,14 +7,14 @@ import { LabIcon } from '@jupyterlab/ui-components';
import jupyterSvgstr from '../../style/icons/jupyter.svg';
import jupyterlabClassicSvgstr from '../../style/icons/jupyterlab-classic.svg';
import retroSvgstr from '../../style/icons/retrolab.svg';
export const jupyterIcon = new LabIcon({
name: 'classic-ui-components:jupyter',
name: 'retro-ui-components:jupyter',
svgstr: jupyterSvgstr
});
export const jupyterlabClassicIcon = new LabIcon({
name: 'classic-ui-components:jupyterlab-classic',
svgstr: jupyterlabClassicSvgstr
export const retroIcon = new LabIcon({
name: 'retro-ui-components:retrolab',
svgstr: retroSvgstr
});

@ -1,36 +0,0 @@
<svg width="256" height="128" version="1.1" viewBox="0 0 67.733 33.867" xmlns="http://www.w3.org/2000/svg">
<g class="jp-icon3" fill="#616161" transform="translate(-41.622 -49.173)">
<g transform="translate(1.8667 .93331)">
<g transform="matrix(1.1491 0 0 1.1491 -10.977 -9.7173)">
<g transform="matrix(1.0881 0 0 1.0881 1.632 .43674)" stroke-width=".26458">
<g aria-label="jupyterlab ">
<path d="m42.289 59.365q-0.127 0-0.32808-0.03175-0.20108-0.03175-0.33867-0.08467l0.127-0.80433q0.10583 0.03175 0.24342 0.05292 0.13758 0.02117 0.254 0.02117 0.508 0 0.71966-0.3175 0.22225-0.30692 0.22225-0.91016v-5.4081h0.98425v5.3975q0 1.0583-0.48683 1.5663-0.47625 0.51858-1.397 0.51858zm1.3864-8.4772q-0.26458 0-0.45508-0.16933-0.17992-0.17992-0.17992-0.47625t0.17992-0.46566q0.1905-0.17992 0.45508-0.17992 0.26458 0 0.4445 0.17992 0.1905 0.16933 0.1905 0.46566t-0.1905 0.47625q-0.17992 0.16933-0.4445 0.16933z"/>
<path d="m50.247 57.227q-0.33867 0.08467-0.89958 0.17992-0.55033 0.09525-1.2806 0.09525-0.635 0-1.0689-0.17992-0.43392-0.1905-0.6985-0.52916-0.26458-0.33866-0.381-0.79375-0.11642-0.46566-0.11642-1.0266v-3.0903h0.98425v2.8787q0 1.0054 0.3175 1.4393 0.3175 0.43392 1.0689 0.43392 0.15875 0 0.32808-0.01058 0.16933-0.01058 0.3175-0.02117 0.14817-0.02117 0.26458-0.03175 0.127-0.02117 0.17992-0.04233v-4.6461h0.98425z"/>
<path d="m55.761 54.645q0-0.96308-0.47625-1.4817-0.47625-0.51858-1.27-0.51858-0.4445 0-0.6985 0.03175-0.24342 0.03175-0.39158 0.07408v3.4713q0.17992 0.14817 0.51858 0.28575t0.74083 0.13758q0.42333 0 0.71966-0.14817 0.30692-0.15875 0.49742-0.42333 0.1905-0.27517 0.27517-0.635 0.08467-0.37042 0.08467-0.79375zm1.0266 0q0 0.62441-0.16933 1.1536-0.15875 0.52916-0.47625 0.91016t-0.78316 0.59266q-0.45508 0.21167-1.0477 0.21167-0.47625 0-0.84666-0.127-0.35983-0.127-0.53975-0.24342v2.2013h-0.98425v-7.2919q0.34925-0.08467 0.86783-0.17992 0.52916-0.10583 1.2171-0.10583 0.635 0 1.143 0.20108 0.508 0.20108 0.86783 0.5715 0.35983 0.37042 0.55033 0.91016 0.20108 0.52916 0.20108 1.1959z"/>
<path d="m57.38 58.412q0.11642 0.05292 0.29633 0.09525 0.1905 0.05292 0.37042 0.05292 0.58208 0 0.91016-0.26458 0.32808-0.254 0.59266-0.83608-0.66675-1.27-1.2488-2.6882-0.5715-1.4287-0.9525-2.8892h1.0583q0.11642 0.47625 0.27516 1.0266 0.16933 0.55033 0.37042 1.1324 0.20108 0.58208 0.43392 1.1642 0.23283 0.58208 0.48683 1.1218 0.40216-1.1112 0.6985-2.2013 0.29633-1.0901 0.56092-2.2437h1.016q-0.381 1.5557-0.84666 2.9951-0.46566 1.4287-1.0054 2.6776-0.21167 0.47625-0.4445 0.81491-0.22225 0.34925-0.49742 0.5715-0.27517 0.22225-0.62441 0.32808-0.33867 0.10583-0.77258 0.10583-0.11642 0-0.24342-0.02117-0.127-0.01058-0.254-0.04233-0.11642-0.02117-0.22225-0.05292-0.09525-0.03175-0.13758-0.05292z"/>
<path d="m64.206 51.883h2.0849v0.8255h-2.0849v2.54q0 0.41275 0.0635 0.68791 0.0635 0.26458 0.1905 0.42333 0.127 0.14817 0.3175 0.21167 0.1905 0.0635 0.4445 0.0635 0.4445 0 0.70908-0.09525 0.27517-0.10583 0.381-0.14817l0.1905 0.81491q-0.14817 0.07408-0.51858 0.17992-0.37042 0.11642-0.84666 0.11642-0.56091 0-0.93133-0.13758-0.35983-0.14817-0.58208-0.43392-0.22225-0.28575-0.3175-0.6985-0.08467-0.42333-0.08467-0.97366v-4.9107l0.98425-0.16933z"/>
<path d="m67.127 54.645q0-0.73025 0.21167-1.27 0.21167-0.55033 0.56092-0.91016t0.80433-0.53975 0.93133-0.17992q1.1112 0 1.7039 0.6985 0.59266 0.68792 0.59266 2.1061 0 0.0635 0 0.16933 0 0.09525-0.01058 0.17992h-3.7677q0.0635 0.85725 0.49742 1.3017 0.43392 0.4445 1.3547 0.4445 0.51858 0 0.86783-0.08467 0.35983-0.09525 0.53975-0.17992l0.13758 0.8255q-0.17992 0.09525-0.635 0.20108-0.4445 0.10583-1.016 0.10583-0.71966 0-1.2488-0.21167-0.51858-0.22225-0.85725-0.60325-0.33866-0.381-0.508-0.89958-0.15875-0.52916-0.15875-1.1536zm3.7782-0.53975q0.01058-0.66675-0.33866-1.0901-0.33867-0.43392-0.94191-0.43392-0.33867 0-0.60325 0.13758-0.254 0.127-0.43392 0.33867t-0.28575 0.48683q-0.09525 0.27517-0.127 0.56092z"/>
<path d="m75.382 51.766q0.127 0 0.28575 0.02117 0.16933 0.01058 0.32808 0.04233 0.15875 0.02117 0.28575 0.05292 0.13758 0.02117 0.20108 0.04233l-0.16933 0.85725q-0.11642-0.04233-0.39158-0.09525-0.26458-0.0635-0.68792-0.0635-0.27516 0-0.55033 0.0635-0.26458 0.05292-0.34925 0.07408v4.6249h-0.98425v-5.2705q0.34925-0.127 0.86783-0.23283 0.51858-0.11642 1.1642-0.11642z"/>
<path d="m79.087 57.492q-0.91016-0.021166-1.2912-0.39158-0.381-0.37042-0.381-1.1536v-6.604l0.98425-0.16933v6.6146q0 0.24342 0.04233 0.40216 0.04233 0.15875 0.13758 0.254 0.09525 0.09525 0.254 0.14817 0.15875 0.04233 0.39158 0.07408z"/>
<path d="m82.187 56.677q0.34925 0 0.61383-0.01058 0.27517-0.02117 0.45508-0.0635v-1.6404q-0.10583-0.05292-0.34925-0.08467-0.23283-0.04233-0.5715-0.04233-0.22225 0-0.47625 0.03175-0.24342 0.03175-0.45508 0.13758-0.20108 0.09525-0.33866 0.27517-0.13758 0.16933-0.13758 0.45508 0 0.52916 0.33866 0.74083 0.33867 0.20108 0.92075 0.20108zm-0.084666-4.9318q0.59266 0 0.99483 0.15875 0.41275 0.14817 0.65616 0.43392 0.254 0.27517 0.35983 0.66675 0.10583 0.381 0.10583 0.84666v3.4396q-0.127 0.02117-0.35983 0.0635-0.22225 0.03175-0.508 0.0635-0.28575 0.03175-0.62441 0.05292-0.32808 0.03175-0.65616 0.03175-0.46566 0-0.85725-0.09525t-0.67733-0.29633q-0.28575-0.21167-0.4445-0.55033-0.15875-0.33867-0.15875-0.81491 0-0.45508 0.17992-0.78316 0.1905-0.32808 0.508-0.52916 0.3175-0.20108 0.74083-0.29633t0.889-0.09525q0.14817 0 0.30692 0.02117 0.15875 0.01058 0.29633 0.04233 0.14817 0.02117 0.254 0.04233 0.10583 0.02117 0.14817 0.03175v-0.27516q0-0.24342-0.05292-0.47625-0.05292-0.24342-0.1905-0.42333-0.13758-0.1905-0.381-0.29633-0.23283-0.11642-0.61383-0.11642-0.48683 0-0.85725 0.07408-0.35983 0.0635-0.53975 0.13758l-0.11642-0.81492q0.1905-0.08467 0.635-0.15875 0.4445-0.08467 0.96308-0.08467z"/>
<path d="m86.834 52.126q0.17992-0.11642 0.53975-0.24342 0.37042-0.127 0.84666-0.127 0.59266 0 1.0477 0.21167 0.46566 0.21167 0.78316 0.59266 0.3175 0.381 0.47625 0.91016 0.16933 0.52916 0.16933 1.1642 0 0.66675-0.20108 1.2065-0.1905 0.52916-0.55033 0.89958-0.35983 0.37042-0.86783 0.5715-0.508 0.20108-1.143 0.20108-0.68792 0-1.2171-0.09525t-0.86783-0.1905v-7.8846l0.98425-0.16933zm0 4.4027q0.14817 0.04233 0.41275 0.08467 0.27517 0.03175 0.67733 0.03175 0.79375 0 1.27-0.51858 0.47625-0.52916 0.47625-1.4922 0-0.42333-0.08467-0.79375-0.08467-0.37042-0.27517-0.635-0.1905-0.27517-0.49742-0.42333-0.29633-0.15875-0.71966-0.15875-0.40216 0-0.74083 0.13758-0.33866 0.13758-0.51858 0.28575z"/>
</g>
<g fill="#f37626" aria-label="classic">
<path d="m64.99 69.411q-0.21167 0.13758-0.65616 0.26458-0.43392 0.127-0.97366 0.127-0.96308 0-1.4499-0.55033-0.48683-0.55033-0.48683-1.5134 0-0.71966 0.22225-1.3758 0.22225-0.66675 0.64558-1.1747 0.43392-0.508 1.0583-0.80433 0.62441-0.30692 1.4182-0.30692 0.55033 0 1.0901 0.17992l-0.28575 0.62442q-0.24342-0.09525-0.48683-0.127-0.23283-0.04233-0.45508-0.04233-0.56092 0-1.0266 0.24342-0.45508 0.23283-0.78316 0.64558-0.32808 0.40217-0.508 0.94191-0.17992 0.52916-0.17992 1.1218 0 0.6985 0.3175 1.1007 0.32808 0.40216 1.0372 0.40216 0.22225 0 0.4445-0.04233 0.23283-0.04233 0.42333-0.09525 0.1905-0.0635 0.33867-0.127t0.22225-0.11642z"/>
<path d="m67.858 61.59 0.70908-0.127-1.3123 5.5139q-0.08467 0.35983-0.16933 0.68792-0.07408 0.3175-0.07408 0.59266 0 0.16933 0.03175 0.3175 0.03175 0.13758 0.127 0.254 0.09525 0.10583 0.26458 0.1905 0.17992 0.08467 0.45508 0.14817l-0.15875 0.60325q-0.77258-0.09525-1.0795-0.46567-0.30692-0.381-0.30692-0.9525 0-0.254 0.04233-0.52916 0.04233-0.28575 0.11642-0.59266z"/>
<path d="m73.033 64.797q-0.1905-0.04233-0.34925-0.0635-0.15875-0.02117-0.32808-0.02117-0.65616 0-1.1642 0.254-0.508 0.254-0.85725 0.66675-0.34925 0.41275-0.53975 0.94191-0.17992 0.52916-0.17992 1.0795 0 0.43392 0.08467 0.73025 0.08467 0.28575 0.23283 0.46566 0.14817 0.16933 0.33867 0.254 0.20108 0.07408 0.42333 0.07408 0.43392 0 0.81491-0.20108 0.381-0.21167 0.71966-0.59266 0-0.28575 0.08467-0.65616 0.08467-0.37042 0.15875-0.66675zm-0.61383 4.9424q-0.0635-0.127-0.11642-0.28575-0.04233-0.16933-0.0635-0.33867-0.37042 0.35983-0.78316 0.52916-0.40216 0.16933-0.83608 0.16933-0.33866 0-0.64558-0.11642-0.30692-0.11642-0.53975-0.35983t-0.381-0.62441q-0.13758-0.39158-0.13758-0.92075 0-0.84666 0.27517-1.5346 0.27517-0.68791 0.762-1.1642 0.49742-0.48683 1.1642-0.75141 0.67733-0.26458 1.4711-0.26458 0.65616 0 1.2594 0.22225l-0.81491 3.2914q-0.0635 0.26458-0.10583 0.49742-0.04233 0.23283-0.04233 0.4445 0 0.28575 0.05292 0.53975t0.1905 0.56092z"/>
<path d="m74.208 68.808q0.39158 0.21167 0.68791 0.28575 0.29633 0.07408 0.66675 0.07408 0.26458 0 0.508-0.05292 0.24342-0.0635 0.42333-0.17992 0.17992-0.11642 0.28575-0.30692 0.10583-0.1905 0.10583-0.4445 0-0.27517-0.15875-0.45508-0.14817-0.17992-0.381-0.30692-0.22225-0.13758-0.48683-0.26458-0.26458-0.127-0.49742-0.29633-0.22225-0.16933-0.381-0.42333-0.14817-0.254-0.14817-0.65616 0-0.45508 0.16933-0.77258 0.16933-0.32808 0.45508-0.52916 0.28575-0.21167 0.65616-0.30692 0.37042-0.09525 0.762-0.09525 0.33867 0 0.66675 0.0635 0.33867 0.05292 0.64558 0.16933l-0.27516 0.61383q-0.22225-0.09525-0.508-0.14817-0.28575-0.0635-0.59266-0.0635-0.254 0-0.49742 0.05292-0.23283 0.05292-0.41275 0.17992-0.17992 0.11642-0.29633 0.30692-0.10583 0.17992-0.10583 0.4445 0 0.27517 0.14817 0.45508 0.15875 0.17992 0.381 0.3175 0.22225 0.13758 0.48683 0.26458 0.27517 0.11642 0.49742 0.28575 0.22225 0.16933 0.37042 0.41275 0.15875 0.23283 0.15875 0.60325 0 0.46567-0.17992 0.80433-0.16933 0.33867-0.45508 0.55033t-0.65616 0.30692q-0.37042 0.10583-0.762 0.10583-0.41275 0-0.8255-0.09525-0.41275-0.08467-0.75142-0.27517z"/>
<path d="m78.441 68.808q0.39158 0.21167 0.68792 0.28575 0.29633 0.07408 0.66675 0.07408 0.26458 0 0.508-0.05292 0.24342-0.0635 0.42333-0.17992t0.28575-0.30692q0.10583-0.1905 0.10583-0.4445 0-0.27517-0.15875-0.45508-0.14817-0.17992-0.381-0.30692-0.22225-0.13758-0.48683-0.26458-0.26458-0.127-0.49742-0.29633-0.22225-0.16933-0.381-0.42333-0.14817-0.254-0.14817-0.65616 0-0.45508 0.16933-0.77258 0.16933-0.32808 0.45508-0.52916 0.28575-0.21167 0.65616-0.30692 0.37042-0.09525 0.762-0.09525 0.33866 0 0.66675 0.0635 0.33866 0.05292 0.64558 0.16933l-0.27517 0.61383q-0.22225-0.09525-0.508-0.14817-0.28575-0.0635-0.59266-0.0635-0.254 0-0.49742 0.05292-0.23283 0.05292-0.41275 0.17992-0.17992 0.11642-0.29633 0.30692-0.10583 0.17992-0.10583 0.4445 0 0.27517 0.14817 0.45508 0.15875 0.17992 0.381 0.3175 0.22225 0.13758 0.48683 0.26458 0.27517 0.11642 0.49742 0.28575 0.22225 0.16933 0.37042 0.41275 0.15875 0.23283 0.15875 0.60325 0 0.46567-0.17992 0.80433-0.16933 0.33867-0.45508 0.55033-0.28575 0.21167-0.65616 0.30692-0.37042 0.10583-0.762 0.10583-0.41275 0-0.8255-0.09525-0.41275-0.08467-0.75141-0.27517z"/>
<path d="m84.071 64.204h0.68792l-1.3229 5.4716h-0.68791zm0.27517-1.5981q0-0.27517 0.14817-0.41275 0.15875-0.14817 0.33867-0.14817 0.21167 0 0.32808 0.13758 0.11642 0.127 0.11642 0.33866 0 0.254-0.16933 0.39158-0.16933 0.13758-0.33867 0.13758-0.21167 0-0.3175-0.11642-0.10583-0.127-0.10583-0.32808z"/>
<path d="m88.961 69.411q-0.21167 0.13758-0.65616 0.26458-0.43392 0.127-0.97366 0.127-0.96308 0-1.4499-0.55033-0.48683-0.55033-0.48683-1.5134 0-0.71966 0.22225-1.3758 0.22225-0.66675 0.64558-1.1747 0.43392-0.508 1.0583-0.80433 0.62442-0.30692 1.4182-0.30692 0.55033 0 1.0901 0.17992l-0.28575 0.62442q-0.24342-0.09525-0.48683-0.127-0.23283-0.04233-0.45508-0.04233-0.56092 0-1.0266 0.24342-0.45508 0.23283-0.78316 0.64558-0.32808 0.40217-0.508 0.94191-0.17992 0.52916-0.17992 1.1218 0 0.6985 0.3175 1.1007 0.32808 0.40216 1.0372 0.40216 0.22225 0 0.4445-0.04233 0.23283-0.04233 0.42333-0.09525 0.1905-0.0635 0.33866-0.127 0.14817-0.0635 0.22225-0.11642z"/>
</g>
</g>
</g>
<g transform="matrix(-.49337 -.22472 .22472 -.49337 399.35 1484.6)" fill="#9e9e9e" style="mix-blend-mode:normal">
<g fill="#9e9e9e" style="mix-blend-mode:normal">
<path d="m1658 2103.4c7.8502 0 14.706 2.8765 18.265 7.1341-1.3254-3.8204-3.7956-7.1308-7.0686-9.473-3.2731-2.3422-7.1871-3.6004-11.2-3.6004s-7.9273 1.2582-11.2 3.6004c-3.273 2.3422-5.7432 5.6526-7.0686 9.473 3.5674-4.2488 10.423-7.1341 18.273-7.1341z" fill="#9e9e9e" style="mix-blend-mode:normal"/>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

@ -0,0 +1,69 @@
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="127.99995"
height="20.667049"
version="1.1"
viewBox="0 0 33.866486 5.4682107"
id="svg54"
sodipodi:docname="retrolab.svg"
inkscape:version="1.0.2 (1.0.2+r75+1)"
inkscape:export-filename="/home/jtp/git/jtpio/retrolab/retrolab.png"
inkscape:export-xdpi="595.31201"
inkscape:export-ydpi="595.31201">
<metadata
id="metadata60">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs58" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2048"
inkscape:window-height="1128"
id="namedview56"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="5.1367188"
inkscape:cx="79.912993"
inkscape:cy="44.490967"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg54"
inkscape:document-rotation="0" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.96428px;line-height:1.25;font-family:'3270 Condensed';-inkscape-font-specification:'3270 Condensed, ';letter-spacing:0px;word-spacing:0px;fill:#7f006d;fill-opacity:1;stroke-width:0.224108"
x="-0.53815222"
y="5.9074607"
id="text887"><tspan
sodipodi:role="line"
id="tspan885"
x="-0.53815222"
y="5.9074607"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'3270 Condensed';-inkscape-font-specification:'3270 Condensed, ';fill:#7f006d;fill-opacity:1;stroke-width:0.224108">RetroLab</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

@ -1,22 +1,22 @@
from ._version import __version__
from .app import ClassicApp
from .app import RetroApp
from .serverextension import load_jupyter_server_extension
def _jupyter_server_extension_paths():
return [
{
'module': 'jupyterlab_classic'
'module': 'retrolab'
}
]
def _jupyter_server_extension_points():
return [{"module": "jupyterlab_classic", "app": ClassicApp}]
return [{"module": "retrolab", "app": RetroApp}]
def _jupyter_labextension_paths():
return [{
'src': 'labextension',
'dest': '@jupyterlab-classic/lab-extension'
'dest': '@retrolab/lab-extension'
}]

@ -0,0 +1,5 @@
import sys
from retrolab.app import main
sys.exit(main())

@ -22,7 +22,7 @@ app_dir = get_app_dir()
version = __version__
class ClassicHandler(ExtensionHandlerJinjaMixin, ExtensionHandlerMixin, JupyterHandler):
class RetroHandler(ExtensionHandlerJinjaMixin, ExtensionHandlerMixin, JupyterHandler):
def get_page_config(self):
config = LabConfig()
app = self.extensionapp
@ -34,7 +34,7 @@ class ClassicHandler(ExtensionHandlerJinjaMixin, ExtensionHandlerMixin, JupyterH
"terminalsAvailable": self.settings.get('terminals_available', False),
"token": self.settings["token"],
"fullStaticUrl": ujoin(self.base_url, "static", self.name),
"frontendUrl": ujoin(self.base_url, "classic/"),
"frontendUrl": ujoin(self.base_url, "retro/"),
}
mathjax_config = self.settings.get("mathjax_config", "TeX-AMS_HTML-full,Safe")
@ -72,42 +72,42 @@ class ClassicHandler(ExtensionHandlerJinjaMixin, ExtensionHandlerMixin, JupyterH
return page_config
class ClassicTreeHandler(ClassicHandler):
class RetroTreeHandler(RetroHandler):
@web.authenticated
def get(self, path=None):
tpl = self.render_template("tree.html", page_config=self.get_page_config())
return self.write(tpl)
class ClassicTerminalHandler(ClassicHandler):
class RetroTerminalHandler(RetroHandler):
@web.authenticated
def get(self, path=None):
tpl = self.render_template("terminals.html", page_config=self.get_page_config())
return self.write(tpl)
class ClassicFileHandler(ClassicHandler):
class RetroFileHandler(RetroHandler):
@web.authenticated
def get(self, path=None):
tpl = self.render_template("edit.html", page_config=self.get_page_config())
return self.write(tpl)
class ClassicNotebookHandler(ClassicHandler):
class RetroNotebookHandler(RetroHandler):
@web.authenticated
def get(self, path=None):
tpl = self.render_template("notebooks.html", page_config=self.get_page_config())
return self.write(tpl)
class ClassicApp(NBClassicConfigShimMixin, LabServerApp):
name = "classic"
app_name = "JupyterLab Classic"
description = "JupyterLab Classic - A JupyterLab Distribution with the Classic Notebook look and feel"
class RetroApp(NBClassicConfigShimMixin, LabServerApp):
name = "retro"
app_name = "RetroLab"
description = "RetroLab - A JupyterLab Distribution with a retro look and feel"
app_version = version
extension_url = "/classic"
default_url = "/classic/tree"
file_url_prefix = "/classic/notebooks"
extension_url = "/retro"
default_url = "/retro/tree"
file_url_prefix = "/retro/notebooks"
load_other_extensions = True
app_dir = app_dir
app_settings_dir = pjoin(app_dir, "settings")
@ -122,13 +122,13 @@ class ClassicApp(NBClassicConfigShimMixin, LabServerApp):
(
rf"/{self.file_url_prefix}/((?!.*\.ipynb($|\?)).*)",
web.RedirectHandler,
{"url": "/classic/edit/{0}"}
{"url": "/retro/edit/{0}"}
)
)
self.handlers.append(("/classic/tree(.*)", ClassicTreeHandler))
self.handlers.append(("/classic/notebooks(.*)", ClassicNotebookHandler))
self.handlers.append(("/classic/edit(.*)", ClassicFileHandler))
self.handlers.append(("/classic/terminals/(.*)", ClassicTerminalHandler))
self.handlers.append(("/retro/tree(.*)", RetroTreeHandler))
self.handlers.append(("/retro/notebooks(.*)", RetroNotebookHandler))
self.handlers.append(("/retro/edit(.*)", RetroFileHandler))
self.handlers.append(("/retro/terminals/(.*)", RetroTerminalHandler))
super().initialize_handlers()
def initialize_templates(self):
@ -146,7 +146,7 @@ class ClassicApp(NBClassicConfigShimMixin, LabServerApp):
super().initialize()
main = launch_new_instance = ClassicApp.launch_instance
main = launch_new_instance = RetroApp.launch_instance
if __name__ == "__main__":
main()

@ -1,8 +1,8 @@
from .app import ClassicApp
from .app import RetroApp
def load_jupyter_server_extension(serverapp):
extension = ClassicApp()
extension = RetroApp()
extension.serverapp = serverapp
extension.load_config_file()
extension.update_config(serverapp.config)

@ -17,7 +17,7 @@
{% set _ = page_config_full.update(baseUrl=base_url, wsUrl=ws_url) %}
{# Sentinel value to say that we are on the tree page #}
{% set _ = page_config_full.update(classicPage='edit') %}
{% set _ = page_config_full.update(retroPage='edit') %}
<script id="jupyter-config-data" type="application/json">
{{ page_config_full | tojson }}

@ -17,7 +17,7 @@
{% set _ = page_config_full.update(baseUrl=base_url, wsUrl=ws_url) %}
{# Sentinel value to say that we are on the tree page #}
{% set _ = page_config_full.update(classicPage='notebooks') %}
{% set _ = page_config_full.update(retroPage='notebooks') %}
<script id="jupyter-config-data" type="application/json">
{{ page_config_full | tojson }}

@ -17,7 +17,7 @@
{% set _ = page_config_full.update(baseUrl=base_url, wsUrl=ws_url) %}
{# Sentinel value to say that we are on the tree page #}
{% set _ = page_config_full.update(classicPage='terminals') %}
{% set _ = page_config_full.update(retroPage='terminals') %}
<script id="jupyter-config-data" type="application/json">
{{ page_config_full | tojson }}

@ -14,7 +14,7 @@
{% set _ = page_config_full.update(baseUrl=base_url, wsUrl=ws_url) %}
{# Sentinel value to say that we are on the tree page #}
{% set _ = page_config_full.update(classicPage='tree') %}
{% set _ = page_config_full.update(retroPage='tree') %}
<script id="jupyter-config-data" type="application/json">
{{ page_config_full | tojson }}

@ -1,5 +1,5 @@
"""
jupyterlab-classic setup
retrolab setup
"""
import os
@ -16,7 +16,7 @@ import setuptools
HERE = os.path.abspath(os.path.dirname(__file__))
# The name of the project
NAME = "jupyterlab-classic"
NAME = "retrolab"
PACKAGE_NAME = NAME.replace("-", "_")
# Get our version
@ -25,7 +25,7 @@ version = get_version(os.path.join(PACKAGE_NAME, "_version.py"))
main_bundle_dest = os.path.join(HERE, PACKAGE_NAME, "static")
main_bundle_source = os.path.join(HERE, "app")
labext_name = "@jupyterlab-classic/lab-extension"
labext_name = "@retrolab/lab-extension"
lab_extension_dest = os.path.join(HERE, PACKAGE_NAME, "labextension")
lab_extension_source = os.path.join(HERE, "packages", "lab-extension")
@ -43,12 +43,12 @@ data_files_spec = [
(
"etc/jupyter/jupyter_server_config.d",
"jupyter-config/jupyter_server_config.d",
"jupyterlab_classic.json",
"retrolab.json",
),
(
"etc/jupyter/jupyter_notebook_config.d",
"jupyter-config/jupyter_notebook_config.d",
"jupyterlab_classic.json",
"retrolab.json",
),
]
@ -76,9 +76,9 @@ with open("README.md", "r", encoding="utf-8") as fh:
setup_args = dict(
name=NAME,
version=version,
url="https://github.com/jtpio/jupyterlab-classic",
author="JupyterLab Classic Contributors",
description="The next gen old-school Notebook UI",
url="https://github.com/jtpio/retrolab",
author="RetroLab Contributors",
description="JupyterLab Distribution with a retro look and feel",
long_description=long_description,
long_description_content_type="text/markdown",
cmdclass=cmdclass,
@ -106,7 +106,7 @@ setup_args = dict(
"Programming Language :: Python :: 3.9",
"Framework :: Jupyter",
],
entry_points={"console_scripts": ["jupyter-classic = jupyterlab_classic.app:main"]},
entry_points={"console_scripts": ["jupyter-retro = retrolab.app:main"]},
)

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save