##// END OF EJS Templates
Fix terminals with Tornado 3...
Fix terminals with Tornado 3 The websocket handler auth checking was calling clear_cookie(), which threw an error because it doesn't make sense for Websockets. It doesn't seem important, and we silence it in our other websocket handlers, so silencing it here too.

File last commit:

r18467:8414f38e
r18546:2b2243ed
Show More
comm.js
210 lines | 6.8 KiB | application/javascript | JavascriptLexer
Jonathan Frederic
Almost done!...
r17198 // Copyright (c) IPython Development Team.
// Distributed under the terms of the Modified BSD License.
MinRK
add javascript-side widgets
r13189
Jonathan Frederic
Almost done!...
r17198 define([
'base/js/namespace',
Jonathan Frederic
MWE,...
r17200 'jquery',
Jonathan Frederic
Almost done!...
r17198 'base/js/utils',
], function(IPython, $, utils) {
MinRK
add javascript-side widgets
r13189 "use strict";
//-----------------------------------------------------------------------
MinRK
rename widget to comm
r13195 // CommManager class
MinRK
add javascript-side widgets
r13189 //-----------------------------------------------------------------------
MinRK
rename widget to comm
r13195 var CommManager = function (kernel) {
this.comms = {};
MinRK
s/target/target_name
r13204 this.targets = {};
MinRK
add javascript-side widgets
r13189 if (kernel !== undefined) {
this.init_kernel(kernel);
}
};
MinRK
rename widget to comm
r13195 CommManager.prototype.init_kernel = function (kernel) {
MinRK
make js / Python widgets symmetrical...
r13192 // connect the kernel, and register message handlers
MinRK
add javascript-side widgets
r13189 this.kernel = kernel;
MinRK
rename widget to comm
r13195 var msg_types = ['comm_open', 'comm_msg', 'comm_close'];
MinRK
add javascript-side widgets
r13189 for (var i = 0; i < msg_types.length; i++) {
var msg_type = msg_types[i];
MinRK
fix js/Python WidgetManager symmetry...
r13191 kernel.register_iopub_handler(msg_type, $.proxy(this[msg_type], this));
MinRK
add javascript-side widgets
r13189 }
};
MinRK
don't expose comm_id arg via new_comm
r13233 CommManager.prototype.new_comm = function (target_name, data, callbacks, metadata) {
MinRK
Add CommManager.new_comm...
r13229 // Create a new Comm, register it, and open its Kernel-side counterpart
// Mimics the auto-registration in `Comm.__init__` in the IPython Comm
MinRK
don't expose comm_id arg via new_comm
r13233 var comm = new Comm(target_name);
MinRK
Add CommManager.new_comm...
r13229 this.register_comm(comm);
comm.open(data, callbacks, metadata);
return comm;
};
MinRK
s/target/target_name
r13204 CommManager.prototype.register_target = function (target_name, f) {
// Register a target function for a given target name
this.targets[target_name] = f;
MinRK
add javascript-side widgets
r13189 };
MinRK
add unregister_target to CommManagers
r13226 CommManager.prototype.unregister_target = function (target_name, f) {
// Unregister a target function for a given target name
delete this.targets[target_name];
};
MinRK
log exceptions in Comm handlers
r13227
MinRK
rename widget to comm
r13195 CommManager.prototype.register_comm = function (comm) {
// Register a comm in the mapping
this.comms[comm.comm_id] = comm;
comm.kernel = this.kernel;
return comm.comm_id;
MinRK
make js / Python widgets symmetrical...
r13192 };
Sylvain Corlay
bad call and missing call to unregister_comm
r17460 CommManager.prototype.unregister_comm = function (comm) {
MinRK
rename widget to comm
r13195 // Remove a comm from the mapping
Sylvain Corlay
bad call and missing call to unregister_comm
r17460 delete this.comms[comm.comm_id];
MinRK
make js / Python widgets symmetrical...
r13192 };
MinRK
rename widget to comm
r13195 // comm message handlers
MinRK
make js / Python widgets symmetrical...
r13192
MinRK
rename widget to comm
r13195 CommManager.prototype.comm_open = function (msg) {
MinRK
add javascript-side widgets
r13189 var content = msg.content;
Thomas Kluyver
Support specifying requirejs modules for comm targets
r18467 var that = this;
var instantiate_comm = function(target) {
var comm = new Comm(content.target_name, content.comm_id);
that.register_comm(comm);
try {
target(comm, msg);
} catch (e) {
console.log("Exception opening new comm:", e, e.stack, msg);
comm.close();
that.unregister_comm(comm);
}
};
if (content.target_module) {
// Load requirejs module for comm target
require([content.target_module], function(mod) {
var target = mod[content.target_name];
if (target !== undefined) {
instantiate_comm(target)
} else {
console.log("Comm target " + content.target_name +
" not found in module " + content.target_module);
}
}, function(err) { console.log(err); });
} else {
// No requirejs module specified: look for target in registry
var f = this.targets[content.target_name];
if (f === undefined) {
console.log("No such target registered: ", content.target_name);
console.log("Available targets are: ", this.targets);
return;
}
instantiate_comm(f)
MinRK
log exceptions in Comm handlers
r13227 }
MinRK
add javascript-side widgets
r13189 };
MinRK
rename widget to comm
r13195 CommManager.prototype.comm_close = function (msg) {
MinRK
add javascript-side widgets
r13189 var content = msg.content;
MinRK
rename widget to comm
r13195 var comm = this.comms[content.comm_id];
if (comm === undefined) {
MinRK
add javascript-side widgets
r13189 return;
}
Sylvain Corlay
bad call and missing call to unregister_comm
r17460 this.unregister_comm(comm);
MinRK
log exceptions in Comm handlers
r13227 try {
comm.handle_close(msg);
} catch (e) {
Jason Grout
Intermediate changes to javascript side of backbone widgets
r14486 console.log("Exception closing comm: ", e, e.stack, msg);
MinRK
log exceptions in Comm handlers
r13227 }
MinRK
add javascript-side widgets
r13189 };
MinRK
rename widget to comm
r13195 CommManager.prototype.comm_msg = function (msg) {
MinRK
add javascript-side widgets
r13189 var content = msg.content;
MinRK
rename widget to comm
r13195 var comm = this.comms[content.comm_id];
if (comm === undefined) {
MinRK
add javascript-side widgets
r13189 return;
}
MinRK
log exceptions in Comm handlers
r13227 try {
comm.handle_msg(msg);
} catch (e) {
Jason Grout
Intermediate changes to javascript side of backbone widgets
r14486 console.log("Exception handling comm msg: ", e, e.stack, msg);
MinRK
log exceptions in Comm handlers
r13227 }
MinRK
add javascript-side widgets
r13189 };
//-----------------------------------------------------------------------
MinRK
rename widget to comm
r13195 // Comm base class
MinRK
add javascript-side widgets
r13189 //-----------------------------------------------------------------------
MinRK
Add CommManager.new_comm...
r13229 var Comm = function (target_name, comm_id) {
MinRK
s/target/target_name
r13204 this.target_name = target_name;
Jonathan Frederic
Almost done!...
r17198 this.comm_id = comm_id || utils.uuid();
MinRK
open is not an event...
r13205 this._msg_callback = this._close_callback = null;
MinRK
add javascript-side widgets
r13189 };
MinRK
make js / Python widgets symmetrical...
r13192 // methods for sending messages
MinRK
add message metadata to comm and kernel.send_shell_message
r13217 Comm.prototype.open = function (data, callbacks, metadata) {
MinRK
make js / Python widgets symmetrical...
r13192 var content = {
MinRK
rename widget to comm
r13195 comm_id : this.comm_id,
MinRK
s/target/target_name
r13204 target_name : this.target_name,
MinRK
make js / Python widgets symmetrical...
r13192 data : data || {},
};
MinRK
add message metadata to comm and kernel.send_shell_message
r13217 return this.kernel.send_shell_message("comm_open", content, callbacks, metadata);
MinRK
add javascript-side widgets
r13189 };
MinRK
support binary message from javascript
r18332 Comm.prototype.send = function (data, callbacks, metadata, buffers) {
MinRK
add javascript-side widgets
r13189 var content = {
MinRK
rename widget to comm
r13195 comm_id : this.comm_id,
MinRK
make js / Python widgets symmetrical...
r13192 data : data || {},
MinRK
add javascript-side widgets
r13189 };
MinRK
support binary message from javascript
r18332 return this.kernel.send_shell_message("comm_msg", content, callbacks, metadata, buffers);
MinRK
add javascript-side widgets
r13189 };
MinRK
add message metadata to comm and kernel.send_shell_message
r13217 Comm.prototype.close = function (data, callbacks, metadata) {
MinRK
add javascript-side widgets
r13189 var content = {
MinRK
rename widget to comm
r13195 comm_id : this.comm_id,
MinRK
make js / Python widgets symmetrical...
r13192 data : data || {},
MinRK
add javascript-side widgets
r13189 };
MinRK
add message metadata to comm and kernel.send_shell_message
r13217 return this.kernel.send_shell_message("comm_close", content, callbacks, metadata);
MinRK
add javascript-side widgets
r13189 };
MinRK
COMM: mirror Python callback API in Javascript
r13198 // methods for registering callbacks for incoming messages
Comm.prototype._register_callback = function (key, callback) {
this['_' + key + '_callback'] = callback;
};
Comm.prototype.on_msg = function (callback) {
this._register_callback('msg', callback);
};
Comm.prototype.on_close = function (callback) {
this._register_callback('close', callback);
};
MinRK
hook up output for comm messages
r13202
MinRK
make js / Python widgets symmetrical...
r13192 // methods for handling incoming messages
MinRK
COMM: mirror Python callback API in Javascript
r13198 Comm.prototype._maybe_callback = function (key, msg) {
var callback = this['_' + key + '_callback'];
MinRK
catch errors in comm callbacks
r13230 if (callback) {
try {
callback(msg);
} catch (e) {
Jason Grout
Intermediate changes to javascript side of backbone widgets
r14486 console.log("Exception in Comm callback", e, e.stack, msg);
MinRK
catch errors in comm callbacks
r13230 }
}
MinRK
COMM: mirror Python callback API in Javascript
r13198 };
MinRK
pass whole message to Comm handlers
r13197 Comm.prototype.handle_msg = function (msg) {
MinRK
COMM: mirror Python callback API in Javascript
r13198 this._maybe_callback('msg', msg);
MinRK
make js / Python widgets symmetrical...
r13192 };
MinRK
pass whole message to Comm handlers
r13197 Comm.prototype.handle_close = function (msg) {
MinRK
COMM: mirror Python callback API in Javascript
r13198 this._maybe_callback('close', msg);
MinRK
make js / Python widgets symmetrical...
r13192 };
Jonathan Frederic
Almost done!...
r17198 // For backwards compatability.
MinRK
rename widget to comm
r13195 IPython.CommManager = CommManager;
IPython.Comm = Comm;
MinRK
add javascript-side widgets
r13189
Jonathan Frederic
Almost done!...
r17198 return {
'CommManager': CommManager,
'Comm': Comm
};
});