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 docs/node_modules
# prune some large unused files from components # prune some large unused files from components
prune share/jupyter/hub/static/components/bootstrap/dist/css prune share/jupyterhub/static/components/bootstrap/dist/css
exclude share/jupyter/hub/static/components/bootstrap/dist/fonts/*.svg exclude share/jupyterhub/static/components/bootstrap/dist/fonts/*.svg
prune share/jupyter/hub/static/components/font-awesome/css prune share/jupyterhub/static/components/font-awesome/css
prune share/jupyter/hub/static/components/font-awesome/scss prune share/jupyterhub/static/components/font-awesome/scss
exclude share/jupyter/hub/static/components/font-awesome/fonts/*.svg exclude share/jupyterhub/static/components/font-awesome/fonts/*.svg
prune share/jupyter/hub/static/components/jquery/external prune share/jupyterhub/static/components/jquery/external
prune share/jupyter/hub/static/components/jquery/src prune share/jupyterhub/static/components/jquery/src
prune share/jupyter/hub/static/components/moment/lang prune share/jupyterhub/static/components/moment/lang
prune share/jupyter/hub/static/components/moment/min prune share/jupyterhub/static/components/moment/min
# Patterns to exclude from any directory # Patterns to exclude from any directory
global-exclude *~ global-exclude *~

View File

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

View File

@@ -263,7 +263,7 @@ class JupyterHub(Application):
).tag(config=True) ).tag(config=True)
data_files_path = Unicode(DATA_FILES_PATH, 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) ).tag(config=True)
template_paths = List( template_paths = List(

View File

@@ -38,7 +38,7 @@ from setuptools.command.bdist_egg import bdist_egg
pjoin = os.path.join pjoin = os.path.join
here = os.path.abspath(os.path.dirname(__file__)) 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') static = pjoin(share_jupyter, 'static')
is_repo = os.path.exists(pjoin(here, '.git')) is_repo = os.path.exists(pjoin(here, '.git'))
@@ -53,7 +53,7 @@ def get_data_files():
data_files = [] data_files = []
ntrim = len(here + os.path.sep) 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(( data_files.append((
d[ntrim:], d[ntrim:],
[ pjoin(d, f) for f in filenames ] [ 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) { require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, moment, JHAPI, utils) {
"use strict"; "use strict";
var base_url = window.jhdata.base_url; var base_url = window.jhdata.base_url;
var prefix = window.jhdata.prefix; var prefix = window.jhdata.prefix;
var api = new JHAPI(base_url); var api = new JHAPI(base_url);
function get_row (element) { function get_row (element) {
while (!element.hasClass("user-row")) { while (!element.hasClass("user-row")) {
element = element.parent(); element = element.parent();
} }
return element; return element;
} }
function resort (col, order) { function resort (col, order) {
var query = window.location.search.slice(1).split('&'); var query = window.location.search.slice(1).split('&');
// if col already present in args, remove it // 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 // reload page with new order
window.location = window.location.pathname + '?' + query.join('&'); window.location = window.location.pathname + '?' + query.join('&');
} }
$("th").map(function (i, th) { $("th").map(function (i, th) {
th = $(th); th = $(th);
var col = th.data('sort'); var col = th.data('sort');
@@ -52,13 +52,13 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
} }
); );
}); });
$(".time-col").map(function (i, el) { $(".time-col").map(function (i, el) {
// convert ISO datestamps to nice momentjs ones // convert ISO datestamps to nice momentjs ones
el = $(el); el = $(el);
el.text(moment(new Date(el.text())).fromNow()); el.text(moment(new Date(el.text())).fromNow());
}); });
$(".stop-server").click(function () { $(".stop-server").click(function () {
var el = $(this); var el = $(this);
var row = get_row(el); var row = get_row(el);
@@ -72,14 +72,14 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
} }
}); });
}); });
$(".access-server").click(function () { $(".access-server").click(function () {
var el = $(this); var el = $(this);
var row = get_row(el); var row = get_row(el);
var user = row.data('user'); var user = row.data('user');
var w = window.open(utils.url_path_join(prefix, 'user', user) + '/'); var w = window.open(utils.url_path_join(prefix, 'user', user) + '/');
}); });
$(".start-server").click(function () { $(".start-server").click(function () {
var el = $(this); var el = $(this);
var row = get_row(el); var row = get_row(el);
@@ -93,7 +93,7 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
} }
}); });
}); });
$(".edit-user").click(function () { $(".edit-user").click(function () {
var el = $(this); var el = $(this);
var row = get_row(el); 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.find(".admin-checkbox").attr("checked", admin==='True');
dialog.modal(); dialog.modal();
}); });
$("#edit-user-dialog").find(".save-button").click(function () { $("#edit-user-dialog").find(".save-button").click(function () {
var dialog = $("#edit-user-dialog"); var dialog = $("#edit-user-dialog");
var user = dialog.data('user'); var user = dialog.data('user');
@@ -120,8 +120,8 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
} }
}); });
}); });
$(".delete-user").click(function () { $(".delete-user").click(function () {
var el = $(this); var el = $(this);
var row = get_row(el); var row = get_row(el);
@@ -141,7 +141,7 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
} }
}); });
}); });
$("#add-users").click(function () { $("#add-users").click(function () {
var dialog = $("#add-users-dialog"); var dialog = $("#add-users-dialog");
dialog.find(".username-input").val(''); dialog.find(".username-input").val('');
@@ -160,7 +160,7 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
usernames.push(username); usernames.push(username);
} }
}); });
api.add_users(usernames, {admin: admin}, { api.add_users(usernames, {admin: admin}, {
success: function () { success: function () {
window.location.reload(); window.location.reload();
@@ -208,5 +208,5 @@ require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, mo
servers: servers, servers: servers,
}); });
}); });
}); });

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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