AMBARI-7247. Slider View: App configs look inconsistent from Ambari's configs. 
(onechiporenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/9588d2a9
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/9588d2a9
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/9588d2a9

Branch: refs/heads/branch-alerts-dev
Commit: 9588d2a9cd899193250cdc22c3cbd13dd1be969f
Parents: 015e6ab
Author: Oleg Nechiporenko <onechipore...@apache.org>
Authored: Wed Sep 10 19:48:17 2014 +0300
Committer: Oleg Nechiporenko <onechipore...@apache.org>
Committed: Wed Sep 10 19:48:17 2014 +0300

----------------------------------------------------------------------
 .../main/resources/ui/app/mixins/with_panels.js | 50 +++++++++++++++++
 .../main/resources/ui/app/models/slider_app.js  | 24 ++-------
 .../resources/ui/app/styles/application.less    | 16 ++++++
 .../ui/app/templates/slider_app/configs.hbs     | 36 ++++++-------
 .../ui/app/templates/slider_app/summary.hbs     | 10 ++--
 .../src/main/resources/ui/app/translations.js   |  3 +-
 .../ui/app/views/slider_app/configs_view.js     | 57 ++++++++++++++++++++
 7 files changed, 152 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/9588d2a9/contrib/views/slider/src/main/resources/ui/app/mixins/with_panels.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/resources/ui/app/mixins/with_panels.js 
b/contrib/views/slider/src/main/resources/ui/app/mixins/with_panels.js
new file mode 100644
index 0000000..b1358be
--- /dev/null
+++ b/contrib/views/slider/src/main/resources/ui/app/mixins/with_panels.js
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Mixin for views that use Bootstrap.BsPanelComponent component
+ * Add caret for collapsed/expanded panels at the left of panel's title
+ * Usage:
+ * <code>
+ *  App.SomeView = Em.View.extend(App.WithPanels, {
+ *    didInsertElement: function() {
+ *      this.addCarets();
+ *    }
+ *  });
+ * </code>
+ * @type {Em.Mixin}
+ */
+App.WithPanels = Ember.Mixin.create({
+
+  /**
+   * Add caret before panel's title and add handlers for expand/collapse events
+   * Set caret-down when panel is expanded
+   * Set caret-right when panel is collapsed
+   * @method addArrows
+   */
+  addCarets: function() {
+    var panel = $('.panel');
+    panel.find('.panel-heading').prepend('<span class="pull-left icon 
icon-caret-down"></span>');
+    panel.on('hidden.bs.collapse', function (e) {
+      
$(e.delegateTarget).find('span.icon').addClass('icon-caret-right').removeClass('icon-caret-down');
+    }).on('shown.bs.collapse', function (e) {
+        
$(e.delegateTarget).find('span.icon').addClass('icon-caret-down').removeClass('icon-caret-right');
+      });
+  }
+
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/9588d2a9/contrib/views/slider/src/main/resources/ui/app/models/slider_app.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/resources/ui/app/models/slider_app.js 
b/contrib/views/slider/src/main/resources/ui/app/models/slider_app.js
index 6d6bfcc..bf02f30 100644
--- a/contrib/views/slider/src/main/resources/ui/app/models/slider_app.js
+++ b/contrib/views/slider/src/main/resources/ui/app/models/slider_app.js
@@ -108,24 +108,6 @@ App.SliderApp = DS.Model.extend({
   hiddenCategories: ['yarn-site', 'global'],
 
   /**
-   * Configs grouped to categories by site-objects
-   * @type {Array}
-   */
-  configsByCategories: function () {
-    var configs = this.get('configs'),
-        hiddenCategories = this.get('hiddenCategories'),
-        groupedConfigs = [];
-    Ember.keys(configs).forEach(function (site) {
-      groupedConfigs.push({
-        name: site,
-        configs: this.mapObject(configs[site]),
-        isVisible: !hiddenCategories.contains(site)
-      });
-    }, this);
-    return groupedConfigs;
-  }.property('configs.@each'),
-
-  /**
    * Display metrics only for running apps
    * @type {boolean}
    */
@@ -141,7 +123,11 @@ App.SliderApp = DS.Model.extend({
   mapObject: function(o) {
     if (Ember.typeOf(o) !== 'object') return [];
     return Ember.keys(o).map(function(key) {
-      return {key: key, value: o[key]};
+      return {
+        key: key,
+        value: o[key],
+        isMultiline: o[key].indexOf("\n") !== -1 || o[key].length > 100
+      };
     });
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/9588d2a9/contrib/views/slider/src/main/resources/ui/app/styles/application.less
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/resources/ui/app/styles/application.less 
b/contrib/views/slider/src/main/resources/ui/app/styles/application.less
index 11ec39b..f5024a1 100644
--- a/contrib/views/slider/src/main/resources/ui/app/styles/application.less
+++ b/contrib/views/slider/src/main/resources/ui/app/styles/application.less
@@ -609,6 +609,22 @@ a {
   }
 }
 
+
+.app_configs {
+  a.accordion-toggle {
+    display: block;
+  }
+  .row {
+    margin: 10px 0;
+    textarea {
+      height: 200px;
+      padding-left: 5px;
+      padding-right: 5px;
+      resize: none;
+    }
+  }
+}
+
 .app-alerts {
   overflow-y: auto;
   ul {

http://git-wip-us.apache.org/repos/asf/ambari/blob/9588d2a9/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/configs.hbs
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/configs.hbs
 
b/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/configs.hbs
index c3597d7..6eddc8d 100644
--- 
a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/configs.hbs
+++ 
b/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/configs.hbs
@@ -16,27 +16,25 @@
 * limitations under the License.
 }}
 
-{{#if model.configsByCategories.length}}
-  {{#each configCategory in configsByCategories}}
+<div class="app_configs">
+  {{#each configCategory in view.configsByCategories}}
     {{#if configCategory.isVisible}}
       {{#bs-panel heading=configCategory.name collapsible=true}}
-          <table class="table table-striped table-bordered table-condensed">
-              <thead>
-              <tr>
-                  <th class="col-sm-4">{{t common.name}}</th>
-                  <th>{{t common.value}}</th>
-              </tr>
-              </thead>
-              <tbody>
-              {{#each configCategory.configs}}
-                  <tr>
-                      <td>{{key}}</td>
-                      <td>{{formatWordBreak value}}</td>
-                  </tr>
-              {{/each}}
-              </tbody>
-          </table>
+        <div class="container-fluid">
+          {{#each configCategory.configs}}
+            <div class="row">
+              <div class="col-md-3">{{formatWordBreak key devider="."}}</div>
+              <div>
+                {{#if isMultiline}}
+                  {{textarea disabled=true value=value classNames="col-md-6"}}
+                {{else}}
+                  <input type="text" {{bind-attr value=value}} 
disabled="disabled" class="col-md-6" />
+                {{/if}}
+              </div>
+            </div>
+          {{/each}}
+        </div>
       {{/bs-panel}}
     {{/if}}
   {{/each}}
-{{/if}}
\ No newline at end of file
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/9588d2a9/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/summary.hbs
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/summary.hbs
 
b/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/summary.hbs
index 0ba3998..cf86dc5 100644
--- 
a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/summary.hbs
+++ 
b/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/summary.hbs
@@ -67,11 +67,11 @@
       {{/bs-panel}}
       <div class="panel panel-default panel-alerts">
         <div class="panel-heading">
-          Alerts
+          {{t common.alerts}}
           <div class="btn-group pull-right panel-link">
 {{!--            <a class="btn btn-default btn-sm" target="_blank" 
rel="tooltip"
               {{translateAttr title="sliderApp.summary.go_to_nagios"}}
-              {{bindAttr href="view.nagiosUrl"}}>
+              {{bind-attr href="view.nagiosUrl"}}>
                 <i class="icon-link"></i>
             </a>--}}
           </div>
@@ -83,7 +83,7 @@
                       <div class="container-fluid">
                           <div class="row">
                               <div class="col-md-1 status-icon">
-                                  <i {{bindAttr class="iconClass 
:icon-large"}}></i>
+                                  <i {{bind-attr class="iconClass 
:icon-large"}}></i>
                               </div>
                               <div class="col-md-11">
                                   <div class="row">
@@ -105,11 +105,11 @@
   {{#if controller.model.showMetrics}}
     <div class="panel panel-default">
       <div class="panel-heading">
-        Metrics
+        {{t common.metrics}}
         <div class="btn-group pull-right panel-link">
           <a class="btn btn-default btn-sm" target="_blank" rel="tooltip"
             {{translateAttr title="sliderApp.summary.go_to_ganglia"}}
-            {{bindAttr href="view.gangliaUrl"}}>
+            {{bind-attr href="view.gangliaUrl"}}>
               <i class="icon-link"></i>
           </a>
         </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/9588d2a9/contrib/views/slider/src/main/resources/ui/app/translations.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/translations.js 
b/contrib/views/slider/src/main/resources/ui/app/translations.js
index e5e6a79..efa3979 100644
--- a/contrib/views/slider/src/main/resources/ui/app/translations.js
+++ b/contrib/views/slider/src/main/resources/ui/app/translations.js
@@ -46,7 +46,8 @@ Em.I18n.translations = {
     'started': 'Started',
     'finished': 'Finished',
     'diagnostics': 'Diagnostics',
-    'description': 'Description'
+    'description': 'Description',
+    'alerts': 'Alerts'
   },
 
   'error.noHDFS': 'Slider applications view requires HDFS service.',

http://git-wip-us.apache.org/repos/asf/ambari/blob/9588d2a9/contrib/views/slider/src/main/resources/ui/app/views/slider_app/configs_view.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/resources/ui/app/views/slider_app/configs_view.js
 
b/contrib/views/slider/src/main/resources/ui/app/views/slider_app/configs_view.js
new file mode 100644
index 0000000..5093fb9
--- /dev/null
+++ 
b/contrib/views/slider/src/main/resources/ui/app/views/slider_app/configs_view.js
@@ -0,0 +1,57 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+App.SliderAppConfigsView = Ember.View.extend(App.WithPanels, {
+
+  /**
+   * List of configs group by categories
+   * @type {Object[]}
+   */
+  configsByCategories: Em.A([]),
+
+  /**
+   * Observer for model's configs
+   * Updates <code>configsByCategories</code>
+   * @method configsObserver
+   */
+  configsObserver: function() {
+    var model = this.get('controller.content'),
+      configs = model.get('.configs'),
+      configsByCategories = this.get('configsByCategories'),
+      hiddenCategories = model.get('hiddenCategories');
+    Em.keys(configs).forEach(function (site) {
+      if (configsByCategories.mapBy('name').contains(site)) {
+        var c = configsByCategories.findBy('name', site);
+        c.set('configs', model.mapObject(configs[site]));
+        c.set('isVisible', !hiddenCategories.contains(site));
+      }
+      else {
+        configsByCategories.pushObject(Em.Object.create({
+          name: site,
+          configs: model.mapObject(configs[site]),
+          isVisible: !hiddenCategories.contains(site)
+        }));
+      }
+    });
+  }.observes('controller.content.configs.@each'),
+
+  didInsertElement: function() {
+    this.addCarets();
+  }
+
+});

Reply via email to