jupytergis-lab 0.1.1__tar.gz → 0.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/PKG-INFO +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/_version.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/labextension/package.json +5 -5
- jupytergis_lab-0.1.2/jupytergis_lab/labextension/static/484.bfbeec299fb2543b6a74.js +1 -0
- jupytergis_lab-0.1.2/jupytergis_lab/labextension/static/remoteEntry.cd623e659dc416320248.js +1 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/labextension/static/third-party-licenses.json +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/gis_document.py +107 -11
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/__init__.py +1 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/__init__.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/geoTiffSource.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/geojsonsource.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/hillshadeLayer.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/imageLayer.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/imageSource.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/jgis.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/rasterDemSource.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/rasterlayer.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/rastersource.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/shapefileSource.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/vectorTileLayer.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/vectorlayer.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/vectortilesource.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/videoSource.py +1 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/webGlLayer.py +8 -4
- jupytergis_lab-0.1.2/jupytergis_lab/notebook/tests/test_api.py +62 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/lib/index.js +3 -5
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/lib/notebookrenderer.js +17 -38
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/package.json +4 -4
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/src/index.ts +4 -5
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/src/notebookrenderer.ts +22 -38
- jupytergis_lab-0.1.2/tsconfig.tsbuildinfo +1 -0
- jupytergis_lab-0.1.1/jupytergis_lab/labextension/static/484.7cd11c502baf51c3285e.js +0 -1
- jupytergis_lab-0.1.1/jupytergis_lab/labextension/static/remoteEntry.15c6baaafaa709cc98c0.js +0 -1
- jupytergis_lab-0.1.1/jupytergis_lab/notebook/tests/test_api.py +0 -18
- jupytergis_lab-0.1.1/tsconfig.tsbuildinfo +0 -1
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/.gitignore +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/.prettierignore +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/LICENSE +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/README.md +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/install.json +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/__init__.py +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/labextension/static/373.1c3d89f9ed56880711bd.js +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/labextension/static/432.28aaec36233a73d1589c.js +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/labextension/static/style.js +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/__init__.py +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/tests/__init__.py +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/utils.py +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/y_connector.py +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/lib/index.d.ts +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/lib/notebookrenderer.d.ts +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/pyproject.toml +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/scripts/bump-version.py +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/setup.py +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/style/base.css +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/style/index.css +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/style/index.js +0 -0
- {jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/tsconfig.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jupytergis/jupytergis-lab",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "JupyterGIS Lab extension.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jupyter",
|
|
@@ -53,9 +53,9 @@
|
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"@jupyter/docprovider": "^2.0.0",
|
|
56
|
-
"@jupytergis/base": "^0.1.
|
|
57
|
-
"@jupytergis/jupytergis-core": "^0.1.
|
|
58
|
-
"@jupytergis/schema": "^0.1.
|
|
56
|
+
"@jupytergis/base": "^0.1.2",
|
|
57
|
+
"@jupytergis/jupytergis-core": "^0.1.2",
|
|
58
|
+
"@jupytergis/schema": "^0.1.2",
|
|
59
59
|
"@jupyterlab/application": "^4.0.0",
|
|
60
60
|
"@jupyterlab/apputils": "^4.0.0",
|
|
61
61
|
"@jupyterlab/coreutils": "^6.0.0",
|
|
@@ -124,7 +124,7 @@
|
|
|
124
124
|
}
|
|
125
125
|
},
|
|
126
126
|
"_build": {
|
|
127
|
-
"load": "static/remoteEntry.
|
|
127
|
+
"load": "static/remoteEntry.cd623e659dc416320248.js",
|
|
128
128
|
"extension": "./extension",
|
|
129
129
|
"style": "./style"
|
|
130
130
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_jupytergis_jupytergis_lab=self.webpackChunk_jupytergis_jupytergis_lab||[]).push([[484],{484:(e,o,t)=>{t.r(o),t.d(o,{default:()=>M});var n=t(390),a=t(40),r=t(909),d=t(314),s=t(241),m=t(818),c=t(678),i=t(256),l=t(796),u=t(230),p=t(677);class g extends p.JupyterYModel{}class y extends i.Panel{constructor(e){super(),this.onResize=()=>{this._jgisWidget&&u.MessageLoop.sendMessage(this._jgisWidget,i.Widget.ResizeMessage.UnknownSize)},this.addClass("jupytergis-notebook-widget"),this._jgisWidget=new n.JupyterGISPanel(e),this.addWidget(this._jgisWidget)}}const I={id:"jupytergis:yjswidget-plugin",autoStart:!0,optional:[p.IJupyterYWidgetManager,l.ICollaborativeDrive],activate:(e,o,t)=>{o?t?o.registerWidget("@jupytergis:widget",class extends g{ydocFactory(e){const{path:o,format:n,contentType:r}=e,d=n,s=t.sharedModelFactory.createNew({path:o,format:d,contentType:r,collaborative:!0});return this.jupyterGISModel=new a.JupyterGISModel({sharedModel:s}),this.jupyterGISModel.sharedModel.ydoc}},class{constructor(e,o){this.yModel=e,this.node=o;const t=new y({model:e.jupyterGISModel});u.MessageLoop.sendMessage(t,i.Widget.Msg.BeforeAttach),o.appendChild(t.node),u.MessageLoop.sendMessage(t,i.Widget.Msg.AfterAttach)}}):console.error("Cannot setup JupyterGIS Python API without a collaborative drive"):console.error("Missing IJupyterYWidgetManager token!")}},j="jupytergis",M=[{id:"jupytergis:lab:main-menu",autoStart:!0,requires:[a.IJupyterGISDocTracker,a.IJGISFormSchemaRegistryToken,a.IJGISLayerBrowserRegistryToken,m.IStateDB],optional:[s.IMainMenu,c.ITranslator,d.ICompletionProviderManager],activate:(e,o,t,a,r,d,s,m)=>{console.log("jupytergis:lab:main-menu is activated!"),s=null!=s?s:c.nullTranslator;(0,n.createDefaultLayerRegistry)(a),(0,n.addCommands)(e,o,s,t,a,r,m);const l=new i.Menu({commands:e.commands});l.title.label=s.load("jupyterlab").__("Add Source"),l.id="jp-gis-contextmenu-addSource",e.contextMenu.addItem({type:"submenu",selector:".jp-gis-sourcePanel",rank:3,submenu:l}),l.addItem({command:n.CommandIDs.newRasterSource,args:{from:"contextMenu"}}),l.addItem({command:n.CommandIDs.newVectorSource,args:{from:"contextMenu"}}),l.addItem({command:n.CommandIDs.newGeoJSONSource,args:{from:"contextMenu"}}),l.addItem({command:n.CommandIDs.newRasterDemSource,args:{from:"contextMenu"}}),l.addItem({command:n.CommandIDs.newImageSource,args:{from:"contextMenu"}}),e.contextMenu.addItem({type:"separator",selector:".jp-gis-sourcePanel",rank:2}),e.contextMenu.addItem({selector:".jp-gis-source.jp-gis-sourceUnused",rank:1,command:n.CommandIDs.removeSource}),e.commands.addKeyBinding({command:n.CommandIDs.removeSource,keys:["Delete"],selector:".jp-gis-source.jp-gis-sourceUnused"}),e.contextMenu.addItem({selector:".jp-gis-source",rank:1,command:n.CommandIDs.renameSource}),e.commands.addKeyBinding({command:n.CommandIDs.renameSource,keys:["F2"],selector:".jp-gis-sourceItem"}),e.contextMenu.addItem({command:n.CommandIDs.symbology,selector:".jp-gis-layerItem",rank:1}),e.contextMenu.addItem({type:"separator",selector:".jp-gis-layerPanel",rank:1}),e.contextMenu.addItem({command:n.CommandIDs.removeLayer,selector:".jp-gis-layerItem",rank:2}),e.commands.addKeyBinding({command:n.CommandIDs.removeLayer,keys:["Delete"],selector:".jp-gis-layerItem"}),e.contextMenu.addItem({command:n.CommandIDs.renameLayer,selector:".jp-gis-layerItem",rank:2}),e.commands.addKeyBinding({command:n.CommandIDs.renameLayer,keys:["F2"],selector:".jp-gis-layerItem"});const u=new i.Menu({commands:e.commands});u.title.label=s.load("jupyterlab").__("Move Selected Layers to Group"),u.id="jp-gis-contextmenu-movelayer",e.contextMenu.addItem({type:"submenu",selector:".jp-gis-layerItem",rank:2,submenu:u}),e.contextMenu.opened.connect((()=>function(e,o){var t,a,r,d;if(!(null===(t=o.currentWidget)||void 0===t?void 0:t.context.model))return;const s=null===(a=o.currentWidget)||void 0===a?void 0:a.context.model,m=null!==(d=null===(r=e.menu.items.find((e=>{var o;return"submenu"===e.type&&"jp-gis-contextmenu-movelayer"===(null===(o=e.submenu)||void 0===o?void 0:o.id)})))||void 0===r?void 0:r.submenu)&&void 0!==d?d:null;if(!m)return;m.clearItems();const c=function e(o){const t=[];for(const n of o)if("string"!=typeof n&&n.layers){t.push(n.name);const o=e(n.layers);t.push(...o)}return t}(s.getLayerTree());m.addItem({command:n.CommandIDs.moveLayersToGroup,args:{label:""}}),c.forEach((e=>{m.addItem({command:n.CommandIDs.moveLayersToGroup,args:{label:e}})})),m.addItem({command:n.CommandIDs.moveLayerToNewGroup})}(e.contextMenu,o))),e.contextMenu.addItem({command:n.CommandIDs.removeGroup,selector:".jp-gis-layerGroupHeader",rank:2}),e.commands.addKeyBinding({command:n.CommandIDs.removeGroup,keys:["Delete"],selector:".jp-gis-layerGroupHeader"}),e.contextMenu.addItem({command:n.CommandIDs.renameGroup,selector:".jp-gis-layerGroupHeader",rank:2}),e.commands.addKeyBinding({command:n.CommandIDs.renameGroup,keys:["F2"],selector:".jp-gis-layerGroupHeader"}),e.contextMenu.addItem({type:"separator",selector:".jp-gis-layerPanel",rank:2});const p=new i.Menu({commands:e.commands});p.title.label=s.load("jupyterlab").__("Add Layer"),p.id="jp-gis-contextmenu-addLayer",e.contextMenu.addItem({type:"submenu",selector:".jp-gis-layerPanel",rank:3,submenu:p}),p.addItem({command:n.CommandIDs.newRasterLayer,args:{from:"contextMenu"}}),p.addItem({command:n.CommandIDs.newVectorLayer,args:{from:"contextMenu"}}),p.addItem({command:n.CommandIDs.newHillshadeLayer,args:{from:"contextMenu"}}),p.addItem({command:n.CommandIDs.newImageLayer,args:{from:"contextMenu"}}),d&&function(e,o){e.editMenu.undoers.redo.add({id:n.CommandIDs.redo,isEnabled:o}),e.editMenu.undoers.undo.add({id:n.CommandIDs.undo,isEnabled:o})}(d,(()=>null!==o.currentWidget&&o.currentWidget===e.shell.currentWidget)),e.commands.addKeyBinding({command:n.CommandIDs.executeConsole,keys:["Shift Enter"],selector:".jpgis-console .jp-CodeConsole[data-jp-interaction-mode='notebook'] .jp-CodeConsole-promptCell"}),e.commands.addKeyBinding({command:n.CommandIDs.invokeCompleter,keys:["Tab"],selector:".jpgis-console .jp-CodeConsole-promptCell .jp-mod-completer-enabled"}),e.commands.addKeyBinding({command:n.CommandIDs.selectCompleter,keys:["Enter"],selector:".jpgis-console .jp-ConsolePanel .jp-mod-completer-active"})}},{id:"jupytergis:lab:controlpanel",autoStart:!0,requires:[r.ILayoutRestorer,a.IJupyterGISDocTracker,a.IJGISFormSchemaRegistryToken,m.IStateDB],activate:(e,o,t,a,r)=>{const d=new n.ControlPanelModel({tracker:t}),s=new n.LeftPanelWidget({model:d,tracker:t,state:r});s.id="jupytergis::leftControlPanel",s.title.caption="JupyterGIS Control Panel",s.title.icon=n.logoMiniIcon;const m=new n.RightPanelWidget({model:d,tracker:t,formSchemaRegistry:a});m.id="jupytergis::rightControlPanel",m.title.caption="JupyterGIS Control Panel",m.title.icon=n.logoMiniIcon,o&&(o.add(s,j),o.add(m,j)),e.shell.add(s,"left",{rank:2e3}),e.shell.add(m,"right",{rank:2e3})}},I]}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var _JUPYTERLAB;(()=>{"use strict";var e,r,t,n,a,o,i,u,l,s,f,d,p,c,h,g,v,b,y,m={450:(e,r,t)=>{var n={"./index":()=>t.e(484).then((()=>()=>t(484))),"./extension":()=>t.e(484).then((()=>()=>t(484))),"./style":()=>Promise.all([t.e(373),t.e(432)]).then((()=>()=>t(432)))},a=(e,r)=>(t.R=r,r=t.o(n,e)?n[e]():Promise.resolve().then((()=>{throw new Error('Module "'+e+'" does not exist in container.')})),t.R=void 0,r),o=(e,r)=>{if(t.S){var n="default",a=t.S[n];if(a&&a!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[n]=e,t.I(n,r)}};t.d(r,{get:()=>a,init:()=>o})}},j={};function w(e){var r=j[e];if(void 0!==r)return r.exports;var t=j[e]={id:e,exports:{}};return m[e](t,t.exports,w),t.exports}w.m=m,w.c=j,w.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return w.d(r,{a:r}),r},w.d=(e,r)=>{for(var t in r)w.o(r,t)&&!w.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},w.f={},w.e=e=>Promise.all(Object.keys(w.f).reduce(((r,t)=>(w.f[t](e,r),r)),[])),w.u=e=>e+"."+{373:"1c3d89f9ed56880711bd",432:"28aaec36233a73d1589c",484:"bfbeec299fb2543b6a74"}[e]+".js?v="+{373:"1c3d89f9ed56880711bd",432:"28aaec36233a73d1589c",484:"bfbeec299fb2543b6a74"}[e],w.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),w.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="@jupytergis/jupytergis-lab:",w.l=(t,n,a,o)=>{if(e[t])e[t].push(n);else{var i,u;if(void 0!==a)for(var l=document.getElementsByTagName("script"),s=0;s<l.length;s++){var f=l[s];if(f.getAttribute("src")==t||f.getAttribute("data-webpack")==r+a){i=f;break}}i||(u=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,w.nc&&i.setAttribute("nonce",w.nc),i.setAttribute("data-webpack",r+a),i.src=t),e[t]=[n];var d=(r,n)=>{i.onerror=i.onload=null,clearTimeout(p);var a=e[t];if(delete e[t],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach((e=>e(n))),r)return r(n)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),u&&document.head.appendChild(i)}},w.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{w.S={};var e={},r={};w.I=(t,n)=>{n||(n=[]);var a=r[t];if(a||(a=r[t]={}),!(n.indexOf(a)>=0)){if(n.push(a),e[t])return e[t];w.o(w.S,t)||(w.S[t]={});var o=w.S[t],i="@jupytergis/jupytergis-lab",u=[];return"default"===t&&((e,r,t,n)=>{var a=o[e]=o[e]||{},u=a[r];(!u||!u.loaded&&(1!=!u.eager?n:i>u.from))&&(a[r]={get:()=>w.e(484).then((()=>()=>w(484))),from:i,eager:!1})})("@jupytergis/jupytergis-lab","0.1.2"),e[t]=u.length?Promise.all(u).then((()=>e[t]=1)):1}}})(),(()=>{var e;w.g.importScripts&&(e=w.g.location+"");var r=w.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var n=t.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=t[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),w.p=e})(),t=e=>{var r=e=>e.split(".").map((e=>+e==e?+e:e)),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=t[1]?r(t[1]):[];return t[2]&&(n.length++,n.push.apply(n,r(t[2]))),t[3]&&(n.push([]),n.push.apply(n,r(t[3]))),n},n=(e,r)=>{e=t(e),r=t(r);for(var n=0;;){if(n>=e.length)return n<r.length&&"u"!=(typeof r[n])[0];var a=e[n],o=(typeof a)[0];if(n>=r.length)return"u"==o;var i=r[n],u=(typeof i)[0];if(o!=u)return"o"==o&&"n"==u||"s"==u||"u"==o;if("o"!=o&&"u"!=o&&a!=i)return a<i;n++}},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 n=1,o=1;o<e.length;o++)n--,t+="u"==(typeof(u=e[o]))[0]?"-":(n>0?".":"")+(n=2,u);return t}var i=[];for(o=1;o<e.length;o++){var u=e[o];i.push(0===u?"not("+l()+")":1===u?"("+l()+" || "+l()+")":2===u?i.pop()+" "+i.pop():a(u))}return l();function l(){return i.pop().replace(/^\((.+)\)$/,"$1")}},o=(e,r)=>{if(0 in e){r=t(r);var n=e[0],a=n<0;a&&(n=-n-1);for(var i=0,u=1,l=!0;;u++,i++){var s,f,d=u<e.length?(typeof e[u])[0]:"";if(i>=r.length||"o"==(f=(typeof(s=r[i]))[0]))return!l||("u"==d?u>n&&!a:""==d!=a);if("u"==f){if(!l||"u"!=d)return!1}else if(l)if(d==f)if(u<=n){if(s!=e[u])return!1}else{if(a?s>e[u]:s<e[u])return!1;s!=e[u]&&(l=!1)}else if("s"!=d&&"n"!=d){if(a||u<=n)return!1;l=!1,u--}else{if(u<=n||f<d!=a)return!1;l=!1}else"s"!=d&&"n"!=d&&(l=!1,u--)}}var p=[],c=p.pop.bind(p);for(i=1;i<e.length;i++){var h=e[i];p.push(1==h?c()|c():2==h?c()&c():h?o(h,r):!c())}return!!c()},i=(e,r)=>e&&w.o(e,r),u=e=>(e.loaded=1,e.get()),l=e=>Object.keys(e).reduce(((r,t)=>(e[t].eager&&(r[t]=e[t]),r)),{}),s=(e,r,t)=>{var a=t?l(e[r]):e[r];return Object.keys(a).reduce(((e,r)=>!e||!a[e].loaded&&n(e,r)?r:e),0)},f=(e,r,t,n)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+a(n)+")",d=e=>{throw new Error(e)},p=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},c=(e,r,t)=>t?t():((e,r)=>d("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),h=(e=>function(r,t,n,a,o){var i=w.I(r);return i&&i.then&&!n?i.then(e.bind(e,r,w.S[r],t,!1,a,o)):e(r,w.S[r],t,n,a,o)})(((e,r,t,n,a,l)=>{if(!i(r,t))return c(e,t,l);var d=s(r,t,n);return o(a,d)||p(f(r,t,d,a)),u(r[t][d])})),g={},v={40:()=>h("default","@jupytergis/schema",!1,[2,0,1,2]),230:()=>h("default","@lumino/messaging",!1,[1,2,0,0]),241:()=>h("default","@jupyterlab/mainmenu",!1,[1,4,2,5]),256:()=>h("default","@lumino/widgets",!1,[1,2,3,1,,"alpha",0]),314:()=>h("default","@jupyterlab/completer",!1,[1,4,2,5]),390:()=>h("default","@jupytergis/base",!1,[2,0,1,2]),677:()=>h("default","yjs-widgets",!1,[2,0,3,5]),678:()=>h("default","@jupyterlab/translation",!1,[1,4,2,5]),796:()=>h("default","@jupyter/docprovider",!1,[1,2,0,0]),818:()=>h("default","@jupyterlab/statedb",!1,[1,4,2,5]),909:()=>h("default","@jupyterlab/application",!1,[1,4,2,5])},b={484:[40,230,241,256,314,390,677,678,796,818,909]},y={},w.f.consumes=(e,r)=>{w.o(b,e)&&b[e].forEach((e=>{if(w.o(g,e))return r.push(g[e]);if(!y[e]){var t=r=>{g[e]=0,w.m[e]=t=>{delete w.c[e],t.exports=r()}};y[e]=!0;var n=r=>{delete g[e],w.m[e]=t=>{throw delete w.c[e],r}};try{var a=v[e]();a.then?r.push(g[e]=a.then(t).catch(n)):t(a)}catch(e){n(e)}}}))},(()=>{w.b=document.baseURI||self.location.href;var e={738:0};w.f.j=(r,t)=>{var n=w.o(e,r)?e[r]:void 0;if(0!==n)if(n)t.push(n[2]);else{var a=new Promise(((t,a)=>n=e[r]=[t,a]));t.push(n[2]=a);var o=w.p+w.u(r),i=new Error;w.l(o,(t=>{if(w.o(e,r)&&(0!==(n=e[r])&&(e[r]=void 0),n)){var a=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+a+": "+o+")",i.name="ChunkLoadError",i.type=a,i.request=o,n[1](i)}}),"chunk-"+r,r)}};var r=(r,t)=>{var n,a,[o,i,u]=t,l=0;if(o.some((r=>0!==e[r]))){for(n in i)w.o(i,n)&&(w.m[n]=i[n]);u&&u(w)}for(r&&r(t);l<o.length;l++)a=o[l],w.o(e,a)&&e[a]&&e[a][0](),e[a]=0},t=self.webpackChunk_jupytergis_jupytergis_lab=self.webpackChunk_jupytergis_jupytergis_lab||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),w.nc=void 0;var S=w(450);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB)["@jupytergis/jupytergis-lab"]=S})();
|
|
@@ -4,30 +4,29 @@ import json
|
|
|
4
4
|
import logging
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
from typing import Any, Dict, List, Literal, Optional, Union
|
|
7
|
+
from uuid import uuid4
|
|
7
8
|
|
|
8
9
|
from pycrdt import Array, Doc, Map
|
|
9
10
|
from pydantic import BaseModel
|
|
10
11
|
from ypywidgets.comm import CommWidget
|
|
11
12
|
|
|
12
|
-
from uuid import uuid4
|
|
13
|
-
|
|
14
|
-
from .utils import normalize_path, get_source_layer_names
|
|
15
|
-
|
|
16
13
|
from .objects import (
|
|
17
|
-
|
|
18
|
-
SourceType,
|
|
14
|
+
IGeoJSONSource,
|
|
19
15
|
IHillshadeLayer,
|
|
20
16
|
IImageLayer,
|
|
17
|
+
IImageSource,
|
|
21
18
|
IRasterLayer,
|
|
22
19
|
IRasterSource,
|
|
23
|
-
IVectorTileSource,
|
|
24
20
|
IVectorLayer,
|
|
25
21
|
IVectorTileLayer,
|
|
26
|
-
|
|
27
|
-
IImageSource,
|
|
22
|
+
IVectorTileSource,
|
|
28
23
|
IVideoSource,
|
|
29
|
-
|
|
24
|
+
IGeoTiffSource,
|
|
25
|
+
IWebGlLayer,
|
|
26
|
+
LayerType,
|
|
27
|
+
SourceType,
|
|
30
28
|
)
|
|
29
|
+
from .utils import get_source_layer_names, normalize_path
|
|
31
30
|
|
|
32
31
|
logger = logging.getLogger(__file__)
|
|
33
32
|
|
|
@@ -360,7 +359,102 @@ class GISDocument(CommWidget):
|
|
|
360
359
|
}
|
|
361
360
|
|
|
362
361
|
return self._add_layer(OBJECT_FACTORY.create_layer(layer, self))
|
|
362
|
+
|
|
363
|
+
def add_tiff_layer(
|
|
364
|
+
self,
|
|
365
|
+
url: str,
|
|
366
|
+
min: int = None,
|
|
367
|
+
max: int = None,
|
|
368
|
+
name: str = "Tiff Layer",
|
|
369
|
+
normalize: bool = True,
|
|
370
|
+
wrapX: bool = False,
|
|
371
|
+
attribution: str = "",
|
|
372
|
+
opacity: float = 1.0,
|
|
373
|
+
color_expr = None
|
|
374
|
+
):
|
|
375
|
+
"""
|
|
376
|
+
Add a tiff layer
|
|
377
|
+
|
|
378
|
+
:param str url: URL of the tif
|
|
379
|
+
:param int min: Minimum pixel value to be displayed, defaults to letting the map display set the value
|
|
380
|
+
:param int max: Maximum pixel value to be displayed, defaults to letting the map display set the value
|
|
381
|
+
:param str name: The name that will be used for the object in the document, defaults to "Tiff Layer"
|
|
382
|
+
:param bool normalize: Select whether to normalize values between 0..1, if false than min/max have no effect, defaults to True
|
|
383
|
+
:param bool wrapX: Render tiles beyond the tile grid extent, defaults to False
|
|
384
|
+
:param float opacity: The opacity, between 0 and 1, defaults to 1.0
|
|
385
|
+
:param _type_ color_expr: The style expression used to style the layer, defaults to None
|
|
386
|
+
"""
|
|
387
|
+
|
|
388
|
+
source = {
|
|
389
|
+
"type": SourceType.GeoTiffSource,
|
|
390
|
+
"name": f"{name} Source",
|
|
391
|
+
"parameters": {
|
|
392
|
+
"urls": [{
|
|
393
|
+
"url": url,
|
|
394
|
+
"min": min,
|
|
395
|
+
"max": max
|
|
396
|
+
}],
|
|
397
|
+
"normalize": normalize,
|
|
398
|
+
"wrapX": wrapX,
|
|
399
|
+
},
|
|
400
|
+
}
|
|
401
|
+
source_id = self._add_source(OBJECT_FACTORY.create_source(source, self))
|
|
402
|
+
|
|
403
|
+
layer = {
|
|
404
|
+
"type": LayerType.WebGlLayer,
|
|
405
|
+
"name": name,
|
|
406
|
+
"visible": True,
|
|
407
|
+
"parameters": {"source": source_id, "opacity": opacity, "color": color_expr},
|
|
408
|
+
}
|
|
363
409
|
|
|
410
|
+
return self._add_layer(OBJECT_FACTORY.create_layer(layer, self))
|
|
411
|
+
|
|
412
|
+
def create_color_expr(self, color_stops: Dict, band: float = 1.0, interpolation_type: str = 'linear', ):
|
|
413
|
+
"""
|
|
414
|
+
Create a color expression used to style the layer
|
|
415
|
+
|
|
416
|
+
:param Dict color_stops: Dictionary of stop values to [r, g, b, a] colors
|
|
417
|
+
:param float band: The band to be colored, defaults to 1.0
|
|
418
|
+
:param str interpolation_type: The interpolation function. Can be linear, discrete, or exact, defaults to 'linear'
|
|
419
|
+
"""
|
|
420
|
+
|
|
421
|
+
if interpolation_type not in ["linear", "discrete", "exact"]:
|
|
422
|
+
raise ValueError("Interpolation type must be one of linear, discrete, or exact")
|
|
423
|
+
|
|
424
|
+
color = []
|
|
425
|
+
if interpolation_type == 'linear':
|
|
426
|
+
color = ['interpolate',['linear']]
|
|
427
|
+
color.append(['band', band])
|
|
428
|
+
# Transparency for nodata
|
|
429
|
+
color.append(0.0)
|
|
430
|
+
color.append([0.0, 0.0, 0.0, 0.0])
|
|
431
|
+
|
|
432
|
+
for value, colorVal in color_stops.items():
|
|
433
|
+
color.append(value)
|
|
434
|
+
color.append(colorVal)
|
|
435
|
+
|
|
436
|
+
return color
|
|
437
|
+
|
|
438
|
+
if interpolation_type == 'discrete':
|
|
439
|
+
operator = '<='
|
|
440
|
+
|
|
441
|
+
if interpolation_type == 'exact':
|
|
442
|
+
operator = '=='
|
|
443
|
+
|
|
444
|
+
color = ['case']
|
|
445
|
+
# Transparency for nodata
|
|
446
|
+
color.append(["==", ["band", band], 0.0])
|
|
447
|
+
color.append([0.0, 0.0, 0.0, 0.0])
|
|
448
|
+
|
|
449
|
+
for value, colorVal in color_stops.items():
|
|
450
|
+
color.append([operator, ["band", band], value])
|
|
451
|
+
color.append(colorVal)
|
|
452
|
+
|
|
453
|
+
# Fallback color
|
|
454
|
+
color.append([0.0, 0.0, 0.0, 1.0])
|
|
455
|
+
|
|
456
|
+
return color
|
|
457
|
+
|
|
364
458
|
def add_filter(self, layer_id: str, logical_op:str, feature:str, operator:str, value:Union[str, number, float]):
|
|
365
459
|
"""
|
|
366
460
|
Add a filter to a layer
|
|
@@ -529,7 +623,8 @@ class JGISSource(BaseModel):
|
|
|
529
623
|
IVectorTileSource,
|
|
530
624
|
IGeoJSONSource,
|
|
531
625
|
IImageSource,
|
|
532
|
-
IVideoSource
|
|
626
|
+
IVideoSource,
|
|
627
|
+
IGeoTiffSource
|
|
533
628
|
]
|
|
534
629
|
_parent = Optional[GISDocument]
|
|
535
630
|
|
|
@@ -614,3 +709,4 @@ OBJECT_FACTORY.register_factory(SourceType.RasterSource, IRasterSource)
|
|
|
614
709
|
OBJECT_FACTORY.register_factory(SourceType.GeoJSONSource, IGeoJSONSource)
|
|
615
710
|
OBJECT_FACTORY.register_factory(SourceType.ImageSource, IImageSource)
|
|
616
711
|
OBJECT_FACTORY.register_factory(SourceType.VideoSource, IVideoSource)
|
|
712
|
+
OBJECT_FACTORY.register_factory(SourceType.GeoTiffSource, IGeoTiffSource)
|
|
@@ -12,3 +12,4 @@ from ._schema.rastersource import IRasterSource # noqa
|
|
|
12
12
|
from ._schema.geojsonsource import IGeoJSONSource # noqa
|
|
13
13
|
from ._schema.videoSource import IVideoSource # noqa
|
|
14
14
|
from ._schema.imageSource import IImageSource # noqa
|
|
15
|
+
from ._schema.geoTiffSource import IGeoTiffSource # noqa
|
{jupytergis_lab-0.1.1 → jupytergis_lab-0.1.2}/jupytergis_lab/notebook/objects/_schema/webGlLayer.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: webGlLayer.json
|
|
3
|
-
# timestamp: 2024-09-
|
|
3
|
+
# timestamp: 2024-09-18T06:52:59+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -17,6 +17,10 @@ class IWebGlLayer(BaseModel):
|
|
|
17
17
|
opacity: Optional[confloat(ge=0.0, le=1.0, multiple_of=0.1)] = Field(
|
|
18
18
|
1, description='The opacity of the source'
|
|
19
19
|
)
|
|
20
|
-
color: Optional[
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
color: Optional[
|
|
21
|
+
Union[
|
|
22
|
+
str,
|
|
23
|
+
float,
|
|
24
|
+
List[Union[str, float, List[Union[float, str, List[Union[float, str]]]]]],
|
|
25
|
+
]
|
|
26
|
+
] = Field(None, description='The color of the the object')
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from jupytergis_lab import GISDocument
|
|
4
|
+
|
|
5
|
+
class VectorTileTests(unittest.TestCase):
|
|
6
|
+
|
|
7
|
+
def setUp(self):
|
|
8
|
+
self.doc = GISDocument()
|
|
9
|
+
|
|
10
|
+
def test_sourcelayer(self):
|
|
11
|
+
# If there are multiple source layers available and none specified we raise
|
|
12
|
+
with self.assertRaises(ValueError):
|
|
13
|
+
self.doc.add_vectortile_layer("https://basemaps.arcgis.com/arcgis/rest/services/World_Basemap_v2/VectorTileServer/tile/{z}/{y}/{x}.pbf")
|
|
14
|
+
|
|
15
|
+
# If there is on source layer available and none specified we select it
|
|
16
|
+
vector_tile = self.doc.add_vectortile_layer("https://planetarycomputer.microsoft.com/api/data/v1/vector/collections/ms-buildings/tilesets/global-footprints/tiles/{z}/{x}/{y}")
|
|
17
|
+
assert self.doc.layers[vector_tile]["parameters"]["sourceLayer"] == "bingmlbuildings"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class TiffLayerTests(unittest.TestCase):
|
|
21
|
+
|
|
22
|
+
def setUp(self):
|
|
23
|
+
self.doc = GISDocument()
|
|
24
|
+
|
|
25
|
+
def test_sourcelayer(self):
|
|
26
|
+
|
|
27
|
+
color = self.doc.create_color_expr(
|
|
28
|
+
interpolation_type='linear',
|
|
29
|
+
band=1,
|
|
30
|
+
color_stops={0.1:[246.0,97.0,81.0,1.0],0.25:
|
|
31
|
+
[
|
|
32
|
+
248.0,
|
|
33
|
+
228.0,
|
|
34
|
+
92.0,
|
|
35
|
+
1.0
|
|
36
|
+
],
|
|
37
|
+
0.5:
|
|
38
|
+
[
|
|
39
|
+
255.0,
|
|
40
|
+
190.0,
|
|
41
|
+
111.0,
|
|
42
|
+
1.0
|
|
43
|
+
],
|
|
44
|
+
0.75:
|
|
45
|
+
[
|
|
46
|
+
143.0,
|
|
47
|
+
240.0,
|
|
48
|
+
164.0,
|
|
49
|
+
1.0
|
|
50
|
+
],
|
|
51
|
+
1.0:
|
|
52
|
+
[
|
|
53
|
+
153.0,
|
|
54
|
+
193.0,
|
|
55
|
+
241.0,
|
|
56
|
+
1.0
|
|
57
|
+
]})
|
|
58
|
+
|
|
59
|
+
tif_layer = self.doc.add_tiff_layer(url="https://s2downloads.eox.at/demo/EOxCloudless/2020/rgbnir/s2cloudless2020-16bits_sinlge-file_z0-4.tif", color_expr=color)
|
|
60
|
+
assert self.doc.layers[tif_layer]["parameters"]["color"] == color
|
|
61
|
+
|
|
62
|
+
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CommandIDs, ControlPanelModel, LeftPanelWidget, RightPanelWidget, addCommands, createDefaultLayerRegistry } from '@jupytergis/base';
|
|
1
|
+
import { CommandIDs, ControlPanelModel, LeftPanelWidget, RightPanelWidget, addCommands, createDefaultLayerRegistry, logoMiniIcon } from '@jupytergis/base';
|
|
2
2
|
import { IJGISFormSchemaRegistryToken, IJGISLayerBrowserRegistryToken, IJupyterGISDocTracker } from '@jupytergis/schema';
|
|
3
3
|
import { ILayoutRestorer } from '@jupyterlab/application';
|
|
4
4
|
import { ICompletionProviderManager } from '@jupyterlab/completer';
|
|
@@ -218,8 +218,7 @@ const controlPanel = {
|
|
|
218
218
|
});
|
|
219
219
|
leftControlPanel.id = 'jupytergis::leftControlPanel';
|
|
220
220
|
leftControlPanel.title.caption = 'JupyterGIS Control Panel';
|
|
221
|
-
|
|
222
|
-
// leftControlPanel.title.icon = jcLightIcon;
|
|
221
|
+
leftControlPanel.title.icon = logoMiniIcon;
|
|
223
222
|
const rightControlPanel = new RightPanelWidget({
|
|
224
223
|
model: controlModel,
|
|
225
224
|
tracker,
|
|
@@ -227,8 +226,7 @@ const controlPanel = {
|
|
|
227
226
|
});
|
|
228
227
|
rightControlPanel.id = 'jupytergis::rightControlPanel';
|
|
229
228
|
rightControlPanel.title.caption = 'JupyterGIS Control Panel';
|
|
230
|
-
|
|
231
|
-
// rightControlPanel.title.icon = jcLightIcon;
|
|
229
|
+
rightControlPanel.title.icon = logoMiniIcon;
|
|
232
230
|
if (restorer) {
|
|
233
231
|
restorer.add(leftControlPanel, NAME_SPACE);
|
|
234
232
|
restorer.add(rightControlPanel, NAME_SPACE);
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ICollaborativeDrive } from '@jupyter/docprovider';
|
|
2
2
|
import { JupyterGISPanel } from '@jupytergis/base';
|
|
3
3
|
import { JupyterGISModel } from '@jupytergis/schema';
|
|
4
|
-
import { URLExt } from '@jupyterlab/coreutils';
|
|
5
|
-
import { ServerConnection } from '@jupyterlab/services';
|
|
6
|
-
import { ITranslator, nullTranslator } from '@jupyterlab/translation';
|
|
7
4
|
import { MessageLoop } from '@lumino/messaging';
|
|
8
5
|
import { Panel, Widget } from '@lumino/widgets';
|
|
9
6
|
import { IJupyterYWidgetManager, JupyterYModel } from 'yjs-widgets';
|
|
10
|
-
const Y_DOCUMENT_PROVIDER_URL = 'api/collaboration/room';
|
|
11
7
|
export const CLASS_NAME = 'jupytergis-notebook-widget';
|
|
12
8
|
export class YJupyterGISModel extends JupyterYModel {
|
|
13
9
|
}
|
|
@@ -27,46 +23,29 @@ export class YJupyterGISLuminoWidget extends Panel {
|
|
|
27
23
|
export const notebookRenderePlugin = {
|
|
28
24
|
id: 'jupytergis:yjswidget-plugin',
|
|
29
25
|
autoStart: true,
|
|
30
|
-
optional: [IJupyterYWidgetManager,
|
|
31
|
-
activate: (app, yWidgetManager,
|
|
26
|
+
optional: [IJupyterYWidgetManager, ICollaborativeDrive],
|
|
27
|
+
activate: (app, yWidgetManager, drive) => {
|
|
32
28
|
if (!yWidgetManager) {
|
|
33
29
|
console.error('Missing IJupyterYWidgetManager token!');
|
|
34
30
|
return;
|
|
35
31
|
}
|
|
36
|
-
|
|
32
|
+
if (!drive) {
|
|
33
|
+
console.error('Cannot setup JupyterGIS Python API without a collaborative drive');
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
37
36
|
class YJupyterGISModelFactory extends YJupyterGISModel {
|
|
38
37
|
ydocFactory(commMetadata) {
|
|
39
38
|
const { path, format, contentType } = commMetadata;
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
model: this.jupyterGISModel.sharedModel,
|
|
51
|
-
user,
|
|
52
|
-
translator: labTranslator.load('jupyterlab')
|
|
53
|
-
});
|
|
54
|
-
this.jupyterGISModel.disposed.connect(() => {
|
|
55
|
-
ywsProvider.dispose();
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
const awareness = this.jupyterGISModel.sharedModel.awareness;
|
|
60
|
-
const _onUserChanged = (user) => {
|
|
61
|
-
awareness.setLocalStateField('user', user.identity);
|
|
62
|
-
};
|
|
63
|
-
user.ready
|
|
64
|
-
.then(() => {
|
|
65
|
-
_onUserChanged(user);
|
|
66
|
-
})
|
|
67
|
-
.catch(e => console.error(e));
|
|
68
|
-
user.userChanged.connect(_onUserChanged, this);
|
|
69
|
-
}
|
|
39
|
+
const fileFormat = format;
|
|
40
|
+
const sharedModel = drive.sharedModelFactory.createNew({
|
|
41
|
+
path,
|
|
42
|
+
format: fileFormat,
|
|
43
|
+
contentType,
|
|
44
|
+
collaborative: true
|
|
45
|
+
});
|
|
46
|
+
this.jupyterGISModel = new JupyterGISModel({
|
|
47
|
+
sharedModel: sharedModel
|
|
48
|
+
});
|
|
70
49
|
return this.jupyterGISModel.sharedModel.ydoc;
|
|
71
50
|
}
|
|
72
51
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jupytergis/jupytergis-lab",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "JupyterGIS Lab extension.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jupyter",
|
|
@@ -53,9 +53,9 @@
|
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"@jupyter/docprovider": "^2.0.0",
|
|
56
|
-
"@jupytergis/base": "^0.1.
|
|
57
|
-
"@jupytergis/jupytergis-core": "^0.1.
|
|
58
|
-
"@jupytergis/schema": "^0.1.
|
|
56
|
+
"@jupytergis/base": "^0.1.2",
|
|
57
|
+
"@jupytergis/jupytergis-core": "^0.1.2",
|
|
58
|
+
"@jupytergis/schema": "^0.1.2",
|
|
59
59
|
"@jupyterlab/application": "^4.0.0",
|
|
60
60
|
"@jupyterlab/apputils": "^4.0.0",
|
|
61
61
|
"@jupyterlab/coreutils": "^6.0.0",
|
|
@@ -5,7 +5,8 @@ import {
|
|
|
5
5
|
LeftPanelWidget,
|
|
6
6
|
RightPanelWidget,
|
|
7
7
|
addCommands,
|
|
8
|
-
createDefaultLayerRegistry
|
|
8
|
+
createDefaultLayerRegistry,
|
|
9
|
+
logoMiniIcon
|
|
9
10
|
} from '@jupytergis/base';
|
|
10
11
|
import {
|
|
11
12
|
IJGISFormSchemaRegistry,
|
|
@@ -310,8 +311,7 @@ const controlPanel: JupyterFrontEndPlugin<void> = {
|
|
|
310
311
|
});
|
|
311
312
|
leftControlPanel.id = 'jupytergis::leftControlPanel';
|
|
312
313
|
leftControlPanel.title.caption = 'JupyterGIS Control Panel';
|
|
313
|
-
|
|
314
|
-
// leftControlPanel.title.icon = jcLightIcon;
|
|
314
|
+
leftControlPanel.title.icon = logoMiniIcon;
|
|
315
315
|
|
|
316
316
|
const rightControlPanel = new RightPanelWidget({
|
|
317
317
|
model: controlModel,
|
|
@@ -320,8 +320,7 @@ const controlPanel: JupyterFrontEndPlugin<void> = {
|
|
|
320
320
|
});
|
|
321
321
|
rightControlPanel.id = 'jupytergis::rightControlPanel';
|
|
322
322
|
rightControlPanel.title.caption = 'JupyterGIS Control Panel';
|
|
323
|
-
|
|
324
|
-
// rightControlPanel.title.icon = jcLightIcon;
|
|
323
|
+
rightControlPanel.title.icon = logoMiniIcon;
|
|
325
324
|
|
|
326
325
|
if (restorer) {
|
|
327
326
|
restorer.add(leftControlPanel, NAME_SPACE);
|