Skip to content

Commit

Permalink
Merge pull request #52 from timkpaine/jlab
Browse files Browse the repository at this point in the history
change mime renderer type to not interfere with saving notebook
  • Loading branch information
texodus authored Feb 20, 2018
2 parents 2dbca84 + 5341b33 commit 8f63509
Showing 1 changed file with 44 additions and 29 deletions.
73 changes: 44 additions & 29 deletions packages/perspective-jupyterlab/src/ts/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,19 @@ import "@jpmorganchase/perspective-viewer-hypergrid";
import "@jpmorganchase/perspective-viewer-highcharts";

export
const MIME_TYPE = 'application/psp';
const MIME_TYPE = 'application/psp+json';

export
const PSP_CLASS = 'jp-PSPViewer';

export
const PSP_CONTAINER_CLASS = 'jp-PSPContainer';

interface PerspectiveSpec {
data: string,
layout: string
}

export
class RenderedPSP extends Widget implements IRenderMime.IRenderer {
constructor() {
Expand All @@ -47,46 +52,54 @@ class RenderedPSP extends Widget implements IRenderMime.IRenderer {
onAfterAttach(msg: Message) : void{
if (this._loaded) return;
let psp = (<any>(this.node.querySelector('perspective-viewer')));

let layout = JSON.parse(this._lyt);
for(let key in layout){
if(layout[key]){
if(key !== 'view'){
psp.setAttribute(key, JSON.stringify(layout[key]));
} else {
psp.setAttribute(key, layout[key]);
}
}
}

if(this.datatype === 'static'){
psp.load(this.data);
if(this._datatype === 'static'){
psp.load(this._data);

} else if (this.datatype === 'ws' || this.datatype === 'wss'){
} else if (this._datatype === 'ws' || this._datatype === 'wss'){
// TODO finish this part eventually
let socket = new WebSocket(this.datasrc);
let socket = new WebSocket(this._datasrc);
socket.onopen = function (event: any) {
console.log('connected to ' + this.datasrc);
// console.log('connected to ' + this.datasrc);
}.bind(this);
socket.onmessage = function (event: any) {
console.log(event.data);
// console.log(event.data);
}.bind(this);

} else if (this.datatype === 'http' || this.datatype === 'https'){
} else if (this._datatype === 'http' || this._datatype === 'https'){
// TODO

} else if (this.datatype === 'comm'){
} else if (this._datatype === 'comm'){
//grab session id
let els = this.datasrc.replace('comm://', '').split('/');
let els = this._datasrc.replace('comm://', '').split('/');
let kernelId = els[0];
let name = els[1];
let channel = els[2];

Session.listRunning().then(sessionModels => {
for(let i=0; i<sessionModels.length; i++){
console.log(sessionModels[i]);
if(sessionModels[i].kernel.id === kernelId){
Session.connectTo(sessionModels[i]).then((session) => {

let comm = session.kernel.connectToComm(name + '/' + channel);
comm.open('ack');
comm.onMsg = (msg: any) => {
console.log(msg); // 'hello'
let dat = msg['content']['data'];
let tmp = JSON.parse(dat);
psp.update(tmp);
};
comm.onClose = (msg: any) => {
console.log(msg); // 'bye'
};

});
Expand All @@ -97,15 +110,16 @@ class RenderedPSP extends Widget implements IRenderMime.IRenderer {
}

renderModel(model: IRenderMime.IMimeModel): Promise<void> {
let data = model.data[MIME_TYPE] as string;
console.log(data);
const { data, layout } = model.data[MIME_TYPE] as any|PerspectiveSpec;
this._lyt = layout;

try {
this.data = JSON.parse(data) as object;
this.datatype = 'static';
this.datasrc = '';
this._data = JSON.parse(data) as object;
this._datatype = 'static';
this._datasrc = '';

if(Object.keys(this.data).length === 0){
this.data = [
if(Object.keys(this._data).length === 0){
this._data = [
{'x': 1, 'y':'a', 'z': true},
{'x': 2, 'y':'b', 'z': false},
{'x': 3, 'y':'c', 'z': true},
Expand All @@ -116,27 +130,28 @@ class RenderedPSP extends Widget implements IRenderMime.IRenderer {

return Promise.resolve();
} catch (e) {
this.datasrc = data;
this._datasrc = data;
if(data.indexOf('ws://') !== -1){
this.datatype = 'ws';
this._datatype = 'ws';
} else if(data.indexOf('wss://') !== -1){
this.datatype = 'wss';
this._datatype = 'wss';
} else if(data.indexOf('http://') !== -1){
this.datatype = 'http';
this._datatype = 'http';
} else if(data.indexOf('https://') !== -1){
this.datatype = 'http';
this._datatype = 'http';
} else if(data.indexOf('comm://') !== -1){
this.datatype = 'comm';
this._datatype = 'comm';
} else{
throw e;
}
return Promise.resolve();
}
}

data: object;
datatype: string;
datasrc: string;
private _data: object;
private _datatype: string;
private _datasrc: string;
private _lyt: string;
private _loaded: boolean;
}

Expand Down

0 comments on commit 8f63509

Please sign in to comment.