add utils.url_path_join

javascript equivalent of Python-side function.
MinRK 13 years ago
parent dd93a2211a
commit 40f577b538

@ -366,6 +366,21 @@ IPython.utils = (function (IPython) {
return Math.floor(points*pixel_per_point);
};
var url_path_join = function () {
// join a sequence of url components with '/'
var url = '';
for (var i = 0; i < arguments.length; i++) {
if (url.length > 0 && url[url.length-1] != '/') {
url = url + '/' + arguments[i];
} else {
url = url + arguments[i];
}
}
return url;
};
// http://stackoverflow.com/questions/2400935/browser-detection-in-javascript
var browser = (function() {
var N= navigator.appName, ua= navigator.userAgent, tem;
@ -384,7 +399,8 @@ IPython.utils = (function (IPython) {
fixCarriageReturn : fixCarriageReturn,
autoLinkUrls : autoLinkUrls,
points_to_pixels : points_to_pixels,
browser : browser
url_path_join : url_path_join,
browser : browser
};
}(IPython));

@ -1,5 +1,5 @@
//----------------------------------------------------------------------------
// Copyright (C) 2008-2011 The IPython Development Team
// Copyright (C) 2011 The IPython Development Team
//
// Distributed under the terms of the BSD License. The full license is in
// the file COPYING, distributed as part of this software.
@ -1683,7 +1683,12 @@ var IPython = (function (IPython) {
error : $.proxy(this.save_notebook_error, this)
};
$([IPython.events]).trigger('notebook_saving.Notebook');
var url = this.baseProjectUrl() + 'api/notebooks' + this.notebookPath()+ this.notebook_name;
var url = utils.url_path_join(
this.baseProjectUrl(),
'api/notebooks',
this.notebookPath(),
this.notebook_name
);
$.ajax(url, settings);
};
@ -1747,7 +1752,15 @@ var IPython = (function (IPython) {
dataType : "json",
success:$.proxy(function (data, status, xhr){
var notebook_name = data.name;
window.open(this.baseProjectUrl() +'notebooks' + this.notebookPath()+ notebook_name, '_blank');
window.open(
utils.url_path_join(
this.baseProjectUrl(),
'notebooks',
this.notebookPath(),
notebook_name
),
'_blank'
);
}, this)
};
var url = this.baseProjectUrl() + 'api/notebooks' + path;
@ -1766,10 +1779,19 @@ var IPython = (function (IPython) {
dataType : "json",
success:$.proxy(function (data, status, xhr){
notebook_name = data.name;
window.open(this._baseProjectUrl +'notebooks' + this.notebookPath()+ notebook_name);
window.open(utils.url_path_join(
this._baseProjectUrl,
'notebooks',
this.notebookPath(),
notebook_name
));
}, this)
};
var url = this._baseProjectUrl + 'notebooks' + path;
var url = utils.url_path_join(
this._baseProjectUrl,
'notebooks',
path
);
$.ajax(url,settings);
};
@ -1788,7 +1810,12 @@ var IPython = (function (IPython) {
error : $.proxy(that.rename_error, this)
};
$([IPython.events]).trigger('notebook_rename.Notebook');
var url = this.baseProjectUrl() + 'api/notebooks' + this.notebookPath()+ this.notebook_name;
var url = utils.url_path_join(
this.baseProjectUrl(),
'api/notebooks',
this.notebookPath(),
this.notebook_name
);
$.ajax(url, settings);
};
@ -1837,22 +1864,27 @@ var IPython = (function (IPython) {
* @method load_notebook
* @param {String} notebook_naem and path A notebook to load
*/
Notebook.prototype.load_notebook = function (notebook_name, notebook_path) {
var that = this;
this.notebook_name = notebook_name;
this.notebook_path = notebook_path;
// We do the call with settings so we can set cache to false.
var settings = {
processData : false,
cache : false,
type : "GET",
dataType : "json",
success : $.proxy(this.load_notebook_success,this),
error : $.proxy(this.load_notebook_error,this),
};
$([IPython.events]).trigger('notebook_loading.Notebook');
var url = this.baseProjectUrl() + 'api/notebooks' + this.notebookPath() + this.notebook_name;
$.ajax(url, settings);
Notebook.prototype.load_notebook = function (notebook_name, notebook_path) {
var that = this;
this.notebook_name = notebook_name;
this.notebook_path = notebook_path;
// We do the call with settings so we can set cache to false.
var settings = {
processData : false,
cache : false,
type : "GET",
dataType : "json",
success : $.proxy(this.load_notebook_success,this),
error : $.proxy(this.load_notebook_error,this),
};
$([IPython.events]).trigger('notebook_loading.Notebook');
var url = utils.url_path_join(
this._baseProjectUrl,
'api/notebooks',
this.notebookPath(),
this.notebook_name
);
$.ajax(url, settings);
};
/**
@ -1983,14 +2015,20 @@ var IPython = (function (IPython) {
*
* @method list_checkpoints
*/
Notebook.prototype.list_checkpoints = function () {
var url = this.baseProjectUrl() + 'api/notebooks' + this.notebookPath() + this.notebook_name + '/checkpoints';
$.get(url).done(
$.proxy(this.list_checkpoints_success, this)
).fail(
$.proxy(this.list_checkpoints_error, this)
);
};
Notebook.prototype.list_checkpoints = function () {
var url = utils.url_path_join(
this.baseProjectUrl(),
'api/notebooks',
this.notebookPath(),
this.notebook_name,
'checkpoints'
);
$.get(url).done(
$.proxy(this.list_checkpoints_success, this)
).fail(
$.proxy(this.list_checkpoints_error, this)
);
};
/**
* Success callback for listing checkpoints.
@ -2028,14 +2066,20 @@ var IPython = (function (IPython) {
*
* @method create_checkpoint
*/
Notebook.prototype.create_checkpoint = function () {
var url = this.baseProjectUrl() + 'api/notebooks' + this.notebookPath() + this.notebook_name + '/checkpoints';
$.post(url).done(
$.proxy(this.create_checkpoint_success, this)
).fail(
$.proxy(this.create_checkpoint_error, this)
);
};
Notebook.prototype.create_checkpoint = function () {
var url = utils.url_path_join(
this.baseProjectUrl(),
'api/notebooks',
this.notebookPath(),
this.notebook_name,
'checkpoints'
);
$.post(url).done(
$.proxy(this.create_checkpoint_success, this)
).fail(
$.proxy(this.create_checkpoint_error, this)
);
};
/**
* Success callback for creating a checkpoint.
@ -2110,7 +2154,14 @@ var IPython = (function (IPython) {
*/
Notebook.prototype.restore_checkpoint = function (checkpoint) {
$([IPython.events]).trigger('notebook_restoring.Notebook', checkpoint);
var url = this.baseProjectUrl() + 'api/notebooks' + this.notebookPath() + this.notebook_name + '/checkpoints/' + checkpoint;
var url = utils.url_path_join(
this.baseProjectUrl(),
'api/notebooks',
this.notebookPath(),
this.notebook_name,
'checkpoints',
checkpoint
);
$.post(url).done(
$.proxy(this.restore_checkpoint_success, this)
).fail(
@ -2151,7 +2202,14 @@ var IPython = (function (IPython) {
*/
Notebook.prototype.delete_checkpoint = function (checkpoint) {
$([IPython.events]).trigger('notebook_restoring.Notebook', checkpoint);
var url = this.baseProjectUrl() + 'api/notebooks' + this.notebookPath() + this.notebook_name + '/checkpoints/' + checkpoint;
var url = utils.url_path_join(
this.baseProjectUrl(),
'api/notebooks',
this.notebookPath(),
this.notebook_name,
'checkpoints',
checkpoint
);
$.ajax(url, {
type: 'DELETE',
success: $.proxy(this.delete_checkpoint_success, this),

@ -1,5 +1,5 @@
//----------------------------------------------------------------------------
// Copyright (C) 2008-2011 The IPython Development Team
// Copyright (C) 2011 The IPython Development Team
//
// Distributed under the terms of the BSD License. The full license is in
// the file COPYING, distributed as part of this software.
@ -10,6 +10,9 @@
//============================================================================
var IPython = (function (IPython) {
"use strict";
var utils = IPython.utils;
var ClusterList = function (selector) {
this.selector = selector;
@ -48,14 +51,14 @@ var IPython = (function (IPython) {
dataType : "json",
success : $.proxy(this.load_list_success, this)
};
var url = this.baseProjectUrl() + 'clusters';
var url = utils.url_path_join(this.baseProjectUrl(), 'clusters');
$.ajax(url, settings);
};
ClusterList.prototype.clear_list = function () {
this.element.children('.list_item').remove();
}
};
ClusterList.prototype.load_list_success = function (data, status, xhr) {
this.clear_list();
@ -66,7 +69,7 @@ var IPython = (function (IPython) {
item.update_state(data[i]);
element.data('item', item);
this.element.append(element);
};
}
};
@ -81,10 +84,9 @@ var IPython = (function (IPython) {
};
ClusterItem.prototype.style = function () {
this.element.addClass('list_item').addClass("row-fluid");
}
};
ClusterItem.prototype.update_state = function (data) {
this.data = data;
@ -92,9 +94,8 @@ var IPython = (function (IPython) {
this.state_running();
} else if (data.status === 'stopped') {
this.state_stopped();
};
}
}
};
ClusterItem.prototype.state_stopped = function () {
@ -132,13 +133,18 @@ var IPython = (function (IPython) {
that.update_state(data);
},
error : function (data, status, xhr) {
status_col.html("error starting cluster")
status_col.html("error starting cluster");
}
};
status_col.html('starting');
var url = that.baseProjectUrl() + 'clusters/' + that.data.profile + '/start';
var url = utils.url_path_join(
that.baseProjectUrl(),
'clusters',
that.data.profile,
'start'
);
$.ajax(url, settings);
};
}
});
};
@ -169,11 +175,16 @@ var IPython = (function (IPython) {
},
error : function (data, status, xhr) {
console.log('error',data);
status_col.html("error stopping cluster")
status_col.html("error stopping cluster");
}
};
status_col.html('stopping')
var url = that.baseProjectUrl() + 'clusters/' + that.data.profile + '/stop';
status_col.html('stopping');
var url = utils.url_path_join(
that.baseProjectUrl(),
'clusters',
that.data.profile,
'stop'
);
$.ajax(url, settings);
});
};

@ -1,5 +1,5 @@
//----------------------------------------------------------------------------
// Copyright (C) 2008-2011 The IPython Development Team
// Copyright (C) 2011 The IPython Development Team
//
// Distributed under the terms of the BSD License. The full license is in
// the file COPYING, distributed as part of this software.
@ -10,6 +10,9 @@
//============================================================================
var IPython = (function (IPython) {
"use strict";
var utils = IPython.utils;
var NotebookList = function (selector) {
this.selector = selector;
@ -18,8 +21,8 @@ var IPython = (function (IPython) {
this.style();
this.bind_events();
}
this.notebooks_list = new Array();
this.sessions = new Object();
this.notebooks_list = [];
this.sessions = {};
};
NotebookList.prototype.baseProjectUrl = function () {
@ -27,15 +30,9 @@ var IPython = (function (IPython) {
};
NotebookList.prototype.notebookPath = function() {
var path = $('body').data('notebookPath');
path = decodeURIComponent(path);
return path;
return $('body').data('notebookPath');
};
NotebookList.prototype.url_name = function(name){
return encodeURIComponent(name);
};
NotebookList.prototype.style = function () {
$('#notebook_toolbar').addClass('list_toolbar');
$('#drag_info').addClass('toolbar_info');
@ -66,15 +63,16 @@ var IPython = (function (IPython) {
files = event.originalEvent.dataTransfer.files;
} else
{
files = event.originalEvent.target.files
files = event.originalEvent.target.files;
}
for (var i = 0, f; f = files[i]; i++) {
for (var i = 0; i < files.length; i++) {
var f = files[i];
var reader = new FileReader();
reader.readAsText(f);
var fname = f.name.split('.');
var nbname = fname.slice(0,-1).join('.');
var nbformat = fname.slice(-1)[0];
if (nbformat === 'ipynb') {nbformat = 'json';};
if (nbformat === 'ipynb') {nbformat = 'json';}
if (nbformat === 'py' || nbformat === 'json') {
var item = that.new_notebook_item(0);
that.add_name_input(nbname, item);
@ -87,10 +85,10 @@ var IPython = (function (IPython) {
that.add_notebook_data(event.target.result, nbitem);
that.add_upload_button(nbitem);
};
};
}
}
return false;
};
};
NotebookList.prototype.clear_list = function () {
this.element.children('.list_item').remove();
@ -111,20 +109,22 @@ var IPython = (function (IPython) {
NotebookList.prototype.sessions_loaded = function(data){
this.sessions = new Object();
console.log(data)
this.sessions = {};
var len = data.length;
if (len != 0) {
if (len > 0) {
for (var i=0; i<len; i++) {
if (data[i]['notebook']['path']==null) {
nb_path = data[i]['notebook']['name'];
if (!data[i].notebook.path) {
nb_path = data[i].notebook.name;
}
else {
nb_path = data[i]['notebook']['path'] + data[i]['notebook']['name'];
nb_path = utils.url_path_join(
data[i].notebook.path,
data[i].notebook.name
);
}
this.sessions[nb_path]= data[i]['id'];
this.sessions[nb_path] = data[i].id;
}
};
}
this.load_list();
};
@ -141,7 +141,12 @@ var IPython = (function (IPython) {
},this)
};
var url = this.baseProjectUrl() + 'api/notebooks' + this.notebookPath();
var url = utils.url_path_join(
this.baseProjectUrl(),
'api',
'notebooks',
this.notebookPath()
);
$.ajax(url, settings);
};
@ -149,17 +154,16 @@ var IPython = (function (IPython) {
NotebookList.prototype.list_loaded = function (data, status, xhr, param) {
var message = 'Notebook list empty.';
if (param !== undefined && param.msg) {
var message = param.msg;
message = param.msg;
}
var len = data.length;
this.clear_list();
if(len == 0)
{
if (len === 0) {
$(this.new_notebook_item(0))
.append(
$('<div style="margin:auto;text-align:center;color:grey"/>')
.text(message)
)
);
}
for (var i=0; i<len; i++) {
var name = data[i].name;
@ -168,12 +172,12 @@ var IPython = (function (IPython) {
var item = this.new_notebook_item(i);
this.add_link(path, nbname, item);
name = this.notebookPath() + name;
if(this.sessions[name] == undefined){
if(this.sessions[name] === undefined){
this.add_delete_button(item);
} else {
this.add_shutdown_button(item,this.sessions[name]);
}
};
}
};
@ -203,8 +207,14 @@ var IPython = (function (IPython) {
item.data('path', path);
item.find(".item_name").text(nbname);
item.find("a.item_link")
.attr('href', this.baseProjectUrl() + "notebooks" + this.notebookPath() + nbname + ".ipynb")
.attr('target','_blank');
.attr('href',
utils.url_path_join(
this.baseProjectUrl(),
"notebooks",
this.notebookPath(),
nbname + ".ipynb"
)
).attr('target','_blank');
};
@ -238,7 +248,11 @@ var IPython = (function (IPython) {
that.load_sessions();
}
};
var url = that.baseProjectUrl() + 'api/sessions/' + session;
var url = utils.url_path_join(
that.baseProjectUrl(),
'api/sessions',
session
);
$.ajax(url, settings);
return false;
});
@ -274,7 +288,12 @@ var IPython = (function (IPython) {
parent_item.remove();
}
};
var url = notebooklist.baseProjectUrl() + 'api/notebooks' + notebooklist.notebookPath() + nbname + '.ipynb';
var url = utils.url_path_join(
notebooklist.baseProjectUrl(),
'api/notebooks',
notebooklist.notebookPath(),
nbname + '.ipynb'
);
$.ajax(url, settings);
}
},
@ -300,7 +319,7 @@ var IPython = (function (IPython) {
content_type = 'application/json';
} else if (nbformat === 'py') {
content_type = 'application/x-python';
};
}
var settings = {
processData : false,
cache : false,
@ -315,7 +334,10 @@ var IPython = (function (IPython) {
};
var qs = $.param({name:nbname, format:nbformat});
var url = that.baseProjectUrl() + 'notebooks?' + qs;
var url = utils.url_path_join(
that.baseProjectUrl(),
'notebooks?' + qs
);
$.ajax(url, settings);
return false;
});
@ -340,12 +362,23 @@ var IPython = (function (IPython) {
type : "POST",
dataType : "json",
success:$.proxy(function (data, status, xhr){
notebook_name = data.name;
window.open(this.baseProjectUrl() +'notebooks' + this.notebookPath()+ notebook_name, '_blank');
var notebook_name = data.name;
window.open(
utils.url_path_join(
this.baseProjectUrl(),
'notebooks',
this.notebookPath(),
notebook_name),
'_blank'
);
}, this)
};
var url = this.baseProjectUrl() + 'api/notebooks' + path;
$.ajax(url,settings);
var url = utils.url_path_join(
this.baseProjectUrl(),
'api/notebooks',
path
);
$.ajax(url, settings);
};
IPython.NotebookList = NotebookList;

Loading…
Cancel
Save