nbgitpuller-jl-interface 0.3.0__tar.gz → 1.0.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.
Files changed (54) hide show
  1. nbgitpuller_jl_interface-1.0.0/CHANGELOG.md +96 -0
  2. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/PKG-INFO +9 -1
  3. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/README.md +8 -0
  4. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/nbgitpuller_jl_interface/_version.py +1 -1
  5. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/nbgitpuller_jl_interface/labextension/package.json +2 -2
  6. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/nbgitpuller_jl_interface/labextension/schemas/nbgitpuller-jl-interface/package.json.orig +1 -1
  7. nbgitpuller_jl_interface-1.0.0/nbgitpuller_jl_interface/labextension/static/293.488357a8d6ce24253311.js +1 -0
  8. nbgitpuller_jl_interface-1.0.0/nbgitpuller_jl_interface/labextension/static/728.1316db9caad2256ea253.js +1 -0
  9. nbgitpuller_jl_interface-0.3.0/nbgitpuller_jl_interface/labextension/static/remoteEntry.b250a24d9f9650f8659a.js → nbgitpuller_jl_interface-1.0.0/nbgitpuller_jl_interface/labextension/static/remoteEntry.4caf41ad4e8e084aba3e.js +1 -1
  10. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/nbgitpuller_jl_interface/routes.py +1 -1
  11. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/nbgitpuller_jl_interface/utils.py +14 -2
  12. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/package.json +1 -1
  13. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/src/__tests__/nbgitpuller_jb_interface.spec.ts +49 -12
  14. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/src/utils.ts +79 -70
  15. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/style/base.css +4 -0
  16. nbgitpuller_jl_interface-0.3.0/CHANGELOG.md +0 -56
  17. nbgitpuller_jl_interface-0.3.0/nbgitpuller_jl_interface/labextension/static/293.7e24a188a3691a1deaa8.js +0 -1
  18. nbgitpuller_jl_interface-0.3.0/nbgitpuller_jl_interface/labextension/static/728.c80bd4566fc22d8dd093.js +0 -1
  19. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/.copier-answers.yml +0 -0
  20. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/.gitignore +0 -0
  21. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/.prettierignore +0 -0
  22. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/.vscode/settings.json +0 -0
  23. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/.yarnrc.yml +0 -0
  24. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/LICENSE +0 -0
  25. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/RELEASE.md +0 -0
  26. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/babel.config.js +0 -0
  27. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/conftest.py +0 -0
  28. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/install.json +0 -0
  29. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/jest.config.js +0 -0
  30. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/jupyter-config/server-config/nbgitpuller_jl_interface.json +0 -0
  31. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/nbgitpuller_jl_interface/__init__.py +0 -0
  32. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/nbgitpuller_jl_interface/labextension/schemas/nbgitpuller-jl-interface/plugin.json +0 -0
  33. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/nbgitpuller_jl_interface/labextension/static/style.js +0 -0
  34. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/nbgitpuller_jl_interface/labextension/static/third-party-licenses.json +0 -0
  35. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/nbgitpuller_jl_interface/tests/__init__.py +0 -0
  36. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/nbgitpuller_jl_interface/tests/test_routes.py +0 -0
  37. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/nbgitpuller_jl_interface/tests/test_utils.py +0 -0
  38. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/pyproject.toml +0 -0
  39. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/schema/plugin.json +0 -0
  40. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/setup.py +0 -0
  41. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/src/index.ts +0 -0
  42. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/src/request.ts +0 -0
  43. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/style/index.css +0 -0
  44. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/style/index.js +0 -0
  45. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/style/tmp_logo.svg +0 -0
  46. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/tsconfig.json +0 -0
  47. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/tsconfig.test.json +0 -0
  48. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/ui-tests/README.md +0 -0
  49. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/ui-tests/jupyter_server_test_config.py +0 -0
  50. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/ui-tests/package.json +0 -0
  51. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/ui-tests/playwright.config.js +0 -0
  52. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/ui-tests/tests/nbgitpuller_jl_interface.spec.ts +0 -0
  53. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/ui-tests/yarn.lock +0 -0
  54. {nbgitpuller_jl_interface-0.3.0 → nbgitpuller_jl_interface-1.0.0}/yarn.lock +0 -0
