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);
+      });
+    });
+
+  });
+
 });

Reply via email to