Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-jupyter-docprovider for
openSUSE:Factory checked in at 2026-03-17 19:03:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-jupyter-docprovider (Old)
and /work/SRC/openSUSE:Factory/.python-jupyter-docprovider.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-jupyter-docprovider"
Tue Mar 17 19:03:23 2026 rev:5 rq:1339374 version:2.2.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-jupyter-docprovider/python-jupyter-docprovider.changes
2025-07-03 12:13:06.628314366 +0200
+++
/work/SRC/openSUSE:Factory/.python-jupyter-docprovider.new.8177/python-jupyter-docprovider.changes
2026-03-17 19:05:06.614195162 +0100
@@ -1,0 +2,14 @@
+Sun Mar 15 19:04:30 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 2.1.5:
+ * Backport 'Initialize and update the ydoc path property' #342
+ #357 (@brichet)
+- update to 2.1.4:
+ * Backport 'Update jupyter_ydoc and pycrdt_websocket
+ dependencies' #367 #376 (@brichet)
+- update to 2.1.3:
+ * Backport 'Fix model format' #368 #369 (@davidbrochart)
+ * Backport 'Fix ignoring AnyIO warnings in tests' #359 #362
+ * Backport 'Fix mypy' #358 #361 (@brichet)
+
+-------------------------------------------------------------------
Old:
----
jupyter_docprovider-2.1.0.tar.gz
New:
----
jupyter_docprovider-2.2.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-jupyter-docprovider.spec ++++++
--- /var/tmp/diff_new_pack.olaqvj/_old 2026-03-17 19:05:07.134216712 +0100
+++ /var/tmp/diff_new_pack.olaqvj/_new 2026-03-17 19:05:07.138216878 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-jupyter-docprovider
#
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,9 +16,9 @@
#
-%define distversion 2.1
+%define distversion 2.2.1
Name: python-jupyter-docprovider
-Version: 2.1.0
+Version: 2.2.1
Release: 0
Summary: Jupyter extension integrating collaborative shared models
License: BSD-3-Clause
@@ -31,7 +31,7 @@
BuildRequires: fdupes
BuildRequires: jupyter-rpm-macros
BuildRequires: python-rpm-macros
-Requires: jupyter-docprovider = %{version}
+Requires: jupyter-docprovider = %{distversion}
Provides: python-jupyter_docprovider = %{version}-%{release}
BuildArch: noarch
%python_subpackages
++++++ jupyter_docprovider-2.1.0.tar.gz -> jupyter_docprovider-2.2.1.tar.gz
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_docprovider-2.1.0/PKG-INFO
new/jupyter_docprovider-2.2.1/PKG-INFO
--- old/jupyter_docprovider-2.1.0/PKG-INFO 2020-02-02 01:00:00.000000000
+0100
+++ new/jupyter_docprovider-2.2.1/PKG-INFO 2020-02-02 01:00:00.000000000
+0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: jupyter-docprovider
-Version: 2.1.0
+Version: 2.2.1
Summary: JupyterLab/Jupyter Notebook 7+ extension integrating collaborative
shared models.
Project-URL: Documentation,
https://jupyterlab-realtime-collaboration.readthedocs.io/
Project-URL: Repository, https://github.com/jupyterlab/jupyter-collaboration
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/jupyter_docprovider/_version.py
new/jupyter_docprovider-2.2.1/jupyter_docprovider/_version.py
--- old/jupyter_docprovider-2.1.0/jupyter_docprovider/_version.py
2020-02-02 01:00:00.000000000 +0100
+++ new/jupyter_docprovider-2.2.1/jupyter_docprovider/_version.py
2020-02-02 01:00:00.000000000 +0100
@@ -1 +1 @@
-__version__ = "2.1.0"
+__version__ = "2.2.1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/package.json
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/package.json
--- old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/package.json
2020-02-02 01:00:00.000000000 +0100
+++ new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/package.json
2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
{
"name": "@jupyter/docprovider-extension",
- "version": "4.1.0",
+ "version": "4.2.1",
"description": "JupyterLab - Collaborative Shared Models",
"keywords": [
"jupyter",
@@ -53,25 +53,25 @@
"watch:labextension": "jupyter labextension watch ."
},
"dependencies": {
- "@jupyter/collaborative-drive": "^4.1.0",
- "@jupyter/docprovider": "^4.1.0",
+ "@jupyter/collaborative-drive": "^4.2.1",
+ "@jupyter/docprovider": "^4.2.1",
"@jupyter/ydoc": "^2.1.3 || ^3.0.0",
- "@jupyterlab/application": "^4.4.0",
- "@jupyterlab/apputils": "^4.4.0",
- "@jupyterlab/docregistry": "^4.4.0",
- "@jupyterlab/filebrowser": "^4.4.0",
- "@jupyterlab/fileeditor": "^4.4.0",
- "@jupyterlab/logconsole": "^4.4.0",
- "@jupyterlab/notebook": "^4.4.0",
- "@jupyterlab/settingregistry": "^4.4.0",
- "@jupyterlab/translation": "^4.4.0",
+ "@jupyterlab/application": "^4.5.0",
+ "@jupyterlab/apputils": "^4.5.0",
+ "@jupyterlab/docregistry": "^4.5.0",
+ "@jupyterlab/filebrowser": "^4.5.0",
+ "@jupyterlab/fileeditor": "^4.5.0",
+ "@jupyterlab/logconsole": "^4.5.0",
+ "@jupyterlab/notebook": "^4.5.0",
+ "@jupyterlab/settingregistry": "^4.5.0",
+ "@jupyterlab/translation": "^4.5.0",
"@lumino/commands": "^2.3.2",
"y-protocols": "^1.0.5",
"y-websocket": "^1.3.15",
"yjs": "^13.5.40"
},
"devDependencies": {
- "@jupyterlab/builder": "^4.4.0",
+ "@jupyterlab/builder": "^4.5.0",
"@types/react": "~18.3.1",
"npm-run-all": "^4.1.5",
"rimraf": "^4.1.2",
@@ -128,7 +128,7 @@
}
},
"_build": {
- "load": "static/remoteEntry.cddf83930bc7c4fbf11a.js",
+ "load": "static/remoteEntry.f104f1bdbc3e78a4d5c6.js",
"extension": "./extension",
"style": "./style"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/240.cfc0784ac6d2ff6b4dcf.js
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/240.cfc0784ac6d2ff6b4dcf.js
---
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/240.cfc0784ac6d2ff6b4dcf.js
1970-01-01 01:00:00.000000000 +0100
+++
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/240.cfc0784ac6d2ff6b4dcf.js
2020-02-02 01:00:00.000000000 +0100
@@ -0,0 +1 @@
+"use
strict";(self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[]).push([[240],{68:(e,t,n)=>{n.d(t,{A:()=>a});var
r=n(758),o=n.n(r),s=n(935),i=n.n(s)()(o());i.push([e.id,"/*
-----------------------------------------------------------------------------\n|
Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the
Modified BSD
License.\n|----------------------------------------------------------------------------
*/\n\n.jp-timelineSliderWrapper .jp-sliderContainer{\n display: flex;\n
align-items: center;\n}\n\n.jp-Slider {\n height:
4.5px\n}\n\n#jp-slider-status-bar {\n display:
flex;\n}\n\n.jp-timestampDisplay {\n display: flex;\n flex-direction: row;\n
align-items: center;\n gap: 6px;\n}\n\n.jp-restoreBtnContainer {\n width:
192px;\n}\n\n.jp-ToolbarButtonComponent.jp-restoreBtn {\n cursor: pointer;\n
color: var(--jp-layout-color2);\n width: 100%;\n background:
var(--jp-accept-color-normal)\n}\n",""]);con
st a=i},935:e=>{e.exports=function(e){var t=[];return
t.toString=function(){return this.map((function(t){var n="",r=void
0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media
".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):"","
{")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,o,s){"string"==typeof
e&&(e=[[null,e,void 0]]);var i={};if(r)for(var a=0;a<this.length;a++){var
c=this[a][0];null!=c&&(i[c]=!0)}for(var l=0;l<e.length;l++){var
d=[].concat(e[l]);r&&i[d[0]]||(void 0!==s&&(void
0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):"","
{").concat(d[1],"}")),d[5]=s),n&&(d[2]?(d[1]="@media ".concat(d[2],"
{").concat(d[1],"}"),d[2]=n):d[2]=n),o&&(d[4]?(d[1]="@supports
(".concat(d[4],")
{").concat(d[1],"}"),d[4]=o):d[4]="".concat(o)),t.push(d))}},t}},758:e=>{e.exports=function(e){return
e[1]}},972:e=>{var t=[];function n(e){for(var
n=-1,r=0;r<t.length;r++)if(t[r].identifier===e){n=r;br
eak}return n}function r(e,r){for(var s={},i=[],a=0;a<e.length;a++){var
c=e[a],l=r.base?c[0]+r.base:c[0],d=s[l]||0,h="".concat(l,"
").concat(d);s[l]=d+1;var
u=n(h),p={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==u)t[u].references++,t[u].updater(p);else{var
v=o(p,r);r.byIndex=a,t.splice(a,0,{identifier:h,updater:v,references:1})}i.push(h)}return
i}function o(e,t){var n=t.domAPI(t);return
n.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;n.update(e=t)}else
n.remove()}}e.exports=function(e,o){var s=r(e=e||[],o=o||{});return
function(e){e=e||[];for(var i=0;i<s.length;i++){var
a=n(s[i]);t[a].references--}for(var c=r(e,o),l=0;l<s.length;l++){var
d=n(s[l]);0===t[d].references&&(t[d].updater(),t.splice(d,1))}s=c}}},128:e=>{var
t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var
n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof
window.HTMLI
FrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return
t[e]}(e);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(n)}},51:e=>{e.exports=function(e){var
t=document.createElement("style");return
e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},855:(e,t,n)=>{e.exports=function(e){var
t=n.nc;t&&e.setAttribute("nonce",t)}},740:e=>{e.exports=function(e){if("undefined"==typeof
document)return{update:function(){},remove:function(){}};var
t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var
r="";n.supports&&(r+="@supports (".concat(n.supports,")
{")),n.media&&(r+="@media ".concat(n.media," {"));var o=void
0!==n.layer;o&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):"","
{")),r+=n.css,o&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var
s=n.sourceMap;s&&"undefined"!=typeof btoa&&(r+="\n/*#
sourceMappingURL=data:application/json;base64,".concat
(btoa(unescape(encodeURIComponent(JSON.stringify(s)))),"
*/")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},656:e=>{e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},240:(e,t,n)=>{n.r(t),n.d(t,{ForkManager:()=>z,IForkManagerToken:()=>q,JUPYTER_COLLABORATION_FORK_EVENTS_URI:()=>K,NotebookCellServerExecutor:()=>l,ROOM_FORK_URL:()=>p,RtcContentProvider:()=>C,TimelineWidget:()=>V,WebSocketAwarenessProvider:()=>o,WebSocketProvider:()=>S,requestAPI:()=>v,requestDocSession:()=>m,requestDocumentTimeline:()=>g,requestUndoRedo:()=>f});var
r=n(560);class o extends
r.WebsocketProvider{constructor(e){super(e.url,e.roomID,e.awareness.doc,{awareness:e.awareness}),this._isDisposed=!1,this._awareness=e.awareness,this._user=e.user,this._user.ready.then((()=>this._onUserChanged(this._user))).catch
((e=>console.error(e))),this._user.userChanged.connect(this._onUserChanged,this)}get
isDisposed(){return
this._isDisposed}dispose(){this._isDisposed||(this._user.userChanged.disconnect(this._onUserChanged,this),this._isDisposed=!0,this.destroy())}_onUserChanged(e){this._awareness.setLocalStateField("user",e.identity)}}var
s=n(285),i=n(526),a=n(125),c=n(769);class l{constructor(e){var
t;this._serverSettings=null!==(t=e.serverSettings)&&void
0!==t?t:a.ServerConnection.makeSettings()}async
runCell({cell:e,notebook:t,notebookConfig:n,onCellExecuted:r,onCellExecutionScheduled:o,sessionContext:l,sessionDialogs:d,translator:h}){var
u,p,v;const
m=(h=null!=h?h:c.nullTranslator).load("jupyterlab");switch(e.model.type){case"markdown":e.rendered=!0,e.inputHidden=!1,r({cell:e,success:!0});break;case"code":if(l){if(l.isTerminating){await(0,s.showDialog)({title:m.__("Kernel
Terminating"),body:m.__("The kernel for %1 appears to be terminating. You can
not run any cell for now.",null===(u=l.session)
||void 0===u?void
0:u.path),buttons:[s.Dialog.okButton()]});break}if(l.pendingInput)return
await(0,s.showDialog)({title:m.__("Cell not executed due to pending
input"),body:m.__("The cell has not been executed to avoid kernel deadlock as
there is another pending input! Submit your pending input and try
again."),buttons:[s.Dialog.okButton()]}),!1;if(l.hasNoKernel&&await
l.startKernel()&&d&&await d.selectKernel(l),l.hasNoKernel)return
e.model.sharedModel.transact((()=>{e.model.clearExecution()})),!0;const
n=null===(v=null===(p=null==l?void 0:l.session)||void 0===p?void
0:p.kernel)||void 0===v?void
0:v.id,c=i.URLExt.join(this._serverSettings.baseUrl,`api/kernels/${n}/execute`),h=e.model.sharedModel.getId(),g=t.sharedModel.getState("document_id"),f={method:"POST",body:JSON.stringify({cell_id:h,document_id:g})};o({cell:e});let
_=!1;try{_=(await
a.ServerConnection.makeRequest(c,f,this._serverSettings)).ok}catch(t){if(r({cell:e,success:!1}),e.isDisposed)return!1;throw
t}return r({cell:e,suc
cess:_}),!0}e.model.sharedModel.transact((()=>{e.model.clearExecution()}),!1)}return
Promise.resolve(!0)}}const
d="api/collaboration/session",h="api/collaboration/undo_redo",u="api/collaboration/timeline",p="api/collaboration/fork";async
function v(e="",t={},n){const
r=null!=n?n:a.ServerConnection.makeSettings(),o=i.URLExt.join(r.baseUrl,e);let
s;try{s=await a.ServerConnection.makeRequest(o,t,r)}catch(e){throw new
a.ServerConnection.NetworkError(e)}let c=await
s.text();if(c.length>0)try{c=JSON.parse(c)}catch(e){console.error("Not a JSON
response body.",s)}if(!s.ok)throw new
a.ServerConnection.ResponseError(s,c.message||c);return c}async function
m(e,t,n,r){const
o=null!=r?r:a.ServerConnection.makeSettings(),s=i.URLExt.join(o.baseUrl,d,encodeURIComponent(n)),c={method:"PUT",body:JSON.stringify({format:e,type:t})};let
l;try{l=await a.ServerConnection.makeRequest(s,c,o)}catch(e){throw new
a.ServerConnection.NetworkError(e)}let h=await
l.text();if(h.length>0)try{h=JSON.parse(h)}catch(e)
{console.log("Not a JSON response body.",l)}if(!l.ok)throw new
a.ServerConnection.ResponseError(l,h.message||h);return h}async function
g(e,t,n,r){const o=null!=r?r:a.ServerConnection.makeSettings();let
s=i.URLExt.join(o.baseUrl,u,n);s=s.concat(`?format=${e}&&type=${t}`);const
c={method:"GET"};let l;try{l=await
a.ServerConnection.makeRequest(s,c,o)}catch(e){throw new
a.ServerConnection.NetworkError(e)}return l}async function f(e,t,n,r,o){const
s=null!=o?o:a.ServerConnection.makeSettings();let
c=i.URLExt.join(s.baseUrl,h,encodeURIComponent(e));c=c.concat(`?action=${t}&&steps=${n}&&forkRoom=${r}`);const
l={method:"PUT"};let d;try{d=await
a.ServerConnection.makeRequest(c,l,s)}catch(e){throw new
a.ServerConnection.NetworkError(e)}let u=await
d.text();if(u.length>0)try{u=JSON.parse(u)}catch(e){console.log("Not a JSON
response body.",d)}if(!d.ok)throw new
a.ServerConnection.ResponseError(d,u.message||u);return u}var
_=n(262),y=n(602);class S{constructor(e){var t;this._onConnectionClosed=e
=>{1003===e.code&&(console.error("Document provider
closed:",e.reason),(0,s.showErrorMessage)(this._trans.__("Document session
error"),e.reason,[s.Dialog.okButton()]),this._sharedModel.dispose())},this._onSync=e=>{e&&(this._yWebsocketProvider&&(this._yWebsocketProvider.off("sync",this._onSync),this._sharedModel.ydoc.getMap("state").set("document_id",this._yWebsocketProvider.roomname)),this._ready.resolve())},this._ready=new
_.PromiseDelegate,this._isDisposed=!1,this._path=e.path,this._contentType=e.contentType,this._format=e.format,this._customServerUrl=e.url,this._sharedModel=e.model,this._awareness=e.model.awareness,this._yWebsocketProvider=null,this._serverSettings=null!==(t=e.serverSettings)&&void
0!==t?t:a.ServerConnection.makeSettings(),this._trans=e.translator;const
n=e.user;n.ready.then((()=>{this._onUserChanged(n)})).catch((e=>console.error(e))),n.userChanged.connect(this._onUserChanged,this),this._connect().catch((e=>console.warn(e)))}get
isDisposed(){return this._isDispos
ed}get ready(){return this._ready.promise}get contentType(){return
this._contentType}get format(){return this._format}dispose(){var
e,t,n;this.isDisposed||(this._isDisposed=!0,null===(e=this._yWebsocketProvider)||void
0===e||e.off("connection-close",this._onConnectionClosed),null===(t=this._yWebsocketProvider)||void
0===t||t.off("sync",this._onSync),null===(n=this._yWebsocketProvider)||void
0===n||n.destroy(),this._disconnect(),y.Signal.clearData(this))}async
reconnect(){this._disconnect(),this._connect()}get _serverUrl(){var e;return
null!==(e=this._customServerUrl)&&void
0!==e?e:i.URLExt.join(this._serverSettings.wsUrl,"api/collaboration/room")}async
_connect(){const e=await
m(this._format,this._contentType,this._path,this._serverSettings),t=this._serverSettings.token,n={sessionId:e.sessionId};this._serverSettings.appendToken&&""!==t&&(n.token=t),this._yWebsocketProvider=new
r.WebsocketProvider(this._serverUrl,`${e.format}:${e.type}:${e.fileId}`,this._sharedModel.ydoc,{disableBc:!
0,params:n,awareness:this._awareness,WebSocketPolyfill:this._serverSettings.WebSocket}),this._yWebsocketProvider.on("sync",this._onSync),this._yWebsocketProvider.on("connection-close",this._onConnectionClosed)}async
connectToForkDoc(e,t){const
n=this._serverSettings.token,o={sessionId:t};this._serverSettings.appendToken&&""!==n&&(o.token=n),this._disconnect(),this._yWebsocketProvider=new
r.WebsocketProvider(this._serverUrl,e,this._sharedModel.ydoc,{disableBc:!0,params:o,awareness:this._awareness,WebSocketPolyfill:this._serverSettings.WebSocket})}get
wsProvider(){return this._yWebsocketProvider}_disconnect(){var
e,t,n;null===(e=this._yWebsocketProvider)||void
0===e||e.off("connection-close",this._onConnectionClosed),null===(t=this._yWebsocketProvider)||void
0===t||t.off("sync",this._onSync),null===(n=this._yWebsocketProvider)||void
0===n||n.destroy(),this._yWebsocketProvider=null}_onUserChanged(e){this._awareness.setLocalStateField("user",e.identity)}}var
w=n(721),k=n(214);const b="t
rue"===i.PageConfig.getOption("disableRTC");class
C{constructor(e){this._onCreate=(e,t)=>{var n,r,o,s,i,a,c;if("string"!=typeof
e.format)return;const
l=null===(o=null===(r=null===(n=this._docmanagerSettings)||void 0===n?void
0:n.composite)||void 0===r?void 0:r.autosave)||void
0===o||o;t.awareness.setLocalStateField("autosave",l),null===(s=this._docmanagerSettings)||void
0===s||s.changed.connect((()=>{var e,n,r;const
o=null===(r=null===(n=null===(e=this._docmanagerSettings)||void 0===e?void
0:e.composite)||void 0===n?void 0:n.autosave)||void
0===r||r;t.awareness.setLocalStateField("autosave",o)}));try{const n=new
S({path:e.path,format:e.format,contentType:e.contentType,model:t,user:this._user,translator:this._trans,serverSettings:this._serverSettings}),r=((null===(i=this._globalAwareness)||void
0===i?void
0:i.getLocalState())||{}).documents||[];r.includes(e.path)||(r.push(e.path),null===(a=this._globalAwareness)||void
0===a||a.setLocalStateField("documents",r));let o=e.path,s=`${e.fo
rmat}:${e.contentType}:${o}`;this._providers.set(s,n);const l=t=>{var
n,r;const i=t.oldValue,a=t.newValue;if(!i||!a)return void console.debug("New or
old path not given",t);const
c=`${e.format}:${e.contentType}:${i}`;if(c!==s)return void console.error("The
computed old provider key is different from the current key");const
l=`${e.format}:${e.contentType}:${a}`,d=this._providers.get(c);if(!d)return
void console.warn(`Could not find a provider to update after rename ${c},
${l}`);this._providers.set(l,d),this._providers.delete(c),s=l,o=a;const
h=((null===(n=this._globalAwareness)||void 0===n?void
0:n.getLocalState())||{}).documents||[],u=h.indexOf(i);h.includes(i)&&!h.includes(a)&&(h.splice(u,1),h.push(a),null===(r=this._globalAwareness)||void
0===r||r.setLocalStateField("documents",h))},d=(e,t)=>{var
n,r;if("rename"!==t.type)return;const s=null===(n=t.oldValue)||void 0===n?void
0:n.path,i=null===(r=t.newValue)||void 0===r?void
0:r.path;s===o&&l({oldValue:s,newValue:i,name:"path"})};nu
ll===(c=this._driveFileChanged)||void
0===c||c.connect(d),t.changed.connect((async(n,r)=>{var
o;if(!r.stateChange)return;const
s=r.stateChange.filter((e=>"path"===e.name));for(const e of s)l(e);const
i=r.stateChange.filter((e=>"hash"===e.name));if(0===i.length)return;i.length>1&&console.error("Unexpected
multiple changes to hash value in a single transaction");const
a=i[0],c=null!==(o=t.state.path)&&void 0!==o?o:e.path,d=await
this.get(c,{content:!1});this._providerFileChanged.emit({type:"save",newValue:{...d,hash:a.newValue},oldValue:{hash:a.oldValue}})})),t.disposed.connect((()=>{var
e,t,n;const
r=this._providers.get(s);r&&(r.dispose(),this._providers.delete(s));const
i=((null===(e=this._globalAwareness)||void 0===e?void
0:e.getLocalState())||{}).documents||[],a=i.indexOf(o);a>-1&&i.splice(a,1),null===(t=this._globalAwareness)||void
0===t||t.setLocalStateField("documents",i),null===(n=this._driveFileChanged)||void
0===n||n.disconnect(d)}))}catch(t){console.error(`Failed to open we
bsocket connection for
${e.path}.\n:${t}`)}},this._saveCounter=0,this._providerFileChanged=new
y.Signal(this),this._user=e.user,this._trans=e.trans,this._globalAwareness=e.globalAwareness,this._serverSettings=e.serverSettings,this._currentDrive=e.currentDrive,this.sharedModelFactory=new
T(this._onCreate),this._providers=new
Map,this._docmanagerSettings=e.docmanagerSettings,this._driveFileChanged=e.fileChanged}get
providers(){return this._providers}async
get(e,t){if(t&&t.format&&t.type){const
n=`${t.format}:${t.type}:${e}`,r=this._providers.get(n);if(r){const[n]=await
Promise.all([this._currentDrive.get(e,{...t,content:!1,contentProviderId:void
0}),r.ready]);return{...n,format:t.format}}}return
this._currentDrive.get(e,{...t,contentProviderId:void 0})}async
save(e,t={}){var n;if(t.format&&t.type){const
r=`${t.format}:${t.type}:${e}`,o=this._providers.get(r),s=++this._saveCounter;if(o){const
r=null===(n=o.wsProvider)||void 0===n?void 0:n.ws;if(r){const e=new
_.PromiseDelegate,t=t=>{co
nst n=new
Uint8Array(t.data),r=w.$C(n);try{if(2!==w.cw(r))return}catch(e){return}const
o=w.t3(r);let i=null;try{i=JSON.parse(o)}catch(e){console.debug("The raw reply
received was not a JSON
reply")}i&&"save"===i.type&&i.responseTo===s&&("success"===i.status?e.resolve():"failed"===i.status?e.reject("Saving
failed"):"skipped"===i.status?e.reject("Saving already in
progress"):e.reject("Unrecognised save reply
status"))};r.addEventListener("message",t);const
n=k.xv();k.zd(n,2),k.Qj(n,"save"),k.zd(n,s);const o=k.Fo(n);r.send(o),await
e.promise,r.removeEventListener("message",t)}const
i={type:t.type,format:t.format,content:!1};return
this.get(e,i)}console.warn(`Could not find a provider for ${e}, falling back to
REST API save`)}return this._currentDrive.save(e,{...t,contentProviderId:void
0})}get fileChanged(){return this._providerFileChanged}}class
T{constructor(e){this._onCreate=e,this.collaborative=!b,this.documentFactories=new
Map}registerDocumentFactory(e,t){if(this.documentFactories
.has(e))throw new Error(`The content type ${e} already
exists`);this.documentFactories.set(e,t)}createNew(e){if("string"==typeof
e.format){if(this.collaborative&&e.collaborative&&this.documentFactories.has(e.contentType)){const
t=this.documentFactories.get(e.contentType)(e);return
this._onCreate(e,t),t}}else console.warn(`Only defined format are supported;
got ${e.format}.`)}}var
E=n(345),x=n.n(E),U=n(972),R=n.n(U),$=n(740),D=n.n($),P=n(128),j=n.n(P),N=n(855),L=n.n(N),I=n(51),F=n.n(I),M=n(656),A=n.n(M),W=n(68),O={};O.styleTagTransform=A(),O.setAttributes=L(),O.insert=j().bind(null,"head"),O.domAPI=D(),O.insertStyleElement=F(),R()(W.A,O),W.A&&W.A.locals&&W.A.locals;var
J=n(391);const
B=({apiURL:e,provider:t,contentType:n,format:r,documentTimelineUrl:o,serverSettings:i})=>{const[a,c]=(0,E.useState)({roomId:"",timestamps:[],forkRoom:"",sessionId:""}),[l,d]=(0,E.useState)(a.timestamps.length-1),[h,u]=(0,E.useState)(!1),[p,v]=(0,E.useState)(!1),_=(0,E.useRef)(!0),y=(0,E.useRef)(!0),S=(0,
E.useRef)(null);function w(e){try{const t=new
URL(e).pathname,n=t.lastIndexOf(o);if(-1===n)throw new Error(`API segment
"${o}" not found in URL.`);return t.slice(n+o.length)}catch(e){return
console.error("Invalid URL or unable to extract filename:",e),""}}return
x().createElement("div",{className:"jp-sliderContainer"},x().createElement("div",{onClick:()=>{!async
function(o){try{if(_.current){const a=await g(r,n,o,i);if(!a.ok)throw
404===a.status?new Error("Not found"):503===a.status?new Error("WebSocket
closed"):new Error(`Failed to fetch data: ${a.statusText}`);const l=await
a.text();let h={roomId:"",timestamps:[],forkRoom:"",sessionId:""};return
l&&(s.Notification.warning("Document is now in read-only mode. Changes will not
be
saved.",{autoClose:2500}),h=JSON.parse(l),c(h),d(h.timestamps.length-1),t.connectToForkDoc(h.forkRoom,h.sessionId),S.current=await
m(r,n,w(e),i)),u(!0),_.current=!1,h}}catch(e){console.error("Error fetching
data:",e)}}(w(e))},className:"jp-mod-highlighted",t
itle:"Document
Timeline"},x().createElement(J.historyIcon.react,{marginRight:"4px"})),h&&x().createElement("div",{className:"jp-timestampDisplay"},x().createElement("input",{type:"range",min:0,max:a.timestamps.length-1,value:l,onChange:async
e=>{const t=parseInt(e.target.value),n=Math.abs(t-l);try{const
e=function(e){return
e<l?"undo":"redo"}(t);if(d(t),y.current&&(v(!0),y.current=!1),!S.current)return
void console.error("Session is not initialized");await
f(`${S.current.format}:${S.current.type}:${S.current.fileId}`,e,n,a.forkRoom,i)}catch(e){console.error("Error
fetching or applying
updates:",e)}},className:"jp-Slider"}),x().createElement("div",null,x().createElement("strong",null,w(e).split("/").pop(),"
"),"
"),p&&x().createElement("div",{className:"jp-restoreBtnContainer"},x().createElement("button",{onClick:async()=>{if(!S.current)return
void console.error("Session is not initialized");const e=await
f(`${S.current.format}:${S.current.type}:${S.current.fileId}`,"restore",0,a.for
kRoom,i);200===e.code?(s.Notification.success(e.status,{autoClose:4e3}),t.reconnect(),u(!1),_.current=!0):s.Notification.error(e.status,{autoClose:4e3})},className:"jp-ToolbarButtonComponent
jp-restoreBtn"},"Restore version"," ",(e=>{const t=new
Date(1e3*e);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")}
${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}:${String(t.getSeconds()).padStart(2,"0")}`})(a.timestamps[l])))))};class
V extends
s.ReactWidget{constructor(e,t,n,r,o,s){super(),this.apiURL=e,this.provider=t,this.contentType=n,this.format=r,this.documentTimelineUrl=o,this._serverSettings=s,this.addClass("jp-timelineSliderWrapper")}render(){return
E.createElement(B,{key:this.apiURL,apiURL:this.apiURL,provider:this.provider,contentType:this.contentType,format:this.format,documentTimelineUrl:this.documentTimelineUrl,serverSettings:this._serverSettings})}updateContent(e,t){this.apiURL=e,this.pro
vider=t,this.contentType=this.provider.contentType,this.format=this.provider.format,this.update()}}const
q=new
_.Token("@jupyter/docprovider:IForkManagerToken"),K="https://schema.jupyter.org/jupyter_collaboration/fork/v1";class
z{constructor(e){this._disposed=!1,this._forkAddedSignal=new
y.Signal(this),this._forkDeletedSignal=new
y.Signal(this);const{contentProvider:t,eventManager:n}=e;this._contentProvider=t,this._eventManager=n,this._eventManager.stream.connect(this._handleEvent,this),this._serverSettings=e.serverSettings}get
isDisposed(){return this._disposed}get forkAdded(){return
this._forkAddedSignal}get forkDeleted(){return
this._forkDeletedSignal}dispose(){var
e;this._disposed||(null===(e=this._eventManager)||void
0===e||e.stream.disconnect(this._handleEvent),this._disposed=!0)}async
createFork(e){const{rootId:t,title:n,description:r,synchronize:o}=e,s={method:"PUT",body:JSON.stringify({title:n,description:r,synchronize:o})},a=i.URLExt.join(p,t);return
await v(a,s,this._serv
erSettings)}async getAllForks(e){const t=i.URLExt.join(p,e);return await
v(t,{method:"GET"},this._serverSettings)}async
deleteFork(e){const{forkId:t,merge:n}=e,r=i.URLExt.join(p,t),o=i.URLExt.objectToQueryString({merge:n});await
v(`${r}${o}`,{method:"DELETE"},this._serverSettings)}getProvider(e){const{documentPath:t,format:n,type:r}=e,o=this._contentProvider;if(o){const
e=t;return
o.providers.get(`${n}:${r}:${e}`)}}_handleEvent(e,t){if(t.schema_id===K)switch(t.action){case"create":this._forkAddedSignal.emit(t);break;case"delete":this._forkDeletedSignal.emit(t)}}}}}]);
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/240.fcd24e6ef73eda1e61ba.js
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/240.fcd24e6ef73eda1e61ba.js
---
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/240.fcd24e6ef73eda1e61ba.js
2020-02-02 01:00:00.000000000 +0100
+++
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/240.fcd24e6ef73eda1e61ba.js
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-"use
strict";(self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[]).push([[240],{68:(e,t,n)=>{n.d(t,{A:()=>a});var
o=n(758),r=n.n(o),s=n(935),i=n.n(s)()(r());i.push([e.id,"/*
-----------------------------------------------------------------------------\n|
Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the
Modified BSD
License.\n|----------------------------------------------------------------------------
*/\n\n.jp-timelineSliderWrapper .jp-sliderContainer{\n display: flex;\n
align-items: center;\n}\n\n.jp-Slider {\n height:
4.5px\n}\n\n#jp-slider-status-bar {\n display:
flex;\n}\n\n.jp-timestampDisplay {\n display: flex;\n flex-direction: row;\n
align-items: center;\n gap: 6px;\n}\n\n.jp-restoreBtnContainer {\n width:
192px;\n}\n\n.jp-ToolbarButtonComponent.jp-restoreBtn {\n cursor: pointer;\n
color: var(--jp-layout-color2);\n width: 100%;\n background:
var(--jp-accept-color-normal)\n}\n",""]);con
st a=i},935:e=>{e.exports=function(e){var t=[];return
t.toString=function(){return this.map((function(t){var n="",o=void
0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media
".concat(t[2]," {")),o&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):"","
{")),n+=e(t),o&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,o,r,s){"string"==typeof
e&&(e=[[null,e,void 0]]);var i={};if(o)for(var a=0;a<this.length;a++){var
c=this[a][0];null!=c&&(i[c]=!0)}for(var l=0;l<e.length;l++){var
d=[].concat(e[l]);o&&i[d[0]]||(void 0!==s&&(void
0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):"","
{").concat(d[1],"}")),d[5]=s),n&&(d[2]?(d[1]="@media ".concat(d[2],"
{").concat(d[1],"}"),d[2]=n):d[2]=n),r&&(d[4]?(d[1]="@supports
(".concat(d[4],")
{").concat(d[1],"}"),d[4]=r):d[4]="".concat(r)),t.push(d))}},t}},758:e=>{e.exports=function(e){return
e[1]}},591:e=>{var t=[];function n(e){for(var
n=-1,o=0;o<t.length;o++)if(t[o].identifier===e){n=o;br
eak}return n}function o(e,o){for(var s={},i=[],a=0;a<e.length;a++){var
c=e[a],l=o.base?c[0]+o.base:c[0],d=s[l]||0,u="".concat(l,"
").concat(d);s[l]=d+1;var
h=n(u),p={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==h)t[h].references++,t[h].updater(p);else{var
m=r(p,o);o.byIndex=a,t.splice(a,0,{identifier:u,updater:m,references:1})}i.push(u)}return
i}function r(e,t){var n=t.domAPI(t);return
n.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;n.update(e=t)}else
n.remove()}}e.exports=function(e,r){var s=o(e=e||[],r=r||{});return
function(e){e=e||[];for(var i=0;i<s.length;i++){var
a=n(s[i]);t[a].references--}for(var c=o(e,r),l=0;l<s.length;l++){var
d=n(s[l]);0===t[d].references&&(t[d].updater(),t.splice(d,1))}s=c}}},128:e=>{var
t={};e.exports=function(e,n){var o=function(e){if(void 0===t[e]){var
n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof
window.HTMLI
FrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return
t[e]}(e);if(!o)throw new Error("Couldn't find a style target. This probably
means that the value for the 'insert' parameter is
invalid.");o.appendChild(n)}},51:e=>{e.exports=function(e){var
t=document.createElement("style");return
e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},855:(e,t,n)=>{e.exports=function(e){var
t=n.nc;t&&e.setAttribute("nonce",t)}},740:e=>{e.exports=function(e){if("undefined"==typeof
document)return{update:function(){},remove:function(){}};var
t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var
o="";n.supports&&(o+="@supports (".concat(n.supports,")
{")),n.media&&(o+="@media ".concat(n.media," {"));var r=void
0!==n.layer;r&&(o+="@layer".concat(n.layer.length>0?" ".concat(n.layer):"","
{")),o+=n.css,r&&(o+="}"),n.media&&(o+="}"),n.supports&&(o+="}");var
s=n.sourceMap;s&&"undefined"!=typeof btoa&&(o+="\n/*#
sourceMappingURL=data:application/json;base64,".concat
(btoa(unescape(encodeURIComponent(JSON.stringify(s)))),"
*/")),t.styleTagTransform(o,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},656:e=>{e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},240:(e,t,n)=>{n.r(t),n.d(t,{ForkManager:()=>V,IForkManagerToken:()=>K,JUPYTER_COLLABORATION_FORK_EVENTS_URI:()=>z,NotebookCellServerExecutor:()=>l,ROOM_FORK_URL:()=>p,RtcContentProvider:()=>C,TimelineWidget:()=>q,WebSocketAwarenessProvider:()=>r,WebSocketProvider:()=>w,requestAPI:()=>m,requestDocSession:()=>v,requestDocumentTimeline:()=>f,requestUndoRedo:()=>g});var
o=n(560);class r extends
o.WebsocketProvider{constructor(e){super(e.url,e.roomID,e.awareness.doc,{awareness:e.awareness}),this._isDisposed=!1,this._awareness=e.awareness,this._user=e.user,this._user.ready.then((()=>this._onUserChanged(this._user))).catch
((e=>console.error(e))),this._user.userChanged.connect(this._onUserChanged,this)}get
isDisposed(){return
this._isDisposed}dispose(){this._isDisposed||(this._user.userChanged.disconnect(this._onUserChanged,this),this._isDisposed=!0,this.destroy())}_onUserChanged(e){this._awareness.setLocalStateField("user",e.identity)}}var
s=n(805),i=n(708),a=n(955),c=n(503);class l{constructor(e){var
t;this._serverSettings=null!==(t=e.serverSettings)&&void
0!==t?t:a.ServerConnection.makeSettings()}async
runCell({cell:e,notebook:t,notebookConfig:n,onCellExecuted:o,onCellExecutionScheduled:r,sessionContext:l,sessionDialogs:d,translator:u}){var
h,p,m;const
v=(u=null!=u?u:c.nullTranslator).load("jupyterlab");switch(e.model.type){case"markdown":e.rendered=!0,e.inputHidden=!1,o({cell:e,success:!0});break;case"code":if(l){if(l.isTerminating){await(0,s.showDialog)({title:v.__("Kernel
Terminating"),body:v.__("The kernel for %1 appears to be terminating. You can
not run any cell for now.",null===(h=l.session)
||void 0===h?void
0:h.path),buttons:[s.Dialog.okButton()]});break}if(l.pendingInput)return
await(0,s.showDialog)({title:v.__("Cell not executed due to pending
input"),body:v.__("The cell has not been executed to avoid kernel deadlock as
there is another pending input! Submit your pending input and try
again."),buttons:[s.Dialog.okButton()]}),!1;if(l.hasNoKernel&&await
l.startKernel()&&d&&await d.selectKernel(l),l.hasNoKernel)return
e.model.sharedModel.transact((()=>{e.model.clearExecution()})),!0;const
n=null===(m=null===(p=null==l?void 0:l.session)||void 0===p?void
0:p.kernel)||void 0===m?void
0:m.id,c=i.URLExt.join(this._serverSettings.baseUrl,`api/kernels/${n}/execute`),u=e.model.sharedModel.getId(),f=t.sharedModel.getState("document_id"),g={method:"POST",body:JSON.stringify({cell_id:u,document_id:f})};r({cell:e});let
y=!1;try{y=(await
a.ServerConnection.makeRequest(c,g,this._serverSettings)).ok}catch(t){if(o({cell:e,success:!1}),e.isDisposed)return!1;throw
t}return o({cell:e,suc
cess:y}),!0}e.model.sharedModel.transact((()=>{e.model.clearExecution()}),!1)}return
Promise.resolve(!0)}}const
d="api/collaboration/session",u="api/collaboration/undo_redo",h="api/collaboration/timeline",p="api/collaboration/fork";async
function m(e="",t={}){const
n=a.ServerConnection.makeSettings(),o=i.URLExt.join(n.baseUrl,e);let
r;try{r=await a.ServerConnection.makeRequest(o,t,n)}catch(e){throw new
a.ServerConnection.NetworkError(e)}let s=await
r.text();if(s.length>0)try{s=JSON.parse(s)}catch(e){console.error("Not a JSON
response body.",r)}if(!r.ok)throw new
a.ServerConnection.ResponseError(r,s.message||s);return s}async function
v(e,t,n){const
o=a.ServerConnection.makeSettings(),r=i.URLExt.join(o.baseUrl,d,encodeURIComponent(n)),s={method:"PUT",body:JSON.stringify({format:e,type:t})};let
c;try{c=await a.ServerConnection.makeRequest(r,s,o)}catch(e){throw new
a.ServerConnection.NetworkError(e)}let l=await
c.text();if(l.length>0)try{l=JSON.parse(l)}catch(e){console.log("Not a JSON
response body.",c)}if(!c.ok)throw new
a.ServerConnection.ResponseError(c,l.message||l);return l}async function
f(e,t,n){const o=a.ServerConnection.makeSettings();let
r=i.URLExt.join(o.baseUrl,h,n);r=r.concat(`?format=${e}&&type=${t}`);const
s={method:"GET"};let c;try{c=await
a.ServerConnection.makeRequest(r,s,o)}catch(e){throw new
a.ServerConnection.NetworkError(e)}return c}async function g(e,t,n,o){const
r=a.ServerConnection.makeSettings();let
s=i.URLExt.join(r.baseUrl,u,encodeURIComponent(e));s=s.concat(`?action=${t}&&steps=${n}&&forkRoom=${o}`);const
c={method:"PUT"};let l;try{l=await
a.ServerConnection.makeRequest(s,c,r)}catch(e){throw new
a.ServerConnection.NetworkError(e)}let d=await
l.text();if(d.length>0)try{d=JSON.parse(d)}catch(e){console.log("Not a JSON
response body.",l)}if(!l.ok)throw new
a.ServerConnection.ResponseError(l,d.message||d);return d}var
y=n(262),_=n(602);class
w{constructor(e){this._onConnectionClosed=e=>{1003===e.code&&(console.error("Document
provider cl
osed:",e.reason),(0,s.showErrorMessage)(this._trans.__("Document session
error"),e.reason,[s.Dialog.okButton()]),this._sharedModel.dispose())},this._onSync=e=>{e&&(this._yWebsocketProvider&&(this._yWebsocketProvider.off("sync",this._onSync),this._sharedModel.ydoc.getMap("state").set("document_id",this._yWebsocketProvider.roomname)),this._ready.resolve())},this._ready=new
y.PromiseDelegate,this._isDisposed=!1,this._path=e.path,this._contentType=e.contentType,this._format=e.format,this._serverUrl=e.url,this._sharedModel=e.model,this._awareness=e.model.awareness,this._yWebsocketProvider=null,this._trans=e.translator;const
t=e.user;t.ready.then((()=>{this._onUserChanged(t)})).catch((e=>console.error(e))),t.userChanged.connect(this._onUserChanged,this),this._connect().catch((e=>console.warn(e)))}get
isDisposed(){return this._isDisposed}get ready(){return
this._ready.promise}get contentType(){return this._contentType}get
format(){return this._format}dispose(){var e,t,n;this.isDisposed||(t
his._isDisposed=!0,null===(e=this._yWebsocketProvider)||void
0===e||e.off("connection-close",this._onConnectionClosed),null===(t=this._yWebsocketProvider)||void
0===t||t.off("sync",this._onSync),null===(n=this._yWebsocketProvider)||void
0===n||n.destroy(),this._disconnect(),_.Signal.clearData(this))}async
reconnect(){this._disconnect(),this._connect()}async _connect(){const e=await
v(this._format,this._contentType,this._path);this._yWebsocketProvider=new
o.WebsocketProvider(this._serverUrl,`${e.format}:${e.type}:${e.fileId}`,this._sharedModel.ydoc,{disableBc:!0,params:{sessionId:e.sessionId},awareness:this._awareness}),this._yWebsocketProvider.on("sync",this._onSync),this._yWebsocketProvider.on("connection-close",this._onConnectionClosed)}async
connectToForkDoc(e,t){this._disconnect(),this._yWebsocketProvider=new
o.WebsocketProvider(this._serverUrl,e,this._sharedModel.ydoc,{disableBc:!0,params:{sessionId:t},awareness:this._awareness})}get
wsProvider(){return this._yWebsocketProvider
}_disconnect(){var e,t,n;null===(e=this._yWebsocketProvider)||void
0===e||e.off("connection-close",this._onConnectionClosed),null===(t=this._yWebsocketProvider)||void
0===t||t.off("sync",this._onSync),null===(n=this._yWebsocketProvider)||void
0===n||n.destroy(),this._yWebsocketProvider=null}_onUserChanged(e){this._awareness.setLocalStateField("user",e.identity)}}var
S=n(721),k=n(214);const b="true"===i.PageConfig.getOption("disableRTC");class
C extends
a.RestContentProvider{constructor(e){super(e),this._onCreate=(e,t)=>{var
n,o,r,s,a,c;if("string"!=typeof e.format)return;const
l=null===(r=null===(o=null===(n=this._docmanagerSettings)||void 0===n?void
0:n.composite)||void 0===o?void 0:o.autosave)||void
0===r||r;t.awareness.setLocalStateField("autosave",l),null===(s=this._docmanagerSettings)||void
0===s||s.changed.connect((()=>{var e,n,o;const
r=null===(o=null===(n=null===(e=this._docmanagerSettings)||void 0===e?void
0:e.composite)||void 0===n?void 0:n.autosave)||void 0===o||o;t.aware
ness.setLocalStateField("autosave",r)}));try{const n=new
w({url:i.URLExt.join(this._serverSettings.wsUrl,"api/collaboration/room"),path:e.path,format:e.format,contentType:e.contentType,model:t,user:this._user,translator:this._trans}),o=((null===(a=this._globalAwareness)||void
0===a?void
0:a.getLocalState())||{}).documents||[];o.includes(e.path)||(o.push(e.path),null===(c=this._globalAwareness)||void
0===c||c.setLocalStateField("documents",o));const
r=`${e.format}:${e.contentType}:${e.path}`;this._providers.set(r,n),t.changed.connect((async(n,o)=>{var
r;if(!o.stateChange)return;const
s=o.stateChange.filter((e=>"hash"===e.name));if(0===s.length)return;s.length>1&&console.error("Unexpected
multiple changes to hash value in a single transaction");const
i=s[0],a=null!==(r=t.state.path)&&void 0!==r?r:e.path,c=await
this.get(a,{content:!1});this._ydriveFileChanged.emit({type:"save",newValue:{...c,hash:i.newValue},oldValue:{hash:i.oldValue}})})),t.disposed.connect((()=>{var
t,n;const o=this
._providers.get(r);o&&(o.dispose(),this._providers.delete(r));const
s=((null===(t=this._globalAwareness)||void 0===t?void
0:t.getLocalState())||{}).documents||[],i=s.indexOf(e.path);i>-1&&s.splice(i,1),null===(n=this._globalAwareness)||void
0===n||n.setLocalStateField("documents",s)}))}catch(t){console.error(`Failed
to open websocket connection for
${e.path}.\n:${t}`)}},this._saveCounter=0,this._ydriveFileChanged=new
_.Signal(this),this._user=e.user,this._trans=e.trans,this._globalAwareness=e.globalAwareness,this._serverSettings=e.serverSettings,this.sharedModelFactory=new
T(this._onCreate),this._providers=new
Map,this._docmanagerSettings=e.docmanagerSettings}get providers(){return
this._providers}async get(e,t){if(t&&t.format&&t.type){const
n=`${t.format}:${t.type}:${e}`,o=this._providers.get(n);if(o){const[n]=await
Promise.all([super.get(e,{...t,content:!1}),o.ready]);return{...n,format:t.format}}}return
super.get(e,t)}async save(e,t={}){var n;if(t.format&&t.type){const o=`${t.for
mat}:${t.type}:${e}`,r=this._providers.get(o),s=++this._saveCounter;if(r){const
o=null===(n=r.wsProvider)||void 0===n?void 0:n.ws;if(o){const e=new
y.PromiseDelegate,t=t=>{const n=new
Uint8Array(t.data),o=S.$C(n);try{if(2!==S.cw(o))return}catch(e){return}const
r=S.t3(o);let i=null;try{i=JSON.parse(r)}catch(e){console.debug("The raw reply
received was not a JSON
reply")}i&&"save"===i.type&&i.responseTo===s&&("success"===i.status?e.resolve():"failed"===i.status?e.reject("Saving
failed"):"skipped"===i.status?e.reject("Saving already in
progress"):e.reject("Unrecognised save reply
status"))};o.addEventListener("message",t);const
n=k.xv();k.zd(n,2),k.Qj(n,"save"),k.zd(n,s);const r=k.Fo(n);o.send(r),await
e.promise,o.removeEventListener("message",t)}const
i={type:t.type,format:t.format,content:!1};return this.get(e,i)}}return
super.save(e,t)}get fileChanged(){return this._ydriveFileChanged}}class
T{constructor(e){this._onCreate=e,this.collaborative=!b,this.documentFactories=new
Map}regist
erDocumentFactory(e,t){if(this.documentFactories.has(e))throw new Error(`The
content type ${e} already
exists`);this.documentFactories.set(e,t)}createNew(e){if("string"==typeof
e.format){if(this.collaborative&&e.collaborative&&this.documentFactories.has(e.contentType)){const
t=this.documentFactories.get(e.contentType)(e);return
this._onCreate(e,t),t}}else console.warn(`Only defined format are supported;
got ${e.format}.`)}}var
E=n(345),x=n.n(E),R=n(591),U=n.n(R),D=n(740),P=n.n(D),$=n(128),j=n.n($),N=n(855),L=n.n(N),I=n(51),M=n.n(I),F=n(656),A=n.n(F),W=n(68),O={};O.styleTagTransform=A(),O.setAttributes=L(),O.insert=j().bind(null,"head"),O.domAPI=P(),O.insertStyleElement=M(),U()(W.A,O),W.A&&W.A.locals&&W.A.locals;var
J=n(249);const
B=({apiURL:e,provider:t,contentType:n,format:o,documentTimelineUrl:r})=>{const[i,a]=(0,E.useState)({roomId:"",timestamps:[],forkRoom:"",sessionId:""}),[c,l]=(0,E.useState)(i.timestamps.length-1),[d,u]=(0,E.useState)(!1),[h,p]=(0,E.useState)(!1),m=(0,E.useRe
f)(!0),y=(0,E.useRef)(!0),_=(0,E.useRef)(null);function w(e){try{const t=new
URL(e).pathname,n=t.lastIndexOf(r);if(-1===n)throw new Error(`API segment
"${r}" not found in URL.`);return t.slice(n+r.length)}catch(e){return
console.error("Invalid URL or unable to extract filename:",e),""}}return
x().createElement("div",{className:"jp-sliderContainer"},x().createElement("div",{onClick:()=>{!async
function(r){try{if(m.current){const i=await f(o,n,r);if(!i.ok)throw
404===i.status?new Error("Not found"):503===i.status?new Error("WebSocket
closed"):new Error(`Failed to fetch data: ${i.statusText}`);const c=await
i.text();let d={roomId:"",timestamps:[],forkRoom:"",sessionId:""};return
c&&(s.Notification.warning("Document is now in read-only mode. Changes will not
be
saved.",{autoClose:2500}),d=JSON.parse(c),a(d),l(d.timestamps.length-1),t.connectToForkDoc(d.forkRoom,d.sessionId),_.current=await
v(o,n,w(e))),u(!0),m.current=!1,d}}catch(e){console.error("Error fetching
data:",e)}}(w(e))},class
Name:"jp-mod-highlighted",title:"Document
Timeline"},x().createElement(J.historyIcon.react,{marginRight:"4px"})),d&&x().createElement("div",{className:"jp-timestampDisplay"},x().createElement("input",{type:"range",min:0,max:i.timestamps.length-1,value:c,onChange:async
e=>{const t=parseInt(e.target.value),n=Math.abs(t-c);try{const
e=function(e){return
e<c?"undo":"redo"}(t);if(l(t),y.current&&(p(!0),y.current=!1),!_.current)return
void console.error("Session is not initialized");await
g(`${_.current.format}:${_.current.type}:${_.current.fileId}`,e,n,i.forkRoom)}catch(e){console.error("Error
fetching or applying
updates:",e)}},className:"jp-Slider"}),x().createElement("div",null,x().createElement("strong",null,w(e).split("/").pop(),"
"),"
"),h&&x().createElement("div",{className:"jp-restoreBtnContainer"},x().createElement("button",{onClick:async()=>{if(!_.current)return
void console.error("Session is not initialized");const e=await
g(`${_.current.format}:${_.current.type}:${_.current.f
ileId}`,"restore",0,i.forkRoom);200===e.code?(s.Notification.success(e.status,{autoClose:4e3}),t.reconnect(),u(!1),m.current=!0):s.Notification.error(e.status,{autoClose:4e3})},className:"jp-ToolbarButtonComponent
jp-restoreBtn"},"Restore version"," ",(e=>{const t=new
Date(1e3*e);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")}
${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}:${String(t.getSeconds()).padStart(2,"0")}`})(i.timestamps[c])))))};class
q extends
s.ReactWidget{constructor(e,t,n,o,r){super(),this.apiURL=e,this.provider=t,this.contentType=n,this.format=o,this.documentTimelineUrl=r,this.addClass("jp-timelineSliderWrapper")}render(){return
E.createElement(B,{key:this.apiURL,apiURL:this.apiURL,provider:this.provider,contentType:this.contentType,format:this.format,documentTimelineUrl:this.documentTimelineUrl})}updateContent(e,t){this.apiURL=e,this.provider=t,this.contentType=this.provider
.contentType,this.format=this.provider.format,this.update()}}const K=new
y.Token("@jupyter/docprovider:IForkManagerToken"),z="https://schema.jupyter.org/jupyter_collaboration/fork/v1";class
V{constructor(e){this._disposed=!1,this._forkAddedSignal=new
_.Signal(this),this._forkDeletedSignal=new
_.Signal(this);const{contentProvider:t,eventManager:n}=e;this._contentProvider=t,this._eventManager=n,this._eventManager.stream.connect(this._handleEvent,this)}get
isDisposed(){return this._disposed}get forkAdded(){return
this._forkAddedSignal}get forkDeleted(){return
this._forkDeletedSignal}dispose(){var
e;this._disposed||(null===(e=this._eventManager)||void
0===e||e.stream.disconnect(this._handleEvent),this._disposed=!0)}async
createFork(e){const{rootId:t,title:n,description:o,synchronize:r}=e,s={method:"PUT",body:JSON.stringify({title:n,description:o,synchronize:r})},a=i.URLExt.join(p,t);return
await m(a,s)}async getAllForks(e){const t=i.URLExt.join(p,e);return await
m(t,{method:"GET"})}asyn
c
deleteFork(e){const{forkId:t,merge:n}=e,o=i.URLExt.join(p,t),r=i.URLExt.objectToQueryString({merge:n});await
m(`${o}${r}`,{method:"DELETE"})}getProvider(e){const{documentPath:t,format:n,type:o}=e,r=this._contentProvider;if(r){const
e=t;return
r.providers.get(`${n}:${o}:${e}`)}}_handleEvent(e,t){if(t.schema_id===z)switch(t.action){case"create":this._forkAddedSignal.emit(t);break;case"delete":this._forkDeletedSignal.emit(t)}}}}}]);
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/703.171f03bb5a1f0cd958d7.js
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/703.171f03bb5a1f0cd958d7.js
---
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/703.171f03bb5a1f0cd958d7.js
2020-02-02 01:00:00.000000000 +0100
+++
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/703.171f03bb5a1f0cd958d7.js
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-"use
strict";(self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[]).push([[703],{703:(e,t,o)=>{o.r(t),o.d(t,{default:()=>k});var
r=o(805),n=o(256),i=o(395),a=o(927),s=o(987),l=o(341),d=o(679),c=o(503),u=o(0),v=o(593),p=o(681),g=o(708);const
h="api/collaboration/timeline",y="The file %1 has been opened with two
different views. This is not supported. Please close this view; otherwise, some
of your edits may not be saved
properly.",b={id:"@jupyter/docprovider-extension:content-provider",description:"The
RTC content
provider",provides:v.ICollaborativeContentProvider,requires:[c.ITranslator],optional:[v.IGlobalAwareness,d.ISettingRegistry],activate:async(e,t,o,r)=>{const
n=t.load("jupyter_collaboration"),i=e.serviceManager.contents.defaultDrive;if(!i)throw
Error("Cannot initialize content provider: default drive property not
accessible on contents manager instance.");const
a=i.contentProviderRegistry;if(!a)throw Error("Cannot initialize con
tent provider: no content provider registry.");const s=r?await
r.load("@jupyterlab/docmanager-extension:plugin"):null,l=new
p.RtcContentProvider({apiEndpoint:"/api/contents",serverSettings:i.serverSettings,user:e.serviceManager.user,trans:n,globalAwareness:o,docmanagerSettings:s});return
a.register("rtc",l),l}},m={id:"@jupyter/docprovider-extension:yfile",description:"Plugin
to register the shared model factory for the content type
'file'",autoStart:!0,requires:[v.ICollaborativeContentProvider,a.IEditorWidgetFactory],activate:(e,t,o)=>{t.sharedModelFactory.registerDocumentFactory("file",(()=>new
u.YFile)),o.contentProviderId="rtc"}},f={id:"@jupyter/docprovider-extension:ynotebook",description:"Plugin
to register the shared model factory for the content type
'notebook'",autoStart:!0,requires:[v.ICollaborativeContentProvider,l.INotebookWidgetFactory],optional:[d.ISettingRegistry],activate:(e,t,o,r)=>{let
n=!0;r&&r.load("@jupyterlab/notebook-extension:tracker").then((e=>{const
t=e=>{va
r t;const o=null==e?void
0:e.get("experimentalEnableDocumentWideUndoRedo").composite;n=null===(t=!o)||void
0===t||t};t(e),e.changed.connect((e=>t(e)))})),t.sharedModelFactory.registerDocumentFactory("notebook",(()=>new
u.YNotebook({disableDocumentWideUndoRedo:n}))),o.contentProviderId="rtc"}},w={id:"@jupyter/docprovider-extension:statusBarTimeline",description:"Plugin
to add a timeline slider to the status
bar",autoStart:!0,requires:[i.IStatusBar,v.ICollaborativeContentProvider],activate:async(e,t,o)=>{try{let
r=null,i=null;const
a=async(t,r)=>{if(!r)return;i&&(i.dispose(),i=null);const[a,s]=r.split(":"),l=o.providers.get(`${a}:${s}:${t}`);if(!l)return;const
d=l,c=g.URLExt.join(e.serviceManager.serverSettings.baseUrl,h,t);i=new
p.TimelineWidget(c,d,d.contentType,d.format,h);const
u=document.getElementById("jp-slider-status-bar");u&&!i.isAttached&&n.Widget.attach(i,u)};e.shell.currentChanged&&e.shell.currentChanged.connect((async(e,t)=>{const
o=t.newValue;i&&(i.dispose(),i=null),o&&"
context"in o&&(await o.context.ready,await
a(o.context.path,o.context.model.sharedModel.getState("document_id")))})),t&&(r||(r=new
n.Widget,r.addClass("jp-StatusBar-GroupItem"),r.addClass("jp-mod-highlighted"),r.id="jp-slider-status-bar",t.registerStatusItem("jp-slider-status-bar",{item:r,align:"left",rank:4,isActive:()=>{var
t,o;const r=e.shell.currentWidget;return(null===(o=null===(t=null==r?void
0:r.context)||void 0===t?void 0:t.model)||void 0===o?void
0:o.collaborative)||!1}})))}catch(e){console.error("Failed to activate
statusBarTimeline
plugin:",e)}}},k=[b,m,f,{id:"@jupyter/docprovider-extension:logger",description:"A
logging plugin for debugging
purposes.",autoStart:!0,optional:[s.ILoggerRegistry,a.IEditorTracker,l.INotebookTracker,c.ITranslator],activate:(e,t,o,n,i)=>{const
a=(null!=i?i:c.nullTranslator).load("jupyter_collaboration"),s="https://schema.jupyter.org/jupyter_collaboration/session/v1";if(!t)return
void e.serviceManager.events.stream.connect(((e,t)=>{var o,n;t.sch
ema_id===s&&(console.debug(`[${t.room}(${t.path})] ${null!==(o=t.action)&&void
0!==o?o:""}: ${null!==(n=t.msg)&&void
0!==n?n:""}`),"WARNING"===t.level&&(0,r.showDialog)({title:a.__("Warning"),body:a.__(y,t.path),buttons:[r.Dialog.okButton()]}))}));const
l=new Map,d=(e,o)=>{const
r=t.getLogger(o.context.path);l.set(o.context.localPath,r),o.disposed.connect((e=>{l.delete(e.context.localPath)}))};o&&o.widgetAdded.connect(d),n&&n.widgetAdded.connect(d),(async()=>{var
t,o;const{events:n}=e.serviceManager;for await(const e of
n.stream)if(e.schema_id===s){const
n=l.get(e.path);null==n||n.log({type:"text",level:e.level.toLowerCase(),data:`[${e.room}]
${null!==(t=e.action)&&void 0!==t?t:""}: ${null!==(o=e.msg)&&void
0!==o?o:""}`}),"WARNING"===e.level&&(0,r.showDialog)({title:a.__("Warning"),body:a.__(y,e.path),buttons:[r.Dialog.warnButton({label:a.__("Ok")})]})}})()}},{id:"@jupyter/docprovider-extension:notebook-cell-executor",description:"Add
notebook cell executor that uses REST API instea
d of kernel protocol over
WebSocket.",autoStart:!0,provides:l.INotebookCellExecutor,activate:e=>"true"===g.PageConfig.getOption("serverSideExecution")?new
p.NotebookCellServerExecutor({serverSettings:e.serviceManager.serverSettings}):Object.freeze({runCell:l.runCell})},w,{id:"@jupyter/docprovider-extension:forkManager",autoStart:!0,requires:[v.ICollaborativeContentProvider],provides:p.IForkManagerToken,activate:(e,t)=>{const
o=e.serviceManager.events;return new
p.ForkManager({contentProvider:t,eventManager:o})}}]}}]);
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/703.cca2ba3bbe2fb4612085.js
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/703.cca2ba3bbe2fb4612085.js
---
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/703.cca2ba3bbe2fb4612085.js
1970-01-01 01:00:00.000000000 +0100
+++
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/703.cca2ba3bbe2fb4612085.js
2020-02-02 01:00:00.000000000 +0100
@@ -0,0 +1 @@
+"use
strict";(self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[]).push([[703],{703:(e,t,o)=>{o.r(t),o.d(t,{default:()=>C});var
r=o(285),n=o(247),i=o(165),a=o(121),s=o(333),l=o(931),d=o(249),c=o(769),u=o(0),v=o(627),g=o(591),p=o(526);const
h="api/collaboration/timeline",y="The file %1 has been opened with two
different views. This is not supported. Please close this view; otherwise, some
of your edits may not be saved
properly.",b={id:"@jupyter/docprovider-extension:content-provider",description:"The
RTC content
provider",provides:v.ICollaborativeContentProvider,requires:[c.ITranslator],optional:[v.IGlobalAwareness,d.ISettingRegistry],activate:async(e,t,o,r)=>{const
n=t.load("jupyter_collaboration"),i=e.serviceManager.contents.defaultDrive;if(!i)throw
Error("Cannot initialize content provider: default drive property not
accessible on contents manager instance.");const
a=i.contentProviderRegistry;if(!a)throw Error("Cannot initialize con
tent provider: no content provider registry.");const s=r?await
r.load("@jupyterlab/docmanager-extension:plugin"):null,l=new
g.RtcContentProvider({currentDrive:i,serverSettings:i.serverSettings,user:e.serviceManager.user,trans:n,globalAwareness:o,docmanagerSettings:s,fileChanged:i.fileChanged});return
a.register("rtc",l),l}},m={id:"@jupyter/docprovider-extension:yfile",description:"Plugin
to register the shared model factory for the content type
'file'",autoStart:!0,requires:[v.ICollaborativeContentProvider,a.IEditorWidgetFactory],activate:(e,t,o)=>{t.sharedModelFactory.registerDocumentFactory("file",(()=>new
u.YFile)),o.contentProviderId="rtc"}},f={id:"@jupyter/docprovider-extension:ynotebook",description:"Plugin
to register the shared model factory for the content type
'notebook'",autoStart:!0,requires:[v.ICollaborativeContentProvider,l.INotebookWidgetFactory],optional:[d.ISettingRegistry],activate:(e,t,o,r)=>{let
n=!0;r&&r.load("@jupyterlab/notebook-extension:tracker").then((e=>{c
onst t=e=>{var t;const o=null==e?void
0:e.get("experimentalEnableDocumentWideUndoRedo").composite;n=null===(t=!o)||void
0===t||t};t(e),e.changed.connect((e=>t(e)))})),t.sharedModelFactory.registerDocumentFactory("notebook",(()=>new
u.YNotebook({disableDocumentWideUndoRedo:n}))),o.contentProviderId="rtc"}},w={id:"@jupyter/docprovider-extension:statusBarTimeline",description:"Plugin
to add a timeline slider to the status
bar",autoStart:!0,requires:[i.IStatusBar,v.ICollaborativeContentProvider],activate:async(e,t,o)=>{try{let
r=null,i=null;const
a=async(t,r)=>{if(!r)return;i&&(i.dispose(),i=null);const[a,s]=r.split(":"),l=o.providers.get(`${a}:${s}:${t}`);if(!l)return;const
d=l,c=p.URLExt.join(e.serviceManager.serverSettings.baseUrl,h,t);i=new
g.TimelineWidget(c,d,d.contentType,d.format,h,e.serviceManager.serverSettings);const
u=document.getElementById("jp-slider-status-bar");u&&!i.isAttached&&n.Widget.attach(i,u)};e.shell.currentChanged&&e.shell.currentChanged.connect((async(e,t)=>{co
nst o=t.newValue;i&&(i.dispose(),i=null),o&&"context"in o&&(await
o.context.ready,await
a(o.context.path,o.context.model.sharedModel.getState("document_id")))})),t&&(r||(r=new
n.Widget,r.addClass("jp-StatusBar-GroupItem"),r.addClass("jp-mod-highlighted"),r.id="jp-slider-status-bar",t.registerStatusItem("jp-slider-status-bar",{item:r,align:"left",rank:4,isActive:()=>{var
t,o;const r=e.shell.currentWidget;return(null===(o=null===(t=null==r?void
0:r.context)||void 0===t?void 0:t.model)||void 0===o?void
0:o.collaborative)||!1}})))}catch(e){console.error("Failed to activate
statusBarTimeline
plugin:",e)}}},C=[b,m,f,{id:"@jupyter/docprovider-extension:logger",description:"A
logging plugin for debugging
purposes.",autoStart:!0,optional:[s.ILoggerRegistry,a.IEditorTracker,l.INotebookTracker,c.ITranslator],activate:(e,t,o,n,i)=>{const
a=(null!=i?i:c.nullTranslator).load("jupyter_collaboration"),s="https://schema.jupyter.org/jupyter_collaboration/session/v1";if(!t)return
void e.serviceManager
.events.stream.connect(((e,t)=>{var
o,n;t.schema_id===s&&(console.debug(`[${t.room}(${t.path})]
${null!==(o=t.action)&&void 0!==o?o:""}: ${null!==(n=t.msg)&&void
0!==n?n:""}`),"WARNING"===t.level&&(0,r.showDialog)({title:a.__("Warning"),body:a.__(y,t.path),buttons:[r.Dialog.okButton()]}))}));const
l=new Map,d=(e,o)=>{const
r=t.getLogger(o.context.path);l.set(o.context.localPath,r),o.disposed.connect((e=>{l.delete(e.context.localPath)}))};o&&o.widgetAdded.connect(d),n&&n.widgetAdded.connect(d),(async()=>{var
t,o;const{events:n}=e.serviceManager;for await(const e of
n.stream)if(e.schema_id===s){const
n=l.get(e.path);null==n||n.log({type:"text",level:e.level.toLowerCase(),data:`[${e.room}]
${null!==(t=e.action)&&void 0!==t?t:""}: ${null!==(o=e.msg)&&void
0!==o?o:""}`}),"WARNING"===e.level&&(0,r.showDialog)({title:a.__("Warning"),body:a.__(y,e.path),buttons:[r.Dialog.warnButton({label:a.__("Ok")})]})}})()}},{id:"@jupyter/docprovider-extension:notebook-cell-executor",description:"Add
not
ebook cell executor that uses REST API instead of kernel protocol over
WebSocket.",autoStart:!0,provides:l.INotebookCellExecutor,activate:e=>"true"===p.PageConfig.getOption("serverSideExecution")?new
g.NotebookCellServerExecutor({serverSettings:e.serviceManager.serverSettings}):Object.freeze({runCell:l.runCell})},w,{id:"@jupyter/docprovider-extension:forkManager",autoStart:!0,requires:[v.ICollaborativeContentProvider],provides:g.IForkManagerToken,activate:(e,t)=>{const
o=e.serviceManager.events;return new
g.ForkManager({contentProvider:t,eventManager:o,serverSettings:e.serviceManager.serverSettings})}}]}}]);
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/944.44dd443686c15fbe0cbf.js
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/944.44dd443686c15fbe0cbf.js
---
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/944.44dd443686c15fbe0cbf.js
1970-01-01 01:00:00.000000000 +0100
+++
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/944.44dd443686c15fbe0cbf.js
2020-02-02 01:00:00.000000000 +0100
@@ -0,0 +1 @@
+"use
strict";(self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[]).push([[944],{78:(n,e,o)=>{o.d(e,{A:()=>u});var
r=o(758),t=o.n(r),a=o(935),i=o.n(a),l=o(256),p=o(28),s=o(921),d=o(674),c=i()(t());c.i(l.A),c.i(p.A),c.i(s.A),c.i(d.A),c.push([n.id,"/*
-----------------------------------------------------------------------------\n|
Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the
Modified BSD
License.\n|----------------------------------------------------------------------------
*/\n\n.jp-shared-link-body {\n user-select: none;\n}\n",""]);const
u=c},256:(n,e,o)=>{o.d(e,{A:()=>l});var
r=o(758),t=o.n(r),a=o(935),i=o.n(a)()(t());i.push([n.id,"/*
-----------------------------------------------------------------------------\n|
Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the
Modified BSD
License.\n|----------------------------------------------------------------------------
*/\n\n.jp-
MenuBar-label {\n margin-left: 25px;\n}\n\n.jp-MenuBar-anonymousIcon span {\n
width: 24px;\n text-align: center;\n fill: var(--jp-ui-font-color1);\n
color:
var(--jp-ui-font-color1);\n}\n\n.jp-MenuBar-anonymousIcon,\n.jp-MenuBar-imageIcon
{\n position: absolute;\n top: 1px;\n left: 8px;\n width: 24px;\n height:
24px;\n display: flex;\n align-items: center;\n vertical-align: middle;\n
border-radius: 100%;\n}\n\n.jp-MenuBar-imageIcon img {\n width: 24px;\n
border-radius: 100%;\n fill: var(--jp-ui-font-color1);\n color:
var(--jp-ui-font-color1);\n}\n\n.jp-UserMenu-caretDownIcon {\n height: 22px;\n
position: relative;\n top: 15%;\n}\n",""]);const
l=i},674:(n,e,o)=>{o.d(e,{A:()=>l});var
r=o(758),t=o.n(r),a=o(935),i=o.n(a)()(t());i.push([n.id,"/*
-----------------------------------------------------------------------------\n|
Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the
Modified BSD License.\n|-------------------------------------------
--------------------------------- */\n\n.jp-shared-link-body {\n user-select:
none;\n}\n\n.jp-ManageSharesBody-search-container {\n margin-bottom:
10px;\n}\n\n.jp-ManageSharesBody-search-input {\n width: 100%;\n padding:
5px;\n margin-top: 5px;\n}\n\n.jp-ManageSharesBody-search-results {\n height:
10em;\n overflow-y: auto;\n border: 1px solid var(--jp-border-color0);\n
padding: 5px;\n flex-shrink: 0;\n}\n\n.jp-ManageSharesBody-user-item {\n
padding: 5px;\n cursor: pointer;\n}\n\n.jp-ManageSharesBody-user-item:hover
{\n background-color:
var(--jp-border-color3);\n}\n\n.jp-ManageSharesBody-selected-users {\n
margin-top: 10px;\n height: 10em;\n overflow-y: auto;\n border: 1px solid
var(--jp-border-color0);\n flex-shrink:
0;\n}\n\n.jp-ManageSharesBody-url-input {\n width: 100%;\n padding: 5px;\n
margin-top: 10px;\n}\n\n.jp-ManageSharesBody-shares-table {\n width:
100%;\n}\n\n.jp-ManageSharesBody-shares-table
td:nth-child(2),\n.jp-ManageSharesBody-shares-table td:nt
h-child(3) {\n text-align:
center;\n}\n\n.jp-Dialog-content:has(.jp-shared-link-body) {\n max-height:
750px;\n}\n",""]);const l=i},28:(n,e,o)=>{o.d(e,{A:()=>l});var
r=o(758),t=o.n(r),a=o(935),i=o.n(a)()(t());i.push([n.id,"/*\n * Copyright (c)
Jupyter Development Team.\n * Distributed under the terms of the Modified BSD
License.\n
*/\n\n/************************************************************\n
Main
Panel\n*************************************************************/\n\n.jp-RTCPanel
{\n min-width: var(--jp-sidebar-min-width) !important;\n color:
var(--jp-ui-font-color1);\n background: var(--jp-layout-color1);\n font-size:
var(--jp-ui-font-size1);\n}\n\n/************************************************************\n
User Info
Panel\n*************************************************************/\n.jp-UserInfoPanel
{\n display: flex;\n flex-direction: column;\n max-height: 140px;\n
padding-top: 3px;\n}\n\n.jp-UserInfo-Container
{\n margin: 20px;\n display: flex;\n flex-direction: column;\n
align-items: center;\n}\n\n.jp-UserInfo-Icon {\n margin: auto;\n width:
50px;\n height: 50px;\n border-radius: 50px;\n display: inline-flex;\n
align-items: center;\n}\n\n.jp-UserInfo-Icon span {\n margin: auto;\n
text-align: center;\n font-size: 25px;\n fill: var(--jp-ui-font-color1);\n
color: var(--jp-ui-font-color1);\n}\n\n.jp-UserInfo-Info {\n margin: 20px;\n
display: inline-flex;\n flex-direction: column;\n}\n\n.jp-UserInfo-Info label
{\n font-weight: bold;\n fill: var(--jp-ui-font-color1);\n color:
var(--jp-ui-font-color1);\n}\n\n.jp-UserInfo-Info input {\n text-decoration:
none;\n border-top: none;\n border-left: none;\n border-right: none;\n
border-color: var(--jp-ui-font-color1);\n border-width: 0.5px;\n
background-color: transparent;\n fill: var(--jp-ui-font-color1);\n color:
var(--jp-ui-font-color1);\n}\n\n/************************************************************\n
Collaborators Info
Panel\n*************************************************************/\n\n.jp-CollaboratorsPanel
{\n overflow-y: auto;\n}\n\n.jp-CollaboratorsList {\n flex-direction:
column;\n display: flex;\n z-index: 1000;\n}\n\n.jp-CollaboratorHeader {\n
padding: 10px;\n display: flex;\n align-items: center;\n font-size:
var(--jp-ui-font-size0);\n fill: var(--jp-ui-font-color1);\n color:
var(--jp-ui-font-color1);\n}\n\n.jp-CollaboratorHeader > span {\n
padding-left: 7px;\n}\n\n.jp-ClickableCollaborator:hover {\n cursor:
pointer;\n background-color: var(--jp-layout-color2);\n fill:
var(--jp-ui-font-color0);\n color:
var(--jp-ui-font-color0);\n}\n\n.jp-CollaboratorHeaderCollapser {\n transform:
rotate(-90deg);\n margin: auto 0;\n height:
16px;\n}\n\n.jp-CollaboratorHeader:not(.jp-ClickableCollaborator)
.jp-CollaboratorHeaderCollapser {\n visibility:
hidden;\n}\n\n.jp-CollaboratorHeaderCollapser.jp-mod-expanded {\n transform:
rotate(0deg);\n}\n\n.jp-Collabo
ratorIcon {\n border-radius: 100%;\n padding: 2px;\n width: 24px;\n
height: 24px;\n display: flex;\n}\n\n.jp-CollaboratorIcon > span {\n
text-align: center;\n margin: auto;\n font-size: 12px;\n fill:
var(--jp-ui-font-color1);\n color:
var(--jp-ui-font-color1);\n}\n\n.jp-CollaboratorFiles {\n padding-left: 1em;\n
margin-top: 0;\n box-shadow: 0 2px 2px -2px rgb(0 0 0 /
24%);\n\n}\n\n/************************************************************\n
User Info
Details\n*************************************************************/\n.jp-UserInfo-Field
{\n display: flex;\n justify-content:
space-between;\n}\n\n.jp-UserInfo-Field > label,\n.jp-UserInfo-Field > input
{\n padding: 0.5em 1em;\n margin: 0.25em 0;\n}\n\n.jp-UserInfo-Field > label
{\n font-weight: bold;\n}\n\n.jp-UserInfo-Field > input {\n border:
none;\n}\n\n.jp-UserInfo-Field > input:not(:disabled) {\n cursor: pointer;\n
background-color: var(--jp-input-background);\n}\n\n.jp-UserInfo-Field > i
nput:focus {\n border: solid 1px
var(--jp-cell-editor-active-border-color);\n}\n\n.jp-UserInfo-Field >
input:focus-visible {\n outline: none;\n}\n",""]);const
l=i},921:(n,e,o)=>{o.d(e,{A:()=>l});var
r=o(758),t=o.n(r),a=o(935),i=o.n(a)()(t());i.push([n.id,"/*
-----------------------------------------------------------------------------\n|
Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the
Modified BSD
License.\n|----------------------------------------------------------------------------
*/\n\n.jp-toolbar-users-item {\n flex-grow: 1;\n display: flex;\n
flex-direction: row;\n}\n\n.jp-toolbar-users-item
.jp-MenuBar-anonymousIcon,\n.jp-toolbar-users-item .jp-MenuBar-imageIcon {\n
position: relative;\n left: 0;\n height: 22px;\n width: 22px;\n box-sizing:
border-box;\n cursor: default;\n}\n",""]);const
l=i},935:n=>{n.exports=function(n){var e=[];return e.toString=function(){return
this.map((function(e){var o="",r=void 0!==e[5];return e[4]&&(o+="@supp
orts (".concat(e[4],") {")),e[2]&&(o+="@media ".concat(e[2],"
{")),r&&(o+="@layer".concat(e[5].length>0?" ".concat(e[5]):"","
{")),o+=n(e),r&&(o+="}"),e[2]&&(o+="}"),e[4]&&(o+="}"),o})).join("")},e.i=function(n,o,r,t,a){"string"==typeof
n&&(n=[[null,n,void 0]]);var i={};if(r)for(var l=0;l<this.length;l++){var
p=this[l][0];null!=p&&(i[p]=!0)}for(var s=0;s<n.length;s++){var
d=[].concat(n[s]);r&&i[d[0]]||(void 0!==a&&(void
0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):"","
{").concat(d[1],"}")),d[5]=a),o&&(d[2]?(d[1]="@media ".concat(d[2],"
{").concat(d[1],"}"),d[2]=o):d[2]=o),t&&(d[4]?(d[1]="@supports
(".concat(d[4],")
{").concat(d[1],"}"),d[4]=t):d[4]="".concat(t)),e.push(d))}},e}},758:n=>{n.exports=function(n){return
n[1]}},972:n=>{var e=[];function o(n){for(var
o=-1,r=0;r<e.length;r++)if(e[r].identifier===n){o=r;break}return o}function
r(n,r){for(var a={},i=[],l=0;l<n.length;l++){var
p=n[l],s=r.base?p[0]+r.base:p[0],d=a[s]||0,c="".concat(s,"
").concat(d);a[s]=d+1;v
ar
u=o(c),f={css:p[1],media:p[2],sourceMap:p[3],supports:p[4],layer:p[5]};if(-1!==u)e[u].references++,e[u].updater(f);else{var
h=t(f,r);r.byIndex=l,e.splice(l,0,{identifier:c,updater:h,references:1})}i.push(c)}return
i}function t(n,e){var o=e.domAPI(e);return
o.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;o.update(n=e)}else
o.remove()}}n.exports=function(n,t){var a=r(n=n||[],t=t||{});return
function(n){n=n||[];for(var i=0;i<a.length;i++){var
l=o(a[i]);e[l].references--}for(var p=r(n,t),s=0;s<a.length;s++){var
d=o(a[s]);0===e[d].references&&(e[d].updater(),e.splice(d,1))}a=p}}},128:n=>{var
e={};n.exports=function(n,o){var r=function(n){if(void 0===e[n]){var
o=document.querySelector(n);if(window.HTMLIFrameElement&&o instanceof
window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(n){o=null}e[n]=o}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(o)}},51:n=>{n.exports=function(n){var
e=document.createElement("style");return
n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},855:(n,e,o)=>{n.exports=function(n){var
e=o.nc;e&&n.setAttribute("nonce",e)}},740:n=>{n.exports=function(n){if("undefined"==typeof
document)return{update:function(){},remove:function(){}};var
e=n.insertStyleElement(n);return{update:function(o){!function(n,e,o){var
r="";o.supports&&(r+="@supports (".concat(o.supports,")
{")),o.media&&(r+="@media ".concat(o.media," {"));var t=void
0!==o.layer;t&&(r+="@layer".concat(o.layer.length>0?" ".concat(o.layer):"","
{")),r+=o.css,t&&(r+="}"),o.media&&(r+="}"),o.supports&&(r+="}");var
a=o.sourceMap;a&&"undefined"!=typeof btoa&&(r+="\n/*#
sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))),"
*/")),e.styleTagTransform(r,n,e.options)}(e,n,o)},remove:function(){!function(n){if(null===n.par
entNode)return!1;n.parentNode.removeChild(n)}(e)}}}},656: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))}}},944:(n,e,o)=>{var
r=o(972),t=o.n(r),a=o(740),i=o.n(a),l=o(128),p=o.n(l),s=o(855),d=o.n(s),c=o(51),u=o.n(c),f=o(656),h=o.n(f),m=o(78),v={};v.styleTagTransform=h(),v.setAttributes=d(),v.insert=p().bind(null,"head"),v.domAPI=i(),v.insertStyleElement=u(),t()(m.A,v),m.A&&m.A.locals&&m.A.locals}}]);
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/944.eaec77f5cee3f07c3b7f.js
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/944.eaec77f5cee3f07c3b7f.js
---
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/944.eaec77f5cee3f07c3b7f.js
2020-02-02 01:00:00.000000000 +0100
+++
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/944.eaec77f5cee3f07c3b7f.js
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-"use
strict";(self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[]).push([[944],{78:(n,e,o)=>{o.d(e,{A:()=>u});var
r=o(758),t=o.n(r),a=o(935),i=o.n(a),l=o(875),p=o(28),s=o(921),d=o(674),c=i()(t());c.i(l.A),c.i(p.A),c.i(s.A),c.i(d.A),c.push([n.id,"/*
-----------------------------------------------------------------------------\n|
Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the
Modified BSD
License.\n|----------------------------------------------------------------------------
*/\n\n.jp-shared-link-body {\n user-select: none;\n}\n",""]);const
u=c},875:(n,e,o)=>{o.d(e,{A:()=>l});var
r=o(758),t=o.n(r),a=o(935),i=o.n(a)()(t());i.push([n.id,"/*
-----------------------------------------------------------------------------\n|
Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the
Modified BSD
License.\n|----------------------------------------------------------------------------
*/\n\n.jp-
MenuBar-label {\n margin-left: 25px;\n}\n\n.jp-MenuBar-anonymousIcon span {\n
width: 24px;\n text-align: center;\n fill: var(--jp-ui-font-color1);\n
color:
var(--jp-ui-font-color1);\n}\n\n.jp-MenuBar-anonymousIcon,\n.jp-MenuBar-imageIcon
{\n position: absolute;\n top: 1px;\n left: 8px;\n width: 24px;\n height:
24px;\n display: flex;\n align-items: center;\n vertical-align: middle;\n
border-radius: 100%;\n}\n\n.jp-MenuBar-imageIcon img {\n width: 24px;\n
border-radius: 100%;\n fill: var(--jp-ui-font-color1);\n color:
var(--jp-ui-font-color1);\n}\n\n.jp-UserMenu-caretDownIcon {\n height: 22px;\n
position: relative;\n top: 15%;\n}\n",""]);const
l=i},674:(n,e,o)=>{o.d(e,{A:()=>l});var
r=o(758),t=o.n(r),a=o(935),i=o.n(a)()(t());i.push([n.id,"/*
-----------------------------------------------------------------------------\n|
Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the
Modified BSD License.\n|-------------------------------------------
--------------------------------- */\n\n.jp-shared-link-body {\n user-select:
none;\n}\n\n.jp-ManageSharesBody-search-container {\n margin-bottom:
10px;\n}\n\n.jp-ManageSharesBody-search-input {\n width: 100%;\n padding:
5px;\n margin-top: 5px;\n}\n\n.jp-ManageSharesBody-search-results {\n height:
10em;\n overflow-y: auto;\n border: 1px solid var(--jp-border-color0);\n
padding: 5px;\n flex-shrink: 0;\n}\n\n.jp-ManageSharesBody-user-item {\n
padding: 5px;\n cursor: pointer;\n}\n\n.jp-ManageSharesBody-user-item:hover
{\n background-color:
var(--jp-border-color3);\n}\n\n.jp-ManageSharesBody-selected-users {\n
margin-top: 10px;\n height: 10em;\n overflow-y: auto;\n border: 1px solid
var(--jp-border-color0);\n flex-shrink:
0;\n}\n\n.jp-ManageSharesBody-url-input {\n width: 100%;\n padding: 5px;\n
margin-top: 10px;\n}\n\n.jp-ManageSharesBody-shares-table {\n width:
100%;\n}\n\n.jp-ManageSharesBody-shares-table
td:nth-child(2),\n.jp-ManageSharesBody-shares-table td:nt
h-child(3) {\n text-align:
center;\n}\n\n.jp-Dialog-content:has(.jp-shared-link-body) {\n max-height:
750px;\n}\n",""]);const l=i},28:(n,e,o)=>{o.d(e,{A:()=>l});var
r=o(758),t=o.n(r),a=o(935),i=o.n(a)()(t());i.push([n.id,"/*\n * Copyright (c)
Jupyter Development Team.\n * Distributed under the terms of the Modified BSD
License.\n
*/\n\n/************************************************************\n
Main
Panel\n*************************************************************/\n\n.jp-RTCPanel
{\n min-width: var(--jp-sidebar-min-width) !important;\n color:
var(--jp-ui-font-color1);\n background: var(--jp-layout-color1);\n font-size:
var(--jp-ui-font-size1);\n}\n\n/************************************************************\n
User Info
Panel\n*************************************************************/\n.jp-UserInfoPanel
{\n display: flex;\n flex-direction: column;\n max-height: 140px;\n
padding-top: 3px;\n}\n\n.jp-UserInfo-Container
{\n margin: 20px;\n display: flex;\n flex-direction: column;\n
align-items: center;\n}\n\n.jp-UserInfo-Icon {\n margin: auto;\n width:
50px;\n height: 50px;\n border-radius: 50px;\n display: inline-flex;\n
align-items: center;\n}\n\n.jp-UserInfo-Icon span {\n margin: auto;\n
text-align: center;\n font-size: 25px;\n fill: var(--jp-ui-font-color1);\n
color: var(--jp-ui-font-color1);\n}\n\n.jp-UserInfo-Info {\n margin: 20px;\n
display: inline-flex;\n flex-direction: column;\n}\n\n.jp-UserInfo-Info label
{\n font-weight: bold;\n fill: var(--jp-ui-font-color1);\n color:
var(--jp-ui-font-color1);\n}\n\n.jp-UserInfo-Info input {\n text-decoration:
none;\n border-top: none;\n border-left: none;\n border-right: none;\n
border-color: var(--jp-ui-font-color1);\n border-width: 0.5px;\n
background-color: transparent;\n fill: var(--jp-ui-font-color1);\n color:
var(--jp-ui-font-color1);\n}\n\n/************************************************************\n
Collaborators Info
Panel\n*************************************************************/\n\n.jp-CollaboratorsPanel
{\n overflow-y: auto;\n}\n\n.jp-CollaboratorsList {\n flex-direction:
column;\n display: flex;\n z-index: 1000;\n}\n\n.jp-CollaboratorHeader {\n
padding: 10px;\n display: flex;\n align-items: center;\n font-size:
var(--jp-ui-font-size0);\n fill: var(--jp-ui-font-color1);\n color:
var(--jp-ui-font-color1);\n}\n\n.jp-CollaboratorHeader > span {\n
padding-left: 7px;\n}\n\n.jp-ClickableCollaborator:hover {\n cursor:
pointer;\n background-color: var(--jp-layout-color2);\n fill:
var(--jp-ui-font-color0);\n color:
var(--jp-ui-font-color0);\n}\n\n.jp-CollaboratorHeaderCollapser {\n transform:
rotate(-90deg);\n margin: auto 0;\n height:
16px;\n}\n\n.jp-CollaboratorHeader:not(.jp-ClickableCollaborator)
.jp-CollaboratorHeaderCollapser {\n visibility:
hidden;\n}\n\n.jp-CollaboratorHeaderCollapser.jp-mod-expanded {\n transform:
rotate(0deg);\n}\n\n.jp-Collabo
ratorIcon {\n border-radius: 100%;\n padding: 2px;\n width: 24px;\n
height: 24px;\n display: flex;\n}\n\n.jp-CollaboratorIcon > span {\n
text-align: center;\n margin: auto;\n font-size: 12px;\n fill:
var(--jp-ui-font-color1);\n color:
var(--jp-ui-font-color1);\n}\n\n.jp-CollaboratorFiles {\n padding-left: 1em;\n
margin-top: 0;\n box-shadow: 0 2px 2px -2px rgb(0 0 0 /
24%);\n\n}\n\n/************************************************************\n
User Info
Details\n*************************************************************/\n.jp-UserInfo-Field
{\n display: flex;\n justify-content:
space-between;\n}\n\n.jp-UserInfo-Field > label,\n.jp-UserInfo-Field > input
{\n padding: 0.5em 1em;\n margin: 0.25em 0;\n}\n\n.jp-UserInfo-Field > label
{\n font-weight: bold;\n}\n\n.jp-UserInfo-Field > input {\n border:
none;\n}\n\n.jp-UserInfo-Field > input:not(:disabled) {\n cursor: pointer;\n
background-color: var(--jp-input-background);\n}\n\n.jp-UserInfo-Field > i
nput:focus {\n border: solid 1px
var(--jp-cell-editor-active-border-color);\n}\n\n.jp-UserInfo-Field >
input:focus-visible {\n outline: none;\n}\n",""]);const
l=i},921:(n,e,o)=>{o.d(e,{A:()=>l});var
r=o(758),t=o.n(r),a=o(935),i=o.n(a)()(t());i.push([n.id,"/*
-----------------------------------------------------------------------------\n|
Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the
Modified BSD
License.\n|----------------------------------------------------------------------------
*/\n\n.jp-toolbar-users-item {\n flex-grow: 1;\n display: flex;\n
flex-direction: row;\n}\n\n.jp-toolbar-users-item
.jp-MenuBar-anonymousIcon,\n.jp-toolbar-users-item .jp-MenuBar-imageIcon {\n
position: relative;\n left: 0;\n height: 22px;\n width: 22px;\n box-sizing:
border-box;\n cursor: default;\n}\n",""]);const
l=i},935:n=>{n.exports=function(n){var e=[];return e.toString=function(){return
this.map((function(e){var o="",r=void 0!==e[5];return e[4]&&(o+="@supp
orts (".concat(e[4],") {")),e[2]&&(o+="@media ".concat(e[2],"
{")),r&&(o+="@layer".concat(e[5].length>0?" ".concat(e[5]):"","
{")),o+=n(e),r&&(o+="}"),e[2]&&(o+="}"),e[4]&&(o+="}"),o})).join("")},e.i=function(n,o,r,t,a){"string"==typeof
n&&(n=[[null,n,void 0]]);var i={};if(r)for(var l=0;l<this.length;l++){var
p=this[l][0];null!=p&&(i[p]=!0)}for(var s=0;s<n.length;s++){var
d=[].concat(n[s]);r&&i[d[0]]||(void 0!==a&&(void
0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):"","
{").concat(d[1],"}")),d[5]=a),o&&(d[2]?(d[1]="@media ".concat(d[2],"
{").concat(d[1],"}"),d[2]=o):d[2]=o),t&&(d[4]?(d[1]="@supports
(".concat(d[4],")
{").concat(d[1],"}"),d[4]=t):d[4]="".concat(t)),e.push(d))}},e}},758:n=>{n.exports=function(n){return
n[1]}},591:n=>{var e=[];function o(n){for(var
o=-1,r=0;r<e.length;r++)if(e[r].identifier===n){o=r;break}return o}function
r(n,r){for(var a={},i=[],l=0;l<n.length;l++){var
p=n[l],s=r.base?p[0]+r.base:p[0],d=a[s]||0,c="".concat(s,"
").concat(d);a[s]=d+1;v
ar
u=o(c),f={css:p[1],media:p[2],sourceMap:p[3],supports:p[4],layer:p[5]};if(-1!==u)e[u].references++,e[u].updater(f);else{var
h=t(f,r);r.byIndex=l,e.splice(l,0,{identifier:c,updater:h,references:1})}i.push(c)}return
i}function t(n,e){var o=e.domAPI(e);return
o.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;o.update(n=e)}else
o.remove()}}n.exports=function(n,t){var a=r(n=n||[],t=t||{});return
function(n){n=n||[];for(var i=0;i<a.length;i++){var
l=o(a[i]);e[l].references--}for(var p=r(n,t),s=0;s<a.length;s++){var
d=o(a[s]);0===e[d].references&&(e[d].updater(),e.splice(d,1))}a=p}}},128:n=>{var
e={};n.exports=function(n,o){var r=function(n){if(void 0===e[n]){var
o=document.querySelector(n);if(window.HTMLIFrameElement&&o instanceof
window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(n){o=null}e[n]=o}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(o)}},51:n=>{n.exports=function(n){var
e=document.createElement("style");return
n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},855:(n,e,o)=>{n.exports=function(n){var
e=o.nc;e&&n.setAttribute("nonce",e)}},740:n=>{n.exports=function(n){if("undefined"==typeof
document)return{update:function(){},remove:function(){}};var
e=n.insertStyleElement(n);return{update:function(o){!function(n,e,o){var
r="";o.supports&&(r+="@supports (".concat(o.supports,")
{")),o.media&&(r+="@media ".concat(o.media," {"));var t=void
0!==o.layer;t&&(r+="@layer".concat(o.layer.length>0?" ".concat(o.layer):"","
{")),r+=o.css,t&&(r+="}"),o.media&&(r+="}"),o.supports&&(r+="}");var
a=o.sourceMap;a&&"undefined"!=typeof btoa&&(r+="\n/*#
sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))),"
*/")),e.styleTagTransform(r,n,e.options)}(e,n,o)},remove:function(){!function(n){if(null===n.par
entNode)return!1;n.parentNode.removeChild(n)}(e)}}}},656: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))}}},944:(n,e,o)=>{var
r=o(591),t=o.n(r),a=o(740),i=o.n(a),l=o(128),p=o.n(l),s=o(855),d=o.n(s),c=o(51),u=o.n(c),f=o(656),h=o.n(f),m=o(78),v={};v.styleTagTransform=h(),v.setAttributes=d(),v.insert=p().bind(null,"head"),v.domAPI=i(),v.insertStyleElement=u(),t()(m.A,v),m.A&&m.A.locals&&m.A.locals}}]);
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/remoteEntry.cddf83930bc7c4fbf11a.js
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/remoteEntry.cddf83930bc7c4fbf11a.js
---
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/remoteEntry.cddf83930bc7c4fbf11a.js
2020-02-02 01:00:00.000000000 +0100
+++
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/remoteEntry.cddf83930bc7c4fbf11a.js
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-var _JUPYTERLAB;(()=>{"use strict";var
e,r,t,o,n,a,i,l,u,d,s,f,c,p,v,h,b,y,m,g,j,w,P,S={496:(e,r,t)=>{var
o={"./index":()=>Promise.all([t.e(998),t.e(303),t.e(703)]).then((()=>()=>t(703))),"./extension":()=>Promise.all([t.e(998),t.e(303),t.e(703)]).then((()=>()=>t(703))),"./style":()=>t.e(944).then((()=>()=>t(944)))},n=(e,r)=>(t.R=r,r=t.o(o,e)?o[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 o="default",n=t.S[o];if(n&&n!==e)throw new
Error("Container initialization failed as it has already been initialized with
a different share scope");return
t.S[o]=e,t.I(o,r)}};t.d(r,{get:()=>n,init:()=>a})}},k={};function x(e){var
r=k[e];if(void 0!==r)return r.exports;var t=k[e]={id:e,exports:{}};return
S[e](t,t.exports,x),t.exports}x.m=S,x.c=k,x.n=e=>{var
r=e&&e.__esModule?()=>e.default:()=>e;return
x.d(r,{a:r}),r},x.d=(e,r)=>{for(var t in
r)x.o(r,t)&&!x.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[
t]})},x.f={},x.e=e=>Promise.all(Object.keys(x.f).reduce(((r,t)=>(x.f[t](e,r),r)),[])),x.u=e=>e+"."+{240:"fcd24e6ef73eda1e61ba",422:"3ab44960b241aac9f303",444:"13de0fd44849e3f7d780",703:"171f03bb5a1f0cd958d7",944:"eaec77f5cee3f07c3b7f",994:"bc087314bdabeecb0923"}[e]+".js?v="+{240:"fcd24e6ef73eda1e61ba",422:"3ab44960b241aac9f303",444:"13de0fd44849e3f7d780",703:"171f03bb5a1f0cd958d7",944:"eaec77f5cee3f07c3b7f",994:"bc087314bdabeecb0923"}[e],x.g=function(){if("object"==typeof
globalThis)return globalThis;try{return this||new Function("return
this")()}catch(e){if("object"==typeof window)return
window}}(),x.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="@jupyter/docprovider-extension:",x.l=(t,o,n,a)=>{if(e[t])e[t].push(o);else{var
i,l;if(void 0!==n)for(var
u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var
s=u[d];if(s.getAttribute("src")==t||s.getAttribute("data-webpack")==r+n){i=s;break}}i||(l=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=12
0,x.nc&&i.setAttribute("nonce",x.nc),i.setAttribute("data-webpack",r+n),i.src=t),e[t]=[o];var
f=(r,o)=>{i.onerror=i.onload=null,clearTimeout(c);var n=e[t];if(delete
e[t],i.parentNode&&i.parentNode.removeChild(i),n&&n.forEach((e=>e(o))),r)return
r(o)},c=setTimeout(f.bind(null,void
0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),l&&document.head.appendChild(i)}},x.r=e=>{"undefined"!=typeof
Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{x.S={};var
e={},r={};x.I=(t,o)=>{o||(o=[]);var
n=r[t];if(n||(n=r[t]={}),!(o.indexOf(n)>=0)){if(o.push(n),e[t])return
e[t];x.o(x.S,t)||(x.S[t]={});var
a=x.S[t],i="@jupyter/docprovider-extension",l=(e,r,t,o)=>{var
n=a[e]=a[e]||{},l=n[r];(!l||!l.loaded&&(!o!=!l.eager?o:i>l.from))&&(n[r]={get:t,from:i,eager:!!o})},u=[];return"default"===t&&(l("@jupyter/collaborative-drive","4.1.0",(()=>Promise.all([x.e(262),x.e
(444)]).then((()=>()=>x(444))))),l("@jupyter/docprovider-extension","4.1.0",(()=>Promise.all([x.e(998),x.e(303),x.e(703)]).then((()=>()=>x(703))))),l("@jupyter/docprovider","4.1.0",(()=>Promise.all([x.e(422),x.e(998),x.e(262),x.e(240)]).then((()=>()=>x(240))))),l("y-websocket","1.5.4",(()=>Promise.all([x.e(422),x.e(994),x.e(206)]).then((()=>()=>x(994)))))),e[t]=u.length?Promise.all(u).then((()=>e[t]=1)):1}}})(),(()=>{var
e;x.g.importScripts&&(e=x.g.location+"");var
r=x.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
o=t.length-1;o>-1&&(!e||!/^http(s?):/.test(e));)e=t[o--].src}if(!e)throw new
Error("Automatic publicPath is not supported in this
browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),x.p=e})(),t=e=>{var
r=e=>e.split(".").map((e=>+e==e?+e:e)),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),o=t[1]?r(t[1]):[];return
t[2]&&
(o.length++,o.push.apply(o,r(t[2]))),t[3]&&(o.push([]),o.push.apply(o,r(t[3]))),o},o=(e,r)=>{e=t(e),r=t(r);for(var
o=0;;){if(o>=e.length)return o<r.length&&"u"!=(typeof r[o])[0];var
n=e[o],a=(typeof n)[0];if(o>=r.length)return"u"==a;var i=r[o],l=(typeof
i)[0];if(a!=l)return"o"==a&&"n"==l||"s"==l||"u"==a;if("o"!=a&&"u"!=a&&n!=i)return
n<i;o++}},n=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
o=1,a=1;a<e.length;a++)o--,t+="u"==(typeof(l=e[a]))[0]?"-":(o>0?".":"")+(o=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():n(l))}return u();function u(){return
i.pop().replace(/^\((.+)\)$/,"$1")}},a=(e,r)=>{if(0 in e){r=t(r);var
o=e[0],n=o<0;n&&(o=-o-1);for(var i=0,l=1,u=!0;;l++,i++){var
d,s,f=l<e.length?(typeof
e[l])[0]:"";if(i>=r.length||"o"==(s=(typeof(d=r[i]))[0]))return!u||("u"==f?l>o&&!n:""==f!=n);if("u"==s){if(!u||"u"!=f)return!
1}else
if(u)if(f==s)if(l<=o){if(d!=e[l])return!1}else{if(n?d>e[l]:d<e[l])return!1;d!=e[l]&&(u=!1)}else
if("s"!=f&&"n"!=f){if(n||l<=o)return!1;u=!1,l--}else{if(l<=o||s<f!=n)return!1;u=!1}else"s"!=f&&"n"!=f&&(u=!1,l--)}}var
c=[],p=c.pop.bind(c);for(i=1;i<e.length;i++){var
v=e[i];c.push(1==v?p()|p():2==v?p()&p():v?a(v,r):!p())}return!!p()},i=(e,r)=>e&&x.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)),{}),d=(e,r,t,n)=>{var
i=n?u(e[r]):e[r];return(r=Object.keys(i).reduce(((e,r)=>!a(t,r)||e&&!o(e,r)?e:r),0))&&i[r]},s=(e,r,t)=>{var
n=t?u(e[r]):e[r];return
Object.keys(n).reduce(((e,r)=>!e||!n[e].loaded&&o(e,r)?r:e),0)},f=(e,r,t,o)=>"Unsatisfied
version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+"
(required "+n(o)+")",c=(e,r,t,o,a)=>{var i=e[t];return"No satisfying version
("+n(o)+")"+(a?" for eager consumption":"")+" of shared module "+t+" found in
shared scope "+r+".\nAvailable versions: "+Object.keys(i).map((e=>e+" from
"+i[e].from)).join(", ")},p=e=>{throw new Error(e)},v=e=>{"undefined"!=typeof
console&&console.warn&&console.warn(e)},b=(e,r,t)=>t?t():((e,r)=>p("Shared
module "+r+" doesn't exist in shared scope
"+e))(e,r),y=(h=e=>function(r,t,o,n,a){var i=x.I(r);return
i&&i.then&&!o?i.then(e.bind(e,r,x.S[r],t,!1,n,a)):e(r,x.S[r],t,o,n,a)})(((e,r,t,o,n,a)=>{if(!i(r,t))return
b(e,t,a);var u=d(r,t,n,o);return u?l(u):a?a():void
p(c(r,e,t,n,o))})),m=h(((e,r,t,o,n,u)=>{if(!i(r,t))return b(e,t,u);var
d=s(r,t,o);return
a(n,d)||v(f(r,t,d,n)),l(r[t][d])})),g={},j={503:()=>m("default","@jupyterlab/translation",!1,[1,4,4,4]),708:()=>m("default","@jupyterlab/coreutils",!1,[1,6,4,4]),805:()=>m("default","@jupyterlab/apputils",!1,[1,4,5,4]),0:()=>m("default","@jupyter/ydoc",!1,[1,3,0,0,,"a3"]),256:()=>m("default","@lumino/widgets",!1,[1,2,3,1,,"alpha",0]),341:()=>m("default","@jupyterlab/notebook",!1,[1,4,4,4]),395:()=>m("default","@jupyterlab/statusbar",!1,[1,4,4,4]),593:()=>m("default","@jupyter/collaborative
-drive",!1,[1,4,1,0],(()=>Promise.all([x.e(262),x.e(444)]).then((()=>()=>x(444))))),679:()=>m("default","@jupyterlab/settingregistry",!1,[1,4,4,4]),681:()=>m("default","@jupyter/docprovider",!1,[1,4,1,0],(()=>Promise.all([x.e(422),x.e(262),x.e(240)]).then((()=>()=>x(240))))),927:()=>m("default","@jupyterlab/fileeditor",!1,[1,4,4,4]),987:()=>m("default","@jupyterlab/logconsole",!1,[1,4,4,4]),262:()=>m("default","@lumino/coreutils",!1,[1,2,0,0]),249:()=>m("default","@jupyterlab/ui-components",!1,[1,4,4,4]),345:()=>m("default","react",!1,[1,18,2,0]),560:()=>y("default","y-websocket",!1,[1,1,3,15],(()=>Promise.all([x.e(994),x.e(206)]).then((()=>()=>x(994))))),602:()=>m("default","@lumino/signaling",!1,[1,2,0,0]),955:()=>m("default","@jupyterlab/services",!1,[1,7,4,4]),206:()=>m("default","yjs",!1,[1,13,5,40])},w={206:[206],240:[249,345,560,602,955],262:[262],303:[0,256,341,395,593,679,681,927,987],998:[503,708,805]},P={},x.f.consumes=(e,r)=>{x.o(w,e)&&w[e].forEach((e=>{if(x.o(g,e))retur
n r.push(g[e]);if(!P[e]){var t=r=>{g[e]=0,x.m[e]=t=>{delete
x.c[e],t.exports=r()}};P[e]=!0;var o=r=>{delete g[e],x.m[e]=t=>{throw delete
x.c[e],r}};try{var
n=j[e]();n.then?r.push(g[e]=n.then(t).catch(o)):t(n)}catch(e){o(e)}}}))},(()=>{var
e={552:0};x.f.j=(r,t)=>{var o=x.o(e,r)?e[r]:void
0;if(0!==o)if(o)t.push(o[2]);else
if(/^(206|262|303|998)$/.test(r))e[r]=0;else{var n=new
Promise(((t,n)=>o=e[r]=[t,n]));t.push(o[2]=n);var a=x.p+x.u(r),i=new
Error;x.l(a,(t=>{if(x.o(e,r)&&(0!==(o=e[r])&&(e[r]=void 0),o)){var
n=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;i.message="Loading
chunk "+r+" failed.\n("+n+":
"+a+")",i.name="ChunkLoadError",i.type=n,i.request=a,o[1](i)}}),"chunk-"+r,r)}};var
r=(r,t)=>{var o,n,[a,i,l]=t,u=0;if(a.some((r=>0!==e[r]))){for(o in
i)x.o(i,o)&&(x.m[o]=i[o]);l&&l(x)}for(r&&r(t);u<a.length;u++)n=a[u],x.o(e,n)&&e[n]&&e[n][0](),e[n]=0},t=self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[];t.forEach(r.b
ind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),x.nc=void 0;var
E=x(496);(_JUPYTERLAB=void
0===_JUPYTERLAB?{}:_JUPYTERLAB)["@jupyter/docprovider-extension"]=E})();
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/remoteEntry.f104f1bdbc3e78a4d5c6.js
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/remoteEntry.f104f1bdbc3e78a4d5c6.js
---
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/remoteEntry.f104f1bdbc3e78a4d5c6.js
1970-01-01 01:00:00.000000000 +0100
+++
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/remoteEntry.f104f1bdbc3e78a4d5c6.js
2020-02-02 01:00:00.000000000 +0100
@@ -0,0 +1 @@
+var _JUPYTERLAB;(()=>{"use strict";var
e,r,t,o,a,n,i,l,u,d,s,f,c,p,v,h,b,y,m,g,j,w,P,S={496:(e,r,t)=>{var
o={"./index":()=>Promise.all([t.e(642),t.e(258),t.e(703)]).then((()=>()=>t(703))),"./extension":()=>Promise.all([t.e(642),t.e(258),t.e(703)]).then((()=>()=>t(703))),"./style":()=>t.e(944).then((()=>()=>t(944)))},a=(e,r)=>(t.R=r,r=t.o(o,e)?o[e]():Promise.resolve().then((()=>{throw
new Error('Module "'+e+'" does not exist in container.')})),t.R=void
0,r),n=(e,r)=>{if(t.S){var o="default",a=t.S[o];if(a&&a!==e)throw new
Error("Container initialization failed as it has already been initialized with
a different share scope");return
t.S[o]=e,t.I(o,r)}};t.d(r,{get:()=>a,init:()=>n})}},k={};function x(e){var
r=k[e];if(void 0!==r)return r.exports;var t=k[e]={id:e,exports:{}};return
S[e](t,t.exports,x),t.exports}x.m=S,x.c=k,x.n=e=>{var
r=e&&e.__esModule?()=>e.default:()=>e;return
x.d(r,{a:r}),r},x.d=(e,r)=>{for(var t in
r)x.o(r,t)&&!x.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[
t]})},x.f={},x.e=e=>Promise.all(Object.keys(x.f).reduce(((r,t)=>(x.f[t](e,r),r)),[])),x.u=e=>e+"."+{240:"cfc0784ac6d2ff6b4dcf",422:"3ab44960b241aac9f303",444:"13de0fd44849e3f7d780",703:"cca2ba3bbe2fb4612085",944:"44dd443686c15fbe0cbf",994:"bc087314bdabeecb0923"}[e]+".js?v="+{240:"cfc0784ac6d2ff6b4dcf",422:"3ab44960b241aac9f303",444:"13de0fd44849e3f7d780",703:"cca2ba3bbe2fb4612085",944:"44dd443686c15fbe0cbf",994:"bc087314bdabeecb0923"}[e],x.g=function(){if("object"==typeof
globalThis)return globalThis;try{return this||new Function("return
this")()}catch(e){if("object"==typeof window)return
window}}(),x.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="@jupyter/docprovider-extension:",x.l=(t,o,a,n)=>{if(e[t])e[t].push(o);else{var
i,l;if(void 0!==a)for(var
u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var
s=u[d];if(s.getAttribute("src")==t||s.getAttribute("data-webpack")==r+a){i=s;break}}i||(l=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=12
0,x.nc&&i.setAttribute("nonce",x.nc),i.setAttribute("data-webpack",r+a),i.src=t),e[t]=[o];var
f=(r,o)=>{i.onerror=i.onload=null,clearTimeout(c);var a=e[t];if(delete
e[t],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach((e=>e(o))),r)return
r(o)},c=setTimeout(f.bind(null,void
0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),l&&document.head.appendChild(i)}},x.r=e=>{"undefined"!=typeof
Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{x.S={};var
e={},r={};x.I=(t,o)=>{o||(o=[]);var
a=r[t];if(a||(a=r[t]={}),!(o.indexOf(a)>=0)){if(o.push(a),e[t])return
e[t];x.o(x.S,t)||(x.S[t]={});var
n=x.S[t],i="@jupyter/docprovider-extension",l=(e,r,t,o)=>{var
a=n[e]=n[e]||{},l=a[r];(!l||!l.loaded&&(!o!=!l.eager?o:i>l.from))&&(a[r]={get:t,from:i,eager:!!o})},u=[];return"default"===t&&(l("@jupyter/collaborative-drive","4.2.1",(()=>Promise.all([x.e(262),x.e
(444)]).then((()=>()=>x(444))))),l("@jupyter/docprovider-extension","4.2.1",(()=>Promise.all([x.e(642),x.e(258),x.e(703)]).then((()=>()=>x(703))))),l("@jupyter/docprovider","4.2.1",(()=>Promise.all([x.e(422),x.e(642),x.e(262),x.e(240)]).then((()=>()=>x(240))))),l("y-websocket","1.5.4",(()=>Promise.all([x.e(422),x.e(994),x.e(206)]).then((()=>()=>x(994)))))),e[t]=u.length?Promise.all(u).then((()=>e[t]=1)):1}}})(),(()=>{var
e;x.g.importScripts&&(e=x.g.location+"");var
r=x.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
o=t.length-1;o>-1&&(!e||!/^http(s?):/.test(e));)e=t[o--].src}if(!e)throw new
Error("Automatic publicPath is not supported in this
browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),x.p=e})(),t=e=>{var
r=e=>e.split(".").map((e=>+e==e?+e:e)),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),o=t[1]?r(t[1]):[];return
t[2]&&
(o.length++,o.push.apply(o,r(t[2]))),t[3]&&(o.push([]),o.push.apply(o,r(t[3]))),o},o=(e,r)=>{e=t(e),r=t(r);for(var
o=0;;){if(o>=e.length)return o<r.length&&"u"!=(typeof r[o])[0];var
a=e[o],n=(typeof a)[0];if(o>=r.length)return"u"==n;var i=r[o],l=(typeof
i)[0];if(n!=l)return"o"==n&&"n"==l||"s"==l||"u"==n;if("o"!=n&&"u"!=n&&a!=i)return
a<i;o++}},a=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
o=1,n=1;n<e.length;n++)o--,t+="u"==(typeof(l=e[n]))[0]?"-":(o>0?".":"")+(o=2,l);return
t}var i=[];for(n=1;n<e.length;n++){var
l=e[n];i.push(0===l?"not("+u()+")":1===l?"("+u()+" || "+u()+")":2===l?i.pop()+"
"+i.pop():a(l))}return u();function u(){return
i.pop().replace(/^\((.+)\)$/,"$1")}},n=(e,r)=>{if(0 in e){r=t(r);var
o=e[0],a=o<0;a&&(o=-o-1);for(var i=0,l=1,u=!0;;l++,i++){var
d,s,f=l<e.length?(typeof
e[l])[0]:"";if(i>=r.length||"o"==(s=(typeof(d=r[i]))[0]))return!u||("u"==f?l>o&&!a:""==f!=a);if("u"==s){if(!u||"u"!=f)return!
1}else
if(u)if(f==s)if(l<=o){if(d!=e[l])return!1}else{if(a?d>e[l]:d<e[l])return!1;d!=e[l]&&(u=!1)}else
if("s"!=f&&"n"!=f){if(a||l<=o)return!1;u=!1,l--}else{if(l<=o||s<f!=a)return!1;u=!1}else"s"!=f&&"n"!=f&&(u=!1,l--)}}var
c=[],p=c.pop.bind(c);for(i=1;i<e.length;i++){var
v=e[i];c.push(1==v?p()|p():2==v?p()&p():v?n(v,r):!p())}return!!p()},i=(e,r)=>e&&x.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)),{}),d=(e,r,t,a)=>{var
i=a?u(e[r]):e[r];return(r=Object.keys(i).reduce(((e,r)=>!n(t,r)||e&&!o(e,r)?e:r),0))&&i[r]},s=(e,r,t)=>{var
a=t?u(e[r]):e[r];return
Object.keys(a).reduce(((e,r)=>!e||!a[e].loaded&&o(e,r)?r:e),0)},f=(e,r,t,o)=>"Unsatisfied
version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+"
(required "+a(o)+")",c=(e,r,t,o,n)=>{var i=e[t];return"No satisfying version
("+a(o)+")"+(n?" for eager consumption":"")+" of shared module "+t+" found in
shared scope "+r+".\nAvailable versions: "+Object.keys(i).map((e=>e+" from
"+i[e].from)).join(", ")},p=e=>{throw new Error(e)},v=e=>{"undefined"!=typeof
console&&console.warn&&console.warn(e)},b=(e,r,t)=>t?t():((e,r)=>p("Shared
module "+r+" doesn't exist in shared scope
"+e))(e,r),y=(h=e=>function(r,t,o,a,n){var i=x.I(r);return
i&&i.then&&!o?i.then(e.bind(e,r,x.S[r],t,!1,a,n)):e(r,x.S[r],t,o,a,n)})(((e,r,t,o,a,n)=>{if(!i(r,t))return
b(e,t,n);var u=d(r,t,a,o);return u?l(u):n?n():void
p(c(r,e,t,a,o))})),m=h(((e,r,t,o,a,u)=>{if(!i(r,t))return b(e,t,u);var
d=s(r,t,o);return
n(a,d)||v(f(r,t,d,a)),l(r[t][d])})),g={},j={285:()=>m("default","@jupyterlab/apputils",!1,[1,4,6,3]),526:()=>m("default","@jupyterlab/coreutils",!1,[1,6,5,3]),769:()=>m("default","@jupyterlab/translation",!1,[1,4,5,3]),0:()=>m("default","@jupyter/ydoc",!1,[1,3,0,0,,"a3"]),121:()=>m("default","@jupyterlab/fileeditor",!1,[1,4,5,3]),165:()=>m("default","@jupyterlab/statusbar",!1,[1,4,5,3]),247:()=>m("default","@lumino/widgets",!1,[1,2,3,1,,"alpha",1]),249:()=>m("default","@jupyterlab/settingr
egistry",!1,[1,4,5,3]),333:()=>m("default","@jupyterlab/logconsole",!1,[1,4,5,3]),591:()=>m("default","@jupyter/docprovider",!1,[1,4,2,1],(()=>Promise.all([x.e(422),x.e(262),x.e(240)]).then((()=>()=>x(240))))),627:()=>m("default","@jupyter/collaborative-drive",!1,[1,4,2,1],(()=>Promise.all([x.e(262),x.e(444)]).then((()=>()=>x(444))))),931:()=>m("default","@jupyterlab/notebook",!1,[1,4,5,3]),262:()=>m("default","@lumino/coreutils",!1,[1,2,0,0]),125:()=>m("default","@jupyterlab/services",!1,[1,7,5,3]),345:()=>m("default","react",!1,[1,18,2,0]),391:()=>m("default","@jupyterlab/ui-components",!1,[1,4,5,3]),560:()=>y("default","y-websocket",!1,[1,1,3,15],(()=>Promise.all([x.e(994),x.e(206)]).then((()=>()=>x(994))))),602:()=>m("default","@lumino/signaling",!1,[1,2,0,0]),206:()=>m("default","yjs",!1,[1,13,5,40])},w={206:[206],240:[125,345,391,560,602],258:[0,121,165,247,249,333,591,627,931],262:[262],642:[285,526,769]},P={},x.f.consumes=(e,r)=>{x.o(w,e)&&w[e].forEach((e=>{if(x.o(g,e))retur
n r.push(g[e]);if(!P[e]){var t=r=>{g[e]=0,x.m[e]=t=>{delete
x.c[e],t.exports=r()}};P[e]=!0;var o=r=>{delete g[e],x.m[e]=t=>{throw delete
x.c[e],r}};try{var
a=j[e]();a.then?r.push(g[e]=a.then(t).catch(o)):t(a)}catch(e){o(e)}}}))},(()=>{var
e={552:0};x.f.j=(r,t)=>{var o=x.o(e,r)?e[r]:void
0;if(0!==o)if(o)t.push(o[2]);else
if(/^(2(06|58|62)|642)$/.test(r))e[r]=0;else{var a=new
Promise(((t,a)=>o=e[r]=[t,a]));t.push(o[2]=a);var n=x.p+x.u(r),i=new
Error;x.l(n,(t=>{if(x.o(e,r)&&(0!==(o=e[r])&&(e[r]=void 0),o)){var
a=t&&("load"===t.type?"missing":t.type),n=t&&t.target&&t.target.src;i.message="Loading
chunk "+r+" failed.\n("+a+":
"+n+")",i.name="ChunkLoadError",i.type=a,i.request=n,o[1](i)}}),"chunk-"+r,r)}};var
r=(r,t)=>{var o,a,[n,i,l]=t,u=0;if(n.some((r=>0!==e[r]))){for(o in
i)x.o(i,o)&&(x.m[o]=i[o]);l&&l(x)}for(r&&r(t);u<n.length;u++)a=n[u],x.o(e,a)&&e[a]&&e[a][0](),e[a]=0},t=self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[];t.forEach(r.b
ind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),x.nc=void 0;var
E=x(496);(_JUPYTERLAB=void
0===_JUPYTERLAB?{}:_JUPYTERLAB)["@jupyter/docprovider-extension"]=E})();
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/third-party-licenses.json
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/third-party-licenses.json
---
old/jupyter_docprovider-2.1.0/jupyter_docprovider/labextension/static/third-party-licenses.json
2020-02-02 01:00:00.000000000 +0100
+++
new/jupyter_docprovider-2.2.1/jupyter_docprovider/labextension/static/third-party-licenses.json
2020-02-02 01:00:00.000000000 +0100
@@ -2,19 +2,19 @@
"packages": [
{
"name": "@jupyter/collaboration",
- "versionInfo": "4.1.0",
+ "versionInfo": "4.2.1",
"licenseId": "BSD-3-Clause",
"extractedText": ""
},
{
"name": "@jupyter/collaborative-drive",
- "versionInfo": "4.1.0",
+ "versionInfo": "4.2.1",
"licenseId": "BSD-3-Clause",
"extractedText": ""
},
{
"name": "@jupyter/docprovider",
- "versionInfo": "4.1.0",
+ "versionInfo": "4.2.1",
"licenseId": "BSD-3-Clause",
"extractedText": ""
},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/packages/docprovider/package.json
new/jupyter_docprovider-2.2.1/packages/docprovider/package.json
--- old/jupyter_docprovider-2.1.0/packages/docprovider/package.json
2020-02-02 01:00:00.000000000 +0100
+++ new/jupyter_docprovider-2.2.1/packages/docprovider/package.json
2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
{
"name": "@jupyter/docprovider",
- "version": "4.1.0",
+ "version": "4.2.1",
"description": "JupyterLab - Document Provider",
"homepage": "https://github.com/jupyterlab/jupyter-collaboration",
"bugs": {
@@ -41,14 +41,14 @@
"watch": "tsc -b --watch"
},
"dependencies": {
- "@jupyter/collaborative-drive": "^4.1.0",
+ "@jupyter/collaborative-drive": "^4.2.1",
"@jupyter/ydoc": "^2.1.3 || ^3.0.0",
- "@jupyterlab/apputils": "^4.4.0",
- "@jupyterlab/cells": "^4.4.0",
- "@jupyterlab/coreutils": "^6.4.0",
- "@jupyterlab/notebook": "^4.4.0",
- "@jupyterlab/services": "^7.4.0",
- "@jupyterlab/translation": "^4.4.0",
+ "@jupyterlab/apputils": "^4.5.0",
+ "@jupyterlab/cells": "^4.5.0",
+ "@jupyterlab/coreutils": "^6.5.0",
+ "@jupyterlab/notebook": "^4.5.0",
+ "@jupyterlab/services": "^7.5.0",
+ "@jupyterlab/translation": "^4.5.0",
"@lumino/coreutils": "^2.2.1",
"@lumino/disposable": "^2.1.4",
"@lumino/signaling": "^2.1.4",
@@ -58,7 +58,7 @@
"yjs": "^13.5.40"
},
"devDependencies": {
- "@jupyterlab/testing": "^4.4.0",
+ "@jupyterlab/testing": "^4.5.0",
"@types/jest": "^29.2.0",
"jest": "^29.5.0",
"rimraf": "^4.1.2",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/packages/docprovider/src/TimelineSlider.tsx
new/jupyter_docprovider-2.2.1/packages/docprovider/src/TimelineSlider.tsx
--- old/jupyter_docprovider-2.1.0/packages/docprovider/src/TimelineSlider.tsx
2020-02-02 01:00:00.000000000 +0100
+++ new/jupyter_docprovider-2.2.1/packages/docprovider/src/TimelineSlider.tsx
2020-02-02 01:00:00.000000000 +0100
@@ -7,6 +7,7 @@
import { TimelineSliderComponent } from './component';
import * as React from 'react';
import { IForkProvider } from './ydrive';
+import { ServerConnection } from '@jupyterlab/services';
export class TimelineWidget extends ReactWidget {
private apiURL: string;
@@ -14,13 +15,15 @@
private contentType: string;
private format: string;
private documentTimelineUrl: string;
+ private _serverSettings?: ServerConnection.ISettings;
constructor(
apiURL: string,
provider: IForkProvider,
contentType: string,
format: string,
- documentTimelineUrl: string
+ documentTimelineUrl: string,
+ serverSettings?: ServerConnection.ISettings
) {
super();
this.apiURL = apiURL;
@@ -28,6 +31,7 @@
this.contentType = contentType;
this.format = format;
this.documentTimelineUrl = documentTimelineUrl;
+ this._serverSettings = serverSettings;
this.addClass('jp-timelineSliderWrapper');
}
@@ -40,6 +44,7 @@
contentType={this.contentType}
format={this.format}
documentTimelineUrl={this.documentTimelineUrl}
+ serverSettings={this._serverSettings}
/>
);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/packages/docprovider/src/__tests__/forkManager.spec.ts
new/jupyter_docprovider-2.2.1/packages/docprovider/src/__tests__/forkManager.spec.ts
---
old/jupyter_docprovider-2.1.0/packages/docprovider/src/__tests__/forkManager.spec.ts
2020-02-02 01:00:00.000000000 +0100
+++
new/jupyter_docprovider-2.2.1/packages/docprovider/src/__tests__/forkManager.spec.ts
2020-02-02 01:00:00.000000000 +0100
@@ -6,7 +6,7 @@
ForkManager,
JUPYTER_COLLABORATION_FORK_EVENTS_URI
} from '../forkManager';
-import { Event } from '@jupyterlab/services';
+import { Event, ServerConnection } from '@jupyterlab/services';
import { Signal } from '@lumino/signaling';
import { requestAPI } from '../requests';
jest.mock('../requests');
@@ -18,13 +18,15 @@
const eventManagerMock = {
stream: stream as any
} as Event.IManager;
+const serverSettingsMock = {} as ServerConnection.ISettings;
describe('@jupyter/docprovider', () => {
let manager: ForkManager;
beforeEach(() => {
manager = new ForkManager({
contentProvider: contentProviderMock,
- eventManager: eventManagerMock
+ eventManager: eventManagerMock,
+ serverSettings: serverSettingsMock
});
});
describe('forkManager', () => {
@@ -50,7 +52,8 @@
description: 'my fork description',
synchronize: true
})
- }
+ },
+ serverSettingsMock
);
});
it('should be able to get all forks', async () => {
@@ -59,7 +62,8 @@
'api/collaboration/fork/root-uuid',
{
method: 'GET'
- }
+ },
+ serverSettingsMock
);
});
it('should be able to get delete forks', async () => {
@@ -68,7 +72,8 @@
'api/collaboration/fork/fork-uuid?merge=true',
{
method: 'DELETE'
- }
+ },
+ serverSettingsMock
);
});
it('should be able to emit fork added signal', async () => {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/packages/docprovider/src/component.tsx
new/jupyter_docprovider-2.2.1/packages/docprovider/src/component.tsx
--- old/jupyter_docprovider-2.1.0/packages/docprovider/src/component.tsx
2020-02-02 01:00:00.000000000 +0100
+++ new/jupyter_docprovider-2.2.1/packages/docprovider/src/component.tsx
2020-02-02 01:00:00.000000000 +0100
@@ -13,6 +13,7 @@
import { historyIcon } from '@jupyterlab/ui-components';
import { Notification } from '@jupyterlab/apputils';
import { IForkProvider } from './ydrive';
+import { ServerConnection } from '@jupyterlab/services';
type Props = {
apiURL: string;
@@ -20,6 +21,7 @@
contentType: string;
format: string;
documentTimelineUrl: string;
+ serverSettings?: ServerConnection.ISettings;
};
export const TimelineSliderComponent: React.FC<Props> = ({
@@ -27,7 +29,8 @@
provider,
contentType,
format,
- documentTimelineUrl
+ documentTimelineUrl,
+ serverSettings
}) => {
const [data, setData] = useState({
roomId: '',
@@ -51,7 +54,8 @@
const response = await requestDocumentTimeline(
format,
contentType,
- notebookPath
+ notebookPath,
+ serverSettings
);
if (!response.ok) {
@@ -79,7 +83,8 @@
sessionRef.current = await requestDocSession(
format,
contentType,
- extractFilenameFromURL(apiURL)
+ extractFilenameFromURL(apiURL),
+ serverSettings
);
}
setToggle(true);
@@ -102,7 +107,8 @@
`${sessionRef.current.format}:${sessionRef.current.type}:${sessionRef.current.fileId}`,
'restore',
0,
- data.forkRoom
+ data.forkRoom,
+ serverSettings
);
if (response.code === 200) {
@@ -138,7 +144,8 @@
`${sessionRef.current.format}:${sessionRef.current.type}:${sessionRef.current.fileId}`,
action,
steps,
- data.forkRoom
+ data.forkRoom,
+ serverSettings
);
} catch (error: any) {
console.error('Error fetching or applying updates:', error);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/packages/docprovider/src/forkManager.ts
new/jupyter_docprovider-2.2.1/packages/docprovider/src/forkManager.ts
--- old/jupyter_docprovider-2.1.0/packages/docprovider/src/forkManager.ts
2020-02-02 01:00:00.000000000 +0100
+++ new/jupyter_docprovider-2.2.1/packages/docprovider/src/forkManager.ts
2020-02-02 01:00:00.000000000 +0100
@@ -5,7 +5,7 @@
import { ICollaborativeContentProvider } from '@jupyter/collaborative-drive';
import { URLExt } from '@jupyterlab/coreutils';
-import { Event } from '@jupyterlab/services';
+import { Event, ServerConnection } from '@jupyterlab/services';
import { ISignal, Signal } from '@lumino/signaling';
import { requestAPI, ROOM_FORK_URL } from './requests';
@@ -26,6 +26,7 @@
this._contentProvider = contentProvider;
this._eventManager = eventManager;
this._eventManager.stream.connect(this._handleEvent, this);
+ this._serverSettings = options.serverSettings;
}
get isDisposed(): boolean {
@@ -57,14 +58,22 @@
body: JSON.stringify({ title, description, synchronize })
};
const url = URLExt.join(ROOM_FORK_URL, rootId);
- const response = await requestAPI<IForkCreationResponse>(url, init);
+ const response = await requestAPI<IForkCreationResponse>(
+ url,
+ init,
+ this._serverSettings
+ );
return response;
}
async getAllForks(rootId: string) {
const url = URLExt.join(ROOM_FORK_URL, rootId);
const init = { method: 'GET' };
- const response = await requestAPI<IAllForksResponse>(url, init);
+ const response = await requestAPI<IAllForksResponse>(
+ url,
+ init,
+ this._serverSettings
+ );
return response;
}
@@ -73,7 +82,7 @@
const url = URLExt.join(ROOM_FORK_URL, forkId);
const query = URLExt.objectToQueryString({ merge });
const init = { method: 'DELETE' };
- await requestAPI(`${url}${query}`, init);
+ await requestAPI(`${url}${query}`, init, this._serverSettings);
}
getProvider(options: {
documentPath: string;
@@ -114,11 +123,13 @@
private _eventManager: Event.IManager | undefined;
private _forkAddedSignal = new Signal<ForkManager, IForkChangedEvent>(this);
private _forkDeletedSignal = new Signal<ForkManager,
IForkChangedEvent>(this);
+ private _serverSettings?: ServerConnection.ISettings;
}
export namespace ForkManager {
export interface IOptions {
contentProvider: ICollaborativeContentProvider;
eventManager: Event.IManager;
+ serverSettings?: ServerConnection.ISettings;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/packages/docprovider/src/requests.ts
new/jupyter_docprovider-2.2.1/packages/docprovider/src/requests.ts
--- old/jupyter_docprovider-2.1.0/packages/docprovider/src/requests.ts
2020-02-02 01:00:00.000000000 +0100
+++ new/jupyter_docprovider-2.2.1/packages/docprovider/src/requests.ts
2020-02-02 01:00:00.000000000 +0100
@@ -47,10 +47,11 @@
*/
export async function requestAPI<T = any>(
endPoint = '',
- init: RequestInit = {}
+ init: RequestInit = {},
+ serverSettings?: ServerConnection.ISettings
): Promise<T> {
// Make request to Jupyter API
- const settings = ServerConnection.makeSettings();
+ const settings = serverSettings ?? ServerConnection.makeSettings();
const requestUrl = URLExt.join(settings.baseUrl, endPoint);
let response: Response;
@@ -80,9 +81,10 @@
export async function requestDocSession(
format: string,
type: string,
- path: string
+ path: string,
+ serverSettings?: ServerConnection.ISettings
): Promise<ISessionModel> {
- const settings = ServerConnection.makeSettings();
+ const settings = serverSettings ?? ServerConnection.makeSettings();
const url = URLExt.join(
settings.baseUrl,
DOC_SESSION_URL,
@@ -120,9 +122,10 @@
export async function requestDocumentTimeline(
format: string,
type: string,
- path: string
+ path: string,
+ serverSettings?: ServerConnection.ISettings
): Promise<any> {
- const settings = ServerConnection.makeSettings();
+ const settings = serverSettings ?? ServerConnection.makeSettings();
let url = URLExt.join(settings.baseUrl, TIMELINE_URL, path);
url = url.concat(`?format=${format}&&type=${type}`);
@@ -144,9 +147,10 @@
roomid: string,
action: 'undo' | 'redo' | 'restore',
steps: number,
- forkRoom: string
+ forkRoom: string,
+ serverSettings?: ServerConnection.ISettings
): Promise<any> {
- const settings = ServerConnection.makeSettings();
+ const settings = serverSettings ?? ServerConnection.makeSettings();
let url = URLExt.join(
settings.baseUrl,
DOC_FORK_URL,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/packages/docprovider/src/ydrive.ts
new/jupyter_docprovider-2.2.1/packages/docprovider/src/ydrive.ts
--- old/jupyter_docprovider-2.1.0/packages/docprovider/src/ydrive.ts
2020-02-02 01:00:00.000000000 +0100
+++ new/jupyter_docprovider-2.2.1/packages/docprovider/src/ydrive.ts
2020-02-02 01:00:00.000000000 +0100
@@ -1,12 +1,11 @@
// Copyright (c) Jupyter Development Team.
// Distributed under the terms of the Modified BSD License.
-import { PageConfig, URLExt } from '@jupyterlab/coreutils';
+import { PageConfig } from '@jupyterlab/coreutils';
import { TranslationBundle } from '@jupyterlab/translation';
import {
Contents,
IContentProvider,
- RestContentProvider,
SharedDocumentFactory,
ServerConnection,
User
@@ -14,7 +13,12 @@
import { PromiseDelegate } from '@lumino/coreutils';
import { ISignal, Signal } from '@lumino/signaling';
-import { DocumentChange, ISharedDocument, YDocument } from '@jupyter/ydoc';
+import {
+ DocumentChange,
+ ISharedDocument,
+ StateChange,
+ YDocument
+} from '@jupyter/ydoc';
import { WebSocketProvider } from './yprovider';
import {
@@ -31,11 +35,6 @@
const RAW_MESSAGE_TYPE = 2;
-/**
- * The url for the default drive service.
- */
-const DOCUMENT_PROVIDER_URL = 'api/collaboration/room';
-
export interface IForkProvider {
connectToForkDoc: (forkRoomId: string, sessionId: string) => Promise<void>;
reconnect: () => Promise<void>;
@@ -44,27 +43,28 @@
}
namespace RtcContentProvider {
- export interface IOptions extends RestContentProvider.IOptions {
+ export interface IOptions {
user: User.IManager;
trans: TranslationBundle;
globalAwareness: Awareness | null;
+ serverSettings: ServerConnection.ISettings;
docmanagerSettings: ISettingRegistry.ISettings | null;
+ currentDrive: Contents.IDrive;
+ fileChanged?: ISignal<Contents.IDrive, Contents.IChangedArgs>;
}
}
-export class RtcContentProvider
- extends RestContentProvider
- implements IContentProvider
-{
+export class RtcContentProvider implements IContentProvider {
constructor(options: RtcContentProvider.IOptions) {
- super(options);
this._user = options.user;
this._trans = options.trans;
this._globalAwareness = options.globalAwareness;
this._serverSettings = options.serverSettings;
+ this._currentDrive = options.currentDrive;
this.sharedModelFactory = new SharedModelFactory(this._onCreate);
this._providers = new Map<string, WebSocketProvider>();
this._docmanagerSettings = options.docmanagerSettings;
+ this._driveFileChanged = options.fileChanged;
}
/**
@@ -99,7 +99,12 @@
// Use `Promise.all` to reject as soon as possible. The Context will
// show a dialog to the user.
const [model] = await Promise.all([
- super.get(localPath, { ...options, content: false }),
+ // Not calling get() with options.contentProviderId otherwise it's
an infinite loop
+ this._currentDrive.get(localPath, {
+ ...options,
+ content: false,
+ contentProviderId: undefined
+ }),
provider.ready
]);
// The server doesn't return a model with a format when content is
false,
@@ -108,7 +113,11 @@
}
}
- return super.get(localPath, options);
+ // Not calling get() with options.contentProviderId otherwise it's an
infinite loop
+ return this._currentDrive.get(localPath, {
+ ...options,
+ contentProviderId: undefined
+ });
}
/**
@@ -123,7 +132,7 @@
*/
async save(
localPath: string,
- options: Partial<Contents.IModel> = {}
+ options: Partial<Contents.IModel> & Contents.IContentProvisionOptions = {}
): Promise<Contents.IModel> {
// Check that there is a provider - it won't e.g. if the document model is
not collaborative.
if (options.format && options.type) {
@@ -189,17 +198,24 @@
content: false
};
return this.get(localPath, fetchOptions);
+ } else {
+ console.warn(
+ `Could not find a provider for ${localPath}, falling back to REST
API save`
+ );
}
}
- return super.save(localPath, options);
+ return this._currentDrive.save(localPath, {
+ ...options,
+ contentProviderId: undefined
+ });
}
/**
* A signal emitted when a file operation takes place.
*/
get fileChanged(): ISignal<this, Contents.IChangedArgs> {
- return this._ydriveFileChanged;
+ return this._providerFileChanged;
}
private _onCreate = (
@@ -224,13 +240,13 @@
try {
const provider = new WebSocketProvider({
- url: URLExt.join(this._serverSettings.wsUrl, DOCUMENT_PROVIDER_URL),
path: options.path,
format: options.format,
contentType: options.contentType,
model: sharedModel,
user: this._user,
- translator: this._trans
+ translator: this._trans,
+ serverSettings: this._serverSettings
});
// Add the document path in the list of opened ones for this user.
@@ -241,13 +257,99 @@
this._globalAwareness?.setLocalStateField('documents', documents);
}
- const key = `${options.format}:${options.contentType}:${options.path}`;
+ let path = options.path;
+ let key = `${options.format}:${options.contentType}:${path}`;
this._providers.set(key, provider);
+ const handlePathChange = (
+ pathChange: StateChange<string | undefined>
+ ) => {
+ const oldPath = pathChange.oldValue;
+ const newPath = pathChange.newValue;
+ if (!oldPath || !newPath) {
+ // This is expected when shared model initializes and the path is
first populated
+ console.debug('New or old path not given', pathChange);
+ return;
+ }
+
+ const oldKey = `${options.format}:${options.contentType}:${oldPath}`;
+ if (oldKey !== key) {
+ console.error(
+ 'The computed old provider key is different from the current key'
+ );
+ return;
+ }
+ const newKey = `${options.format}:${options.contentType}:${newPath}`;
+
+ // Check if the provider is still registered (it may have been
disposed if document was closed)
+ const provider = this._providers.get(oldKey);
+ if (!provider) {
+ console.warn(
+ `Could not find a provider to update after rename ${oldKey},
${newKey}`
+ );
+ return;
+ }
+
+ // Re-register the provider under the new key
+ this._providers.set(newKey, provider);
+ this._providers.delete(oldKey);
+
+ // Update the provider key so that it can be disposed correctly when
shared document closes
+ key = newKey;
+ path = newPath;
+
+ // Update the documents field
+ const state = this._globalAwareness?.getLocalState() || {};
+ const documents: string[] = state.documents || [];
+ const oldPathIndex = documents.indexOf(oldPath);
+ if (documents.includes(oldPath) && !documents.includes(newPath)) {
+ documents.splice(oldPathIndex, 1);
+ documents.push(newPath);
+ this._globalAwareness?.setLocalStateField('documents', documents);
+ }
+ };
+
+ // The information about file being renamed can come from two places:
+ // - from the sharedModel via changed signal with documentChange
+ // - from the fileChanged signal of the drive
+ // Neither method is foolproof:
+ // - the shared model approach can be delayed as the change needs to be
+ // reflected by the server and come back, in which case we get a race
condition
+ // - the fileChanged signal is emitted with a larger delay for renames
of collaborators
+ // Thus we need both.
+ const handleFileChangedSignal = (
+ _: Contents.IDrive,
+ change: Contents.IChangedArgs
+ ) => {
+ if (change.type !== 'rename') {
+ return;
+ }
+ const oldPath = change.oldValue?.path;
+ const newPath = change.newValue?.path;
+ if (oldPath !== path) {
+ return;
+ }
+ handlePathChange({
+ oldValue: oldPath,
+ newValue: newPath,
+ name: 'path'
+ });
+ };
+
+ this._driveFileChanged?.connect(handleFileChangedSignal);
+
sharedModel.changed.connect(async (_, change) => {
if (!change.stateChange) {
return;
}
+
+ const pathChanges = change.stateChange.filter(
+ change => change.name === 'path'
+ );
+ for (const pathChange of pathChanges) {
+ handlePathChange(pathChange);
+ }
+
const hashChanges = change.stateChange.filter(
change => change.name === 'hash'
);
@@ -267,7 +369,7 @@
const newPath = sharedModel.state.path ?? options.path;
const model = await this.get(newPath as string, { content: false });
- this._ydriveFileChanged.emit({
+ this._providerFileChanged.emit({
type: 'save',
newValue: { ...model, hash: hashChange.newValue },
// we do not have the old model because it was discarded when server
made the change,
@@ -285,12 +387,15 @@
// Remove the document path from the list of opened ones for this user.
const state = this._globalAwareness?.getLocalState() || {};
- const documents: any[] = state.documents || [];
- const index = documents.indexOf(options.path);
+ const documents: string[] = state.documents || [];
+ const index = documents.indexOf(path);
if (index > -1) {
documents.splice(index, 1);
}
this._globalAwareness?.setLocalStateField('documents', documents);
+
+ // Disconnect signal
+ this._driveFileChanged?.disconnect(handleFileChangedSignal);
});
} catch (error) {
// Falling back to the contents API if opening the websocket failed
@@ -303,10 +408,14 @@
private _user: User.IManager;
private _saveCounter = 0;
+ private _currentDrive: Contents.IDrive;
private _trans: TranslationBundle;
private _globalAwareness: Awareness | null;
private _providers: Map<string, WebSocketProvider>;
- private _ydriveFileChanged = new Signal<this, Contents.IChangedArgs>(this);
+ // This is for emitting signals to be proxied to `Drive.fileChanged`
+ private _providerFileChanged = new Signal<this, Contents.IChangedArgs>(this);
+ // This is for listening to `Drive.fileChanged` signal
+ private _driveFileChanged?: ISignal<Contents.IDrive, Contents.IChangedArgs>;
private _serverSettings: ServerConnection.ISettings;
private _docmanagerSettings: ISettingRegistry.ISettings | null;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/packages/docprovider/src/yprovider.ts
new/jupyter_docprovider-2.2.1/packages/docprovider/src/yprovider.ts
--- old/jupyter_docprovider-2.1.0/packages/docprovider/src/yprovider.ts
2020-02-02 01:00:00.000000000 +0100
+++ new/jupyter_docprovider-2.2.1/packages/docprovider/src/yprovider.ts
2020-02-02 01:00:00.000000000 +0100
@@ -5,7 +5,7 @@
import { IDocumentProvider } from '@jupyter/collaborative-drive';
import { showErrorMessage, Dialog } from '@jupyterlab/apputils';
-import { User } from '@jupyterlab/services';
+import { ServerConnection, User } from '@jupyterlab/services';
import { TranslationBundle } from '@jupyterlab/translation';
import { PromiseDelegate } from '@lumino/coreutils';
@@ -18,6 +18,12 @@
import { requestDocSession } from './requests';
import { IForkProvider } from './ydrive';
+import { URLExt } from '@jupyterlab/coreutils';
+
+/**
+ * The url for the default drive service.
+ */
+const DOCUMENT_PROVIDER_URL = 'api/collaboration/room';
/**
* A class to provide Yjs synchronization over WebSocket.
@@ -37,10 +43,12 @@
this._path = options.path;
this._contentType = options.contentType;
this._format = options.format;
- this._serverUrl = options.url;
+ this._customServerUrl = options.url;
this._sharedModel = options.model;
this._awareness = options.model.awareness;
this._yWebsocketProvider = null;
+ this._serverSettings =
+ options.serverSettings ?? ServerConnection.makeSettings();
this._trans = options.translator;
const user = options.user;
@@ -95,12 +103,25 @@
this._connect();
}
+ private get _serverUrl() {
+ return (
+ this._customServerUrl ??
+ URLExt.join(this._serverSettings.wsUrl, DOCUMENT_PROVIDER_URL)
+ );
+ }
+
private async _connect(): Promise<void> {
const session = await requestDocSession(
this._format,
this._contentType,
- this._path
+ this._path,
+ this._serverSettings
);
+ const token = this._serverSettings.token;
+ const params: Record<string, string> = { sessionId: session.sessionId };
+ if (this._serverSettings.appendToken && token !== '') {
+ params['token'] = token;
+ }
this._yWebsocketProvider = new YWebsocketProvider(
this._serverUrl,
@@ -108,8 +129,9 @@
this._sharedModel.ydoc,
{
disableBc: true,
- params: { sessionId: session.sessionId },
- awareness: this._awareness
+ params,
+ awareness: this._awareness,
+ WebSocketPolyfill: this._serverSettings.WebSocket
}
);
@@ -118,6 +140,11 @@
}
async connectToForkDoc(forkRoomId: string, sessionId: string): Promise<void>
{
+ const token = this._serverSettings.token;
+ const params: Record<string, string> = { sessionId };
+ if (this._serverSettings.appendToken && token !== '') {
+ params['token'] = token;
+ }
this._disconnect();
this._yWebsocketProvider = new YWebsocketProvider(
this._serverUrl,
@@ -125,8 +152,9 @@
this._sharedModel.ydoc,
{
disableBc: true,
- params: { sessionId },
- awareness: this._awareness
+ params,
+ awareness: this._awareness,
+ WebSocketPolyfill: this._serverSettings.WebSocket
}
);
}
@@ -177,9 +205,10 @@
private _isDisposed: boolean;
private _path: string;
private _ready = new PromiseDelegate<void>();
- private _serverUrl: string;
+ private _customServerUrl?: string;
private _sharedModel: YDocument<DocumentChange>;
private _yWebsocketProvider: YWebsocketProvider | null;
+ private _serverSettings: ServerConnection.ISettings;
private _trans: TranslationBundle;
}
@@ -194,7 +223,7 @@
/**
* The server URL
*/
- url: string;
+ url?: string;
/**
* The document file path
@@ -225,5 +254,10 @@
* The jupyterlab translator
*/
translator: TranslationBundle;
+
+ /**
+ * The server settings.
+ */
+ serverSettings?: ServerConnection.ISettings;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/packages/docprovider-extension/package.json
new/jupyter_docprovider-2.2.1/packages/docprovider-extension/package.json
--- old/jupyter_docprovider-2.1.0/packages/docprovider-extension/package.json
2020-02-02 01:00:00.000000000 +0100
+++ new/jupyter_docprovider-2.2.1/packages/docprovider-extension/package.json
2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
{
"name": "@jupyter/docprovider-extension",
- "version": "4.1.0",
+ "version": "4.2.1",
"description": "JupyterLab - Collaborative Shared Models",
"keywords": [
"jupyter",
@@ -53,25 +53,25 @@
"watch:labextension": "jupyter labextension watch ."
},
"dependencies": {
- "@jupyter/collaborative-drive": "^4.1.0",
- "@jupyter/docprovider": "^4.1.0",
+ "@jupyter/collaborative-drive": "^4.2.1",
+ "@jupyter/docprovider": "^4.2.1",
"@jupyter/ydoc": "^2.1.3 || ^3.0.0",
- "@jupyterlab/application": "^4.4.0",
- "@jupyterlab/apputils": "^4.4.0",
- "@jupyterlab/docregistry": "^4.4.0",
- "@jupyterlab/filebrowser": "^4.4.0",
- "@jupyterlab/fileeditor": "^4.4.0",
- "@jupyterlab/logconsole": "^4.4.0",
- "@jupyterlab/notebook": "^4.4.0",
- "@jupyterlab/settingregistry": "^4.4.0",
- "@jupyterlab/translation": "^4.4.0",
+ "@jupyterlab/application": "^4.5.0",
+ "@jupyterlab/apputils": "^4.5.0",
+ "@jupyterlab/docregistry": "^4.5.0",
+ "@jupyterlab/filebrowser": "^4.5.0",
+ "@jupyterlab/fileeditor": "^4.5.0",
+ "@jupyterlab/logconsole": "^4.5.0",
+ "@jupyterlab/notebook": "^4.5.0",
+ "@jupyterlab/settingregistry": "^4.5.0",
+ "@jupyterlab/translation": "^4.5.0",
"@lumino/commands": "^2.3.2",
"y-protocols": "^1.0.5",
"y-websocket": "^1.3.15",
"yjs": "^13.5.40"
},
"devDependencies": {
- "@jupyterlab/builder": "^4.4.0",
+ "@jupyterlab/builder": "^4.5.0",
"@types/react": "~18.3.1",
"npm-run-all": "^4.1.5",
"rimraf": "^4.1.2",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/packages/docprovider-extension/src/filebrowser.ts
new/jupyter_docprovider-2.2.1/packages/docprovider-extension/src/filebrowser.ts
---
old/jupyter_docprovider-2.1.0/packages/docprovider-extension/src/filebrowser.ts
2020-02-02 01:00:00.000000000 +0100
+++
new/jupyter_docprovider-2.2.1/packages/docprovider-extension/src/filebrowser.ts
2020-02-02 01:00:00.000000000 +0100
@@ -81,12 +81,13 @@
: null;
const rtcContentProvider = new RtcContentProvider({
- apiEndpoint: '/api/contents',
+ currentDrive: defaultDrive,
serverSettings: defaultDrive.serverSettings,
user: app.serviceManager.user,
trans,
globalAwareness,
- docmanagerSettings
+ docmanagerSettings,
+ fileChanged: defaultDrive.fileChanged
});
registry.register('rtc', rtcContentProvider);
return rtcContentProvider;
@@ -220,7 +221,8 @@
forkProvider,
forkProvider.contentType,
forkProvider.format,
- DOCUMENT_TIMELINE_URL
+ DOCUMENT_TIMELINE_URL,
+ app.serviceManager.serverSettings
);
const elt = document.getElementById('jp-slider-status-bar');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_docprovider-2.1.0/packages/docprovider-extension/src/forkManager.ts
new/jupyter_docprovider-2.2.1/packages/docprovider-extension/src/forkManager.ts
---
old/jupyter_docprovider-2.1.0/packages/docprovider-extension/src/forkManager.ts
2020-02-02 01:00:00.000000000 +0100
+++
new/jupyter_docprovider-2.2.1/packages/docprovider-extension/src/forkManager.ts
2020-02-02 01:00:00.000000000 +0100
@@ -25,7 +25,11 @@
contentProvider: ICollaborativeContentProvider
) => {
const eventManager = app.serviceManager.events;
- const manager = new ForkManager({ contentProvider, eventManager });
+ const manager = new ForkManager({
+ contentProvider,
+ eventManager,
+ serverSettings: app.serviceManager.serverSettings
+ });
return manager;
}
};