浏览代码

AMBARI-7831. Slider View: metrics and metric ui links should be at the and of the list. (Denys Buzhor via akovalenko)

Aleksandr Kovalenko 10 年之前
父节点
当前提交
c0dd81615e

+ 19 - 0
contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js

@@ -41,6 +41,25 @@ App.SliderAppController = Ember.ObjectController.extend(App.AjaxErrorHandler, {
     return (Em.get(this.get('model'), 'quickLinks.content.content.length') > 0);
   }.property('model.quickLinks.content.content.length'),
 
+  /**
+   * Quick links in custom order.
+   *
+   * @type {Array}
+   **/
+  quickLinksOrdered: function() {
+    var copy = this.store.all('quick-link').slice(0);
+    var toTail = ['Metrics UI', 'Metrics API'];
+
+    if (this.get('weHaveQuicklinks')) {
+      toTail.forEach(function(labelName) {
+        if (copy.findBy('label', labelName)) {
+          copy = copy.concat(copy.splice(copy.indexOf(copy.findBy('label', labelName)), 1));
+        }
+      });
+    }
+    return copy;
+  }.property('model.quickLinks.content.content.length', 'weHaveQuicklinks'),
+
   /**
    * List of all possible actions for slider app
    * @type {Em.Object}

+ 2 - 2
contrib/views/slider/src/main/resources/ui/app/templates/slider_app.hbs

@@ -53,7 +53,7 @@
         <li class="dropdown">
           <a class="dropdown-toggle" data-toggle="dropdown" href="#">{{t common.quickLinks}}<b class="caret"></b></a>
           <ul class="dropdown-menu">
-            {{#each quickLink in model.quickLinks}}
+            {{#each quickLink in controller.quickLinksOrdered}}
               <li><a {{bind-attr href="quickLink.url"}} target="_blank">{{quickLink.label}}</a></li>
             {{/each}}
           </ul>
@@ -67,4 +67,4 @@
     {{outlet}}
   </div>
 
-</div>
+</div>

+ 29 - 0
contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_app_controller_test.js

@@ -62,3 +62,32 @@ test('availableActions', function () {
   ok(controller.get('availableActions').mapBy('action').contains('thaw'), 'actions for FROZEN (2)');
 
 });
+
+test('quickLinksOrdered', function() {
+  expect(2);
+
+  var controller = this.subject({
+    store: Em.Object.create({
+      all: function(model) {
+        return {
+          'quick-link': [
+            Em.Object.create({ label: 'org.apache.slider.thrift'}),
+            Em.Object.create({ label: 'Metrics API'}),
+            Em.Object.create({ label: 'org.apache.slider.hbase'}),
+            Em.Object.create({ label: 'Metrics UI'}),
+            Em.Object.create({ label: 'UI'}),
+            Em.Object.create({ label: 'Some Label'})
+          ]
+        }[model];
+      }
+    }),
+    weHaveQuicklinks: true
+  });
+
+  Em.run(function() {
+    controller.get('quickLinksOrdered');
+  });
+
+  equal(controller.get('quickLinksOrdered').objectAt(4).get('label'), 'Metrics UI', 'Metrics UI link should be before Metrics API');
+  equal(controller.get('quickLinksOrdered').objectAt(5).get('label'), 'Metrics API', 'Metrics API link should be last');
+});