move static resources to share/jupyterhub

from share/jupyter/hub

to be consistent with use of etc/jupyterhub etc.
This commit is contained in:
Min RK
2018-02-20 11:11:18 +01:00
parent ec8d008678
commit 8695823165
28 changed files with 70 additions and 76 deletions

View File

@@ -18,15 +18,15 @@ graft docs
prune docs/node_modules
# prune some large unused files from components
prune share/jupyter/hub/static/components/bootstrap/dist/css
exclude share/jupyter/hub/static/components/bootstrap/dist/fonts/*.svg
prune share/jupyter/hub/static/components/font-awesome/css
prune share/jupyter/hub/static/components/font-awesome/scss
exclude share/jupyter/hub/static/components/font-awesome/fonts/*.svg
prune share/jupyter/hub/static/components/jquery/external
prune share/jupyter/hub/static/components/jquery/src
prune share/jupyter/hub/static/components/moment/lang
prune share/jupyter/hub/static/components/moment/min
prune share/jupyterhub/static/components/bootstrap/dist/css
exclude share/jupyterhub/static/components/bootstrap/dist/fonts/*.svg
prune share/jupyterhub/static/components/font-awesome/css
prune share/jupyterhub/static/components/font-awesome/scss
exclude share/jupyterhub/static/components/font-awesome/fonts/*.svg
prune share/jupyterhub/static/components/jquery/external
prune share/jupyterhub/static/components/jquery/src
prune share/jupyterhub/static/components/moment/lang
prune share/jupyterhub/static/components/moment/min
# Patterns to exclude from any directory
global-exclude *~

View File

@@ -2,7 +2,7 @@
def get_data_files():
"""Walk up until we find share/jupyter/hub"""
"""Walk up until we find share/jupyterhub"""
import sys
from os.path import join, abspath, dirname, exists, split
path = abspath(dirname(__file__))
@@ -12,10 +12,10 @@ def get_data_files():
for path in starting_points:
# walk up, looking for prefix/share/jupyter
while path != '/':
share_jupyter = join(path, 'share', 'jupyter', 'hub')
static = join(share_jupyter, 'static')
share_jupyterhub = join(path, 'share', 'jupyterhub')
static = join(share_jupyterhub, 'static')
if all(exists(join(static, f)) for f in ['components', 'css']):
return share_jupyter
return share_jupyterhub
path, _ = split(path)
# didn't find it, give up
return ''

View File

@@ -263,7 +263,7 @@ class JupyterHub(Application):
).tag(config=True)
data_files_path = Unicode(DATA_FILES_PATH,
help="The location of jupyterhub data files (e.g. /usr/local/share/jupyter/hub)"
help="The location of jupyterhub data files (e.g. /usr/local/share/jupyterhub)"
).tag(config=True)
template_paths = List(

View File

@@ -38,7 +38,7 @@ from setuptools.command.bdist_egg import bdist_egg
pjoin = os.path.join
here = os.path.abspath(os.path.dirname(__file__))
share_jupyter = pjoin(here, 'share', 'jupyter', 'hub')
share_jupyterhub = pjoin(here, 'share', 'jupyterhub')
static = pjoin(share_jupyter, 'static')
is_repo = os.path.exists(pjoin(here, '.git'))
@@ -53,7 +53,7 @@ def get_data_files():
data_files = []
ntrim = len(here + os.path.sep)
for (d, dirs, filenames) in os.walk(share_jupyter):
for (d, dirs, filenames) in os.walk(share_jupyterhub):
data_files.append((
d[ntrim:],
[ pjoin(d, f) for f in filenames ]

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -3,19 +3,19 @@
require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, moment, JHAPI, utils) {
"use strict";
var base_url = window.jhdata.base_url;
var prefix = window.jhdata.prefix;
var api = new JHAPI(base_url);
function get_row (element) {
while (!element.hasClass("user-row")) {
element = element.parent();
}
return element;
}
function resort (col, order) {
var query = window.location.search.slice(1).split('&');
// if col already present in args, remove it
@@ -38,7 +38,7 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
// reload page with new order
window.location = window.location.pathname + '?' + query.join('&');
}
$("th").map(function (i, th) {
th = $(th);
var col = th.data('sort');
@@ -52,13 +52,13 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
}
);
});
$(".time-col").map(function (i, el) {
// convert ISO datestamps to nice momentjs ones
el = $(el);
el.text(moment(new Date(el.text())).fromNow());
});
$(".stop-server").click(function () {
var el = $(this);
var row = get_row(el);
@@ -72,14 +72,14 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
}
});
});
$(".access-server").click(function () {
var el = $(this);
var row = get_row(el);
var user = row.data('user');
var w = window.open(utils.url_path_join(prefix, 'user', user) + '/');
});
$(".start-server").click(function () {
var el = $(this);
var row = get_row(el);
@@ -93,7 +93,7 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
}
});
});
$(".edit-user").click(function () {
var el = $(this);
var row = get_row(el);
@@ -105,7 +105,7 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
dialog.find(".admin-checkbox").attr("checked", admin==='True');
dialog.modal();
});
$("#edit-user-dialog").find(".save-button").click(function () {
var dialog = $("#edit-user-dialog");
var user = dialog.data('user');
@@ -120,8 +120,8 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
}
});
});
$(".delete-user").click(function () {
var el = $(this);
var row = get_row(el);
@@ -141,7 +141,7 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
}
});
});
$("#add-users").click(function () {
var dialog = $("#add-users-dialog");
dialog.find(".username-input").val('');
@@ -160,7 +160,7 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
usernames.push(username);
}
});
api.add_users(usernames, {admin: admin}, {
success: function () {
window.location.reload();
@@ -208,5 +208,5 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
servers: servers,
});
});
});

View File

@@ -3,11 +3,11 @@
require(["jquery", "jhapi"], function ($, JHAPI) {
"use strict";
var base_url = window.jhdata.base_url;
var user = window.jhdata.user;
var api = new JHAPI(base_url);
$("#stop").click(function () {
api.stop_server(user, {
success: function () {
@@ -15,5 +15,5 @@ require(["jquery", "jhapi"], function ($, JHAPI) {
}
});
});
});

View File

@@ -7,7 +7,7 @@ define(['jquery', 'utils'], function ($, utils) {
var JHAPI = function (base_url) {
this.base_url = base_url;
};
var default_options = {
type: 'GET',
contentType: "application/json",
@@ -17,21 +17,21 @@ define(['jquery', 'utils'], function ($, utils) {
success: null,
error: utils.ajax_error_dialog,
};
var update = function (d1, d2) {
$.map(d2, function (i, key) {
d1[key] = d2[key];
});
return d1;
};
var ajax_defaults = function (options) {
var d = {};
update(d, default_options);
update(d, options);
return d;
};
JHAPI.prototype.api_request = function (path, options) {
options = options || {};
options = ajax_defaults(options || {});
@@ -42,7 +42,7 @@ define(['jquery', 'utils'], function ($, utils) {
);
$.ajax(url, options);
};
JHAPI.prototype.start_server = function (user, options) {
options = options || {};
options = update(options, {type: 'POST', dataType: null});
@@ -51,7 +51,7 @@ define(['jquery', 'utils'], function ($, utils) {
options
);
};
JHAPI.prototype.stop_server = function (user, options) {
options = options || {};
options = update(options, {type: 'DELETE', dataType: null});
@@ -60,18 +60,18 @@ define(['jquery', 'utils'], function ($, utils) {
options
);
};
JHAPI.prototype.list_users = function (options) {
this.api_request('users', options);
};
JHAPI.prototype.get_user = function (user, options) {
this.api_request(
utils.url_path_join('users', user),
options
);
};
JHAPI.prototype.add_users = function (usernames, userinfo, options) {
options = options || {};
var data = update(userinfo, {usernames: usernames});
@@ -80,10 +80,10 @@ define(['jquery', 'utils'], function ($, utils) {
dataType: null,
data: JSON.stringify(data)
});
this.api_request('users', options);
};
JHAPI.prototype.edit_user = function (user, userinfo, options) {
options = options || {};
options = update(options, {
@@ -91,26 +91,26 @@ define(['jquery', 'utils'], function ($, utils) {
dataType: null,
data: JSON.stringify(userinfo)
});
this.api_request(
utils.url_path_join('users', user),
options
);
};
JHAPI.prototype.admin_access = function (user, options) {
options = options || {};
options = update(options, {
type: 'POST',
dataType: null,
});
this.api_request(
utils.url_path_join('users', user, 'admin-access'),
options
);
};
JHAPI.prototype.delete_user = function (user, options) {
options = options || {};
options = update(options, {type: 'DELETE', dataType: null});
@@ -134,6 +134,6 @@ define(['jquery', 'utils'], function ($, utils) {
}
this.api_request('shutdown', options);
};
return JHAPI;
});

View File

@@ -3,11 +3,11 @@
require(["jquery", "jhapi"], function ($, JHAPI) {
"use strict";
var base_url = window.jhdata.base_url;
var user = window.jhdata.user;
var api = new JHAPI(base_url);
$("#request-token").click(function () {
api.request_token({
success: function (reply) {

View File

@@ -7,7 +7,7 @@
define(['jquery'], function($){
"use strict";
var url_path_join = function () {
// join a sequence of url components with '/'
var url = '';
@@ -24,7 +24,7 @@ define(['jquery'], function($){
url = url.replace(/\/\/+/, '/');
return url;
};
var parse_url = function (url) {
// an `a` element with an href allows attr-access to the parsed segments of a URL
// a = parse_url("http://localhost:8888/path/name#hash")
@@ -38,13 +38,13 @@ define(['jquery'], function($){
a.href = url;
return a;
};
var encode_uri_components = function (uri) {
// encode just the components of a multi-segment uri,
// leaving '/' separators
return uri.split('/').map(encodeURIComponent).join('/');
};
var url_join_encode = function () {
// join a sequence of url components with '/',
// encoding each component with encodeURIComponent
@@ -63,8 +63,8 @@ define(['jquery'], function($){
// until we are building an actual request
return decodeURIComponent($('body').data(key));
};
// http://stackoverflow.com/questions/2400935/browser-detection-in-javascript
var browser = (function() {
if (typeof navigator === 'undefined') {
@@ -101,7 +101,7 @@ define(['jquery'], function($){
return jqXHR.statusText;
}
};
var log_ajax_error = function (jqXHR, status, error) {
// log ajax failures with informative messages
var msg = "API request failed (" + jqXHR.status + "): ";
@@ -110,7 +110,7 @@ define(['jquery'], function($){
console.log(msg);
return msg;
};
var ajax_error_dialog = function (jqXHR, status, error) {
console.log("ajax dialog", arguments);
var msg = log_ajax_error(jqXHR, status, error);
@@ -132,6 +132,6 @@ define(['jquery'], function($){
log_ajax_error : log_ajax_error,
ajax_error_dialog : ajax_error_dialog,
};
return utils;
});
});

View File

@@ -18,4 +18,3 @@ div.error > p {
font-size: 200%;
line-height: normal;
}

View File

@@ -6,14 +6,14 @@
.bg-warning();
padding:10px;
}
.service-login {
text-align: center;
display: table-cell;
vertical-align: middle;
margin: auto auto 20% auto;
}
form {
display: table-cell;
vertical-align: middle;
@@ -21,7 +21,7 @@
width: 350px;
font-size: large;
}
.input-group, input[type=text], button {
width: 100%;
}
@@ -29,13 +29,13 @@
input[type=submit] {
margin-top: 16px;
}
.form-control:focus, input[type=submit]:focus {
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @jupyter-orange;
border-color: @jupyter-orange;
outline-color: @jupyter-orange;
}
.login_error {
color: orangered;
font-weight: bold;
@@ -57,4 +57,3 @@
border-radius: 0 0 @border-radius-large @border-radius-large;
}
}

View File

@@ -12,4 +12,3 @@
.hidden {
display: none;
}

View File

@@ -3,4 +3,3 @@
{% block error_detail %}
<p>Jupyter has lots of moons, but this is not one...</p>
{% endblock %}

View File

@@ -6,4 +6,3 @@
</p>
</div>
{% endblock %}

View File

@@ -30,7 +30,7 @@
<title>{% block title %}JupyterHub{% endblock %}</title>
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{% block stylesheet %}
<link rel="stylesheet" href="{{ static_url("css/style.min.css") }}" type="text/css"/>
{% endblock %}
@@ -57,7 +57,7 @@
}
});
</script>
<script type="text/javascript">
window.jhdata = {
base_url: "{{base_url}}",

View File

@@ -21,4 +21,3 @@
</div>
{% endblock %}