Compare commits

..

19 commits

Author SHA1 Message Date
Tim Paine
960341f6a7 . 2018-06-06 20:03:54 -04:00
Tim Paine
819684f29b tags are cheap 2018-06-06 20:00:56 -04:00
Tim Paine
2421e1b6bc . 2018-06-06 19:53:53 -04:00
Tim Paine
54e6560285 fix #15 2018-06-06 19:53:33 -04:00
Tim Paine
11014c81ba . 2018-05-31 16:31:27 -04:00
Tim Paine
63080b1ddb . 2018-05-31 11:28:10 -04:00
Tim Paine
7713b49329 up versions 2018-05-31 10:31:54 -04:00
Tim Paine
146b4c07b3 fix for #14 2018-05-31 10:29:13 -04:00
Tim Paine
ff17f23784 up to 0.0.4, this is mostly just to tag js changes 2018-05-30 09:39:06 -04:00
Tim Paine
b4a2a5909f fix for #13 2018-05-17 17:55:11 -04:00
Tim Paine
6c3da63c33 working on #13 2018-05-15 18:13:41 -04:00
Tim Paine
00eb4f80bc dont use personal site 2018-05-14 18:08:36 -04:00
Tim Paine
f14dfab46d potential implementation for #12 2018-05-14 18:06:00 -04:00
Tim Paine
4d09c983f4 upping jlab version 2018-04-18 15:30:39 -04:00
Tim Paine
e654a1bc43 . 2018-04-16 10:51:29 -04:00
Tim Paine
2047ef6685 . 2018-04-05 18:13:24 -04:00
Tim Paine
c0f54ee64b handle cancel #7 2018-04-05 17:18:42 -04:00
Tim Paine
b2b4b2d437 . 2018-04-03 15:57:57 -04:00
Tim Paine
136b6b0a88 . 2018-04-03 15:57:45 -04:00
10 changed files with 84 additions and 27 deletions

2
.gitignore vendored
View file

@ -161,3 +161,5 @@ ENV/
# mypy
.mypy_cache/
.DS_Store

3
MANIFEST.in Normal file
View file

@ -0,0 +1,3 @@
recursive-include jupyterlab_templates/templates/ *
include README.md
include LICENSE

View file

@ -20,6 +20,9 @@ serverextension: install ## enable serverextension
labextension: install ## enable labextension
jupyter labextension install .
dist: ## dist to pypi
python3 setup.py sdist upload -r pypi
# docs: ## make documentation
# make -C ./docs html
@ -31,4 +34,4 @@ help:
print-%:
@echo '$*=$($*)'
.PHONY: clean install serverextension labextension test tests help docs
.PHONY: clean install serverextension labextension test tests help docs dist

View file