@@ -0,0 +1,96 @@
1
+ # Changelog
2
+
3
+ <!-- <START NEW CHANGELOG ENTRY> -->
4
+
5
+ ## 1.0.0
6
+
7
+ ([Full Changelog](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/compare/v0.4.0...759fb6102164f8863a7b43141b34c915d43fe5bd))
8
+
9
+ ### Enhancements made
10
+
11
+ - [OSL-4409] fix: improve formatting of error message [#9](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/pull/9) ([@dgpalmieri](https://github.com/dgpalmieri), [@Alex-Lewandowski](https://github.com/Alex-Lewandowski), [@emlundell](https://github.com/emlundell))
12
+ - add additional check for if branch is valid [#7](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/pull/7) ([@segallagher](https://github.com/segallagher), [@emlundell](https://github.com/emlundell))
13
+
14
+ ### Documentation improvements
15
+
16
+ - refactor: reword notebooks to repositories [#8](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/pull/8) ([@segallagher](https://github.com/segallagher), [@dgpalmieri](https://github.com/dgpalmieri), [@emlundell](https://github.com/emlundell))
17
+ - docs: add note about git cred prompting to readme [#6](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/pull/6) ([@dgpalmieri](https://github.com/dgpalmieri), [@segallagher](https://github.com/segallagher))
18
+
19
+ ### Contributors to this release
20
+
21
+ The following people contributed discussions, new ideas, code and documentation contributions, and review.
22
+ See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports).
23
+
24
+ ([GitHub contributors page for this release](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/graphs/contributors?from=2026-04-15&to=2026-04-22&type=c))
25
+
26
+ @Alex-Lewandowski ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3AAlex-Lewandowski+updated%3A2026-04-15..2026-04-22&type=Issues)) | @dgpalmieri ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Adgpalmieri+updated%3A2026-04-15..2026-04-22&type=Issues)) | @emlundell ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Aemlundell+updated%3A2026-04-15..2026-04-22&type=Issues)) | @segallagher ([activity](https://github.com/search?q=repo%3AASFOpenSARlab%2Fnbgitpuller-jl-interface+involves%3Asegallagher+updated%3A2026-04-15..2026-04-22&type=Issues))
27
+
28
+ <!-- <END NEW CHANGELOG ENTRY> -->
29
+
30
+ ## 0.4.0
31
+
32
+ ([Full Changelog](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/compare/v0.3.0...c0858bae9a3c63097a47872caeb0332071433e10))
33
+
34
+ ### Enhancements made
35
+
36
+ - 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))
37
+
38
+ ### Contributors to this release
39
+
40
+ The following people contributed discussions, new ideas, code and documentation contributions, and review.
41
+ See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports).
42
+
43
+ ([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))
44
+
45
+ @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))
46
+
47
+ ## 0.3.0
48
+
49
+ ([Full Changelog](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/compare/v0.2.5...eab8732c960fecc43d3cda8560330cc3b692a5bf))
50
+
51
+ ### Bugs fixed
52
+
53
+ - 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))
54
+
55
+ ### Contributors to this release
56
+
57
+ The following people contributed discussions, new ideas, code and documentation contributions, and review.
58
+ See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports).
59
+
60
+ ([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))
61
+
62
+ @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))
63
+
64
+ ## 0.2.5
65
+
66
+ ([Full Changelog](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/compare/v0.2.4...acb905136fd3b05e07da5e1c3da4ee88bec7aba9))
67
+
68
+ ### Bugs fixed
69
+
70
+ - 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))
71
+
72
+ ### Contributors to this release
73
+
74
+ The following people contributed discussions, new ideas, code and documentation contributions, and review.
75
+ See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports).
76
+
77
+ ([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))
78
+
79
+ @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))
80
+
81
+ ## 0.2.4
82
+
83
+ ([Full Changelog](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/compare/v0.2.1...fa249abe827af836d7aa2ac0a870c4d30eff516e))
84
+
85
+ ### Enhancements made
86
+
87
+ - 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))
88
+
89
+ ### Contributors to this release
90
+
91
+ The following people contributed discussions, new ideas, code and documentation contributions, and review.
92
+ See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports).
93
+
94
+ ([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))
95
+
96
+ @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.0
3
+ Version: 1.0.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
@@ -111,6 +111,14 @@ the frontend extension, check the frontend extension is installed:
111
111
  jupyter labextension list
112
112
  ```
113
113
 
114
+ If `git` is asking for credentials on the command line when deployed locally
115
+ (you may have mistyped your url!), add the following lines to `~/.gitconfig`:
116
+
117
+ ```bash
118
+ [credential "https://github.com"]
119
+ helper = !/usr/bin/gh auth git-credential
120
+ ```
121
+
114
122
  ## Contributing
115
123
 
116
124
  ### Development install
@@ -45,6 +45,14 @@ the frontend extension, check the frontend extension is installed:
45
45
  jupyter labextension list
46
46
  ```
47
47
 
48
+ If `git` is asking for credentials on the command line when deployed locally
49
+ (you may have mistyped your url!), add the following lines to `~/.gitconfig`:
50
+
51
+ ```bash
52
+ [credential "https://github.com"]
53
+ helper = !/usr/bin/gh auth git-credential
54
+ ```
55
+
48
56
  ## Contributing
49
57
 
50
58
  ### Development install
@@ -1,4 +1,4 @@
1
1
  # This file is auto-generated by Hatchling. As such, do not:
2
2
  # - modify
3
3
  # - track in version control e.g. be sure to add to .gitignore
4
- __version__ = VERSION = '0.3.0'
4
+ __version__ = VERSION = '1.0.0'
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nbgitpuller-jl-interface",
3
- "version": "0.3.0",
3
+ "version": "1.0.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.b250a24d9f9650f8659a.js",
120
+ "load": "static/remoteEntry.4caf41ad4e8e084aba3e.js",
121
121
  "extension": "./extension",
122
122
  "style": "./style"
123
123
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nbgitpuller-jl-interface",
3
- "version": "0.3.0",
3
+ "version": "1.0.0",
4
4
  "description": "A human interface with nbgitpuller in JupyterBook",
5
5
  "keywords": [
6
6
  "jupyter",
@@ -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:()=>y,getJupyterAppInstance:()=>b});var i=n(813),o=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,i=0;for(const o of e){const e=o.repoUrl,r=o.branch,s=o.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?i+=1:u.updatefound&&(n+=1)}return{response:{numToBeUpdated:n,numWithErrors:i},statuscode:0}}(e);if(0===t.statuscode){const n=t.response;let i,o;n.numWithErrors>0?(i=`${n.numWithErrors} repositories with errors`,o=d.Error):n.numToBeUpdated>0?(i=`${n.numToBeUpdated} repositories awaiting updates\n`,o=d.UpdateRequired):(i=`${e.length} repositories up to date`,o=d.UpToDate);const r=await u(o,i);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 i;if(e===d.UpToDate)i='<p><span class="success">◉</span> Up to Date</p>';else if(e===d.Updating)i='<p><span class="lds-dual-ring"></span> Updating</p>';else if(e===d.UpdateRequired)i='<p><span class="pending blink">◉</span> Update Repositories</p>';else if(e===d.Error)i='<p><span class="failure blink">◉</span> Update Error</p>';else{if(e!==d.Initializing)return{error:"Unknown widget state",returncode:2};i='<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>`}(i),{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 h=null;function b(e){if(!h&&e&&(h=e),!h)throw new Error("App instance has not been initialized yet");return h}const w={id:"nbgitpuller-jl-interface:plugin",description:"A human interface with nbgitpuller in JupyterBook",autoStart:!0,optional:[],requires:[i.ILabShell,f.ICommandPalette,g.ISettingRegistry,i.JupyterFrontEnd.IPaths],activate:(e,t,n,i,g)=>{i?(Promise.all([e.restored,i.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,i=t.get("rank").composite,l=(0,o.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 GitHub Repositories...");const e=await async function(e){var t;const n=a.PageConfig.getBaseUrl(),i=a.URLExt.join(n,"nbgitpuller-jl-interface","gitpuller"),o=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(i,{method:"POST",headers:{"Content-Type":"application/json","X-XSRFToken":null!=o?o:""},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 repositories: \n";for(const n of e)t+=`- ${n.repo}\n`;t+="If you require assistance with resolving this issue, please contact your platform administrators.",console.log(t),alert(t)}p=!1}),e.shell.add(g,"top",{rank:i}),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.")}},y=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,c,p,d,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:"7e24a188a3691a1deaa8",728:"c80bd4566fc22d8dd093"}[e]+".js?v="+{293:"7e24a188a3691a1deaa8",728:"c80bd4566fc22d8dd093"}[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 c=(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(c.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=c.bind(null,i.onerror),i.onload=c.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.3.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,c=l<e.length?(typeof e[l])[0]:"";if(i>=r.length||"o"==(s=(typeof(f=r[i]))[0]))return!u||("u"==c?l>n&&!o:""==c!=o);if("u"==s){if(!u||"u"!=c)return!1}else if(u)if(c==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"!=c&&"n"!=c){if(o||l<=n)return!1;u=!1,l--}else{if(l<=n||s<c!=o)return!1;u=!1}else"s"!=c&&"n"!=c&&(u=!1,l--)}}var p=[],d=p.pop.bind(p);for(i=1;i<e.length;i++){var h=e[i];p.push(1==h?d()|d():2==h?d()&d():h?a(h,r):!d())}return!!d()},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)+")",c=e=>{throw new Error(e)},p=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},d=(e,r,t)=>t?t():((e,r)=>c("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 d(e,t,u);var c=f(r,t,n);return a(o,c)||p(s(r,t,c,o)),l(r[t][c])}),v={},g={41:()=>h("default","@jupyterlab/coreutils",!1,[1,6,5,6]),53:()=>h("default","@lumino/algorithm",!1,[1,2,0,0]),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,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})();
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:"488357a8d6ce24253311",728:"1316db9caad2256ea253"}[e]+".js?v="+{293:"488357a8d6ce24253311",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","1.0.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})();
@@ -65,7 +65,7 @@ class GitDetectUpdateHandler(APIHandler):
65
65
  "returncode": 42,
66
66
  }
67
67
 
68
- ret = checkIfRepoExists(repository_url)
68
+ ret = checkIfRepoExists(repository_url, repository_branch)
69
69
  result.update(ret)
70
70
  # Exit early if error found
71
71
  if result["returncode"] != 0:
@@ -61,19 +61,31 @@ def pullRepo(repository_url: str, repository_branch: str, destination: str) -> d
61
61
  "returncode": result.returncode
62
62
  }
63
63
 
64
- def checkIfRepoExists(repository_url) -> dict[str, Any]:
64
+ def checkIfRepoExists(repository_url: str, branch: str) -> dict[str, Any]:
65
65
  # Get git command
66
66
  command = which("git")
67
67
 
68
68
  if command is None:
69
69
  error = "git not found"
70
70
  return {"repoexists": False, "error": error, "returncode": 1}
71
- # Fetch repo contents
71
+ # Check remote exists
72
72
  result = subprocess.run(
73
73
  [command, "ls-remote", repository_url],
74
74
  capture_output=True,
75
75
  text=True
76
76
  )
77
+ if result.returncode != 0:
78
+ return {
79
+ "repoexists": result.stdout != "",
80
+ "error": result.stderr,
81
+ "returncode": result.returncode
82
+ }
83
+ # Check branch exists on remote
84
+ result = subprocess.run(
85
+ [command, "ls-remote", "--heads", repository_url, f"refs/heads/{branch}"],
86
+ capture_output=True,
87
+ text=True
88
+ )
77
89
  return {
78
90
  "repoexists": result.stdout != "",
79
91
  "error": result.stderr,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nbgitpuller-jl-interface",
3
- "version": "0.3.0",
3
+ "version": "1.0.0",
4
4
  "description": "A human interface with nbgitpuller in JupyterBook",
5
5
  "keywords": [
6
6
  "jupyter",
@@ -10,7 +10,11 @@ import {
10
10
  it
11
11
  } from '@jest/globals';
12
12
 
13
- import { checkForRepoUpdates, setUpdateButtonDisplay } from '../utils';
13
+ import {
14
+ checkForRepoUpdates,
15
+ setUpdateButtonDisplay,
16
+ WidgetState
17
+ } from '../utils';
14
18
 
15
19
  describe('nbgitpuller-jl-interface utils checkForRepoUpdates', () => {
16
20
  beforeEach(() => {});
@@ -134,36 +138,69 @@ describe('nbgitpuller-jl-interface utils setUpdateButtonDisplay', () => {
134
138
  document.body.innerHTML = '';
135
139
  });
136
140
 
137
- it('widget up to date populated', async () => {
141
+ it('widget up to date success', async () => {
138
142
  const widget = await document.createElement('div');
139
143
  widget.id = 'nbgitpuller-jl-interface-update-btn';
140
144
  document.body.appendChild(widget);
141
145
 
142
- const returnValue = await setUpdateButtonDisplay(true, '', [
143
- { repoUrl: 'https://fakerepo.com', branch: 'main', destPath: 'mypath' }
144
- ]);
146
+ const returnValue = await setUpdateButtonDisplay(WidgetState.UpToDate, '');
145
147
 
146
148
  expect(returnValue).toStrictEqual({ error: '', returncode: 0 });
147
149
  expect(widget.innerHTML).toContain(`<span class="success">◉</span>`);
148
150
  });
149
151
 
150
- it('widget update needed populated', async () => {
152
+ it('widget updating', async () => {
151
153
  const widget = await document.createElement('div');
152
154
  widget.id = 'nbgitpuller-jl-interface-update-btn';
153
155
  document.body.appendChild(widget);
154
156
 
155
- const returnValue = await setUpdateButtonDisplay(false, '', [
156
- { repoUrl: 'https://fakerepo.com', branch: 'main', destPath: 'mypath' }
157
- ]);
157
+ const returnValue = await setUpdateButtonDisplay(WidgetState.Updating, '');
158
+
159
+ expect(returnValue).toStrictEqual({ error: '', returncode: 0 });
160
+ expect(widget.innerHTML).toContain(`<span class="lds-dual-ring"></span>`);
161
+ });
162
+
163
+ it('widget initializing', async () => {
164
+ const widget = await document.createElement('div');
165
+ widget.id = 'nbgitpuller-jl-interface-update-btn';
166
+ document.body.appendChild(widget);
167
+
168
+ const returnValue = await setUpdateButtonDisplay(
169
+ WidgetState.Initializing,
170
+ ''
171
+ );
172
+
173
+ expect(returnValue).toStrictEqual({ error: '', returncode: 0 });
174
+ expect(widget.innerHTML).toContain(`<p><span class="">◉</span>`);
175
+ });
176
+
177
+ it('widget update required', async () => {
178
+ const widget = await document.createElement('div');
179
+ widget.id = 'nbgitpuller-jl-interface-update-btn';
180
+ document.body.appendChild(widget);
181
+
182
+ const returnValue = await setUpdateButtonDisplay(
183
+ WidgetState.UpdateRequired,
184
+ ''
185
+ );
186
+
187
+ expect(returnValue).toStrictEqual({ error: '', returncode: 0 });
188
+ expect(widget.innerHTML).toContain(`<span class="pending blink">◉</span>`);
189
+ });
190
+
191
+ it('widget error', async () => {
192
+ const widget = await document.createElement('div');
193
+ widget.id = 'nbgitpuller-jl-interface-update-btn';
194
+ document.body.appendChild(widget);
195
+
196
+ const returnValue = await setUpdateButtonDisplay(WidgetState.Error, '');
158
197
 
159
198
  expect(returnValue).toStrictEqual({ error: '', returncode: 0 });
160
199
  expect(widget.innerHTML).toContain(`<span class="failure blink">◉</span>`);
161
200
  });
162
201
 
163
202
  it('widget not found', async () => {
164
- const returnValue = await setUpdateButtonDisplay(false, '', [
165
- { repoUrl: 'https://fakerepo.com', branch: 'main', destPath: 'mypath' }
166
- ]);
203
+ const returnValue = await setUpdateButtonDisplay(WidgetState.Error, '');
167
204
 
168
205
  expect(returnValue).toStrictEqual({
169
206
  error: 'Unable to find nbgitpuller widget',
@@ -1,9 +1,9 @@
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
9
  import { PageConfig, URLExt } from '@jupyterlab/coreutils';
@@ -32,16 +32,47 @@ export async function nbgitpullerUpdateButton(
32
32
  widget.dispose();
33
33
  }
34
34
 
35
- // Create widget
36
- const updateReposBtn = new ToolbarButton({
37
- className: 'nbgitpuller-jl-interface-update-btn',
38
- label: '◉ Initializing',
39
- tooltip: 'Initializing nbgitpuller'
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 GitHub Repositories...';
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 repositories: \n';
61
+ for (const failure of failed_updates) {
62
+ failure_message += `- ${failure['repo']}\n`;
63
+ }
64
+ failure_message +=
65
+ 'If you require assistance with resolving this issue, please contact your platform administrators.';
66
+ console.log(failure_message);
67
+ alert(failure_message);
68
+ }
69
+
70
+ // Unset updating flag
71
+ currentlyUpdating = false;
40
72
  });
41
- updateReposBtn.id = widget_id;
42
- updateReposBtn.addClass('nbgitpuller-jl-interface-wrapper');
73
+
43
74
  // 1-899 left justified, 900+ right justified
44
- app.shell.add(updateReposBtn, 'top', { rank: rank });
75
+ app.shell.add(newWidget, 'top', { rank: rank });
45
76
 
46
77
  // Wait one second for initial creation timing
47
78
  await new Promise(f => setTimeout(f, 1000));
@@ -174,28 +205,24 @@ export async function checkForUpdatesAndSetDisplay(
174
205
  numToBeUpdated: number;
175
206
  numWithErrors: number;
176
207
  };
208
+
177
209
  // Generate tooltip
178
- let tooltip = '';
179
- if (
180
- updateCheckResponse['numToBeUpdated'] +
181
- updateCheckResponse['numWithErrors']
182
- ) {
183
- if (updateCheckResponse['numToBeUpdated']) {
184
- tooltip += `${updateCheckResponse['numToBeUpdated']} notebooks awaiting updates\n`;
185
- }
186
- if (updateCheckResponse['numWithErrors']) {
187
- tooltip += `${updateCheckResponse['numWithErrors']} notebooks with errors`;
188
- }
210
+ let tooltip;
211
+ let widgetState;
212
+ if (updateCheckResponse['numWithErrors'] > 0) {
213
+ tooltip = `${updateCheckResponse['numWithErrors']} repositories with errors`;
214
+ widgetState = WidgetState.Error;
215
+ } else if (updateCheckResponse['numToBeUpdated'] > 0) {
216
+ tooltip = `${updateCheckResponse['numToBeUpdated']} repositories awaiting updates\n`;
217
+ widgetState = WidgetState.UpdateRequired;
189
218
  } else {
190
- tooltip = `${repositories.length} Notebooks up to date`;
219
+ tooltip = `${repositories.length} repositories up to date`;
220
+ widgetState = WidgetState.UpToDate;
191
221
  }
192
222
 
193
223
  const updateDisplayResponse = await setUpdateButtonDisplay(
194
- updateCheckResponse['numToBeUpdated'] +
195
- updateCheckResponse['numWithErrors'] ===
196
- 0,
197
- tooltip,
198
- repositories
224
+ widgetState,
225
+ tooltip
199
226
  );
200
227
  if (updateDisplayResponse.returncode !== 0) {
201
228
  console.error(updateDisplayResponse);
@@ -203,10 +230,17 @@ export async function checkForUpdatesAndSetDisplay(
203
230
  }
204
231
  }
205
232
 
233
+ export enum WidgetState {
234
+ UpToDate,
235
+ UpdateRequired,
236
+ Updating,
237
+ Error,
238
+ Initializing
239
+ }
240
+
206
241
  export async function setUpdateButtonDisplay(
207
- upToDate: boolean,
208
- tooltip: string,
209
- repositories: IRepository[]
242
+ targetWidgetState: WidgetState,
243
+ tooltip: string
210
244
  ): Promise<{ error: string; returncode: number }> {
211
245
  // Get widget
212
246
  const widget: HTMLElement | null = document.getElementById(widget_id);
@@ -216,56 +250,31 @@ export async function setUpdateButtonDisplay(
216
250
 
217
251
  // Create button label html
218
252
  let labelHTML;
219
- if (upToDate) {
253
+ if (targetWidgetState === WidgetState.UpToDate) {
220
254
  labelHTML = '<p><span class="success">◉</span> Up to Date</p>';
255
+ } else if (targetWidgetState === WidgetState.Updating) {
256
+ labelHTML = '<p><span class="lds-dual-ring"></span> Updating</p>';
257
+ } else if (targetWidgetState === WidgetState.UpdateRequired) {
258
+ labelHTML =
259
+ '<p><span class="pending blink">◉</span> Update Repositories</p>';
260
+ } else if (targetWidgetState === WidgetState.Error) {
261
+ labelHTML = '<p><span class="failure blink">◉</span> Update Error</p>';
262
+ } else if (targetWidgetState === WidgetState.Initializing) {
263
+ labelHTML = '<p><span class="">◉</span> Initializing</p>';
221
264
  } else {
222
- labelHTML = '<p><span class="failure blink">◉</span> Update Notebooks</p>';
265
+ return { error: 'Unknown widget state', returncode: 2 };
223
266
  }
224
267
 
225
- function generateWidgetHTML(tooltip: string, labelHTML: string): string {
268
+ function generateWidgetHTML(labelHTML: string): string {
226
269
  return `
227
- <div class="lm-Widget jp-ToolbarButton nbgitpuller-jl-interface-wrapper"
228
- title="${tooltip}">
229
270
  <jp-button class="nbgitpuller-jl-interface-update-btn jp-ToolbarButtonComponent">
230
271
  ${labelHTML}
231
- </jp-button>
232
- </div>`;
272
+ </jp-button>`;
233
273
  }
234
274
 
235
275
  // Update widget functionality
236
- widget.innerHTML = generateWidgetHTML(tooltip, labelHTML);
237
- widget.addEventListener('click', async () => {
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 Notebooks...';
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);
252
-
253
- // Update widget to all updated or pending updates
254
- await checkForUpdatesAndSetDisplay(repositories);
255
-
256
- // Notify users of any failure
257
- if (failed_updates.length !== 0) {
258
- let failure_message = 'Failed to update the following notebooks: \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
- });
276
+ widget.title = tooltip;
277
+ widget.innerHTML = generateWidgetHTML(labelHTML);
269
278
 
270
279
  return { error: '', returncode: 0 };
271
280
  }
@@ -32,6 +32,10 @@ jp-button.nbgitpuller-jl-interface-update-btn {
32
32
  color: #5cb85c;
33
33
  }
34
34
 
35
+ .pending {
36
+ color: #f29339;
37
+ }
38
+
35
39
  .failure {
36
40
  color: #d63124;
37
41
  }
@@ -1,56 +0,0 @@
1
- # Changelog
2
-
3
- <!-- <START NEW CHANGELOG ENTRY> -->
4
-
5
- ## 0.3.0
6
-
7
- ([Full Changelog](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/compare/v0.2.5...eab8732c960fecc43d3cda8560330cc3b692a5bf))
8
-
9
- ### Bugs fixed
10
-
11
- - 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))
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-09&to=2026-04-10&type=c))
19
-
20
- @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))
21
-
22
- <!-- <END NEW CHANGELOG ENTRY> -->
23
-
24
- ## 0.2.5
25
-
26
- ([Full Changelog](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/compare/v0.2.4...acb905136fd3b05e07da5e1c3da4ee88bec7aba9))
27
-
28
- ### Bugs fixed
29
-
30
- - 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))
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-07&to=2026-04-09&type=c))
38
-
39
- @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))
40
-
41
- ## 0.2.4
42
-
43
- ([Full Changelog](https://github.com/ASFOpenSARlab/nbgitpuller-jl-interface/compare/v0.2.1...fa249abe827af836d7aa2ac0a870c4d30eff516e))
44
-
45
- ### Enhancements made
46
-
47
- - 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))
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-06&to=2026-04-07&type=c))
55
-
56
- @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:()=>b,getJupyterAppInstance:()=>g});var o=n(813),r=n(778),i=n(53),a=n(41);const s="nbgitpuller-jl-interface-update-btn";let l,c=!1;async function p(t){const e=await async function(t){var e;let n=0,o=0;for(const r of t){const t=r.repoUrl,i=r.branch,s=r.destPath,l=a.PageConfig.getBaseUrl(),c=a.URLExt.join(l,"nbgitpuller-jl-interface","update-check"),p=null===(e=document.cookie.split(";").find(t=>t.startsWith("_xsrf=")))||void 0===e?void 0:e.split("=")[1],u=await fetch(c,{method:"POST",headers:{"Content-Type":"application/json","X-XSRFToken":null!=p?p:""},body:JSON.stringify({repositoryUrl:t,repositoryBranch:i,destination:s})}),d=await u.json();0!==d.returncode?o+=1:d.updatefound&&(n+=1)}return{response:{numToBeUpdated:n,numWithErrors:o},statuscode:0}}(t);if(0===e.statuscode){const n=e.response;let o="";n.numToBeUpdated+n.numWithErrors?(n.numToBeUpdated&&(o+=`${n.numToBeUpdated} notebooks awaiting updates\n`),n.numWithErrors&&(o+=`${n.numWithErrors} notebooks with errors`)):o=`${t.length} Notebooks up to date`;const r=await async function(t,e,n){const o=document.getElementById(s);if(!o)return{error:"Unable to find nbgitpuller widget",returncode:1};let r;function i(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 r=t?'<p><span class="success">◉</span> Up to Date</p>':'<p><span class="failure blink">◉</span> Update Notebooks</p>',o.innerHTML=i(e,r),o.addEventListener("click",async()=>{if(c)return;c=!0;o.innerHTML=i("Updating Notebooks...",'<p><span class="lds-dual-ring"></span> Updating</p>');const t=await async function(t){var e;const n=a.PageConfig.getBaseUrl(),o=a.URLExt.join(n,"nbgitpuller-jl-interface","gitpuller"),r=null===(e=document.cookie.split(";").find(t=>t.startsWith("_xsrf=")))||void 0===e?void 0:e.split("=")[1],i=[];for(const e of t){const t=e.repoUrl,n=e.branch,a=e.destPath,s=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json","X-XSRFToken":null!=r?r:""},body:JSON.stringify({repositoryUrl:t,repositoryBranch:n,destination:a})}),l=await s.json();0!==l.returncode&&i.push({repo:t,reason:l.error})}return i}(n);if(await p(n),0!==t.length){let e="Failed to update the following notebooks: \n";for(const n of t)e+=`${n.repo}`;console.log(e),alert(e)}c=!1}),{error:"",returncode:0}}(n.numToBeUpdated+n.numWithErrors===0,o,t);0!==r.returncode&&console.error(r)}}var u=n(726);let d=null;function g(t){if(!d&&t&&(d=t),!d)throw new Error("App instance has not been initialized yet");return d}const f={id:"nbgitpuller-jl-interface:plugin",description:"A human interface with nbgitpuller in JupyterBook",autoStart:!0,optional:[],requires:[o.ILabShell,r.ICommandPalette,u.ISettingRegistry,o.JupyterFrontEnd.IPaths],activate:(t,e,n,o,a)=>{o?(Promise.all([t.restored,o.load(f.id)]).then(async([,e])=>{async function n(e){e.get("reloadWidget").composite&&(await async function(t,e){const n=e.get("repos").composite,o=e.get("rank").composite,a=(0,i.find)(t.shell.widgets("top"),t=>t.id===s);a&&a.dispose();const l=new r.ToolbarButton({className:"nbgitpuller-jl-interface-update-btn",label:"◉ Initializing",tooltip:"Initializing nbgitpuller"});l.id=s,l.addClass("nbgitpuller-jl-interface-wrapper"),t.shell.add(l,"top",{rank:o}),await new Promise(t=>setTimeout(t,1e3)),await p(n),console.log("nbgitpuller-jl-interface settings loaded")}(t,e),await async function(t){const e=t.get("repos").composite,n=t.get("probeInterval").composite;clearInterval(l),l=setInterval(async()=>{await p(e)},n)}(e),await e.set("reloadWidget",!1))}await e.set("reloadWidget",!0),n(e),e.changed.connect(n),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.")}},b=f}}]);
@@ -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}}]);