Compare commits
230 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
472ee5d01b | 3 weeks ago |
|
|
42ccc58dca | 3 weeks ago |
|
|
e54ce8ef6d | 4 weeks ago |
|
|
9836de423c | 1 month ago |
|
|
e7f5e5d50e | 1 month ago |
|
|
f0e7469483 | 1 month ago |
|
|
09f0f85e63 | 1 month ago |
|
|
fccf56801b | 1 month ago |
|
|
22183446df | 1 month ago |
|
|
1003f68930 | 1 month ago |
|
|
a5c9c9399d | 1 month ago |
|
|
18411e8532 | 1 month ago |
|
|
5bb41ae47c | 1 month ago |
|
|
b45653f564 | 2 months ago |
|
|
be53ec8bc9 | 2 months ago |
|
|
7362e529a8 | 2 months ago |
|
|
1f8c7cd491 | 2 months ago |
|
|
9c6ee5d5f9 | 2 months ago |
|
|
6923a84908 | 2 months ago |
|
|
7533ccab5e | 2 months ago |
|
|
04bd4bc6f6 | 2 months ago |
|
|
05dad4f597 | 2 months ago |
|
|
165e3cdf76 | 2 months ago |
|
|
7a960ab236 | 3 months ago |
|
|
18ba796a58 | 3 months ago |
|
|
fd9c4b4427 | 3 months ago |
|
|
7f84b95ed6 | 3 months ago |
|
|
0201906757 | 3 months ago |
|
|
37ad3c4723 | 3 months ago |
|
|
79ad725908 | 4 months ago |
|
|
828708ec26 | 4 months ago |
|
|
2e88202c8f | 4 months ago |
|
|
efdef40919 | 4 months ago |
|
|
254b06ca4b | 4 months ago |
|
|
0af6834093 | 4 months ago |
|
|
c0d3e8b4d6 | 4 months ago |
|
|
9c5a275376 | 4 months ago |
|
|
357229deac | 5 months ago |
|
|
346e30dec4 | 5 months ago |
|
|
a8a8111d59 | 5 months ago |
|
|
5a845dcde0 | 5 months ago |
|
|
0e4fdd1941 | 5 months ago |
|
|
3100d879bf | 5 months ago |
|
|
629e63445e | 5 months ago |
|
|
8f91eddf56 | 5 months ago |
|
|
f56a27c17b | 5 months ago |
|
|
6caeba2b22 | 6 months ago |
|
|
a82eeba22b | 6 months ago |
|
|
b99d42fd77 | 7 months ago |
|
|
df09eaeb16 | 7 months ago |
|
|
026fde1b38 | 7 months ago |
|
|
71532b9313 | 8 months ago |
|
|
329d55279b | 8 months ago |
|
|
22016bb249 | 8 months ago |
|
|
b1a5f61a24 | 8 months ago |
|
|
1d9dbd31f8 | 9 months ago |
|
|
22e29fc419 | 9 months ago |
|
|
b6dc5a2af2 | 9 months ago |
|
|
0c45402e1a | 9 months ago |
|
|
633fec9a5d | 9 months ago |
|
|
ea978c685a | 9 months ago |
|
|
40e1bbe464 | 9 months ago |
|
|
2616caa858 | 9 months ago |
|
|
f0bdc4756d | 10 months ago |
|
|
fbfe36574e | 10 months ago |
|
|
3edc44b62a | 10 months ago |
|
|
2077c92956 | 10 months ago |
|
|
7fa19999c9 | 10 months ago |
|
|
6853096044 | 10 months ago |
|
|
903fef574e | 10 months ago |
|
|
434221c0fe | 10 months ago |
|
|
40891bd424 | 10 months ago |
|
|
ab63d5cd8d | 10 months ago |
|
|
be2fd12f91 | 10 months ago |
|
|
326991fee9 | 10 months ago |
|
|
59b9411869 | 10 months ago |
|
|
9678c1831a | 10 months ago |
|
|
6d06d97302 | 10 months ago |
|
|
6319ce6c3a | 10 months ago |
|
|
bf1530f1b6 | 10 months ago |
|
|
82a81c502c | 11 months ago |
|
|
7dbd40a5ee | 11 months ago |
|
|
fcbe87b876 | 11 months ago |
|
|
48243197bb | 11 months ago |
|
|
2c66ed390e | 12 months ago |
|
|
48e52c759f | 12 months ago |
|
|
3c4b8b59ba | 12 months ago |
|
|
aad43d52f9 | 12 months ago |
|
|
0442b49351 | 12 months ago |
|
|
ef4f6346cd | 12 months ago |
|
|
3e125b1197 | 12 months ago |
|
|
8b3b5b3ce7 | 1 year ago |
|
|
1f0ab8365b | 1 year ago |
|
|
18672b7e85 | 1 year ago |
|
|
e1cd13abfe | 1 year ago |
|
|
99af31ec21 | 1 year ago |
|
|
4680e1a675 | 1 year ago |
|
|
0bd4bae0b4 | 1 year ago |
|
|
9d6f6a2042 | 1 year ago |
|
|
12efbe6018 | 1 year ago |
|
|
bb8aa0f44a | 1 year ago |
|
|
edfa5e2a6f | 1 year ago |
|
|
0d49b45b29 | 1 year ago |
|
|
7959ba0de5 | 1 year ago |
|
|
8760def0b6 | 1 year ago |
|
|
abd1b8c96b | 1 year ago |
|
|
f11252b4ac | 1 year ago |
|
|
2bfae71810 | 1 year ago |
|
|
c0ddf0164f | 1 year ago |
|
|
d9119b8cd5 | 1 year ago |
|
|
a97b425d65 | 1 year ago |
|
|
21d0306ece | 1 year ago |
|
|
d847b24653 | 1 year ago |
|
|
b16eed26ef | 1 year ago |
|
|
3b66049a62 | 1 year ago |
|
|
32fa1c5d89 | 1 year ago |
|
|
7724c41ff1 | 1 year ago |
|
|
b34449747a | 1 year ago |
|
|
606190117a | 1 year ago |
|
|
110e728e4a | 1 year ago |
|
|
5cac611f26 | 1 year ago |
|
|
c93015d1b6 | 1 year ago |
|
|
1249220b25 | 1 year ago |
|
|
d78c4e7719 | 1 year ago |
|
|
f614f7c638 | 1 year ago |
|
|
2a8e5797a3 | 1 year ago |
|
|
dd6db47d46 | 1 year ago |
|
|
390c4526df | 1 year ago |
|
|
676a0fec82 | 1 year ago |
|
|
faee9e4552 | 1 year ago |
|
|
fec4431305 | 1 year ago |
|
|
324de44521 | 1 year ago |
|
|
7760265de5 | 1 year ago |
|
|
59f8c306f8 | 1 year ago |
|
|
43b8cceb69 | 2 years ago |
|
|
53b3820664 | 2 years ago |
|
|
ff2b822d06 | 2 years ago |
|
|
fffe390408 | 2 years ago |
|
|
9c70c1367e | 2 years ago |
|
|
1a03b9d8e5 | 2 years ago |
|
|
b010e1d5f2 | 2 years ago |
|
|
433f18094d | 2 years ago |
|
|
eace81c87b | 2 years ago |
|
|
368080f53a | 2 years ago |
|
|
0a66f40c46 | 2 years ago |
|
|
30587b826a | 2 years ago |
|
|
31bf294e85 | 2 years ago |
|
|
08fe5c5df1 | 2 years ago |
|
|
7891117aa9 | 2 years ago |
|
|
a1e25b92bf | 2 years ago |
|
|
f5d8aea3bd | 2 years ago |
|
|
b18084867c | 2 years ago |
|
|
91dc1190b8 | 2 years ago |
|
|
094fef3104 | 2 years ago |
|
|
fdd36606d2 | 2 years ago |
|
|
49ddd0fe1e | 2 years ago |
|
|
1c3f812338 | 2 years ago |
|
|
f6a56f5608 | 2 years ago |
|
|
7becb180ea | 2 years ago |
|
|
b45d666d5e | 2 years ago |
|
|
20243fc004 | 2 years ago |
|
|
e9154289a0 | 2 years ago |
|
|
ad0e1b0d02 | 2 years ago |
|
|
09bcd99e6d | 2 years ago |
|
|
2b9d339558 | 2 years ago |
|
|
3b8e673607 | 2 years ago |
|
|
80b582bce6 | 2 years ago |
|
|
4ca5dc2003 | 2 years ago |
|
|
851a4beaae | 2 years ago |
|
|
ca41222a9c | 2 years ago |
|
|
147ce80454 | 2 years ago |
|
|
d45362b549 | 2 years ago |
|
|
2c95b1beb7 | 2 years ago |
|
|
c66e6ad66d | 2 years ago |
|
|
da7b8d400e | 2 years ago |
|
|
ca5eb17a2e | 2 years ago |
|
|
f2ee4ba2c5 | 2 years ago |
|
|
882da27432 | 2 years ago |
|
|
60cd62ec90 | 2 years ago |
|
|
55ecef9eb3 | 2 years ago |
|
|
f9bddf9690 | 2 years ago |
|
|
f6f5a1f538 | 2 years ago |
|
|
b8ec7e4a8e | 2 years ago |
|
|
9348f1f2ed | 2 years ago |
|
|
d43911b23e | 2 years ago |
|
|
e49f77ea12 | 2 years ago |
|
|
376a2f97c8 | 2 years ago |
|
|
aef8e95fc5 | 2 years ago |
|
|
5909ff9655 | 2 years ago |
|
|
2d717f5896 | 2 years ago |
|
|
1d0a402bcc | 2 years ago |
|
|
3299ee6db6 | 2 years ago |
|
|
6785346d3f | 2 years ago |
|
|
48ad63181b | 2 years ago |
|
|
e8633bd8d7 | 2 years ago |
|
|
09f018b58c | 2 years ago |
|
|
019e8c9e5b | 2 years ago |
|
|
5d265b90ed | 2 years ago |
|
|
1145745651 | 2 years ago |
|
|
b21fede639 | 2 years ago |
|
|
f826ac9d12 | 2 years ago |
|
|
6f8680cd70 | 2 years ago |
|
|
9a98743fc2 | 2 years ago |
|
|
d21c79a474 | 2 years ago |
|
|
251e0e3606 | 2 years ago |
|
|
0fbb1b252c | 2 years ago |
|
|
165b84e8ce | 2 years ago |
|
|
d67c3cb4ec | 2 years ago |
|
|
0a08ba3f96 | 2 years ago |
|
|
5ec7d5eef4 | 2 years ago |
|
|
c2ca209ab8 | 2 years ago |
|
|
728807f401 | 2 years ago |
|
|
dbb489a1d6 | 2 years ago |
|
|
360bee8dc0 | 2 years ago |
|
|
644c393580 | 2 years ago |
|
|
42fffbb725 | 2 years ago |
|
|
a74cd91871 | 2 years ago |
|
|
2a0ed48473 | 2 years ago |
|
|
4266df1eef | 2 years ago |
|
|
e2429db5fb | 2 years ago |
|
|
ef1f8db5c2 | 2 years ago |
|
|
8086d6c0cf | 2 years ago |
|
|
29d665dbac | 2 years ago |
|
|
875e4d754f | 2 years ago |
|
|
7c43de793e | 2 years ago |
|
|
2ee380b3e8 | 2 years ago |
|
|
55f5f6f11d | 2 years ago |
|
|
0cd6104b92 | 2 years ago |
|
|
53b47af37b | 2 years ago |
|
|
1ff62934df | 2 years ago |
@ -0,0 +1,13 @@
|
||||
FROM mcr.microsoft.com/devcontainers/base:jammy
|
||||
|
||||
ARG PIXI_VERSION=v0.42.1
|
||||
|
||||
RUN curl -L -o /usr/local/bin/pixi -fsSL --compressed "https://github.com/prefix-dev/pixi/releases/download/${PIXI_VERSION}/pixi-$(uname -m)-unknown-linux-musl" \
|
||||
&& chmod +x /usr/local/bin/pixi \
|
||||
&& pixi info
|
||||
|
||||
# set some user and workdir settings to work nicely with vscode
|
||||
USER vscode
|
||||
WORKDIR /home/vscode
|
||||
|
||||
RUN echo 'eval "$(pixi completion -s bash)"' >> /home/vscode/.bashrc
|
||||
@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "Jupyter Notebook",
|
||||
"build": {
|
||||
"dockerfile": "Dockerfile",
|
||||
"context": ".."
|
||||
},
|
||||
"forwardPorts": [8888],
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"settings": {},
|
||||
"extensions": ["ms-python.python", "charliermarsh.ruff", "GitHub.copilot"]
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"ghcr.io/devcontainers/features/docker-in-docker:2": {}
|
||||
},
|
||||
"mounts": [
|
||||
"source=${localWorkspaceFolderBasename}-pixi,target=${containerWorkspaceFolder}/.pixi,type=volume"
|
||||
],
|
||||
"postCreateCommand": "sudo chown vscode .pixi && pixi install && pixi run develop && pixi run pre-commit install -f"
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
# SCM syntax highlighting & preventing 3-way merges
|
||||
pixi.lock merge=binary linguist-language=YAML linguist-generated=true
|
||||
@ -0,0 +1,34 @@
|
||||
name: "Publish Changelog"
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
branch:
|
||||
description: "The branch to target"
|
||||
required: false
|
||||
|
||||
jobs:
|
||||
publish_changelog:
|
||||
runs-on: ubuntu-latest
|
||||
environment: release
|
||||
steps:
|
||||
- uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
|
||||
|
||||
- uses: actions/create-github-app-token@v2
|
||||
id: app-token
|
||||
with:
|
||||
app-id: ${{ vars.APP_ID }}
|
||||
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||
|
||||
- name: Publish changelog
|
||||
id: publish-changelog
|
||||
uses: jupyter-server/jupyter_releaser/.github/actions/publish-changelog@v2
|
||||
with:
|
||||
token: ${{ steps.app-token.outputs.token }}
|
||||
branch: ${{ github.event.inputs.branch }}
|
||||
|
||||
- name: "** Next Step **"
|
||||
run: |
|
||||
echo "Merge the changelog update PR: ${{ steps.publish-changelog.outputs.pr_url }}"
|
||||
@ -0,0 +1,128 @@
|
||||
name: Check for latest JupyterLab releases
|
||||
|
||||
on:
|
||||
# schedule:
|
||||
# - cron: 30 17 * * *
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: 'JupyterLab version'
|
||||
default: latest
|
||||
required: true
|
||||
type: string
|
||||
branch:
|
||||
description: 'The branch to target'
|
||||
default: main
|
||||
required: false
|
||||
type: string
|
||||
target_repo:
|
||||
description: 'Target repository'
|
||||
required: false
|
||||
default: jupyter/notebook
|
||||
type: string
|
||||
|
||||
env:
|
||||
version_tag: 'latest'
|
||||
|
||||
permissions:
|
||||
actions: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
check_for_lab_updates:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ inputs.branch || 'main' }}
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: '3.11'
|
||||
|
||||
- name: Install Node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '20.x'
|
||||
|
||||
- name: Install npm dependencies and build buildutils
|
||||
run: |
|
||||
python -m pip install -e ".[dev]"
|
||||
|
||||
jlpm
|
||||
jlpm run build:utils
|
||||
|
||||
- name: Check for new releases and update
|
||||
shell: bash
|
||||
run: |
|
||||
set -eux
|
||||
for version in ${{ inputs.version || env.version_tag }}
|
||||
do
|
||||
if [[ "${version}" == "latest" ]]; then
|
||||
export LATEST=$(jlpm run get:lab:version --set-version ${version})
|
||||
else
|
||||
export LATEST=${version}
|
||||
fi
|
||||
done
|
||||
|
||||
echo "latest=${LATEST}" >> $GITHUB_ENV
|
||||
jlpm upgrade:lab:dependencies --set-version ${LATEST}
|
||||
if [[ ! -z "$(git status --porcelain package.json)" ]]; then
|
||||
jlpm
|
||||
jlpm deduplicate
|
||||
|
||||
cd ui-tests
|
||||
jlpm
|
||||
jlpm deduplicate
|
||||
fi
|
||||
- uses: prefix-dev/setup-pixi@v0.9.3
|
||||
with:
|
||||
pixi-version: v0.41.4
|
||||
manifest-path: pyproject.toml
|
||||
locked: false
|
||||
|
||||
- name: Update pixi.lock
|
||||
run: pixi install
|
||||
|
||||
- name: Create a PR
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PERSONAL_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
set -eux
|
||||
|
||||
export LATEST=${{ env.latest }}
|
||||
export BRANCH_NAME=update-to-v${LATEST}
|
||||
|
||||
# if resulted in any change:
|
||||
if [[ ! -z "$(git status --porcelain package.json)" ]]; then
|
||||
# if branch already exists.
|
||||
if git ls-remote --heads origin | grep "refs/heads/${BRANCH_NAME}$" > /dev/null; then
|
||||
echo "Branch '${BRANCH_NAME}' exists."
|
||||
else
|
||||
# new branch is created
|
||||
git checkout -b "${BRANCH_NAME}"
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email 'github-actions[bot]@users.noreply.github.com'
|
||||
|
||||
git commit . -m "Update to JupyterLab v${LATEST}"
|
||||
|
||||
git push --set-upstream origin "${BRANCH_NAME}"
|
||||
|
||||
PR_ARGS=(
|
||||
--base "${{ inputs.branch || 'main' }}"
|
||||
--title "Update to JupyterLab v${LATEST}"
|
||||
--body "New JupyterLab release [v${LATEST}](https://github.com/jupyterlab/jupyterlab/releases/tag/v${LATEST}) is available. Please review the lock file carefully."
|
||||
)
|
||||
|
||||
# Add --repo flag only if target_repo is specified
|
||||
if [[ -n "${{ inputs.target_repo }}" ]]; then
|
||||
PR_ARGS+=(--repo "${{ inputs.target_repo }}")
|
||||
fi
|
||||
|
||||
gh pr create "${PR_ARGS[@]}"
|
||||
fi
|
||||
fi
|
||||
@ -1,58 +0,0 @@
|
||||
github:
|
||||
prebuilds:
|
||||
master: true
|
||||
pullRequests: true
|
||||
pullRequestsFromForks: true
|
||||
addCheck: false
|
||||
addComment: false
|
||||
addBadge: false
|
||||
addLabel: false
|
||||
tasks:
|
||||
- name: setup
|
||||
init: |
|
||||
pushd /workspace
|
||||
wget -qO- https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -xvj bin/micromamba
|
||||
popd
|
||||
# bootstrap activation commands for other tasks to reuse
|
||||
cat <<EOT > /workspace/bin/activate-env.sh
|
||||
export MAMBA_ROOT_PREFIX=/workspace/.micromamba
|
||||
export MAMBA_EXE=/workspace/bin/micromamba
|
||||
$(/workspace/bin/micromamba shell hook --shell=bash)
|
||||
export JUPYTER_PREFER_ENV_PATH=1
|
||||
export TZ=UTC
|
||||
micromamba activate
|
||||
EOT
|
||||
source /workspace/bin/activate-env.sh
|
||||
micromamba install -n base -y -c conda-forge python=3.11 nodejs=18
|
||||
source /workspace/bin/activate-env.sh
|
||||
python -m pip install -e ".[dev,test]" && jlpm run build && jlpm develop
|
||||
gp sync-done setup
|
||||
command: |
|
||||
gp sync-done setup
|
||||
source /workspace/bin/activate-env.sh
|
||||
jupyter notebook --no-browser --ServerApp.token='' --ServerApp.allow_remote_access=True
|
||||
|
||||
- name: auto-activate
|
||||
command: |
|
||||
gp sync-await setup
|
||||
source /workspace/bin/activate-env.sh
|
||||
jlpm watch
|
||||
|
||||
- name: shell
|
||||
command: |
|
||||
gp sync-await setup
|
||||
echo "source /workspace/bin/activate-env.sh" >> ~/.bashrc
|
||||
source /workspace/bin/activate-env.sh
|
||||
|
||||
- name: docs
|
||||
command: |
|
||||
gp sync-await setup
|
||||
sudo apt-get update
|
||||
sudo apt install enchant-2 -y
|
||||
wget https://github.com/jgm/pandoc/releases/download/2.14.2/pandoc-2.14.2-1-amd64.deb -O /tmp/pandoc.deb && sudo dpkg -i /tmp/pandoc.deb
|
||||
source /workspace/bin/activate-env.sh
|
||||
hatch run docs:build
|
||||
hatch run docs:serve
|
||||
|
||||
ports:
|
||||
- port: 8888
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright (c) Jupyter Development Team.
|
||||
* Distributed under the terms of the Modified BSD License.
|
||||
*/
|
||||
|
||||
const base = require('./rspack.config');
|
||||
|
||||
module.exports = [
|
||||
{
|
||||
...base[0],
|
||||
bail: false,
|
||||
watch: true,
|
||||
},
|
||||
...base.slice(1),
|
||||
];
|
||||
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (c) Jupyter Development Team.
|
||||
* Distributed under the terms of the Modified BSD License.
|
||||
*/
|
||||
|
||||
const merge = require('webpack-merge').default;
|
||||
const config = require('./rspack.config');
|
||||
const WPPlugin = require('@jupyterlab/builder').WPPlugin;
|
||||
|
||||
config[0] = merge(config[0], {
|
||||
mode: 'production',
|
||||
devtool: 'source-map',
|
||||
output: {
|
||||
// Add version argument when in production so the Jupyter server
|
||||
// allows caching of files (i.e., does not set the CacheControl header to no-cache to prevent caching static files)
|
||||
filename: '[name].[contenthash].js?v=[contenthash]',
|
||||
},
|
||||
optimization: {
|
||||
minimize: false,
|
||||
},
|
||||
plugins: [
|
||||
new WPPlugin.JSONLicenseWebpackPlugin({
|
||||
excludedPackageTest: (packageName) =>
|
||||
packageName === '@jupyter-notebook/app',
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
module.exports = config;
|
||||
@ -0,0 +1,45 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>{{page_config['appName'] | e}} - Console</title>
|
||||
{% block favicon %}
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/x-icon"
|
||||
href="{{ page_config['fullStaticUrl'] | e }}/favicons/favicon-console.ico"
|
||||
class="favicon"
|
||||
/>
|
||||
{% endblock %} {% if custom_css %}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
href="{{ base_url | escape }}custom/custom.css"
|
||||
/>
|
||||
{% endif %}
|
||||
</head>
|
||||
<body class="jp-ThemedContainer">
|
||||
{# Copy so we do not modify the page_config with updates. #} {% set
|
||||
page_config_full = page_config.copy() %} {# Set a dummy variable - we just
|
||||
want the side effect of the update. #} {% 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(notebookPage='consoles') %}
|
||||
|
||||
<script id="jupyter-config-data" type="application/json">
|
||||
{{ page_config_full | tojson }}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
/* Remove token from URL. */
|
||||
(function () {
|
||||
var parsedUrl = new URL(window.location.href);
|
||||
if (parsedUrl.searchParams.get('token')) {
|
||||
parsedUrl.searchParams.delete('token');
|
||||
window.history.replaceState({}, '', parsedUrl.href);
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,39 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>{{page_config['appName'] | e}} - Edit</title>
|
||||
{% block favicon %}
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/x-icon"
|
||||
href="{{ base_url | escape }}static/favicons/favicon-file.ico"
|
||||
class="favicon"
|
||||
/>
|
||||
{% endblock %}
|
||||
</head>
|
||||
<body class="jp-ThemedContainer" data-notebook="edit">
|
||||
{# Copy so we do not modify the page_config with updates. #} {% set
|
||||
page_config_full = page_config.copy() %} {# Set a dummy variable - we just
|
||||
want the side effect of the update. #} {% 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(notebookPage='edit') %}
|
||||
|
||||
<script id="jupyter-config-data" type="application/json">
|
||||
{{ page_config_full | tojson }}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
/* Remove token from URL. */
|
||||
(function () {
|
||||
var parsedUrl = new URL(window.location.href);
|
||||
if (parsedUrl.searchParams.get('token')) {
|
||||
parsedUrl.searchParams.delete('token');
|
||||
window.history.replaceState({}, '', parsedUrl.href);
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,45 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>{{page_config['appName'] | e}} - Notebook</title>
|
||||
{% block favicon %}
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/x-icon"
|
||||
href="{{ base_url | escape }}static/favicons/favicon-notebook.ico"
|
||||
class="favicon"
|
||||
/>
|
||||
{% endblock %} {% if custom_css %}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
href="{{ base_url | escape }}custom/custom.css"
|
||||
/>
|
||||
{% endif %}
|
||||
</head>
|
||||
<body class="jp-ThemedContainer" data-notebook="notebooks">
|
||||
{# Copy so we do not modify the page_config with updates. #} {% set
|
||||
page_config_full = page_config.copy() %} {# Set a dummy variable - we just
|
||||
want the side effect of the update. #} {% 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(notebookPage='notebooks') %}
|
||||
|
||||
<script id="jupyter-config-data" type="application/json">
|
||||
{{ page_config_full | tojson }}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
/* Remove token from URL. */
|
||||
(function () {
|
||||
var parsedUrl = new URL(window.location.href);
|
||||
if (parsedUrl.searchParams.get('token')) {
|
||||
parsedUrl.searchParams.delete('token');
|
||||
window.history.replaceState({}, '', parsedUrl.href);
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,45 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>{{page_config['appName'] | e}} - Terminal</title>
|
||||
{% block favicon %}
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/x-icon"
|
||||
href="{{ base_url | escape }}static/favicons/favicon-terminal.ico"
|
||||
class="favicon"
|
||||
/>
|
||||
{% endblock %} {% if custom_css %}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
href="{{ base_url | escape }}custom/custom.css"
|
||||
/>
|
||||
{% endif %}
|
||||
</head>
|
||||
<body class="jp-ThemedContainer">
|
||||
{# Copy so we do not modify the page_config with updates. #} {% set
|
||||
page_config_full = page_config.copy() %} {# Set a dummy variable - we just
|
||||
want the side effect of the update. #} {% 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(notebookPage='terminals') %}
|
||||
|
||||
<script id="jupyter-config-data" type="application/json">
|
||||
{{ page_config_full | tojson }}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
/* Remove token from URL. */
|
||||
(function () {
|
||||
var parsedUrl = new URL(window.location.href);
|
||||
if (parsedUrl.searchParams.get('token')) {
|
||||
parsedUrl.searchParams.delete('token');
|
||||
window.history.replaceState({}, '', parsedUrl.href);
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,45 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Home</title>
|
||||
{% block favicon %}
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/x-icon"
|
||||
href="{{ base_url | escape }}static/favicons/favicon.ico"
|
||||
class="favicon"
|
||||
/>
|
||||
{% endblock %} {% if custom_css %}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
href="{{ base_url | escape }}custom/custom.css"
|
||||
/>
|
||||
{% endif %}
|
||||
</head>
|
||||
<body class="jp-ThemedContainer">
|
||||
{# Copy so we do not modify the page_config with updates. #} {% set
|
||||
page_config_full = page_config.copy() %} {# Set a dummy variable - we just
|
||||
want the side effect of the update. #} {% 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(notebookPage='tree') %}
|
||||
|
||||
<script id="jupyter-config-data" type="application/json">
|
||||
{{ page_config_full | tojson }}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
/* Remove token from URL. */
|
||||
(function () {
|
||||
var parsedUrl = new URL(window.location.href);
|
||||
if (parsedUrl.searchParams.get('token')) {
|
||||
parsedUrl.searchParams.delete('token');
|
||||
window.history.replaceState({}, '', parsedUrl.href);
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,17 +0,0 @@
|
||||
const base = require('./webpack.config');
|
||||
const ExtraWatchWebpackPlugin = require('extra-watch-webpack-plugin');
|
||||
|
||||
module.exports = [
|
||||
{
|
||||
...base[0],
|
||||
bail: false,
|
||||
watch: true,
|
||||
plugins: [
|
||||
...base[0].plugins,
|
||||
new ExtraWatchWebpackPlugin({
|
||||
files: ['../packages/_metapackage/tsconfig.tsbuildinfo'],
|
||||
}),
|
||||
],
|
||||
},
|
||||
...base.slice(1),
|
||||
];
|
||||
@ -0,0 +1,86 @@
|
||||
import * as fs from 'fs-extra';
|
||||
import * as semver from 'semver';
|
||||
|
||||
function convertPythonVersion(version: string): string {
|
||||
return version
|
||||
.replace('a', '-alpha')
|
||||
.replace('b', '-beta')
|
||||
.replace('rc', '-rc');
|
||||
}
|
||||
|
||||
function extractVersionFromReleases(
|
||||
releases: any,
|
||||
versionTag: string,
|
||||
currentVersion: string
|
||||
): string | null {
|
||||
const npmCurrentVersion = convertPythonVersion(currentVersion);
|
||||
const isCurrentPreRelease = semver.prerelease(npmCurrentVersion) !== null;
|
||||
|
||||
if (versionTag === 'latest') {
|
||||
// Find first version that is newer than current and matches pre-release criteria
|
||||
const release = releases.find((r: any) => {
|
||||
const version = r['tag_name'].substring(1); // Remove 'v' prefix for semver
|
||||
const npmVersion = convertPythonVersion(version);
|
||||
return (
|
||||
(isCurrentPreRelease || !r['prerelease']) &&
|
||||
semver.gte(npmVersion, npmCurrentVersion)
|
||||
);
|
||||
});
|
||||
return release ? release['tag_name'] : null;
|
||||
} else {
|
||||
// Find exact version match
|
||||
const release = releases.find((r: any) => r['tag_name'] === versionTag);
|
||||
return release ? release['tag_name'] : null;
|
||||
}
|
||||
}
|
||||
|
||||
function extractCurrentJupyterLabVersion(): string {
|
||||
const toml = fs.readFileSync('pyproject.toml', 'utf8');
|
||||
const match = toml.match(/jupyterlab>=([^,]+)/);
|
||||
if (!match) {
|
||||
throw new Error('Could not find JupyterLab version in pyproject.toml');
|
||||
}
|
||||
return match[1];
|
||||
}
|
||||
|
||||
async function findVersion(versionTag: string): Promise<string> {
|
||||
const url = 'https://api.github.com/repos/jupyterlab/jupyterlab/releases';
|
||||
const response = await fetch(url);
|
||||
if (!response.ok) {
|
||||
const error_message = `Failed to fetch package.json from ${url}. HTTP status code: ${response.status}`;
|
||||
throw new Error(error_message);
|
||||
}
|
||||
|
||||
const currentVersion = extractCurrentJupyterLabVersion();
|
||||
|
||||
const releases: any = await response.json();
|
||||
const version: string | null = extractVersionFromReleases(
|
||||
releases,
|
||||
versionTag,
|
||||
currentVersion
|
||||
);
|
||||
if (version === null) {
|
||||
const error_message = 'Invalid release tag';
|
||||
throw new Error(error_message);
|
||||
}
|
||||
return version.substring(1);
|
||||
}
|
||||
|
||||
async function getLatestLabVersion(): Promise<void> {
|
||||
const args: string[] = process.argv.slice(2);
|
||||
if (args.length !== 2 || args[0] !== '--set-version') {
|
||||
console.error('Usage: node script.js --set-version <version>');
|
||||
process.exit(1);
|
||||
}
|
||||
const version_tag: string = args[1];
|
||||
|
||||
try {
|
||||
const result: string = await findVersion(version_tag);
|
||||
console.log(result);
|
||||
} catch (error: any) {
|
||||
console.error('Error:', error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
getLatestLabVersion();
|
||||
@ -0,0 +1,170 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
|
||||
const PACKAGE_JSON_PATHS: string[] = [
|
||||
'app/package.json',
|
||||
'buildutils/package.json',
|
||||
'package.json',
|
||||
'packages/application-extension/package.json',
|
||||
'packages/application/package.json',
|
||||
'packages/console-extension/package.json',
|
||||
'packages/docmanager-extension/package.json',
|
||||
'packages/documentsearch-extension/package.json',
|
||||
'packages/help-extension/package.json',
|
||||
'packages/lab-extension/package.json',
|
||||
'packages/notebook-extension/package.json',
|
||||
'packages/terminal-extension/package.json',
|
||||
'packages/tree-extension/package.json',
|
||||
'packages/tree/package.json',
|
||||
'packages/ui-components/package.json',
|
||||
'ui-tests/package.json',
|
||||
];
|
||||
|
||||
const DEPENDENCY_GROUP = '@jupyterlab';
|
||||
|
||||
interface IVersion {
|
||||
major: number;
|
||||
minor: number;
|
||||
patch: number;
|
||||
preRelease?: string;
|
||||
}
|
||||
|
||||
function parseVersion(version: string): IVersion {
|
||||
const match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:(a|b|rc)(\d+))?$/);
|
||||
if (!match) {
|
||||
throw new Error(`Invalid version format: ${version}`);
|
||||
}
|
||||
|
||||
const [, major, minor, patch, type, preVersion] = match;
|
||||
const baseVersion = {
|
||||
major: parseInt(major, 10),
|
||||
minor: parseInt(minor, 10),
|
||||
patch: parseInt(patch, 10),
|
||||
};
|
||||
|
||||
if (type && preVersion) {
|
||||
return {
|
||||
...baseVersion,
|
||||
preRelease: `${type}${preVersion}`,
|
||||
};
|
||||
}
|
||||
|
||||
return baseVersion;
|
||||
}
|
||||
|
||||
function getVersionRange(version: IVersion): string {
|
||||
const baseVersion = `${version.major}.${version.minor}.${version.patch}${
|
||||
version.preRelease ?? ''
|
||||
}`;
|
||||
return `>=${baseVersion},<${version.major}.${version.minor + 1}`;
|
||||
}
|
||||
|
||||
function updateVersionInFile(
|
||||
filePath: string,
|
||||
pattern: RegExp,
|
||||
version: IVersion
|
||||
): void {
|
||||
const content = fs.readFileSync(filePath, 'utf-8');
|
||||
const versionRange = getVersionRange(version);
|
||||
const updatedContent = content.replace(pattern, `$1${versionRange}`);
|
||||
fs.writeFileSync(filePath, updatedContent);
|
||||
}
|
||||
|
||||
async function updatePackageJson(newVersion: string): Promise<void> {
|
||||
const url = `https://raw.githubusercontent.com/jupyterlab/jupyterlab/v${newVersion}/jupyterlab/staging/package.json`;
|
||||
const response = await fetch(url);
|
||||
|
||||
if (!response.ok) {
|
||||
const errorMessage = `Failed to fetch package.json from ${url}. HTTP status code: ${response.status}`;
|
||||
throw new Error(errorMessage);
|
||||
}
|
||||
|
||||
// fetch the new galata version
|
||||
const galataUrl = `https://raw.githubusercontent.com/jupyterlab/jupyterlab/v${newVersion}/galata/package.json`;
|
||||
const galataResponse = await fetch(galataUrl);
|
||||
if (!galataResponse.ok) {
|
||||
const errorMessage = `Failed to fetch galata/package.json from ${galataUrl}. HTTP status code: ${galataResponse.status}`;
|
||||
throw new Error(errorMessage);
|
||||
}
|
||||
|
||||
const newPackageJson = await response.json();
|
||||
const galataPackageJson = await galataResponse.json();
|
||||
|
||||
for (const packageJsonPath of PACKAGE_JSON_PATHS) {
|
||||
const filePath: string = path.resolve(packageJsonPath);
|
||||
const existingPackageJson = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
||||
|
||||
const newDependencies = {
|
||||
...newPackageJson.devDependencies,
|
||||
...newPackageJson.resolutions,
|
||||
[galataPackageJson.name]: galataPackageJson.version,
|
||||
};
|
||||
|
||||
updateDependencyVersion(existingPackageJson, newDependencies);
|
||||
|
||||
fs.writeFileSync(
|
||||
filePath,
|
||||
JSON.stringify(existingPackageJson, null, 2) + '\n'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function updateDependencyVersion(existingJson: any, newJson: any): void {
|
||||
if (!existingJson) {
|
||||
return;
|
||||
}
|
||||
|
||||
const sectionPaths: string[] = [
|
||||
'resolutions',
|
||||
'dependencies',
|
||||
'devDependencies',
|
||||
];
|
||||
|
||||
for (const section of sectionPaths) {
|
||||
if (!existingJson[section]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const updated = existingJson[section];
|
||||
|
||||
for (const [pkg, version] of Object.entries<string>(
|
||||
existingJson[section]
|
||||
)) {
|
||||
if (pkg.startsWith(DEPENDENCY_GROUP) && pkg in newJson) {
|
||||
if (version[0] === '^' || version[0] === '~') {
|
||||
updated[pkg] = version[0] + absoluteVersion(newJson[pkg]);
|
||||
} else {
|
||||
updated[pkg] = absoluteVersion(newJson[pkg]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function absoluteVersion(version: string): string {
|
||||
if (version.length > 0 && (version[0] === '^' || version[0] === '~')) {
|
||||
return version.substring(1);
|
||||
}
|
||||
return version;
|
||||
}
|
||||
|
||||
const versionPattern = /(jupyterlab)(>=[\d.]+(?:[a|b|rc]\d+)?,<[\d.]+)/g;
|
||||
|
||||
const FILES_TO_UPDATE = ['pyproject.toml', '.pre-commit-config.yaml'];
|
||||
|
||||
async function upgradeLabDependencies(): Promise<void> {
|
||||
const args: string[] = process.argv.slice(2);
|
||||
|
||||
if (args.length < 2) {
|
||||
throw new Error('Please provide the set-version flag and version');
|
||||
}
|
||||
|
||||
const version = parseVersion(args[1]);
|
||||
await updatePackageJson(args[1]); // Keep original string version for package.json
|
||||
|
||||
for (const file of FILES_TO_UPDATE) {
|
||||
updateVersionInFile(path.resolve(file), versionPattern, version);
|
||||
}
|
||||
}
|
||||
|
||||
upgradeLabDependencies();
|
||||
|
After Width: | Height: | Size: 124 KiB |
|
After Width: | Height: | Size: 272 KiB |
File diff suppressed because one or more lines are too long
@ -0,0 +1,33 @@
|
||||
# Server Imports in Notebook 7
|
||||
|
||||
Notebook 7 is now based on Jupyter Server, which lets users run multiple Jupyter frontends (e.g. Notebook, JupyterLab, NBClassic, etc.) on the same server.
|
||||
|
||||
Prior to Notebook 7, the Classic Notebook server included the server modules in the `notebook` package. This means it was possible to import the server modules from the `notebook` package, for example:
|
||||
|
||||
```python
|
||||
from notebook.auth import passwd
|
||||
passwd("foo")
|
||||
```
|
||||
|
||||
Or:
|
||||
|
||||
```python
|
||||
from notebook import notebookapp
|
||||
notebookapp.list_running_servers()
|
||||
```
|
||||
|
||||
In Notebook 7, these server modules are now exposed by the `jupyter_server` package. The code snippets above should be updated to:
|
||||
|
||||
```python
|
||||
from jupyter_server.auth import passwd
|
||||
passwd("foo")
|
||||
```
|
||||
|
||||
And:
|
||||
|
||||
```python
|
||||
from jupyter_server import serverapp
|
||||
serverapp.list_running_servers()
|
||||
```
|
||||
|
||||
These are just examples, so you may have to adjust your use of `notebook` imports based on the specific server modules you were using.
|
||||
@ -1,5 +1,4 @@
|
||||
{
|
||||
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
|
||||
"version": "independent",
|
||||
"useWorkspaces": true
|
||||
"version": "independent"
|
||||
}
|
||||
|
||||
@ -1,43 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{page_config['appName'] | e}} - Console</title>
|
||||
{% block favicon %}
|
||||
<link rel="icon" type="image/x-icon" href="{{ page_config['fullStaticUrl'] | e }}/favicons/favicon-console.ico" class="favicon">
|
||||
{% endblock %}
|
||||
|
||||
{% if custom_css %}
|
||||
<link rel="stylesheet" type="text/css" href="{{ base_url | escape }}custom/custom.css">
|
||||
{% endif %}
|
||||
</head>
|
||||
<body>
|
||||
|
||||
{# Copy so we do not modify the page_config with updates. #}
|
||||
{% set page_config_full = page_config.copy() %}
|
||||
|
||||
{# Set a dummy variable - we just want the side effect of the update. #}
|
||||
{% 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(notebookPage='consoles') %}
|
||||
|
||||
<script id="jupyter-config-data" type="application/json">
|
||||
{{ page_config_full | tojson }}
|
||||
</script>
|
||||
<script src="{{page_config['fullStaticUrl'] | e}}/bundle.js" main="index"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
/* Remove token from URL. */
|
||||
(function () {
|
||||
var parsedUrl = new URL(window.location.href);
|
||||
if (parsedUrl.searchParams.get('token')) {
|
||||
parsedUrl.searchParams.delete('token');
|
||||
window.history.replaceState({ }, '', parsedUrl.href);
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@ -1,39 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{page_config['appName'] | e}} - Edit</title>
|
||||
{% block favicon %}
|
||||
<link rel="icon" type="image/x-icon" href="{{ base_url | escape }}static/favicons/favicon-file.ico" class="favicon">
|
||||
{% endblock %}
|
||||
</head>
|
||||
<body data-notebook="edit">
|
||||
|
||||
{# Copy so we do not modify the page_config with updates. #}
|
||||
{% set page_config_full = page_config.copy() %}
|
||||
|
||||
{# Set a dummy variable - we just want the side effect of the update. #}
|
||||
{% 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(notebookPage='edit') %}
|
||||
|
||||
<script id="jupyter-config-data" type="application/json">
|
||||
{{ page_config_full | tojson }}
|
||||
</script>
|
||||
<script src="{{page_config['fullStaticUrl'] | e}}/bundle.js" main="index"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
/* Remove token from URL. */
|
||||
(function () {
|
||||
var parsedUrl = new URL(window.location.href);
|
||||
if (parsedUrl.searchParams.get('token')) {
|
||||
parsedUrl.searchParams.delete('token');
|
||||
window.history.replaceState({ }, '', parsedUrl.href);
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@ -1,43 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{page_config['appName'] | e}} - Notebook</title>
|
||||
{% block favicon %}
|
||||
<link rel="icon" type="image/x-icon" href="{{ base_url | escape }}static/favicons/favicon-notebook.ico" class="favicon">
|
||||
{% endblock %}
|
||||
|
||||
{% if custom_css %}
|
||||
<link rel="stylesheet" type="text/css" href="{{ base_url | escape }}custom/custom.css">
|
||||
{% endif %}
|
||||
</head>
|
||||
<body data-notebook="notebooks">
|
||||
|
||||
{# Copy so we do not modify the page_config with updates. #}
|
||||
{% set page_config_full = page_config.copy() %}
|
||||
|
||||
{# Set a dummy variable - we just want the side effect of the update. #}
|
||||
{% 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(notebookPage='notebooks') %}
|
||||
|
||||
<script id="jupyter-config-data" type="application/json">
|
||||
{{ page_config_full | tojson }}
|
||||
</script>
|
||||
<script src="{{page_config['fullStaticUrl'] | e}}/bundle.js" main="index"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
/* Remove token from URL. */
|
||||
(function () {
|
||||
var parsedUrl = new URL(window.location.href);
|
||||
if (parsedUrl.searchParams.get('token')) {
|
||||
parsedUrl.searchParams.delete('token');
|
||||
window.history.replaceState({ }, '', parsedUrl.href);
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@ -1,43 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{page_config['appName'] | e}} - Terminal</title>
|
||||
{% block favicon %}
|
||||
<link rel="icon" type="image/x-icon" href="{{ base_url | escape }}static/favicons/favicon-terminal.ico" class="favicon">
|
||||
{% endblock %}
|
||||
|
||||
{% if custom_css %}
|
||||
<link rel="stylesheet" type="text/css" href="{{ base_url | escape }}custom/custom.css">
|
||||
{% endif %}
|
||||
</head>
|
||||
<body>
|
||||
|
||||
{# Copy so we do not modify the page_config with updates. #}
|
||||
{% set page_config_full = page_config.copy() %}
|
||||
|
||||
{# Set a dummy variable - we just want the side effect of the update. #}
|
||||
{% 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(notebookPage='terminals') %}
|
||||
|
||||
<script id="jupyter-config-data" type="application/json">
|
||||
{{ page_config_full | tojson }}
|
||||
</script>
|
||||
<script src="{{page_config['fullStaticUrl'] | e}}/bundle.js" main="index"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
/* Remove token from URL. */
|
||||
(function () {
|
||||
var parsedUrl = new URL(window.location.href);
|
||||
if (parsedUrl.searchParams.get('token')) {
|
||||
parsedUrl.searchParams.delete('token');
|
||||
window.history.replaceState({ }, '', parsedUrl.href);
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@ -1,43 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Home</title>
|
||||
{% block favicon %}
|
||||
<link rel="icon" type="image/x-icon" href="{{ base_url | escape }}static/favicons/favicon.ico" class="favicon">
|
||||
{% endblock %}
|
||||
|
||||
{% if custom_css %}
|
||||
<link rel="stylesheet" type="text/css" href="{{ base_url | escape }}custom/custom.css">
|
||||
{% endif %}
|
||||
</head>
|
||||
<body>
|
||||
|
||||
{# Copy so we do not modify the page_config with updates. #}
|
||||
{% set page_config_full = page_config.copy() %}
|
||||
|
||||
{# Set a dummy variable - we just want the side effect of the update. #}
|
||||
{% 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(notebookPage='tree') %}
|
||||
|
||||
<script id="jupyter-config-data" type="application/json">
|
||||
{{ page_config_full | tojson }}
|
||||
</script>
|
||||
<script src="{{page_config['fullStaticUrl'] | e}}/bundle.js" main="index"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
/* Remove token from URL. */
|
||||
(function () {
|
||||
var parsedUrl = new URL(window.location.href);
|
||||
if (parsedUrl.searchParams.get('token')) {
|
||||
parsedUrl.searchParams.delete('token');
|
||||
window.history.replaceState({ }, '', parsedUrl.href);
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,16 @@
|
||||
{
|
||||
"jupyter.lab.setting-icon": "notebook-ui-components:jupyter",
|
||||
"jupyter.lab.setting-icon-label": "Jupyter Notebook shortcuts",
|
||||
"title": "Jupyter Notebook Shortcuts",
|
||||
"description": "Keyboard shortcuts for Jupyter Notebook",
|
||||
"jupyter.lab.shortcuts": [
|
||||
{
|
||||
"args": {},
|
||||
"command": "notebook:toggle-cell-outputs",
|
||||
"keys": ["O"],
|
||||
"selector": ".jp-Notebook.jp-mod-commandMode:not(.jp-mod-readWrite) :focus"
|
||||
}
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"type": "object"
|
||||
}
|
||||
@ -0,0 +1,37 @@
|
||||
{
|
||||
"title": "Jupyter Notebook Menu Entries",
|
||||
"description": "Jupyter Notebook Menu Entries",
|
||||
"jupyter.lab.menus": {
|
||||
"main": [
|
||||
{
|
||||
"id": "jp-mainmenu-file",
|
||||
"items": [
|
||||
{
|
||||
"command": "notebook:open-tree-tab",
|
||||
"rank": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "jp-mainmenu-edit",
|
||||
"items": [
|
||||
{
|
||||
"type": "separator",
|
||||
"rank": 8.5
|
||||
},
|
||||
{
|
||||
"command": "notebook:edit-metadata",
|
||||
"rank": 8.5
|
||||
},
|
||||
{
|
||||
"type": "separator",
|
||||
"rank": 8.5
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"properties": {},
|
||||
"additionalProperties": false,
|
||||
"type": "object"
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
{
|
||||
"title": "Jupyter Notebook Full Width Notebook",
|
||||
"description": "Jupyter Notebook Notebook With settings",
|
||||
"jupyter.lab.menus": {
|
||||
"main": [
|
||||
{
|
||||
"id": "jp-mainmenu-view",
|
||||
"items": [
|
||||
{
|
||||
"command": "notebook:toggle-full-width",
|
||||
"rank": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"fullWidthNotebook": {
|
||||
"type": "boolean",
|
||||
"title": "Full Width Notebook",
|
||||
"description": "Whether to the notebook should take up the full width of the application",
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"type": "object"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue