Преглед изворни кода

AMBARI-5866. Populate actions drop down of Slider App details page. (onechiporenko)

Oleg Nechiporenko пре 11 година
родитељ
комит
88d72aab88

+ 84 - 3
contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js

@@ -38,12 +38,14 @@ App.SliderAppController = Ember.ObjectController.extend({
     if ('RUNNING' === status) {
       actions.pushObject({
         title: 'Freeze',
+        action: 'freeze',
         confirm: true
       });
     }
     if ('FINISHED' !== status) {
       actions.push({
         title: 'Flex',
+        action: 'flex',
         confirm: true
       });
     }
@@ -51,10 +53,12 @@ App.SliderAppController = Ember.ObjectController.extend({
       actions.pushObjects([
         {
           title: 'Thaw',
+          action: 'thaw',
           confirm: false
         },
         {
           title: 'Destroy',
+          action: 'destroy',
           confirm: true
         }
       ]);
@@ -62,7 +66,84 @@ App.SliderAppController = Ember.ObjectController.extend({
     return actions;
   }.property('model.status'),
 
-  quickLinks: function() {
-    return this.get('content').get('quickLinks');
-  }.property('content.quickLinks')
+  /**
+   * Method's name that should be called for model
+   * @type {string}
+   */
+  currentAction: null,
+
+  /**
+   * Try call controller's method with name stored in <code>currentAction</code>
+   * @method tryDoAction
+   */
+  tryDoAction: function() {
+    var currentAction = this.get('currentAction');
+    if (Em.isNone(currentAction)) return;
+    if(Em.typeOf(this[currentAction]) !== 'function') return;
+    this[currentAction]();
+  },
+
+  thaw: Ember.K,
+  freeze: Ember.K,
+  flex: Ember.K,
+
+  /**
+   * Do request to delete current slider's app
+   * @return {$.ajax}
+   * @method destroy
+   */
+  destroy: function() {
+    var self = this;
+    return $.ajax({
+      url: App.get('urlPrefix') + 'apps/' + this.get('model.index'),
+      method: 'DELETE',
+      complete: function() {
+        self.transitionToRoute('slider_apps');
+      }
+    });
+  },
+
+  actions: {
+
+    /**
+     * Handler for "Yes" click in modal popup
+     * @returns {*}
+     * @method modalConfirmed
+     */
+    modalConfirmed: function() {
+      this.tryDoAction();
+      return Bootstrap.ModalManager.close('confirm-modal');
+    },
+
+    /**
+     * Handler for "No" click in modal popup
+     * @returns {*}
+     * @method modalCanceled
+     */
+    modalCanceled: function() {
+      return Bootstrap.ModalManager.close('confirm-modal');
+    },
+
+    /**
+     * Handler for Actions menu elements click
+     * @param {{title: string, action: string, confirm: bool}} option
+     * @method openModal
+     */
+    openModal: function(option) {
+      this.set('currentAction', option.action);
+      if (option.confirm) {
+        Bootstrap.ModalManager.confirm(
+          this,
+          Ember.I18n.t('common.confirmation'),
+          Ember.I18n.t('question.sure'),
+          Ember.I18n.t('yes'),
+          Ember.I18n.t('no')
+        );
+      }
+      else {
+        this.tryDoAction();
+      }
+    }
+  }
+
 });

+ 8 - 0
contrib/views/slider/src/main/resources/ui/app/styles/application.less

@@ -493,4 +493,12 @@ a {
 
 .slider-modal-footer .btn-group .btn + .btn {
   margin-left: -1px;
+}
+
+
+.modal {
+  overflow-y: hidden;
+}
+.modal-backdrop.in {
+  opacity:0;
 }

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

@@ -33,7 +33,7 @@
       <ul class="dropdown-menu">
         {{#each option in controller.availableActions}}
           <li>
-            <a {{action 'openModal' option}}>{{option.title}}</a>
+            <a {{action 'openModal' option target='controller'}}>{{option.title}}</a>
           </li>
         {{/each}}
       </ul>
@@ -45,7 +45,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 controller.quickLinks}}
+          {{#each quickLink in model.quickLinks}}
             <li><a {{bind-attr href="quickLink.url"}} target="_blank">{{quickLink.label}}</a></li>
           {{/each}}
         </ul>

+ 4 - 1
contrib/views/slider/src/main/resources/ui/app/translations.js

@@ -20,6 +20,8 @@
 Em.I18n.translations = {
 
   'ok': 'OK',
+  'yes': 'Yes',
+  'no': 'No',
 
   'common' : {
     'show': 'Show',
@@ -32,7 +34,8 @@ Em.I18n.translations = {
     'quickLinks': "Quick Links",
     'summary': 'Summary',
     'configs': 'Configs',
-    'metrics': 'Metrics'
+    'metrics': 'Metrics',
+    'confirmation': 'Confirmation'
   },
 
   'popup.confirmation.commonHeader': 'Confirmation',

+ 4 - 0
contrib/views/slider/src/main/resources/ui/config.js

@@ -36,6 +36,8 @@ exports.config = {
           'vendor/scripts/common/bs-core.min.js',
           'vendor/scripts/common/bs-nav.min.js',
           'vendor/scripts/common/bs-basic.min.js',
+          'vendor/scripts/common/bs-button.min.js',
+          'vendor/scripts/common/bs-modal.min.js',
           'vendor/scripts/common/ember-i18n-1.4.1.js',
           'vendor/scripts/common/bootstrap.js'
         ]
@@ -81,6 +83,8 @@ exports.config = {
               'vendor/scripts/common/bs-core.min.js',
               'vendor/scripts/common/bs-nav.min.js',
               'vendor/scripts/common/bs-basic.min.js',
+              'vendor/scripts/common/bs-button.min.js',
+              'vendor/scripts/common/bs-modal.min.js',
               'vendor/scripts/common/ember-i18n-1.4.1.js',
               'vendor/scripts/common/bootstrap.js'
             ]

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-button.min.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-modal.min.js


Неке датотеке нису приказане због велике количине промена