@ -1,5 +1,6 @@
# jupyterlab_iframe
Open a site in a widget, or add a set of "quicklinks".
[![PyPI](https://img.shields.io/pypi/l/jupyterlab_iframe.svg)](https://pypi.python.org/pypi/jupyterlab_iframe)
[![PyPI](https://img.shields.io/pypi/v/jupyterlab_iframe.svg)](https://pypi.python.org/pypi/jupyterlab_iframe)
[![npm](https://img.shields.io/npm/v/jupyterlab_iframe.svg)](https://www.npmjs.com/package/jupyterlab_iframe)
@ -18,4 +19,5 @@ install the server extension, and add the following to `jupyter_notebook_config.
```python3
c.JupyterLabIFrame.iframes = ['list', 'of', 'sites']
c.JupyterLabIFrame.welcome = 'a site'
```

Binary file not shown.

View file

@ -4,11 +4,12 @@ from notebook.utils import url_path_join
class IFrameHandler(IPythonHandler):
def initialize(self, iframes=None):
self.iframes = iframes
def initialize(self, welcome=None, sites=None):
self.sites = sites
self.welcome = welcome
def get(self):
self.finish(ujson.dumps(self.iframes))
self.finish(ujson.dumps({'welcome': self.welcome or '', 'sites': self.sites}))
def load_jupyter_server_extension(nb_server_app):
@ -19,11 +20,13 @@ def load_jupyter_server_extension(nb_server_app):
nb_server_app (NotebookWebApplication): handle to the Notebook webserver instance.
"""
web_app = nb_server_app.web_app
iframes = nb_server_app.config.get('JupyterLabIFrame', {}).get('iframes', [])
sites = nb_server_app.config.get('JupyterLabIFrame', {}).get('iframes', [])
welcome = nb_server_app.config.get('JupyterLabIFrame', {}).get('welcome', [])
host_pattern = '.*$'
base_url = web_app.settings['base_url']
print('Installing jupyterlab_iframe handler on path %s' % '/iframes')
print('Handinling iframes: %s' % iframes)
print('Installing jupyterlab_iframe handler on path %s' % url_path_join(base_url, 'iframes'))
print('Handling iframes: %s' % sites)
web_app.add_handlers(host_pattern, [(url_path_join(base_url, '/iframes'), IFrameHandler, {'iframes': iframes})])
web_app.add_handlers(host_pattern, [(url_path_join(base_url, 'iframes'), IFrameHandler, {'welcome': welcome, 'sites': sites})])

View file

@ -1,6 +1,6 @@
{
"name": "jupyterlab_iframe",
"version": "0.1.0",
"version": "0.1.4",
"description": "A JupyterLab extension.",
"author": "Tim Paine",
"main": "lib/index.js",
@ -21,9 +21,10 @@
"extension": true
},
"dependencies": {
"@jupyterlab/application": "^0.15.0",
"@jupyterlab/apputils": "^0.15.0",
"@jupyterlab/docmanager": "^0.15.0",
"@jupyterlab/application": "^0.16.0",
"@jupyterlab/apputils": "^0.16.0",
"@jupyterlab/coreutils": "^1.0.2",
"@jupyterlab/docmanager": "^0.16.0",
"@phosphor/disposable": "^1.1.2"
},
"devDependencies": {

6
setup.cfg Normal file
View file

@ -0,0 +1,6 @@
[bdist_wheel]
universal=1
[metadata]
description_file = README.md
license_file = LICENSE

View file

@ -9,11 +9,11 @@ with open(path.join(here, 'README.md'), encoding='utf-8') as f:
setup(
name='jupyterlab_iframe',
version='0.0.2',
version='0.0.8',
description='IFrame widgets for JupyterLab',
long_description=long_description,
url='https://github.com/timkpaine/jupyterlab_iframe',
download_url='https://github.com/timkpaine/jupyterlab_iframe/archive/v0.0.2.tar.gz',
download_url='https://github.com/timkpaine/jupyterlab_iframe/archive/v0.0.8.tar.gz',
author='Tim Paine',
author_email='t.paine154@gmail.com',
license='GPL',
@ -29,6 +29,7 @@ setup(
keywords='jupyter jupyterlab',
packages=find_packages(exclude=['tests', ]),
data_files=[('', ["LICENSE", "README.md"])],
zip_safe=False,
# entry_points={

View file

@ -6,6 +6,10 @@ import {
ICommandPalette, showDialog, Dialog
} from '@jupyterlab/apputils';
import {
PageConfig
} from '@jupyterlab/coreutils'
import {
IDocumentManager
} from '@jupyterlab/docmanager';
@ -50,7 +54,7 @@ class OpenIFrameWidget extends Widget {
let input = document.createElement('input');
input.value = '';
input.placeholder = 'http://tim.paine.nyc';
input.placeholder = 'http://path.to.site';
body.appendChild(existingLabel);
body.appendChild(input);
@ -67,6 +71,22 @@ class OpenIFrameWidget extends Widget {
}
}
function registerSite(app: JupyterLab, palette: ICommandPalette, site: string){
let command = 'iframe:open-' + site;
app.commands.addCommand(command, {
label: 'Open ' + site,
isEnabled: () => true,
execute: () => {
let widget = new IFrameWidget(site);
app.shell.addToMainArea(widget);
app.shell.activateById(widget.id);
}
});
palette.addItem({command: command, category: 'Sites'});
}
function activate(app: JupyterLab, docManager: IDocumentManager, palette: ICommandPalette, restorer: ILayoutRestorer) {
// Declare a widget variable
@ -88,6 +108,10 @@ function activate(app: JupyterLab, docManager: IDocumentManager, palette: IComma
focusNodeSelector: 'input',
buttons: [Dialog.cancelButton(), Dialog.okButton({ label: 'GO' })]
}).then(result => {
if (result.button.label === 'CANCEL') {
return;
}
if (!result.value) {
return null;
}
@ -109,25 +133,38 @@ function activate(app: JupyterLab, docManager: IDocumentManager, palette: IComma
// grab sites from serverextension
var xhr = new XMLHttpRequest();
xhr.open("GET", "/iframes", true);
xhr.open("GET", PageConfig.getBaseUrl() + "iframes", true);
xhr.onload = function (e:any) {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
let sites = JSON.parse(xhr.responseText);
let jsn = JSON.parse(xhr.responseText);
let welcome = jsn['welcome'];
let welcome_included = false;
let sites = jsn['sites'];
for(let site of sites){
console.log('adding quicklink for ' + site);
let command = 'iframe:open-' + site;
app.commands.addCommand(command, {
label: 'Open ' + site,
isEnabled: () => true,
execute: () => {
widget = new IFrameWidget(site);
app.shell.addToMainArea(widget);
app.shell.activateById(widget.id);
if (site == welcome){
welcome_included = true;
}
registerSite(app, palette, site);
}
if (!welcome_included) {
registerSite(app, palette, welcome);
}
if (welcome) {
app.restored.then(() => {
if(!localStorage.getItem('jupyterlab_iframe_welcome')) {
localStorage.setItem('jupyterlab_iframe_welcome', 'false');
app.commands.execute('iframe:open-' + welcome);
}
});
palette.addItem({command: command, category: 'Sites'});
}
} else {
console.error(xhr.statusText);
}
@ -141,5 +178,4 @@ function activate(app: JupyterLab, docManager: IDocumentManager, palette: IComma
console.log('JupyterLab extension jupyterlab_iframe is activated!');
};
export default extension;