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;
+ }
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 = $('