ambari-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From onechipore...@apache.org
Subject git commit: AMBARI-5866. Populate actions drop down of Slider App details page. (onechiporenko)
Date Fri, 23 May 2014 11:12:24 GMT
Repository: ambari
Updated Branches:
  refs/heads/trunk 6d9f0d3db -> 88d72aab8


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


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

Branch: refs/heads/trunk
Commit: 88d72aab889f4f1a4d0317996b4ace70ee41a66b
Parents: 6d9f0d3
Author: Oleg Nechiporenko <onechiporenko@apache.org>
Authored: Fri May 23 14:10:26 2014 +0300
Committer: Oleg Nechiporenko <onechiporenko@apache.org>
Committed: Fri May 23 14:10:26 2014 +0300

----------------------------------------------------------------------
 .../ui/app/controllers/slider_app_controller.js | 87 +++++++++++++++++++-
 .../resources/ui/app/styles/application.less    |  8 ++
 .../resources/ui/app/templates/slider_app.hbs   |  4 +-
 .../src/main/resources/ui/app/translations.js   |  5 +-
 .../slider/src/main/resources/ui/config.js      |  4 +
 .../ui/vendor/scripts/common/bs-button.min.js   |  1 +
 .../ui/vendor/scripts/common/bs-modal.min.js    |  1 +
 7 files changed, 104 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/88d72aab/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js
