diff --git a/beakerx/beakerx/static/html/settings_tab.html b/beakerx/beakerx/static/html/settings_tab.html index 6a7b9aac90..dcbd024e18 100644 --- a/beakerx/beakerx/static/html/settings_tab.html +++ b/beakerx/beakerx/static/html/settings_tab.html @@ -27,6 +27,14 @@ #beakerx_info .beakerx_site_link img { height: 35px; } + + #sync_indicator .saving { + color: #f0ad4e; + } + + #sync_indicator .saved { + color: #5cb85c; + }
@@ -73,8 +81,11 @@
- +
@@ -83,10 +94,12 @@
- Result: java + + + + Result: java
-
diff --git a/beakerx/beakerx/static/tree.js b/beakerx/beakerx/static/tree.js index b4fb8296d8..42595f3c02 100644 --- a/beakerx/beakerx/static/tree.js +++ b/beakerx/beakerx/static/tree.js @@ -14,12 +14,22 @@ * limitations under the License. */ -define(function (require) { +// jscs:disable requireCamelCaseOrUpperCaseIdentifiers + +define(function(require) { + var _ = require('underscore'); var $ = require('jquery'); var Jupyter = require('base/js/namespace'); var utils = require('base/js/utils'); var urls = require('./urls'); + var $beakerxEl; + var BeakerXTreeEvents = { + INPUT_CHANGED: 'beakerx:tree:input_changed', + SUBMIT_OPTIONS_START: 'beakerx:tree:submit_options_start', + SUBMIT_OPTIONS_STOP: 'beakerx:tree:submit_options_stop', + }; + function AjaxSettings(settings) { settings.cache = false; settings.dataType = 'json'; @@ -31,52 +41,54 @@ define(function (require) { } function SuccessWrapper(success_callback, error_callback) { - return function (data, status, xhr) { + return function(data, status, xhr) { if (data.error || data.message) { error_callback(xhr, status, data.error || data.message); - } - else { + } else { success_callback(data, status, xhr); } - } + }; } function MakeErrorCallback(title, msg) { - return function (xhr, status, e) { + return function(xhr, status, e) { console.warn(msg + ' ' + e); - } + }; } - function InpuChanged(e) { - var result = ""; - var enable_button = true; - - var val = $("#heap_GB").val().trim(); - - if (val.length > 0) { - if (!isNaN(val)) { - if (val % 1 === 0) { - result += '-Xmx' + val + 'g ' - } else { - result += '-Xmx' + parseInt(val * 1024) + 'm ' - } + function InputChanged(e, triggerBeakerXEvent) { + if (e && e.hasOwnProperty('key')) { + switch (e.key) { + case 'ArrowUp': + case 'ArrowDown': + case 'ArrowLeft': + case 'ArrowRight': + case 'Tab': + return; } } + if (false !== triggerBeakerXEvent) { + $beakerxEl.trigger(BeakerXTreeEvents.INPUT_CHANGED, e); + } + var result = ''; + var errors = []; + + var val = $('#heap_GB').val().trim(); + try { + if (val !== '') { + var parsedVal = settings.normaliseHeapSize(val); + result += '-Xmx' + parsedVal + ' '; + } + } catch (e) { + errors.push(e.message); + } - - var other_property = $('#other_property input'); - other_property.each(function () { + $('#other_property').find('input').each(function() { var value = $(this).val().trim(); - result += value + " "; - - if (value.length < 1) { - enable_button = false - } + result += value + ' '; }); - var java_property = $('#properties_property div'); - - java_property.each(function () { + $('#properties_property').find('div').each(function() { var children = $($(this).children()); var value = $(children.get(1)).val().trim(); var name = $(children.get(0)).val().trim(); @@ -84,33 +96,23 @@ define(function (require) { var value_combined = '-D' + name + '=' + value; if (name.length > 0) { - result += value_combined + " "; - } - - if (value_combined.length < 1) { - enable_button = false + result += value_combined + ' '; } }); $('#result').text(result); - $('#errors').empty(); + var errorsEl = $('#errors'); + errorsEl.empty(); - if (val.length > 0 && isNaN(val)) { - $('#errors').append($('').text("Heap Size must be a decimal number.")); - enable_button = false; - } - - if (enable_button) { - $('#jvm_settings_submit').removeAttr('disabled'); - } else { - $('#jvm_settings_submit').prop('disabled', true); + if (errors.length > 0) { + errorsEl.append($('').text(errors.join('\n'))); } } var error_callback = MakeErrorCallback('Error', 'An error occurred while load Beakerx setings'); var version = { - versionBox: "beakerx_info", - load: function () { + versionBox: 'beakerx_info', + load: function() { var that = this; function handle_response(data, status, xhr) { @@ -172,74 +174,110 @@ define(function (require) { }; var settings = { formId: 'beakerx_jvm_settings_form', - randId: function () { + randId: function() { return Math.random().toString(36).substr(2, 10); }, - appendField: function (opts) { + appendField: function(opts) { var id = this.randId(); - var input = $('', {class: 'form-control'}); - var wrapper = $('
', {class: 'form-group form-inline bko-spacing'}); - wrapper.attr('id', id); - var remove_button = $('