nbgitpuller-jl-interface 0.2.5__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nbgitpuller_jl_interface-0.4.0/CHANGELOG.md +73 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/PKG-INFO +1 -1
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/nbgitpuller_jl_interface/_version.py +1 -1
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/nbgitpuller_jl_interface/labextension/package.json +2 -2
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/nbgitpuller_jl_interface/labextension/schemas/nbgitpuller-jl-interface/package.json.orig +1 -1
- nbgitpuller_jl_interface-0.4.0/nbgitpuller_jl_interface/labextension/static/293.24f6a6ad6689d54e2835.js +1 -0
- nbgitpuller_jl_interface-0.4.0/nbgitpuller_jl_interface/labextension/static/728.1316db9caad2256ea253.js +1 -0
- nbgitpuller_jl_interface-0.2.5/nbgitpuller_jl_interface/labextension/static/remoteEntry.34a78c2aa73e0e0f2b81.js → nbgitpuller_jl_interface-0.4.0/nbgitpuller_jl_interface/labextension/static/remoteEntry.b83083f7b0a432020f55.js +1 -1
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/package.json +1 -1
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/src/__tests__/nbgitpuller_jb_interface.spec.ts +33 -35
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/src/index.ts +6 -8
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/src/utils.ts +99 -93
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/style/base.css +4 -0
- nbgitpuller_jl_interface-0.2.5/CHANGELOG.md +0 -39
- nbgitpuller_jl_interface-0.2.5/nbgitpuller_jl_interface/labextension/static/293.d9c8968d6d528bad2399.js +0 -1
- nbgitpuller_jl_interface-0.2.5/nbgitpuller_jl_interface/labextension/static/728.c80bd4566fc22d8dd093.js +0 -1
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/.copier-answers.yml +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/.gitignore +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/.prettierignore +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/.vscode/settings.json +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/.yarnrc.yml +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/LICENSE +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/README.md +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/RELEASE.md +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/babel.config.js +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/conftest.py +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/install.json +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/jest.config.js +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/jupyter-config/server-config/nbgitpuller_jl_interface.json +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/nbgitpuller_jl_interface/__init__.py +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/nbgitpuller_jl_interface/labextension/schemas/nbgitpuller-jl-interface/plugin.json +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/nbgitpuller_jl_interface/labextension/static/style.js +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/nbgitpuller_jl_interface/labextension/static/third-party-licenses.json +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/nbgitpuller_jl_interface/routes.py +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/nbgitpuller_jl_interface/tests/__init__.py +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/nbgitpuller_jl_interface/tests/test_routes.py +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/nbgitpuller_jl_interface/tests/test_utils.py +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/nbgitpuller_jl_interface/utils.py +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/pyproject.toml +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/schema/plugin.json +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/setup.py +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/src/request.ts +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/style/index.css +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/style/index.js +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/style/tmp_logo.svg +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/tsconfig.json +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/tsconfig.test.json +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/ui-tests/README.md +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/ui-tests/jupyter_server_test_config.py +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/ui-tests/package.json +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/ui-tests/playwright.config.js +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/ui-tests/tests/nbgitpuller_jl_interface.spec.ts +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/ui-tests/yarn.lock +0 -0
- {nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/yarn.lock +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
<!-- <START NEW CHANGELOG ENTRY> -->
|
|
4
|
+
|
|
5
|
+
## 0.4.0
|
|
6
|
+
|
|
7
|
+
([Full Changelog](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/compare/v0.3.0...c0858bae9a3c63097a47872caeb0332071433e10))
|
|
8
|
+
|
|
9
|
+
### Enhancements made
|
|
10
|
+
|
|
11
|
+
- rework display state system to be extensible [#5](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/pull/5) ([@segallagher](https://github.com/segallagher), [@bbuechler](https://github.com/bbuechler), [@dgpalmieri](https://github.com/dgpalmieri))
|
|
12
|
+
|
|
13
|
+
### Contributors to this release
|
|
14
|
+
|
|
15
|
+
The following people contributed discussions, new ideas, code and documentation contributions, and review.
|
|
16
|
+
See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports).
|
|
17
|
+
|
|
18
|
+
([GitHub contributors page for this release](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/graphs/contributors?from=2026-04-10&to=2026-04-15&type=c))
|
|
19
|
+
|
|
20
|
+
@bbuechler ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Abbuechler+updated%3A2026-04-10..2026-04-15&type=Issues)) | @dgpalmieri ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Adgpalmieri+updated%3A2026-04-10..2026-04-15&type=Issues)) | @segallagher ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Asegallagher+updated%3A2026-04-10..2026-04-15&type=Issues))
|
|
21
|
+
|
|
22
|
+
<!-- <END NEW CHANGELOG ENTRY> -->
|
|
23
|
+
|
|
24
|
+
## 0.3.0
|
|
25
|
+
|
|
26
|
+
([Full Changelog](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/compare/v0.2.5...eab8732c960fecc43d3cda8560330cc3b692a5bf))
|
|
27
|
+
|
|
28
|
+
### Bugs fixed
|
|
29
|
+
|
|
30
|
+
- Make compatable with jupyterhub environment [#4](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/pull/4) ([@segallagher](https://github.com/segallagher), [@dgpalmieri](https://github.com/dgpalmieri))
|
|
31
|
+
|
|
32
|
+
### Contributors to this release
|
|
33
|
+
|
|
34
|
+
The following people contributed discussions, new ideas, code and documentation contributions, and review.
|
|
35
|
+
See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports).
|
|
36
|
+
|
|
37
|
+
([GitHub contributors page for this release](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/graphs/contributors?from=2026-04-09&to=2026-04-10&type=c))
|
|
38
|
+
|
|
39
|
+
@dgpalmieri ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Adgpalmieri+updated%3A2026-04-09..2026-04-10&type=Issues)) | @segallagher ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Asegallagher+updated%3A2026-04-09..2026-04-10&type=Issues))
|
|
40
|
+
|
|
41
|
+
## 0.2.5
|
|
42
|
+
|
|
43
|
+
([Full Changelog](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/compare/v0.2.4...acb905136fd3b05e07da5e1c3da4ee88bec7aba9))
|
|
44
|
+
|
|
45
|
+
### Bugs fixed
|
|
46
|
+
|
|
47
|
+
- Sg/fix url for deployment [#3](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/pull/3) ([@segallagher](https://github.com/segallagher), [@emlundell](https://github.com/emlundell))
|
|
48
|
+
|
|
49
|
+
### Contributors to this release
|
|
50
|
+
|
|
51
|
+
The following people contributed discussions, new ideas, code and documentation contributions, and review.
|
|
52
|
+
See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports).
|
|
53
|
+
|
|
54
|
+
([GitHub contributors page for this release](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/graphs/contributors?from=2026-04-07&to=2026-04-09&type=c))
|
|
55
|
+
|
|
56
|
+
@emlundell ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Aemlundell+updated%3A2026-04-07..2026-04-09&type=Issues)) | @segallagher ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Asegallagher+updated%3A2026-04-07..2026-04-09&type=Issues))
|
|
57
|
+
|
|
58
|
+
## 0.2.4
|
|
59
|
+
|
|
60
|
+
([Full Changelog](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/compare/v0.2.1...fa249abe827af836d7aa2ac0a870c4d30eff516e))
|
|
61
|
+
|
|
62
|
+
### Enhancements made
|
|
63
|
+
|
|
64
|
+
- Update Functionality to be functional [#2](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/pull/2) ([@segallagher](https://github.com/segallagher), [@dgpalmieri](https://github.com/dgpalmieri))
|
|
65
|
+
|
|
66
|
+
### Contributors to this release
|
|
67
|
+
|
|
68
|
+
The following people contributed discussions, new ideas, code and documentation contributions, and review.
|
|
69
|
+
See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports).
|
|
70
|
+
|
|
71
|
+
([GitHub contributors page for this release](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/graphs/contributors?from=2026-04-06&to=2026-04-07&type=c))
|
|
72
|
+
|
|
73
|
+
@dgpalmieri ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Adgpalmieri+updated%3A2026-04-06..2026-04-07&type=Issues)) | @segallagher ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Asegallagher+updated%3A2026-04-06..2026-04-07&type=Issues))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nbgitpuller_jl_interface
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: A human interface with nbgitpuller in JupyterBook
|
|
5
5
|
Project-URL: Homepage, https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/issues
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nbgitpuller-jl-interface",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "A human interface with nbgitpuller in JupyterBook",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jupyter",
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
"outputDir": "nbgitpuller_jl_interface/labextension",
|
|
118
118
|
"schemaDir": "schema",
|
|
119
119
|
"_build": {
|
|
120
|
-
"load": "static/remoteEntry.
|
|
120
|
+
"load": "static/remoteEntry.b83083f7b0a432020f55.js",
|
|
121
121
|
"extension": "./extension",
|
|
122
122
|
"style": "./style"
|
|
123
123
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunknbgitpuller_jl_interface=self.webpackChunknbgitpuller_jl_interface||[]).push([[293],{293(e,t,n){n.r(t),n.d(t,{default:()=>U,getJupyterAppInstance:()=>h});var o=n(813),i=n(53),r=n(247),a=n(41);const s="nbgitpuller-jl-interface-update-btn";let l,p=!1;async function c(e){const t=await async function(e){var t;let n=0,o=0;for(const i of e){const e=i.repoUrl,r=i.branch,s=i.destPath,l=a.PageConfig.getBaseUrl(),p=a.URLExt.join(l,"nbgitpuller-jl-interface","update-check"),c=null===(t=document.cookie.split(";").find(e=>e.startsWith("_xsrf=")))||void 0===t?void 0:t.split("=")[1],d=await fetch(p,{method:"POST",headers:{"Content-Type":"application/json","X-XSRFToken":null!=c?c:""},body:JSON.stringify({repositoryUrl:e,repositoryBranch:r,destination:s})}),u=await d.json();0!==u.returncode?o+=1:u.updatefound&&(n+=1)}return{response:{numToBeUpdated:n,numWithErrors:o},statuscode:0}}(e);if(0===t.statuscode){const n=t.response;let o,i;n.numWithErrors>0?(o=`${n.numWithErrors} notebooks with errors`,i=d.Error):n.numToBeUpdated>0?(o=`${n.numToBeUpdated} notebooks awaiting updates\n`,i=d.UpdateRequired):(o=`${e.length} Notebooks up to date`,i=d.UpToDate);const r=await u(i,o);0!==r.returncode&&console.error(r)}}var d;async function u(e,t){const n=document.getElementById(s);if(!n)return{error:"Unable to find nbgitpuller widget",returncode:1};let o;if(e===d.UpToDate)o='<p><span class="success">◉</span> Up to Date</p>';else if(e===d.Updating)o='<p><span class="lds-dual-ring"></span> Updating</p>';else if(e===d.UpdateRequired)o='<p><span class="pending blink">◉</span> Update Notebooks</p>';else if(e===d.Error)o='<p><span class="failure blink">◉</span> Update Error</p>';else{if(e!==d.Initializing)return{error:"Unknown widget state",returncode:2};o='<p><span class="">◉</span> Initializing</p>'}return n.title=t,n.innerHTML=function(e){return`\n <jp-button class="nbgitpuller-jl-interface-update-btn jp-ToolbarButtonComponent">\n ${e}\n </jp-button>`}(o),{error:"",returncode:0}}!function(e){e[e.UpToDate=0]="UpToDate",e[e.UpdateRequired=1]="UpdateRequired",e[e.Updating=2]="Updating",e[e.Error=3]="Error",e[e.Initializing=4]="Initializing"}(d||(d={}));var g=n(726),f=n(778);let b=null;function h(e){if(!b&&e&&(b=e),!b)throw new Error("App instance has not been initialized yet");return b}const w={id:"nbgitpuller-jl-interface:plugin",description:"A human interface with nbgitpuller in JupyterBook",autoStart:!0,optional:[],requires:[o.ILabShell,f.ICommandPalette,g.ISettingRegistry,o.JupyterFrontEnd.IPaths],activate:(e,t,n,o,g)=>{o?(Promise.all([e.restored,o.load(w.id)]).then(async([,t])=>{async function n(t){t.get("reloadWidget").composite&&(await async function(e,t){const n=t.get("repos").composite,o=t.get("rank").composite,l=(0,i.find)(e.shell.widgets("top"),e=>e.id===s);l&&l.dispose();const g=new r.Widget;g.id=s,g.addClass("lm-Widget"),g.addClass("jp-ToolbarButton"),g.addClass("nbgitpuller-jl-interface-wrapper"),g.node.addEventListener("click",async()=>{if(p)return;p=!0,await u(d.Updating,"Updating Notebooks...");const e=await async function(e){var t;const n=a.PageConfig.getBaseUrl(),o=a.URLExt.join(n,"nbgitpuller-jl-interface","gitpuller"),i=null===(t=document.cookie.split(";").find(e=>e.startsWith("_xsrf=")))||void 0===t?void 0:t.split("=")[1],r=[];for(const t of e){const e=t.repoUrl,n=t.branch,a=t.destPath,s=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json","X-XSRFToken":null!=i?i:""},body:JSON.stringify({repositoryUrl:e,repositoryBranch:n,destination:a})}),l=await s.json();0!==l.returncode&&r.push({repo:e,reason:l.error})}return r}(n);if(await c(n),0!==e.length){let t="Failed to update the following notebooks: \n";for(const n of e)t+=`${n.repo}`;console.log(t),alert(t)}p=!1}),e.shell.add(g,"top",{rank:o}),await new Promise(e=>setTimeout(e,1e3)),await c(n),console.log("nbgitpuller-jl-interface settings loaded")}(e,t),await async function(e){const t=e.get("repos").composite,n=e.get("probeInterval").composite;clearInterval(l),l=setInterval(async()=>{await c(t)},n)}(t),await t.set("reloadWidget",!1))}await t.set("reloadWidget",!0),n(t),t.changed.connect(n),console.log("JupyterLab extension nbgitpuller-jl-interface is fully operational!")}).catch(e=>{console.error(`Something went wrong...${e}`)}),console.log("JupyterLab extension nbgitpuller-jl-interface is activated!")):console.log("Settings not found. nbgitpuller-jl-interface cannot be established.")}},U=w}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunknbgitpuller_jl_interface=self.webpackChunknbgitpuller_jl_interface||[]).push([[728],{475(n,e,t){t.d(e,{A:()=>s});var r=t(601),a=t.n(r),o=t(314),i=t.n(o)()(a());i.push([n.id,"/*\n See the JupyterLab Developer Guide for useful CSS Patterns:\n\n https://jupyterlab.readthedocs.io/en/stable/developer/css.html\n*/\n\n/* Manual button css */\n.nbgitpuller-jl-interface-update-btn {\n border: 1px solid #bdbdbd;\n border-radius: 15px;\n padding-right: 5px;\n padding-left: 5px;\n}\n\n/* For jupyter created button css */\njp-button.nbgitpuller-jl-interface-update-btn {\n border: 1px solid #bdbdbd;\n border-radius: 15px;\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.nbgitpuller-jl-interface-wrapper {\n padding-left: 10px !important;\n padding-right: 10px !important;\n flex-direction: column;\n display: flex;\n justify-content: center;\n}\n\n.success {\n color: #5cb85c;\n}\n\n.pending {\n color: #f29339;\n}\n\n.failure {\n color: #d63124;\n}\n\n.blink {\n animation: blinker-me-blinker 2s linear infinite;\n}\n\n@keyframes blinker-me-blinker {\n 50% {\n opacity: 0;\n }\n}\n\n/* https://loading.io/css/ */\n.lds-dual-ring,\n.lds-dual-ring::after {\n box-sizing: border-box;\n}\n\n.lds-dual-ring {\n display: inline-block;\n width: 10px;\n height: 10px;\n}\n\n.lds-dual-ring::after {\n content: ' ';\n display: block;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n border: 1.6px solid currentcolor;\n border-color: currentcolor transparent;\n animation: lds-dual-ring 1.2s linear infinite;\n}\n\n@keyframes lds-dual-ring {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n",""]);const s=i},314(n){n.exports=function(n){var e=[];return e.toString=function(){return this.map(function(e){var t="",r=void 0!==e[5];return e[4]&&(t+="@supports (".concat(e[4],") {")),e[2]&&(t+="@media ".concat(e[2]," {")),r&&(t+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),t+=n(e),r&&(t+="}"),e[2]&&(t+="}"),e[4]&&(t+="}"),t}).join("")},e.i=function(n,t,r,a,o){"string"==typeof n&&(n=[[null,n,void 0]]);var i={};if(r)for(var s=0;s<this.length;s++){var c=this[s][0];null!=c&&(i[c]=!0)}for(var l=0;l<n.length;l++){var d=[].concat(n[l]);r&&i[d[0]]||(void 0!==o&&(void 0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=o),t&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=t):d[2]=t),a&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=a):d[4]="".concat(a)),e.push(d))}},e}},601(n){n.exports=function(n){return n[1]}},72(n){var e=[];function t(n){for(var t=-1,r=0;r<e.length;r++)if(e[r].identifier===n){t=r;break}return t}function r(n,r){for(var o={},i=[],s=0;s<n.length;s++){var c=n[s],l=r.base?c[0]+r.base:c[0],d=o[l]||0,u="".concat(l," ").concat(d);o[l]=d+1;var p=t(u),f={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==p)e[p].references++,e[p].updater(f);else{var b=a(f,r);r.byIndex=s,e.splice(s,0,{identifier:u,updater:b,references:1})}i.push(u)}return i}function a(n,e){var t=e.domAPI(e);return t.update(n),function(e){if(e){if(e.css===n.css&&e.media===n.media&&e.sourceMap===n.sourceMap&&e.supports===n.supports&&e.layer===n.layer)return;t.update(n=e)}else t.remove()}}n.exports=function(n,a){var o=r(n=n||[],a=a||{});return function(n){n=n||[];for(var i=0;i<o.length;i++){var s=t(o[i]);e[s].references--}for(var c=r(n,a),l=0;l<o.length;l++){var d=t(o[l]);0===e[d].references&&(e[d].updater(),e.splice(d,1))}o=c}}},659(n){var e={};n.exports=function(n,t){var r=function(n){if(void 0===e[n]){var t=document.querySelector(n);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(n){t=null}e[n]=t}return e[n]}(n);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(t)}},540(n){n.exports=function(n){var e=document.createElement("style");return n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},56(n,e,t){n.exports=function(n){var e=t.nc;e&&n.setAttribute("nonce",e)}},825(n){n.exports=function(n){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=n.insertStyleElement(n);return{update:function(t){!function(n,e,t){var r="";t.supports&&(r+="@supports (".concat(t.supports,") {")),t.media&&(r+="@media ".concat(t.media," {"));var a=void 0!==t.layer;a&&(r+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),r+=t.css,a&&(r+="}"),t.media&&(r+="}"),t.supports&&(r+="}");var o=t.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleTagTransform(r,n,e.options)}(e,n,t)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(e)}}}},113(n){n.exports=function(n,e){if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}},728(n,e,t){var r=t(72),a=t.n(r),o=t(825),i=t.n(o),s=t(659),c=t.n(s),l=t(56),d=t.n(l),u=t(540),p=t.n(u),f=t(113),b=t.n(f),h=t(475),m={};m.styleTagTransform=b(),m.setAttributes=d(),m.insert=c().bind(null,"head"),m.domAPI=i(),m.insertStyleElement=p(),a()(h.A,m),h.A&&h.A.locals&&h.A.locals}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var _JUPYTERLAB;(()=>{"use strict";var e,r,t,n,o,a,i,l,u,f,s,
|
|
1
|
+
var _JUPYTERLAB;(()=>{"use strict";var e,r,t,n,o,a,i,l,u,f,s,d,p,c,h,v,g,b,m,y={234(e,r,t){var n={"./index":()=>t.e(293).then(()=>()=>t(293)),"./extension":()=>t.e(293).then(()=>()=>t(293)),"./style":()=>t.e(728).then(()=>()=>t(728))},o=(e,r)=>(t.R=r,r=t.o(n,e)?n[e]():Promise.resolve().then(()=>{throw new Error('Module "'+e+'" does not exist in container.')}),t.R=void 0,r),a=(e,r)=>{if(t.S){var n="default",o=t.S[n];if(o&&o!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[n]=e,t.I(n,r)}};t.d(r,{get:()=>o,init:()=>a})}},w={};function j(e){var r=w[e];if(void 0!==r)return r.exports;var t=w[e]={id:e,exports:{}};return y[e](t,t.exports,j),t.exports}j.m=y,j.c=w,j.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return j.d(r,{a:r}),r},j.d=(e,r)=>{for(var t in r)j.o(r,t)&&!j.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},j.f={},j.e=e=>Promise.all(Object.keys(j.f).reduce((r,t)=>(j.f[t](e,r),r),[])),j.u=e=>e+"."+{293:"24f6a6ad6689d54e2835",728:"1316db9caad2256ea253"}[e]+".js?v="+{293:"24f6a6ad6689d54e2835",728:"1316db9caad2256ea253"}[e],j.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),j.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="nbgitpuller-jl-interface:",j.l=(t,n,o,a)=>{if(e[t])e[t].push(n);else{var i,l;if(void 0!==o)for(var u=document.getElementsByTagName("script"),f=0;f<u.length;f++){var s=u[f];if(s.getAttribute("src")==t||s.getAttribute("data-webpack")==r+o){i=s;break}}i||(l=!0,(i=document.createElement("script")).charset="utf-8",j.nc&&i.setAttribute("nonce",j.nc),i.setAttribute("data-webpack",r+o),i.src=t),e[t]=[n];var d=(r,n)=>{i.onerror=i.onload=null,clearTimeout(p);var o=e[t];if(delete e[t],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach(e=>e(n)),r)return r(n)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),l&&document.head.appendChild(i)}},j.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{j.S={};var e={},r={};j.I=(t,n)=>{n||(n=[]);var o=r[t];if(o||(o=r[t]={}),!(n.indexOf(o)>=0)){if(n.push(o),e[t])return e[t];j.o(j.S,t)||(j.S[t]={});var a=j.S[t],i="nbgitpuller-jl-interface",l=[];return"default"===t&&((e,r,t,n)=>{var o=a[e]=a[e]||{},l=o[r];(!l||!l.loaded&&(1!=!l.eager?n:i>l.from))&&(o[r]={get:()=>j.e(293).then(()=>()=>j(293)),from:i,eager:!1})})("nbgitpuller-jl-interface","0.4.0"),e[t]=l.length?Promise.all(l).then(()=>e[t]=1):1}}})(),(()=>{var e;j.g.importScripts&&(e=j.g.location+"");var r=j.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var n=t.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=t[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),j.p=e})(),t=e=>{var r=e=>e.split(".").map(e=>+e==e?+e:e),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=t[1]?r(t[1]):[];return t[2]&&(n.length++,n.push.apply(n,r(t[2]))),t[3]&&(n.push([]),n.push.apply(n,r(t[3]))),n},n=(e,r)=>{e=t(e),r=t(r);for(var n=0;;){if(n>=e.length)return n<r.length&&"u"!=(typeof r[n])[0];var o=e[n],a=(typeof o)[0];if(n>=r.length)return"u"==a;var i=r[n],l=(typeof i)[0];if(a!=l)return"o"==a&&"n"==l||"s"==l||"u"==a;if("o"!=a&&"u"!=a&&o!=i)return o<i;n++}},o=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var n=1,a=1;a<e.length;a++)n--,t+="u"==(typeof(l=e[a]))[0]?"-":(n>0?".":"")+(n=2,l);return t}var i=[];for(a=1;a<e.length;a++){var l=e[a];i.push(0===l?"not("+u()+")":1===l?"("+u()+" || "+u()+")":2===l?i.pop()+" "+i.pop():o(l))}return u();function u(){return i.pop().replace(/^\((.+)\)$/,"$1")}},a=(e,r)=>{if(0 in e){r=t(r);var n=e[0],o=n<0;o&&(n=-n-1);for(var i=0,l=1,u=!0;;l++,i++){var f,s,d=l<e.length?(typeof e[l])[0]:"";if(i>=r.length||"o"==(s=(typeof(f=r[i]))[0]))return!u||("u"==d?l>n&&!o:""==d!=o);if("u"==s){if(!u||"u"!=d)return!1}else if(u)if(d==s)if(l<=n){if(f!=e[l])return!1}else{if(o?f>e[l]:f<e[l])return!1;f!=e[l]&&(u=!1)}else if("s"!=d&&"n"!=d){if(o||l<=n)return!1;u=!1,l--}else{if(l<=n||s<d!=o)return!1;u=!1}else"s"!=d&&"n"!=d&&(u=!1,l--)}}var p=[],c=p.pop.bind(p);for(i=1;i<e.length;i++){var h=e[i];p.push(1==h?c()|c():2==h?c()&c():h?a(h,r):!c())}return!!c()},i=(e,r)=>e&&j.o(e,r),l=e=>(e.loaded=1,e.get()),u=e=>Object.keys(e).reduce((r,t)=>(e[t].eager&&(r[t]=e[t]),r),{}),f=(e,r,t)=>{var o=t?u(e[r]):e[r];return Object.keys(o).reduce((e,r)=>!e||!o[e].loaded&&n(e,r)?r:e,0)},s=(e,r,t,n)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+o(n)+")",d=e=>{throw new Error(e)},p=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},c=(e,r,t)=>t?t():((e,r)=>d("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),h=(e=>function(r,t,n,o,a){var i=j.I(r);return i&&i.then&&!n?i.then(e.bind(e,r,j.S[r],t,!1,o,a)):e(r,j.S[r],t,n,o,a)})((e,r,t,n,o,u)=>{if(!i(r,t))return c(e,t,u);var d=f(r,t,n);return a(o,d)||p(s(r,t,d,o)),l(r[t][d])}),v={},g={41:()=>h("default","@jupyterlab/coreutils",!1,[1,6,5,6]),53:()=>h("default","@lumino/algorithm",!1,[1,2,0,0]),247:()=>h("default","@lumino/widgets",!1,[1,2,3,1,,"alpha",1]),726:()=>h("default","@jupyterlab/settingregistry",!1,[1,4,5,6]),778:()=>h("default","@jupyterlab/apputils",!1,[1,4,6,6]),813:()=>h("default","@jupyterlab/application",!1,[1,4,5,6])},b={293:[41,53,247,726,778,813]},m={},j.f.consumes=(e,r)=>{j.o(b,e)&&b[e].forEach(e=>{if(j.o(v,e))return r.push(v[e]);if(!m[e]){var t=r=>{v[e]=0,j.m[e]=t=>{delete j.c[e],t.exports=r()}};m[e]=!0;var n=r=>{delete v[e],j.m[e]=t=>{throw delete j.c[e],r}};try{var o=g[e]();o.then?r.push(v[e]=o.then(t).catch(n)):t(o)}catch(e){n(e)}}})},(()=>{var e={34:0};j.f.j=(r,t)=>{var n=j.o(e,r)?e[r]:void 0;if(0!==n)if(n)t.push(n[2]);else{var o=new Promise((t,o)=>n=e[r]=[t,o]);t.push(n[2]=o);var a=j.p+j.u(r),i=new Error;j.l(a,t=>{if(j.o(e,r)&&(0!==(n=e[r])&&(e[r]=void 0),n)){var o=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+o+": "+a+")",i.name="ChunkLoadError",i.type=o,i.request=a,n[1](i)}},"chunk-"+r,r)}};var r=(r,t)=>{var n,o,[a,i,l]=t,u=0;if(a.some(r=>0!==e[r])){for(n in i)j.o(i,n)&&(j.m[n]=i[n]);l&&l(j)}for(r&&r(t);u<a.length;u++)o=a[u],j.o(e,o)&&e[o]&&e[o][0](),e[o]=0},t=self.webpackChunknbgitpuller_jl_interface=self.webpackChunknbgitpuller_jl_interface||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),j.nc=void 0;var S=j(234);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB)["nbgitpuller-jl-interface"]=S})();
|
|
@@ -10,7 +10,11 @@ import {
|
|
|
10
10
|
it
|
|
11
11
|
} from '@jest/globals';
|
|
12
12
|
|
|
13
|
-
import {
|
|
13
|
+
import {
|
|
14
|
+
checkForRepoUpdates,
|
|
15
|
+
setUpdateButtonDisplay,
|
|
16
|
+
WidgetState
|
|
17
|
+
} from '../utils';
|
|
14
18
|
|
|
15
19
|
describe('nbgitpuller-jl-interface utils checkForRepoUpdates', () => {
|
|
16
20
|
beforeEach(() => {});
|
|
@@ -34,10 +38,9 @@ describe('nbgitpuller-jl-interface utils checkForRepoUpdates', () => {
|
|
|
34
38
|
}) as unknown as Response
|
|
35
39
|
);
|
|
36
40
|
|
|
37
|
-
const returnValue = await checkForRepoUpdates(
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
);
|
|
41
|
+
const returnValue = await checkForRepoUpdates([
|
|
42
|
+
{ repoUrl: 'https://fakerepo.com', branch: 'main', destPath: 'mypath' }
|
|
43
|
+
]);
|
|
41
44
|
|
|
42
45
|
expect(returnValue).toStrictEqual({
|
|
43
46
|
response: { numToBeUpdated: 1, numWithErrors: 0 },
|
|
@@ -61,10 +64,9 @@ describe('nbgitpuller-jl-interface utils checkForRepoUpdates', () => {
|
|
|
61
64
|
);
|
|
62
65
|
|
|
63
66
|
// const returnValue = await fetch("https://aaagaag.com")
|
|
64
|
-
const returnValue = await checkForRepoUpdates(
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
);
|
|
67
|
+
const returnValue = await checkForRepoUpdates([
|
|
68
|
+
{ repoUrl: 'https://fakerepo.com', branch: 'main', destPath: 'mypath' }
|
|
69
|
+
]);
|
|
68
70
|
|
|
69
71
|
expect(returnValue).toStrictEqual({
|
|
70
72
|
response: { numToBeUpdated: 0, numWithErrors: 1 },
|
|
@@ -116,14 +118,11 @@ describe('nbgitpuller-jl-interface utils checkForRepoUpdates', () => {
|
|
|
116
118
|
);
|
|
117
119
|
|
|
118
120
|
// const returnValue = await fetch("https://aaagaag.com")
|
|
119
|
-
const returnValue = await checkForRepoUpdates(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
],
|
|
125
|
-
'/'
|
|
126
|
-
);
|
|
121
|
+
const returnValue = await checkForRepoUpdates([
|
|
122
|
+
{ repoUrl: 'https://fakerepo.com', branch: 'main', destPath: 'mypath' },
|
|
123
|
+
{ repoUrl: 'https://fakerepo.com', branch: 'main', destPath: 'mypath' },
|
|
124
|
+
{ repoUrl: 'https://fakerepo.com', branch: 'main', destPath: 'mypath' }
|
|
125
|
+
]);
|
|
127
126
|
expect(returnValue).toStrictEqual({
|
|
128
127
|
response: { numToBeUpdated: 2, numWithErrors: 1 },
|
|
129
128
|
statuscode: 0
|
|
@@ -139,45 +138,44 @@ describe('nbgitpuller-jl-interface utils setUpdateButtonDisplay', () => {
|
|
|
139
138
|
document.body.innerHTML = '';
|
|
140
139
|
});
|
|
141
140
|
|
|
142
|
-
it('widget up to date
|
|
141
|
+
it('widget up to date success', async () => {
|
|
143
142
|
const widget = await document.createElement('div');
|
|
144
143
|
widget.id = 'nbgitpuller-jl-interface-update-btn';
|
|
145
144
|
document.body.appendChild(widget);
|
|
146
145
|
|
|
147
|
-
const returnValue = await setUpdateButtonDisplay(
|
|
148
|
-
true,
|
|
149
|
-
'',
|
|
150
|
-
[{ repoUrl: 'https://fakerepo.com', branch: 'main', destPath: 'mypath' }],
|
|
151
|
-
'/'
|
|
152
|
-
);
|
|
146
|
+
const returnValue = await setUpdateButtonDisplay(WidgetState.UpToDate, '');
|
|
153
147
|
|
|
154
148
|
expect(returnValue).toStrictEqual({ error: '', returncode: 0 });
|
|
155
149
|
expect(widget.innerHTML).toContain(`<span class="success">◉</span>`);
|
|
156
150
|
});
|
|
157
151
|
|
|
158
|
-
it('widget update
|
|
152
|
+
it('widget update required', async () => {
|
|
159
153
|
const widget = await document.createElement('div');
|
|
160
154
|
widget.id = 'nbgitpuller-jl-interface-update-btn';
|
|
161
155
|
document.body.appendChild(widget);
|
|
162
156
|
|
|
163
157
|
const returnValue = await setUpdateButtonDisplay(
|
|
164
|
-
|
|
165
|
-
''
|
|
166
|
-
[{ repoUrl: 'https://fakerepo.com', branch: 'main', destPath: 'mypath' }],
|
|
167
|
-
'/'
|
|
158
|
+
WidgetState.UpdateRequired,
|
|
159
|
+
''
|
|
168
160
|
);
|
|
169
161
|
|
|
162
|
+
expect(returnValue).toStrictEqual({ error: '', returncode: 0 });
|
|
163
|
+
expect(widget.innerHTML).toContain(`<span class="pending blink">◉</span>`);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
it('widget error', async () => {
|
|
167
|
+
const widget = await document.createElement('div');
|
|
168
|
+
widget.id = 'nbgitpuller-jl-interface-update-btn';
|
|
169
|
+
document.body.appendChild(widget);
|
|
170
|
+
|
|
171
|
+
const returnValue = await setUpdateButtonDisplay(WidgetState.Error, '');
|
|
172
|
+
|
|
170
173
|
expect(returnValue).toStrictEqual({ error: '', returncode: 0 });
|
|
171
174
|
expect(widget.innerHTML).toContain(`<span class="failure blink">◉</span>`);
|
|
172
175
|
});
|
|
173
176
|
|
|
174
177
|
it('widget not found', async () => {
|
|
175
|
-
const returnValue = await setUpdateButtonDisplay(
|
|
176
|
-
false,
|
|
177
|
-
'',
|
|
178
|
-
[{ repoUrl: 'https://fakerepo.com', branch: 'main', destPath: 'mypath' }],
|
|
179
|
-
'/'
|
|
180
|
-
);
|
|
178
|
+
const returnValue = await setUpdateButtonDisplay(WidgetState.Error, '');
|
|
181
179
|
|
|
182
180
|
expect(returnValue).toStrictEqual({
|
|
183
181
|
error: 'Unable to find nbgitpuller widget',
|
|
@@ -44,8 +44,6 @@ const plugin: JupyterFrontEndPlugin<void> = {
|
|
|
44
44
|
settingRegistry: ISettingRegistry | null,
|
|
45
45
|
paths: JupyterFrontEnd.IPaths
|
|
46
46
|
) => {
|
|
47
|
-
const baseUrl = paths?.urls?.base;
|
|
48
|
-
|
|
49
47
|
// Wait for the application to be restored and
|
|
50
48
|
// for the settings for this plugin to be loaded
|
|
51
49
|
if (!settingRegistry) {
|
|
@@ -62,23 +60,23 @@ const plugin: JupyterFrontEndPlugin<void> = {
|
|
|
62
60
|
await settings.set('reloadWidget', true);
|
|
63
61
|
|
|
64
62
|
async function loadSettings(
|
|
65
|
-
allSettings: ISettingRegistry.ISettings
|
|
66
|
-
baseUrl: string
|
|
63
|
+
allSettings: ISettingRegistry.ISettings
|
|
67
64
|
): Promise<void> {
|
|
68
65
|
const reloadWidget = allSettings.get('reloadWidget')
|
|
69
66
|
.composite as boolean;
|
|
67
|
+
|
|
70
68
|
if (reloadWidget) {
|
|
71
|
-
await nbgitpullerUpdateButton(app, allSettings
|
|
72
|
-
await repoUpdateProbe(allSettings
|
|
69
|
+
await nbgitpullerUpdateButton(app, allSettings);
|
|
70
|
+
await repoUpdateProbe(allSettings);
|
|
73
71
|
await allSettings.set('reloadWidget', false);
|
|
74
72
|
}
|
|
75
73
|
}
|
|
76
74
|
|
|
77
75
|
// Read the settings
|
|
78
|
-
loadSettings(settings
|
|
76
|
+
loadSettings(settings);
|
|
79
77
|
|
|
80
78
|
// Listen for your plugin setting changes using Signal
|
|
81
|
-
settings.changed.connect(
|
|
79
|
+
settings.changed.connect(loadSettings);
|
|
82
80
|
|
|
83
81
|
console.log(
|
|
84
82
|
'JupyterLab extension nbgitpuller-jl-interface is fully operational!'
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { JupyterFrontEnd } from '@jupyterlab/application';
|
|
2
2
|
|
|
3
|
-
import { ToolbarButton } from '@jupyterlab/apputils';
|
|
4
|
-
|
|
5
3
|
import { find } from '@lumino/algorithm';
|
|
6
4
|
|
|
5
|
+
import { Widget } from '@lumino/widgets';
|
|
6
|
+
|
|
7
7
|
import { ISettingRegistry } from '@jupyterlab/settingregistry';
|
|
8
8
|
|
|
9
|
+
import { PageConfig, URLExt } from '@jupyterlab/coreutils';
|
|
10
|
+
|
|
9
11
|
const widget_id = 'nbgitpuller-jl-interface-update-btn';
|
|
10
12
|
let intervalID: ReturnType<typeof setInterval>;
|
|
11
13
|
let currentlyUpdating: boolean = false;
|
|
@@ -18,8 +20,7 @@ export interface IRepository {
|
|
|
18
20
|
|
|
19
21
|
export async function nbgitpullerUpdateButton(
|
|
20
22
|
app: JupyterFrontEnd,
|
|
21
|
-
allSettings: ISettingRegistry.ISettings
|
|
22
|
-
baseUrl: string
|
|
23
|
+
allSettings: ISettingRegistry.ISettings
|
|
23
24
|
): Promise<void> {
|
|
24
25
|
const repositories = allSettings.get('repos')
|
|
25
26
|
.composite as any as IRepository[];
|
|
@@ -31,29 +32,58 @@ export async function nbgitpullerUpdateButton(
|
|
|
31
32
|
widget.dispose();
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
const newWidget = new Widget();
|
|
36
|
+
newWidget.id = widget_id;
|
|
37
|
+
newWidget.addClass('lm-Widget');
|
|
38
|
+
newWidget.addClass('jp-ToolbarButton');
|
|
39
|
+
newWidget.addClass('nbgitpuller-jl-interface-wrapper');
|
|
40
|
+
newWidget.node.addEventListener('click', async () => {
|
|
41
|
+
// Throttle updating
|
|
42
|
+
if (currentlyUpdating) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// Set updating flag
|
|
46
|
+
currentlyUpdating = true;
|
|
47
|
+
|
|
48
|
+
// Update widget to running animation
|
|
49
|
+
const pendingTooltip = 'Updating Notebooks...';
|
|
50
|
+
await setUpdateButtonDisplay(WidgetState.Updating, pendingTooltip);
|
|
51
|
+
|
|
52
|
+
// Pull each repository
|
|
53
|
+
const failed_updates = await makeNbgitpullerRequest(repositories);
|
|
54
|
+
|
|
55
|
+
// Update widget to all updated or pending updates
|
|
56
|
+
await checkForUpdatesAndSetDisplay(repositories);
|
|
57
|
+
|
|
58
|
+
// Notify users of any failure
|
|
59
|
+
if (failed_updates.length !== 0) {
|
|
60
|
+
let failure_message = 'Failed to update the following notebooks: \n';
|
|
61
|
+
for (const failure of failed_updates) {
|
|
62
|
+
failure_message += `${failure['repo']}`;
|
|
63
|
+
}
|
|
64
|
+
console.log(failure_message);
|
|
65
|
+
alert(failure_message);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Unset updating flag
|
|
69
|
+
currentlyUpdating = false;
|
|
39
70
|
});
|
|
40
|
-
|
|
41
|
-
updateReposBtn.addClass('nbgitpuller-jl-interface-wrapper');
|
|
71
|
+
|
|
42
72
|
// 1-899 left justified, 900+ right justified
|
|
43
|
-
app.shell.add(
|
|
73
|
+
app.shell.add(newWidget, 'top', { rank: rank });
|
|
74
|
+
|
|
75
|
+
// Wait one second for initial creation timing
|
|
76
|
+
await new Promise(f => setTimeout(f, 1000));
|
|
44
77
|
|
|
45
78
|
// Check for updates
|
|
46
|
-
checkForUpdatesAndSetDisplay(repositories
|
|
79
|
+
await checkForUpdatesAndSetDisplay(repositories);
|
|
47
80
|
|
|
48
81
|
console.log('nbgitpuller-jl-interface settings loaded');
|
|
49
82
|
}
|
|
50
83
|
|
|
51
|
-
export async function makeNbgitpullerRequest(
|
|
52
|
-
|
|
53
|
-
baseUrl
|
|
54
|
-
) {
|
|
55
|
-
const url =
|
|
56
|
-
window.location.origin + baseUrl + 'nbgitpuller-jl-interface/gitpuller';
|
|
84
|
+
export async function makeNbgitpullerRequest(repositories: IRepository[]) {
|
|
85
|
+
const baseUrl = PageConfig.getBaseUrl();
|
|
86
|
+
const url = URLExt.join(baseUrl, 'nbgitpuller-jl-interface', 'gitpuller');
|
|
57
87
|
const xsrfToken = document.cookie
|
|
58
88
|
.split(';')
|
|
59
89
|
.find(row => row.startsWith('_xsrf='))
|
|
@@ -90,8 +120,7 @@ export async function makeNbgitpullerRequest(
|
|
|
90
120
|
}
|
|
91
121
|
|
|
92
122
|
export async function repoUpdateProbe(
|
|
93
|
-
allSettings: ISettingRegistry.ISettings
|
|
94
|
-
baseUrl: string
|
|
123
|
+
allSettings: ISettingRegistry.ISettings
|
|
95
124
|
): Promise<void> {
|
|
96
125
|
const repositories = allSettings.get('repos')
|
|
97
126
|
.composite as any as IRepository[];
|
|
@@ -102,13 +131,12 @@ export async function repoUpdateProbe(
|
|
|
102
131
|
|
|
103
132
|
// Create interval
|
|
104
133
|
intervalID = setInterval(async () => {
|
|
105
|
-
checkForUpdatesAndSetDisplay(repositories
|
|
134
|
+
await checkForUpdatesAndSetDisplay(repositories);
|
|
106
135
|
}, probeInterval);
|
|
107
136
|
}
|
|
108
137
|
|
|
109
138
|
export async function checkForRepoUpdates(
|
|
110
|
-
repositories: IRepository[]
|
|
111
|
-
baseUrl: string
|
|
139
|
+
repositories: IRepository[]
|
|
112
140
|
): Promise<{
|
|
113
141
|
response: { numToBeUpdated: number; numWithErrors: number };
|
|
114
142
|
statuscode: number;
|
|
@@ -123,10 +151,12 @@ export async function checkForRepoUpdates(
|
|
|
123
151
|
const destination = repo['destPath'];
|
|
124
152
|
|
|
125
153
|
// Poll repo for any new commits
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
baseUrl
|
|
129
|
-
'nbgitpuller-jl-interface
|
|
154
|
+
const baseUrl = PageConfig.getBaseUrl();
|
|
155
|
+
const url = URLExt.join(
|
|
156
|
+
baseUrl,
|
|
157
|
+
'nbgitpuller-jl-interface',
|
|
158
|
+
'update-check'
|
|
159
|
+
);
|
|
130
160
|
const xsrfToken = document.cookie
|
|
131
161
|
.split(';')
|
|
132
162
|
.find(row => row.startsWith('_xsrf='))
|
|
@@ -162,39 +192,35 @@ export async function checkForRepoUpdates(
|
|
|
162
192
|
}
|
|
163
193
|
|
|
164
194
|
export async function checkForUpdatesAndSetDisplay(
|
|
165
|
-
repositories: IRepository[]
|
|
166
|
-
baseUrl: string
|
|
195
|
+
repositories: IRepository[]
|
|
167
196
|
) {
|
|
168
197
|
// Check for updates
|
|
169
|
-
const repoUpdates = await checkForRepoUpdates(repositories
|
|
198
|
+
const repoUpdates = await checkForRepoUpdates(repositories);
|
|
199
|
+
|
|
170
200
|
// Update display
|
|
171
201
|
if (repoUpdates['statuscode'] === 0) {
|
|
172
202
|
const updateCheckResponse = repoUpdates['response'] as {
|
|
173
203
|
numToBeUpdated: number;
|
|
174
204
|
numWithErrors: number;
|
|
175
205
|
};
|
|
206
|
+
|
|
176
207
|
// Generate tooltip
|
|
177
|
-
let tooltip
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
updateCheckResponse['numWithErrors']
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
if (updateCheckResponse['numWithErrors']) {
|
|
186
|
-
tooltip += `${updateCheckResponse['numWithErrors']} repos with errors`;
|
|
187
|
-
}
|
|
208
|
+
let tooltip;
|
|
209
|
+
let widgetState;
|
|
210
|
+
if (updateCheckResponse['numWithErrors'] > 0) {
|
|
211
|
+
tooltip = `${updateCheckResponse['numWithErrors']} notebooks with errors`;
|
|
212
|
+
widgetState = WidgetState.Error;
|
|
213
|
+
} else if (updateCheckResponse['numToBeUpdated'] > 0) {
|
|
214
|
+
tooltip = `${updateCheckResponse['numToBeUpdated']} notebooks awaiting updates\n`;
|
|
215
|
+
widgetState = WidgetState.UpdateRequired;
|
|
188
216
|
} else {
|
|
189
|
-
tooltip = `${repositories.length}
|
|
217
|
+
tooltip = `${repositories.length} Notebooks up to date`;
|
|
218
|
+
widgetState = WidgetState.UpToDate;
|
|
190
219
|
}
|
|
220
|
+
|
|
191
221
|
const updateDisplayResponse = await setUpdateButtonDisplay(
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
0,
|
|
195
|
-
tooltip,
|
|
196
|
-
repositories,
|
|
197
|
-
baseUrl
|
|
222
|
+
widgetState,
|
|
223
|
+
tooltip
|
|
198
224
|
);
|
|
199
225
|
if (updateDisplayResponse.returncode !== 0) {
|
|
200
226
|
console.error(updateDisplayResponse);
|
|
@@ -202,11 +228,17 @@ export async function checkForUpdatesAndSetDisplay(
|
|
|
202
228
|
}
|
|
203
229
|
}
|
|
204
230
|
|
|
231
|
+
export enum WidgetState {
|
|
232
|
+
UpToDate,
|
|
233
|
+
UpdateRequired,
|
|
234
|
+
Updating,
|
|
235
|
+
Error,
|
|
236
|
+
Initializing
|
|
237
|
+
}
|
|
238
|
+
|
|
205
239
|
export async function setUpdateButtonDisplay(
|
|
206
|
-
|
|
207
|
-
tooltip: string
|
|
208
|
-
repositories: IRepository[],
|
|
209
|
-
baseUrl: string
|
|
240
|
+
targetWidgetState: WidgetState,
|
|
241
|
+
tooltip: string
|
|
210
242
|
): Promise<{ error: string; returncode: number }> {
|
|
211
243
|
// Get widget
|
|
212
244
|
const widget: HTMLElement | null = document.getElementById(widget_id);
|
|
@@ -216,56 +248,30 @@ export async function setUpdateButtonDisplay(
|
|
|
216
248
|
|
|
217
249
|
// Create button label html
|
|
218
250
|
let labelHTML;
|
|
219
|
-
if (
|
|
251
|
+
if (targetWidgetState === WidgetState.UpToDate) {
|
|
220
252
|
labelHTML = '<p><span class="success">◉</span> Up to Date</p>';
|
|
253
|
+
} else if (targetWidgetState === WidgetState.Updating) {
|
|
254
|
+
labelHTML = '<p><span class="lds-dual-ring"></span> Updating</p>';
|
|
255
|
+
} else if (targetWidgetState === WidgetState.UpdateRequired) {
|
|
256
|
+
labelHTML = '<p><span class="pending blink">◉</span> Update Notebooks</p>';
|
|
257
|
+
} else if (targetWidgetState === WidgetState.Error) {
|
|
258
|
+
labelHTML = '<p><span class="failure blink">◉</span> Update Error</p>';
|
|
259
|
+
} else if (targetWidgetState === WidgetState.Initializing) {
|
|
260
|
+
labelHTML = '<p><span class="">◉</span> Initializing</p>';
|
|
221
261
|
} else {
|
|
222
|
-
|
|
262
|
+
return { error: 'Unknown widget state', returncode: 2 };
|
|
223
263
|
}
|
|
224
264
|
|
|
225
|
-
function generateWidgetHTML(
|
|
265
|
+
function generateWidgetHTML(labelHTML: string): string {
|
|
226
266
|
return `
|
|
227
|
-
<div class="lm-Widget jp-ToolbarButton nbgitpuller-jl-interface-wrapper"
|
|
228
|
-
title="${tooltip}">
|
|
229
267
|
<jp-button class="nbgitpuller-jl-interface-update-btn jp-ToolbarButtonComponent">
|
|
230
268
|
${labelHTML}
|
|
231
|
-
</jp-button
|
|
232
|
-
</div>`;
|
|
269
|
+
</jp-button>`;
|
|
233
270
|
}
|
|
234
271
|
|
|
235
272
|
// Update widget functionality
|
|
236
|
-
widget.
|
|
237
|
-
widget.
|
|
238
|
-
// Throttle updating
|
|
239
|
-
if (currentlyUpdating) {
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
// Set updating flag
|
|
243
|
-
currentlyUpdating = true;
|
|
244
|
-
// Update widget to running animation
|
|
245
|
-
const pendingTooltip = 'Updating Repos...';
|
|
246
|
-
const pendingLabelHTML =
|
|
247
|
-
'<p><span class="lds-dual-ring"></span> Updating</p>';
|
|
248
|
-
widget.innerHTML = generateWidgetHTML(pendingTooltip, pendingLabelHTML);
|
|
249
|
-
|
|
250
|
-
// Pull each repository
|
|
251
|
-
const failed_updates = await makeNbgitpullerRequest(repositories, baseUrl);
|
|
252
|
-
|
|
253
|
-
// Update widget to all updated or pending updates
|
|
254
|
-
checkForUpdatesAndSetDisplay(repositories, baseUrl);
|
|
255
|
-
|
|
256
|
-
// Notify users of any failure
|
|
257
|
-
if (failed_updates.length !== 0) {
|
|
258
|
-
let failure_message = 'Failed to update the following repos: \n';
|
|
259
|
-
for (const failure of failed_updates) {
|
|
260
|
-
failure_message += `${failure['repo']}`;
|
|
261
|
-
}
|
|
262
|
-
console.log(failure_message);
|
|
263
|
-
alert(failure_message);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// Unset updating flag
|
|
267
|
-
currentlyUpdating = false;
|
|
268
|
-
});
|
|
273
|
+
widget.title = tooltip;
|
|
274
|
+
widget.innerHTML = generateWidgetHTML(labelHTML);
|
|
269
275
|
|
|
270
276
|
return { error: '', returncode: 0 };
|
|
271
277
|
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
<!-- <START NEW CHANGELOG ENTRY> -->
|
|
4
|
-
|
|
5
|
-
## 0.2.5
|
|
6
|
-
|
|
7
|
-
([Full Changelog](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/compare/v0.2.4...acb905136fd3b05e07da5e1c3da4ee88bec7aba9))
|
|
8
|
-
|
|
9
|
-
### Bugs fixed
|
|
10
|
-
|
|
11
|
-
- Sg/fix url for deployment [#3](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/pull/3) ([@segallagher](https://github.com/segallagher), [@emlundell](https://github.com/emlundell))
|
|
12
|
-
|
|
13
|
-
### Contributors to this release
|
|
14
|
-
|
|
15
|
-
The following people contributed discussions, new ideas, code and documentation contributions, and review.
|
|
16
|
-
See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports).
|
|
17
|
-
|
|
18
|
-
([GitHub contributors page for this release](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/graphs/contributors?from=2026-04-07&to=2026-04-09&type=c))
|
|
19
|
-
|
|
20
|
-
@emlundell ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Aemlundell+updated%3A2026-04-07..2026-04-09&type=Issues)) | @segallagher ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Asegallagher+updated%3A2026-04-07..2026-04-09&type=Issues))
|
|
21
|
-
|
|
22
|
-
<!-- <END NEW CHANGELOG ENTRY> -->
|
|
23
|
-
|
|
24
|
-
## 0.2.4
|
|
25
|
-
|
|
26
|
-
([Full Changelog](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/compare/v0.2.1...fa249abe827af836d7aa2ac0a870c4d30eff516e))
|
|
27
|
-
|
|
28
|
-
### Enhancements made
|
|
29
|
-
|
|
30
|
-
- Update Functionality to be functional [#2](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/pull/2) ([@segallagher](https://github.com/segallagher), [@dgpalmieri](https://github.com/dgpalmieri))
|
|
31
|
-
|
|
32
|
-
### Contributors to this release
|
|
33
|
-
|
|
34
|
-
The following people contributed discussions, new ideas, code and documentation contributions, and review.
|
|
35
|
-
See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports).
|
|
36
|
-
|
|
37
|
-
([GitHub contributors page for this release](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/graphs/contributors?from=2026-04-06&to=2026-04-07&type=c))
|
|
38
|
-
|
|
39
|
-
@dgpalmieri ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Adgpalmieri+updated%3A2026-04-06..2026-04-07&type=Issues)) | @segallagher ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Asegallagher+updated%3A2026-04-06..2026-04-07&type=Issues))
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunknbgitpuller_jl_interface=self.webpackChunknbgitpuller_jl_interface||[]).push([[293],{293(t,e,n){n.r(e),n.d(e,{default:()=>f,getJupyterAppInstance:()=>d});var o=n(813),r=n(778),i=n(53);const a="nbgitpuller-jl-interface-update-btn";let l,s=!1;async function c(t,e){const n=await async function(t,e){var n;let o=0,r=0;for(const i of t){const t=i.repoUrl,a=i.branch,l=i.destPath,s=window.location.origin+e+"nbgitpuller-jl-interface/update-check",c=null===(n=document.cookie.split(";").find(t=>t.startsWith("_xsrf=")))||void 0===n?void 0:n.split("=")[1],p=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json","X-XSRFToken":null!=c?c:""},body:JSON.stringify({repositoryUrl:t,repositoryBranch:a,destination:l})}),u=await p.json();0!==u.returncode?r+=1:u.updatefound&&(o+=1)}return{response:{numToBeUpdated:o,numWithErrors:r},statuscode:0}}(t,e);if(0===n.statuscode){const o=n.response;let r="";o.numToBeUpdated+o.numWithErrors?(o.numToBeUpdated&&(r+=`${o.numToBeUpdated} awaiting updates\n`),o.numWithErrors&&(r+=`${o.numWithErrors} repos with errors`)):r=`${t.length} Repos up to date`;const i=await async function(t,e,n,o){const r=document.getElementById(a);if(!r)return{error:"Unable to find nbgitpuller widget",returncode:1};let i;function l(t,e){return`\n <div class="lm-Widget jp-ToolbarButton nbgitpuller-jl-interface-wrapper"\n title="${t}">\n <jp-button class="nbgitpuller-jl-interface-update-btn jp-ToolbarButtonComponent">\n ${e}\n </jp-button>\n </div>`}return i=t?'<p><span class="success">◉</span> Up to Date</p>':'<p><span class="failure blink">◉</span> Update Repos</p>',r.innerHTML=l(e,i),r.addEventListener("click",async()=>{if(s)return;s=!0;r.innerHTML=l("Updating Repos...",'<p><span class="lds-dual-ring"></span> Updating</p>');const t=await async function(t,e){var n;const o=window.location.origin+e+"nbgitpuller-jl-interface/gitpuller",r=null===(n=document.cookie.split(";").find(t=>t.startsWith("_xsrf=")))||void 0===n?void 0:n.split("=")[1],i=[];for(const e of t){const t=e.repoUrl,n=e.branch,a=e.destPath,l=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json","X-XSRFToken":null!=r?r:""},body:JSON.stringify({repositoryUrl:t,repositoryBranch:n,destination:a})}),s=await l.json();0!==s.returncode&&i.push({repo:t,reason:s.error})}return i}(n,o);if(c(n,o),0!==t.length){let e="Failed to update the following repos: \n";for(const n of t)e+=`${n.repo}`;console.log(e),alert(e)}s=!1}),{error:"",returncode:0}}(o.numToBeUpdated+o.numWithErrors===0,r,t,e);0!==i.returncode&&console.error(i)}}var p=n(726);let u=null;function d(t){if(!u&&t&&(u=t),!u)throw new Error("App instance has not been initialized yet");return u}const g={id:"nbgitpuller-jl-interface:plugin",description:"A human interface with nbgitpuller in JupyterBook",autoStart:!0,optional:[],requires:[o.ILabShell,r.ICommandPalette,p.ISettingRegistry,o.JupyterFrontEnd.IPaths],activate:(t,e,n,o,s)=>{var p;const u=null===(p=null==s?void 0:s.urls)||void 0===p?void 0:p.base;o?(Promise.all([t.restored,o.load(g.id)]).then(async([,e])=>{async function n(e,n){e.get("reloadWidget").composite&&(await async function(t,e,n){const o=e.get("repos").composite,l=e.get("rank").composite,s=(0,i.find)(t.shell.widgets("top"),t=>t.id===a);s&&s.dispose();const p=new r.ToolbarButton({className:"nbgitpuller-jl-interface-update-btn",label:"◉ Initializing",tooltip:"Initializing nbgitpuller"});p.id=a,p.addClass("nbgitpuller-jl-interface-wrapper"),t.shell.add(p,"top",{rank:l}),c(o,n),console.log("nbgitpuller-jl-interface settings loaded")}(t,e,n),await async function(t,e){const n=t.get("repos").composite,o=t.get("probeInterval").composite;clearInterval(l),l=setInterval(async()=>{c(n,e)},o)}(e,n),await e.set("reloadWidget",!1))}await e.set("reloadWidget",!0),n(e,u),e.changed.connect(t=>n(t,u)),console.log("JupyterLab extension nbgitpuller-jl-interface is fully operational!")}).catch(t=>{console.error(`Something went wrong...${t}`)}),console.log("JupyterLab extension nbgitpuller-jl-interface is activated!")):console.log("Settings not found. nbgitpuller-jl-interface cannot be established.")}},f=g}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunknbgitpuller_jl_interface=self.webpackChunknbgitpuller_jl_interface||[]).push([[728],{475(n,e,t){t.d(e,{A:()=>s});var r=t(601),a=t.n(r),o=t(314),i=t.n(o)()(a());i.push([n.id,"/*\n See the JupyterLab Developer Guide for useful CSS Patterns:\n\n https://jupyterlab.readthedocs.io/en/stable/developer/css.html\n*/\n\n/* Manual button css */\n.nbgitpuller-jl-interface-update-btn {\n border: 1px solid #bdbdbd;\n border-radius: 15px;\n padding-right: 5px;\n padding-left: 5px;\n}\n\n/* For jupyter created button css */\njp-button.nbgitpuller-jl-interface-update-btn {\n border: 1px solid #bdbdbd;\n border-radius: 15px;\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.nbgitpuller-jl-interface-wrapper {\n padding-left: 10px !important;\n padding-right: 10px !important;\n flex-direction: column;\n display: flex;\n justify-content: center;\n}\n\n.success {\n color: #5cb85c;\n}\n\n.failure {\n color: #d63124;\n}\n\n.blink {\n animation: blinker-me-blinker 2s linear infinite;\n}\n\n@keyframes blinker-me-blinker {\n 50% {\n opacity: 0;\n }\n}\n\n/* https://loading.io/css/ */\n.lds-dual-ring,\n.lds-dual-ring::after {\n box-sizing: border-box;\n}\n\n.lds-dual-ring {\n display: inline-block;\n width: 10px;\n height: 10px;\n}\n\n.lds-dual-ring::after {\n content: ' ';\n display: block;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n border: 1.6px solid currentcolor;\n border-color: currentcolor transparent;\n animation: lds-dual-ring 1.2s linear infinite;\n}\n\n@keyframes lds-dual-ring {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n",""]);const s=i},314(n){n.exports=function(n){var e=[];return e.toString=function(){return this.map(function(e){var t="",r=void 0!==e[5];return e[4]&&(t+="@supports (".concat(e[4],") {")),e[2]&&(t+="@media ".concat(e[2]," {")),r&&(t+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),t+=n(e),r&&(t+="}"),e[2]&&(t+="}"),e[4]&&(t+="}"),t}).join("")},e.i=function(n,t,r,a,o){"string"==typeof n&&(n=[[null,n,void 0]]);var i={};if(r)for(var s=0;s<this.length;s++){var c=this[s][0];null!=c&&(i[c]=!0)}for(var l=0;l<n.length;l++){var d=[].concat(n[l]);r&&i[d[0]]||(void 0!==o&&(void 0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=o),t&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=t):d[2]=t),a&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=a):d[4]="".concat(a)),e.push(d))}},e}},601(n){n.exports=function(n){return n[1]}},72(n){var e=[];function t(n){for(var t=-1,r=0;r<e.length;r++)if(e[r].identifier===n){t=r;break}return t}function r(n,r){for(var o={},i=[],s=0;s<n.length;s++){var c=n[s],l=r.base?c[0]+r.base:c[0],d=o[l]||0,u="".concat(l," ").concat(d);o[l]=d+1;var p=t(u),f={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==p)e[p].references++,e[p].updater(f);else{var b=a(f,r);r.byIndex=s,e.splice(s,0,{identifier:u,updater:b,references:1})}i.push(u)}return i}function a(n,e){var t=e.domAPI(e);return t.update(n),function(e){if(e){if(e.css===n.css&&e.media===n.media&&e.sourceMap===n.sourceMap&&e.supports===n.supports&&e.layer===n.layer)return;t.update(n=e)}else t.remove()}}n.exports=function(n,a){var o=r(n=n||[],a=a||{});return function(n){n=n||[];for(var i=0;i<o.length;i++){var s=t(o[i]);e[s].references--}for(var c=r(n,a),l=0;l<o.length;l++){var d=t(o[l]);0===e[d].references&&(e[d].updater(),e.splice(d,1))}o=c}}},659(n){var e={};n.exports=function(n,t){var r=function(n){if(void 0===e[n]){var t=document.querySelector(n);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(n){t=null}e[n]=t}return e[n]}(n);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(t)}},540(n){n.exports=function(n){var e=document.createElement("style");return n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},56(n,e,t){n.exports=function(n){var e=t.nc;e&&n.setAttribute("nonce",e)}},825(n){n.exports=function(n){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=n.insertStyleElement(n);return{update:function(t){!function(n,e,t){var r="";t.supports&&(r+="@supports (".concat(t.supports,") {")),t.media&&(r+="@media ".concat(t.media," {"));var a=void 0!==t.layer;a&&(r+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),r+=t.css,a&&(r+="}"),t.media&&(r+="}"),t.supports&&(r+="}");var o=t.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleTagTransform(r,n,e.options)}(e,n,t)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(e)}}}},113(n){n.exports=function(n,e){if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}},728(n,e,t){var r=t(72),a=t.n(r),o=t(825),i=t.n(o),s=t(659),c=t.n(s),l=t(56),d=t.n(l),u=t(540),p=t.n(u),f=t(113),b=t.n(f),h=t(475),m={};m.styleTagTransform=b(),m.setAttributes=d(),m.insert=c().bind(null,"head"),m.domAPI=i(),m.insertStyleElement=p(),a()(h.A,m),h.A&&h.A.locals&&h.A.locals}}]);
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/nbgitpuller_jl_interface/routes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/nbgitpuller_jl_interface/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nbgitpuller_jl_interface-0.2.5 → nbgitpuller_jl_interface-0.4.0}/ui-tests/playwright.config.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|