Repository: ambari Updated Branches: refs/heads/trunk 237802151 -> 47f3bfb16
AMBARI-10926. Toggle widget should have 'edit' action like slider and other enhanced-configs (onechiporenko) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/47f3bfb1 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/47f3bfb1 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/47f3bfb1 Branch: refs/heads/trunk Commit: 47f3bfb16f02cd52f99671497ac688950e218bf3 Parents: 2378021 Author: Oleg Nechiporenko <onechipore...@apache.org> Authored: Tue May 5 13:17:30 2015 +0300 Committer: Oleg Nechiporenko <onechipore...@apache.org> Committed: Tue May 5 14:04:41 2015 +0300 ---------------------------------------------------------------------- .../configs/widgets/toggle_config_widget.hbs | 2 +- .../configs/widgets/config_widget_view.js | 19 ++++++++++++++- .../widgets/slider_config_widget_view.js | 7 ++++++ .../widgets/toggle_config_widget_view.js | 18 ++++++++++++-- .../widgets/toggle_config_widget_view_test.js | 25 ++++++++++++++++++++ 5 files changed, 67 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/47f3bfb1/ambari-web/app/templates/common/configs/widgets/toggle_config_widget.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/common/configs/widgets/toggle_config_widget.hbs b/ambari-web/app/templates/common/configs/widgets/toggle_config_widget.hbs index d2cb97f..f9f7fd7 100644 --- a/ambari-web/app/templates/common/configs/widgets/toggle_config_widget.hbs +++ b/ambari-web/app/templates/common/configs/widgets/toggle_config_widget.hbs @@ -17,7 +17,7 @@ }} {{template "templates/common/configs/widgets/config_label"}} -<div {{bindAttr class=":pull-left view.isOriginalSCP:original-widget"}}> +<div {{bindAttr class=":pull-left view.showAsTextBox:hide view.isOriginalSCP:original-widget"}}> {{view Ember.Checkbox checkedBinding="view.switcherValue"}} </div> {{template "templates/common/configs/widgets/controls"}} http://git-wip-us.apache.org/repos/asf/ambari/blob/47f3bfb1/ambari-web/app/views/common/configs/widgets/config_widget_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/configs/widgets/config_widget_view.js b/ambari-web/app/views/common/configs/widgets/config_widget_view.js index a6d2960..01758b7 100644 --- a/ambari-web/app/views/common/configs/widgets/config_widget_view.js +++ b/ambari-web/app/views/common/configs/widgets/config_widget_view.js @@ -84,6 +84,7 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo showAsTextBox: false, /** + * Determines if user can switch custom widget-view to the input-field * @type {boolean} */ supportSwitchToCheckBox: false, @@ -121,11 +122,20 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo attributeBindings:['issueMessage:data-original-title'], + /** + * @type {App.ServiceConfigProperty} + */ config: null, + /** + * @type {string} + */ issueIconClass: '', - issueMessage: false, + /** + * @type {string} + */ + issueMessage: '', didInsertElement: function() { App.tooltip($(this.get('element'))); @@ -139,6 +149,10 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo this.removeObserver('issuedConfig.errorMessage', this, this.errorLevelObserver); }, + /** + * + * @method errorLevelObserver + */ errorLevelObserver: function() { var messageLevel = this.get('issuedConfig.errorMessage') ? 'ERROR': this.get('issuedConfig.warnMessage') ? 'WARN' : 'NONE'; var issue = { @@ -163,6 +177,9 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo this.set('issueMessage', issue.message); }, + /** + * @type {App.ServiceConfigProperty} + */ issuedConfig: function() { var config = this.get('config'); // check editable overrides http://git-wip-us.apache.org/repos/asf/ambari/blob/47f3bfb1/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js b/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js index 603e847..8154990 100644 --- a/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js +++ b/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js @@ -112,6 +112,7 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({ }.property('config.recommendedValue'), units: ['b', 'kb', 'mb', 'gb', 'tb', 'pb'], + /** * unit type of widget * @type {String} @@ -448,6 +449,7 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({ /** * Workaround for bootstrap-slider widget that was initiated inside hidden container. + * @method refreshSliderObserver */ refreshSliderObserver: function() { var sliderTickLabel = this.$('.ui-slider-wrapper:eq(0) .slider-tick-label:first'); @@ -459,6 +461,11 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({ } }.observes('parentView.content.isActive', 'parentView.parentView.tab.isActive'), + /** + * Check if value provided by user in the textbox may be used in the slider + * @returns {boolean} + * @method isValueCompatibleWithWidget + */ isValueCompatibleWithWidget: function() { if (this._super()) { if (!this.get('validateFunction')(this.get('config.value'))) { http://git-wip-us.apache.org/repos/asf/ambari/blob/47f3bfb1/ambari-web/app/views/common/configs/widgets/toggle_config_widget_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/configs/widgets/toggle_config_widget_view.js b/ambari-web/app/views/common/configs/widgets/toggle_config_widget_view.js index 24eb4a1..759eccf 100644 --- a/ambari-web/app/views/common/configs/widgets/toggle_config_widget_view.js +++ b/ambari-web/app/views/common/configs/widgets/toggle_config_widget_view.js @@ -58,6 +58,8 @@ App.ToggleConfigWidgetView = App.ConfigWidgetView.extend({ */ skipRequestForDependencies: false, + supportSwitchToCheckBox: true, + /** * Update config value using <code>switcherValue</code>. * switcherValue is boolean, but config value should be a string. @@ -117,7 +119,7 @@ App.ToggleConfigWidgetView = App.ConfigWidgetView.extend({ self = this; Em.assert('toggle for `' + this.get('config.name') + '` should contain two entries', labels.length === 2); if (this.$()) { - var switcher = this.$("input").bootstrapSwitch({ + var switcher = this.$("input:eq(0)").bootstrapSwitch({ onText: labels[0].label, offText: labels[1].label, offColor: 'default', @@ -166,6 +168,18 @@ App.ToggleConfigWidgetView = App.ConfigWidgetView.extend({ this.get('switcher').bootstrapSwitch('disabled', !this.get('config.isEditable')); } this._super(); - }.observes('config.isEditable') + }.observes('config.isEditable'), + + /** + * Check if value provided by user in the textbox may be used in the toggle + * @returns {boolean} + * @method isValueCompatibleWithWidget + */ + isValueCompatibleWithWidget: function () { + if (this._super()) { + return this.get('config.stackConfigProperty.valueAttributes.entries').mapProperty('value').contains(this.get('config.value')); + } + return false; + } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/47f3bfb1/ambari-web/test/views/common/configs/widgets/toggle_config_widget_view_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/views/common/configs/widgets/toggle_config_widget_view_test.js b/ambari-web/test/views/common/configs/widgets/toggle_config_widget_view_test.js index 98e974b..76e0330 100644 --- a/ambari-web/test/views/common/configs/widgets/toggle_config_widget_view_test.js +++ b/ambari-web/test/views/common/configs/widgets/toggle_config_widget_view_test.js @@ -71,4 +71,29 @@ describe('App.ToggleConfigWidgetView', function () { }); + describe('#isValueCompatibleWithWidget', function () { + + Em.A([ + { + m: 'valid', + v: 'active', + e: true + }, + { + m: 'invalid', + v: 'invalid', + e: false + } + ]).forEach(function (test) { + it(test.m, function () { + this.view.get('config').setProperties({ + value: test.v, + isValid: true + }); + expect(this.view.isValueCompatibleWithWidget()).to.equal(test.e); + }); + }); + + }); + });