b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js
index 5cc63f6..0652dea 100644
--- a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js
+++ b/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();
+      }
+    }
+  }
+
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/88d72aab/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 ab7ed4c..df425a8 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
@@ -493,4 +493,12 @@ a {
 
 .slider-modal-footer .btn-group .btn + .btn {
   margin-left: -1px;
+}
+
+
+.modal {
+  overflow-y: hidden;
+}
+.modal-backdrop.in {
+  opacity:0;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/88d72aab/contrib/views/slider/src/main/resources/ui/app/templates/slider_app.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/slider_app.hbs
index 27878cd..b8ab969 100644
--- a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app.hbs
+++ b/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>

http://git-wip-us.apache.org/repos/asf/ambari/blob/88d72aab/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 865769d..f9ea183 100644
--- a/contrib/views/slider/src/main/resources/ui/app/translations.js
+++ b/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',

http://git-wip-us.apache.org/repos/asf/ambari/blob/88d72aab/contrib/views/slider/src/main/resources/ui/config.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/config.js b/contrib/views/slider/src/main/resources/ui/config.js
index 60d701b..8ba0087 100755
--- a/contrib/views/slider/src/main/resources/ui/config.js
+++ b/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'
             ]

http://git-wip-us.apache.org/repos/asf/ambari/blob/88d72aab/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-button.min.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-button.min.js
b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-button.min.js
new file mode 100644
index 0000000..cac67e5
--- /dev/null
+++ b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-button.min.js
@@ -0,0 +1 @@
++function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var
b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var
a=this.$element.closest('[data-toggle="buttons"]');if(a.length){var b=this.$element.find("input").prop("checked",!this.$element.hasClass("active")).trigger("change");"radio"===b.prop("type")&&a.find(".active").removeClass("active")}this.$element.toggleClass("active")};var
c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof
c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=functio
 n(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var
c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(window.jQuery),function(){Bootstrap.BsButtonComponent=Ember.Component.extend(Bootstrap.TypeSupport,Bootstrap.SizeSupport,{layoutName:"components/bs-button",tagName:"button",classNames:["btn"],classNameBindings:["blockClass"],classTypePrefix:"btn",clickedParam:null,block:null,attributeBindings:["disabled","dismiss:data-dismiss","_type:type","style"],_type:"button",bubbles:!0,allowedProperties:["title","type","size","block","disabled","clicked","dismiss","class"],icon_active:void
0,icon_inactive:void 0},{init:function(){var a,b,c,d,e,f,g;if(this._super(),null!=this.get("content")&&"instance"===Ember.typeOf(this.get("content")))for(b=this.get("content"),f=this.get("allowedProperties"),d=0,e=f.length;e>d;d++)c=f[d],null!=b[c]&&this.set(c,b[c]);else
null==this.get("title")&&this.set
 ("title",this.get("content"));g=[];for(a in this)null!=a.match(/^data-[\w-]*$/)&&g.push(this.attributeBindings.pushObject(a));return
g},blockClass:function(){return this.block?""+this.classTypePrefix+"-block":null}.property("block").cacheable(),click:function(a){return
this.get("bubbles")||a.stopPropagation(),this.sendAction("clicked",this.get("clickedParam"))},loadingChanged:function(){var
a;return a=null!==this.get("loading")?this.get("loading"):"reset",Ember.$("#"+this.elementId).button(a)}.observes("loading"),icon:function(){return
this.get("isActive")?this.get("icon_active"):this.get("icon_inactive")}.property("isActive")}),Ember.Handlebars.helper("bs-button",Bootstrap.BsButtonComponent)}.call(this),function(){Bootstrap.BsBtnGroup=Bootstrap.ItemsView.extend(Bootstrap.SizeSupport,Bootstrap.ItemsSelection,{classTypePrefix:["btn-group"],classNames:["btn-group"],classNameBindings:["vertical:btn-group-vertical"],itemViewClass:Bootstrap.BsButtonComponent.extend(Bootstrap.ItemValue,Bo
 otstrap.ItemSelection,{init:function(){return this._super(),this.set("icon_active",this.get("parentView.icon_active")),this.set("icon_inactive",this.get("parentView.icon_inactive"))}})}),Ember.Handlebars.helper("bs-btn-group",Bootstrap.BsBtnGroup)}.call(this),function(){Bootstrap.BsBtnToolbarComponent=Ember.Component.extend({layoutName:"components/bs-btn-toolbar",classNames:["btn-toolbar"]}),Ember.Handlebars.helper("bs-btn-toolbar",Bootstrap.BsBtnToolbarComponent)}.call(this),this.Ember=this.Ember||{},this.Ember.TEMPLATES=this.Ember.TEMPLATES||{},this.Ember.TEMPLATES["components/bs-button"]=Ember.Handlebars.template(function(a,b,c,d,e){function
f(a,b){var d,e,f,g,h="";return b.buffer.push("\n    <i "),e={"class":a},f={"class":"STRING"},g={hash:{"class":"icon"},contexts:[],types:[],hashContexts:e,hashTypes:f,data:b},b.buffer.push(l((d=c["bind-attr"]||a["bind-attr"],d?d.call(a,g):k.call(a,"bind-attr",g)))),b.buffer.push("></i>\n"),h}this.compilerInfo=[4,">=
1.0.0"],c=this.merge(c,Embe
 r.Handlebars.helpers),e=e||{};var g,h,i,j="",k=c.helperMissing,l=this.escapeExpression,m=this;return
h={},i={},g=c["if"].call(b,"icon",{hash:{},inverse:m.noop,fn:m.program(1,f,e),contexts:[b],types:["ID"],hashContexts:i,hashTypes:h,data:e}),(g||0===g)&&e.buffer.push(g),e.buffer.push("\n"),h={},i={},e.buffer.push(l(c._triageMustache.call(b,"title",{hash:{},contexts:[b],types:["ID"],hashContexts:i,hashTypes:h,data:e}))),h={},i={},e.buffer.push(l(c._triageMustache.call(b,"yield",{hash:{},contexts:[b],types:["ID"],hashContexts:i,hashTypes:h,data:e}))),j}),this.Ember=this.Ember||{},this.Ember.TEMPLATES=this.Ember.TEMPLATES||{},this.Ember.TEMPLATES["components/bs-btn-toolbar"]=Ember.Handlebars.template(function(a,b,c,d,e){this.compilerInfo=[4,">=
1.0.0"],c=this.merge(c,Ember.Handlebars.helpers),e=e||{};var f,g,h=this.escapeExpression;f={},g={},e.buffer.push(h(c._triageMustache.call(b,"yield",{hash:{},contexts:[b],types:["ID"],hashContexts:g,hashTypes:f,data:e})))});

http://git-wip-us.apache.org/repos/asf/ambari/blob/88d72aab/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-modal.min.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-modal.min.js
b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-modal.min.js
new file mode 100644
index 0000000..c56a0d0
--- /dev/null
+++ b/contrib/views/slider/src/main/resources/ui/vendor/scripts/common/bs-modal.min.js
@@ -0,0 +1 @@
+!function(){Bootstrap.BsModalComponent=Ember.Component.extend(Ember.Evented,{layoutName:"components/bs-modal",classNames:["modal"],attributeBindings:["role","aria-labelledby","isAriaHidden:aria-hidden","ariaLabelledBy:aria-labelledby"],isAriaHidden:function(){return""+this.get("isVisible")}.property("isVisible"),modalBackdrop:'<div
class="modal-backdrop fade in"></div>',role:"dialog",footerViews:[],backdrop:!0,title:null,isVisible:!1,manual:!1,didInsertElement:function(){var
a;return this._super(),this.setupBinders(),a=this.get("name"),Ember.assert("Modal name is
required for modal view "+this.get("elementId"),this.get("name")),null==a&&(a=this.get("elementId")),Bootstrap.ModalManager.add(a,this),this.manual?this.show():void
0},becameVisible:function(){return this.get("backdrop")?this.appendBackdrop():void 0},becameHidden:function(){return
this._backdrop?this._backdrop.remove():void 0},appendBackdrop:function(){var a;return a=this.$().parent(),this._backdrop=Em.$(this.modalBackdrop)
 .appendTo(a)},show:function(){return this.set("isVisible",!0)},hide:function(){return this.set("isVisible",!1)},toggle:function(){return
this.toggleProperty("isVisible")},click:function(a){var b,c;return b=a.target,c=b.getAttribute("data-dismiss"),"modal"===c?this.close():void
0},keyPressed:function(a){return 27===a.keyCode?this.close(a):void 0},close:function(){return
this.get("manual")?this.destroy():this.hide(),this.trigger("closed")},willDestroyElement:function(){var
a;return this.removeHandlers(),a=this.get("name"),null==a&&(a=this.get("elementId")),Bootstrap.ModalManager.remove(a,this),this._backdrop?this._backdrop.remove():void
0},removeHandlers:function(){return jQuery(window.document).unbind("keyup",this._keyUpHandler)},setupBinders:function(){var
a,b=this;return a=function(a){return b.keyPressed(a)},jQuery(window.document).bind("keyup",a),this._keyUpHandler=a}}),Bootstrap.ModalManager=Ember.Object.create({add:function(a,b){return
this.set(a,b)},register:function(a,b){retur
 n this.add(a,b),b.appendTo(b.get("targetObject").namespace.rootElement)},remove:function(a){return
this.set(a,null)},close:function(a){return this.get(a).close()},hide:function(a){return this.get(a).hide()},show:function(a){return
this.get(a).show()},toggle:function(a){return this.get(a).toggle()},confirm:function(a,b,c,d,e){var
f,g;return null==d&&(d="Confirm"),null==e&&(e="Cancel"),f=Ember.View.extend({template:Ember.Handlebars.compile(c||"Are
you sure you would like to perform this action?")}),g=[Ember.Object.create({title:d,clicked:"modalConfirmed",dismiss:"modal"}),Ember.Object.create({title:e,clicked:"modalCanceled",dismiss:"modal"})],this.open("confirm-modal",b||"Confirmation
required!",f,g,a)},openModal:function(a,b){var c,d;return null==b&&(b={}),d=b.rootElement||".ember-application",c=a.create(b),c.appendTo(d)},open:function(a,b,c,d,e){var
f,g,h;return f=e.container.lookup("component-lookup:main"),g=f.lookupFactory("bs-modal",e.get("container")).create(),g.setProperties({n
 ame:a,title:b,manual:!0,footerButtons:d,targetObject:e}),"string"===Ember.typeOf(c)?(h=e.container.lookup("template:"+c),Ember.assert("Template
"+c+" was specified for Modal but template could not be found.",h),h&&g.setProperties({body:Ember.View.extend({template:h,controller:e})})):"class"===Ember.typeOf(c)&&g.setProperties({body:c,controller:e}),g.appendTo(e.namespace.rootElement)}}),Ember.Application.initializer({name:"bs-modal",initialize:function(a){return
a.register("component:bs-modal",Bootstrap.BsModalComponent)}})}.call(this),this.Ember=this.Ember||{},this.Ember.TEMPLATES=this.Ember.TEMPLATES||{},this.Ember.TEMPLATES["components/bs-modal"]=Ember.Handlebars.template(function(a,b,c,d,e){function
f(a,b){var d,e,f,g,h="";return b.buffer.push("\n                    <i "),e={"class":a},f={"class":"STRING"},g={hash:{"class":"titleIconClasses"},contexts:[],types:[],hashContexts:e,hashTypes:f,data:b},b.buffer.push(p((d=c["bind-attr"]||a["bind-attr"],d?d.call(a,g):o.call(a,"bind-attr
 ",g)))),b.buffer.push("></i>\n                "),h}function g(a,b){var d,e,f="";return
b.buffer.push("\n                "),d={},e={},b.buffer.push(p(c.view.call(a,"view.body",{hash:{},contexts:[a],types:["ID"],hashContexts:e,hashTypes:d,data:b}))),b.buffer.push("\n
           "),f}function h(a,b){var d,e,f="";return b.buffer.push("\n                "),d={},e={},b.buffer.push(p(c._triageMustache.call(a,"yield",{hash:{},contexts:[a],types:["ID"],hashContexts:e,hashTypes:d,data:b}))),b.buffer.push("\n
           "),f}function i(a,b){var d,e,f,g,h="";return b.buffer.push("\n                "),e={content:a,targetObjectBinding:a},f={content:"ID",targetObjectBinding:"STRING"},g={hash:{content:"",targetObjectBinding:"view.targetObject"},contexts:[],types:[],hashContexts:e,hashTypes:f,data:b},b.buffer.push(p((d=c["bs-button"]||a["bs-button"],d?d.call(a,g):o.call(a,"bs-button",g)))),b.buffer.push("\n
           "),h}function j(a,b){var d,e,f="";return b.buffer.push("\n                "),d={},
 e={},b.buffer.push(p(c.view.call(a,"",{hash:{},contexts:[a],types:["ID"],hashContexts:e,hashTypes:d,data:b}))),b.buffer.push("\n
           "),f}this.compilerInfo=[4,">= 1.0.0"],c=this.merge(c,Ember.Handlebars.helpers),e=e||{};var
k,l,m,n="",o=c.helperMissing,p=this.escapeExpression,q=this;return e.buffer.push('<div
class="modal-dialog">\n    <div class="modal-content">\n        <div class="modal-header">\n
           <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>\n
           <h4 class="modal-title">\n                '),l={},m={},k=c["if"].call(b,"titleIconClasses",{hash:{},inverse:q.noop,fn:q.program(1,f,e),contexts:[b],types:["ID"],hashContexts:m,hashTypes:l,data:e}),(k||0===k)&&e.buffer.push(k),e.buffer.push("\n
               "),m={unescaped:b},l={unescaped:"STRING"},k=c._triageMustache.call(b,"title",{hash:{unescaped:"true"},contexts:[b],types:["ID"],hashContexts:m,hashTypes:l,data:e}),(k||0===k)&&e.buffer.push(k),e.buffer.push('\n
             </h4>\n        </div>\n        <div class="modal-body">\n 
          '),l={},m={},k=c["if"].call(b,"body",{hash:{},inverse:q.program(5,h,e),fn:q.program(3,g,e),contexts:[b],types:["ID"],hashContexts:m,hashTypes:l,data:e}),(k||0===k)&&e.buffer.push(k),e.buffer.push('\n
       </div>\n        <div class="modal-footer">\n            '),l={},m={},k=c.each.call(b,"footerButtons",{hash:{},inverse:q.noop,fn:q.program(7,i,e),contexts:[b],types:["ID"],hashContexts:m,hashTypes:l,data:e}),(k||0===k)&&e.buffer.push(k),e.buffer.push("\n
           "),l={},m={},k=c.each.call(b,"footerViews",{hash:{},inverse:q.noop,fn:q.program(9,j,e),contexts:[b],types:["ID"],hashContexts:m,hashTypes:l,data:e}),(k||0===k)&&e.buffer.push(k),e.buffer.push("\n
       </div>\n    </div>\n</div>"),n});


Mime
View raw message