diff --git a/app/index.html b/app/index.html index f7f00fe..6a4b328 100644 --- a/app/index.html +++ b/app/index.html @@ -25,6 +25,9 @@ + + +
diff --git a/app/scripts/components/BsBreadcrumbs.coffee b/app/scripts/components/BsBreadcrumbs.coffee index a62eda3..3647d46 100644 --- a/app/scripts/components/BsBreadcrumbs.coffee +++ b/app/scripts/components/BsBreadcrumbs.coffee @@ -32,6 +32,7 @@ Bootstrap.BsBreadcrumbs = Bootstrap.ItemsView.extend(Bootstrap.WithRouter, @get('content').clear() routes = @get('container').lookup 'router:main' + translation = /(.*)Translation$/; routes.get('router.currentHandlerInfos').forEach (route, i, arr) => name = route.name return if name.indexOf('.index') isnt -1 || name is 'application' @@ -40,6 +41,8 @@ Bootstrap.BsBreadcrumbs = Bootstrap.ItemsView.extend(Bootstrap.WithRouter, routeName = route.handler.routeName if route.handler.breadcrumbs?.name displayName = route.handler.breadcrumbs.name + if translation.test(displayName) + displayName = route.handler[displayName.match(translation)[1]] else if @get('nameDictionary')?["#{@dictionaryNamePrefix}.#{routeName}"] displayName = @get('nameDictionary')["#{@dictionaryNamePrefix}.#{routeName}"] else diff --git a/app/templates/showcase/show_components/breadcrumbs.md b/app/templates/showcase/show_components/breadcrumbs.md index acc7cf6..1e21573 100644 --- a/app/templates/showcase/show_components/breadcrumbs.md +++ b/app/templates/showcase/show_components/breadcrumbs.md @@ -24,5 +24,17 @@ SomeRoute = Ember.Route.extend({ breadcrumbs: {name: 'Primary'} ... -}) +}); ``` + + +If you're using [ember-i18n](https://github.com/jamesarosen/ember-i18n) translation library, you can also translate your breadcrumbs with relative ease. You'll have to enable [ember-i18n's properties translation](https://github.com/jamesarosen/ember-i18n#translate-properties-on-any-object) feature for the routes you'd like their names translated and setup breadcrumbs to refernce the translated property's name, like so: + +```javascript +SomeRoute = Ember.Route.extend(Ember.I18n.TranslateableProperties, { + primaryTranslation: "generic.primary", + breadcrumbs: {name: 'primaryTranslation'} + + ... +}); +``` \ No newline at end of file diff --git a/dist/js/bs-badge.min.js b/dist/js/bs-badge.min.js index 1ff34fb..125d3dd 100644 --- a/dist/js/bs-badge.min.js +++ b/dist/js/bs-badge.min.js @@ -1 +1 @@ -!function(){Bootstrap.BsBadgeComponent=Ember.Component.extend(Bootstrap.TypeSupport,{layoutName:"components/bs-badge",tagName:"span",classNames:["badge"],classTypePrefix:"badge"}),Ember.Handlebars.helper("bs-badge",Bootstrap.BsBadgeComponent)}.call(this),this.Ember=this.Ember||{},this.Ember.TEMPLATES=this.Ember.TEMPLATES||{},this.Ember.TEMPLATES["components/bs-badge"]=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,"content",{hash:{},contexts:[b],types:["ID"],hashContexts:g,hashTypes:f,data:e})))}); \ No newline at end of file +(function(){Bootstrap.BsBadgeComponent=Ember.Component.extend(Bootstrap.TypeSupport,{layoutName:"components/bs-badge",tagName:"span",classNames:["badge"],classTypePrefix:"badge"}),Ember.Handlebars.helper("bs-badge",Bootstrap.BsBadgeComponent)}).call(this),this.Ember=this.Ember||{},this.Ember.TEMPLATES=this.Ember.TEMPLATES||{},this.Ember.TEMPLATES["components/bs-badge"]=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,"content",{hash:{},contexts:[b],types:["ID"],hashContexts:g,hashTypes:f,data:e})))}); \ No newline at end of file diff --git a/dist/js/bs-basic.max.js b/dist/js/bs-basic.max.js index 0bd8241..03dcb02 100644 --- a/dist/js/bs-basic.max.js +++ b/dist/js/bs-basic.max.js @@ -43,7 +43,7 @@ } }, click: function(event) { - return this.sendAction('clicked'); + return this.sendAction('clicked', event); }, collapsibleBodyId: (function() { return "" + (this.get('elementId')) + "_body"; diff --git a/dist/js/bs-basic.min.js b/dist/js/bs-basic.min.js index 5e4d6c2..dac028d 100644 --- a/dist/js/bs-basic.min.js +++ b/dist/js/bs-basic.min.js @@ -1 +1 @@ -!function(){Bootstrap.BsWellComponent=Ember.Component.extend({layoutName:"components/bs-well",classNameBindings:["small:well-sm","large:well-lg"],classNames:["well"],click:function(){return this.sendAction("clicked")}}),Ember.Handlebars.helper("bs-well",Bootstrap.BsWellComponent)}.call(this),function(){Bootstrap.BsPageHeaderComponent=Ember.Component.extend({layoutName:"components/bs-page-header",classNames:["page-header"]}),Ember.Handlebars.helper("bs-page-header",Bootstrap.BsPageHeaderComponent)}.call(this),function(){Bootstrap.BsPanelComponent=Ember.Component.extend(Bootstrap.TypeSupport,{layoutName:"components/bs-panel",classNames:["panel"],classTypePrefix:["panel"],classNameBindings:["fade","fade:in"],clicked:null,onClose:null,fade:!0,collapsible:!1,open:!0,actions:{close:function(){return this.sendAction("onClose"),this.$().removeClass("in"),setTimeout(function(){return this.destroy()}.bind(this),250)}},click:function(){return this.sendAction("clicked")},collapsibleBodyId:function(){return""+this.get("elementId")+"_body"}.property("collapsible"),collapsibleBodyLink:function(){return"#"+this.get("elementId")+"_body"}.property("collapsibleBodyId")}),Ember.Handlebars.helper("bs-panel",Bootstrap.BsPanelComponent)}.call(this),this.Ember=this.Ember||{},this.Ember.TEMPLATES=this.Ember.TEMPLATES||{},this.Ember.TEMPLATES["components/bs-page-header"]=Ember.Handlebars.template(function(a,b,c,d,e){function f(a,b){var d,e,f="";return b.buffer.push("\n "),d={},e={},b.buffer.push(k(c._triageMustache.call(a,"sub",{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 g,h,i,j="",k=this.escapeExpression,l=this;return e.buffer.push("\n {{view.content.sub}}\n
'),classNameBindings:[":growl-notification","content.closed","isOpaque"],attributeBindings:["style"],timeoutId:null,isOpaque:!1,init:function(){var a,b=this;return this._super(),a=function(){return b.notifyPropertyChange("style")},this.set("_recomputeStyle",a),$(window).bind("resize",a)},didInsertElement:function(){var a=this;return this.set("timeoutId",setTimeout(function(){return a.send("close")},this.get("parentView.showTime"))),Ember.run.later(this,function(){return this.set("isOpaque",!0)},1)},willDestroyElement:function(){return $(window).unbind("resize",this.get("_recomputeStyle"))},style:function(){var a,b,c,d,e,f,g,h,i,j;return c=this.get("parentView.content").rejectProperty("closed",!0),b=c.indexOf(this.get("content")),j=$(window).height(),g=80,h=320,i=Math.floor(j/g),a=Math.floor(b/i),e=b%i,-1===b?"":(f=e*g,d=a*h,"top: "+f+"px; right: "+d+"px;")}.property("parentView.content.@each.closed"),iconType:function(){var a,b;return b=this.get("content.type"),a={info:"fa-bullhorn",success:"fa-check",warning:"fa-exclamation",danger:"fa-times"},a[b]||""}.property("content.type"),actions:{close:function(){var a=this;return this.set("isOpaque",!1),setTimeout(function(){return a.get("parentView.content").removeObject(a.get("content")),clearTimeout(a.get("timeoutId"))},300)}}})}),Ember.Handlebars.helper("bs-growl-notifications",Bootstrap.GrowlNotifications),Bootstrap.GNM=Bootstrap.GrowlNotificationManager=Ember.Object.create({notifications:Ember.A(),push:function(a,b,c){var d;return c=null!=c?c:c="info",d=Bootstrap.Notification.create({title:a,sub:b,type:c,closed:!1}),this.get("notifications").pushObject(d)}}),Bootstrap.GrowlNotification=Ember.Object.extend()}.call(this); \ No newline at end of file +(function(){Bootstrap.GrowlNotifications=Ember.CollectionView.extend({classNames:["growl-notifications"],contentBinding:"Bootstrap.GNM.notifications",attributeBindings:["style"],showTime:1e4,itemViewClass:Ember.View.extend({classNames:["growl-notification"],template:Ember.Handlebars.compile('\n\n \n\n\n {{view.content.title}}\n\n\n {{view.content.sub}}\n
'),classNameBindings:[":growl-notification","content.closed","isOpaque"],attributeBindings:["style"],timeoutId:null,isOpaque:!1,init:function(){var a,b=this;return this._super(),a=function(){return b.notifyPropertyChange("style")},this.set("_recomputeStyle",a),$(window).bind("resize",a)},didInsertElement:function(){var a=this;return this.set("timeoutId",setTimeout(function(){return a.send("close")},this.get("parentView.showTime"))),Ember.run.later(this,function(){return this.set("isOpaque",!0)},1)},willDestroyElement:function(){return $(window).unbind("resize",this.get("_recomputeStyle"))},style:function(){var a,b,c,d,e,f,g,h,i,j;return c=this.get("parentView.content").rejectProperty("closed",!0),b=c.indexOf(this.get("content")),j=$(window).height(),g=80,h=320,i=Math.floor(j/g),a=Math.floor(b/i),e=b%i,-1===b?"":(f=e*g,d=a*h,"top: "+f+"px; right: "+d+"px;")}.property("parentView.content.@each.closed"),iconType:function(){var a,b;return b=this.get("content.type"),a={info:"fa-bullhorn",success:"fa-check",warning:"fa-exclamation",danger:"fa-times"},a[b]||""}.property("content.type"),actions:{close:function(){var a=this;return this.set("isOpaque",!1),setTimeout(function(){return a.get("parentView.content").removeObject(a.get("content")),clearTimeout(a.get("timeoutId"))},300)}}})}),Ember.Handlebars.helper("bs-growl-notifications",Bootstrap.GrowlNotifications),Bootstrap.GNM=Bootstrap.GrowlNotificationManager=Ember.Object.create({notifications:Ember.A(),push:function(a,b,c){var d;return c=null!=c?c:c="info",d=Bootstrap.Notification.create({title:a,sub:b,type:c,closed:!1}),this.get("notifications").pushObject(d)}}),Bootstrap.GrowlNotification=Ember.Object.extend()}).call(this); \ No newline at end of file diff --git a/dist/js/bs-items-action-bar.min.js b/dist/js/bs-items-action-bar.min.js index c11126b..f1c058b 100644 --- a/dist/js/bs-items-action-bar.min.js +++ b/dist/js/bs-items-action-bar.min.js @@ -1 +1 @@ -!function(){Bootstrap.ItemsActionBar=Ember.CollectionView.extend({classNames:"btn-toolbar",classNameBindings:"rtl:pull-right",role:"toolbar",selectedItems:[],rtl:!1,selection:function(){var a;return a=this.get("selectedItems"),null==a?[]:Array.isArray(a)?a:[a]}.property("selectedItems"),itemViewClass:Ember.CollectionView.extend({tagName:["div"],classNames:["btn-group"],itemViewClass:Ember.View.extend({tagName:"button",classNames:["btn","btn-default"],attributeBindings:["disabled"],template:Ember.Handlebars.compile(" {{#if view.content.transitionTo}} {{link-to view.content.title view.content.transitionTo tagName='div'}} {{else}} {{view.content.title}} {{/if}} "),disabled:function(){var a;return"function"==typeof(a=this.get("content.disabled"))?a(this.get("parentView.parentView.selection")):void 0}.property("parentView.parentView.selection.@each","parentView.parentView.selection"),click:function(){return null!=this.get("content.clickActionName")?this.get("controller").send(this.get("content.clickActionName"),this.get("parentView.parentView.selection")):this.get("content.click")?this.get("content.click")(this.get("parentView.parentView.selection")):void 0}})})}),Ember.Handlebars.helper("bs-items-action-bar",Bootstrap.ItemsActionBar)}.call(this); \ No newline at end of file +(function(){Bootstrap.ItemsActionBar=Ember.CollectionView.extend({classNames:"btn-toolbar",classNameBindings:"rtl:pull-right",role:"toolbar",selectedItems:[],rtl:!1,selection:function(){var a;return a=this.get("selectedItems"),null==a?[]:Array.isArray(a)?a:[a]}.property("selectedItems"),itemViewClass:Ember.CollectionView.extend({tagName:["div"],classNames:["btn-group"],itemViewClass:Ember.View.extend({tagName:"button",classNames:["btn","btn-default"],attributeBindings:["disabled"],template:Ember.Handlebars.compile(" {{#if view.content.transitionTo}} {{link-to view.content.title view.content.transitionTo tagName='div'}} {{else}} {{view.content.title}} {{/if}} "),disabled:function(){var a;return"function"==typeof(a=this.get("content.disabled"))?a(this.get("parentView.parentView.selection")):void 0}.property("parentView.parentView.selection.@each","parentView.parentView.selection"),click:function(){return null!=this.get("content.clickActionName")?this.get("controller").send(this.get("content.clickActionName"),this.get("parentView.parentView.selection")):this.get("content.click")?this.get("content.click")(this.get("parentView.parentView.selection")):void 0}})})}),Ember.Handlebars.helper("bs-items-action-bar",Bootstrap.ItemsActionBar)}).call(this); \ No newline at end of file diff --git a/dist/js/bs-label.min.js b/dist/js/bs-label.min.js index 1e1fef6..318be8b 100644 --- a/dist/js/bs-label.min.js +++ b/dist/js/bs-label.min.js @@ -1 +1 @@ -!function(){Bootstrap.BsLabelComponent=Ember.Component.extend(Bootstrap.TypeSupport,{layoutName:"components/bs-label",tagName:"span",classNames:["label"],classTypePrefix:"label"}),Ember.Handlebars.helper("bs-label",Bootstrap.BsLabelComponent)}.call(this),this.Ember=this.Ember||{},this.Ember.TEMPLATES=this.Ember.TEMPLATES||{},this.Ember.TEMPLATES["components/bs-label"]=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,"content",{hash:{},contexts:[b],types:["ID"],hashContexts:g,hashTypes:f,data:e})))}); \ No newline at end of file +(function(){Bootstrap.BsLabelComponent=Ember.Component.extend(Bootstrap.TypeSupport,{layoutName:"components/bs-label",tagName:"span",classNames:["label"],classTypePrefix:"label"}),Ember.Handlebars.helper("bs-label",Bootstrap.BsLabelComponent)}).call(this),this.Ember=this.Ember||{},this.Ember.TEMPLATES=this.Ember.TEMPLATES||{},this.Ember.TEMPLATES["components/bs-label"]=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,"content",{hash:{},contexts:[b],types:["ID"],hashContexts:g,hashTypes:f,data:e})))}); \ No newline at end of file diff --git a/dist/js/bs-list-group.min.js b/dist/js/bs-list-group.min.js index b706f21..4399d8d 100644 --- a/dist/js/bs-list-group.min.js +++ b/dist/js/bs-list-group.min.js @@ -1 +1 @@ -!function(){Bootstrap.BsListGroupComponent=Bootstrap.ItemsView.extend({tagName:"ul",classNames:["list-group"],itemViewClass:Bootstrap.ItemView.extend(Bootstrap.ItemSelection,{classNames:["list-group-item"],template:Ember.Handlebars.compile('{{#if view.badge}}\n {{bs-badge contentBinding="view.badge"}}\n{{/if}}\n{{#if view.sub}}\n{{view.sub}}
\n{{else}}\n {{view.title}}\n{{/if}}'),badge:function(){var a;return a=this.get("content"),"instance"===Ember.typeOf(a)||Ember.canInvoke(a,"get")?a.get("badge"):null}.property("content"),sub:function(){var a;return a=this.get("content"),"instance"===Ember.typeOf(a)||Ember.canInvoke(a,"get")?a.get("sub"):null}.property("content")})}),Ember.Handlebars.helper("bs-list-group",Bootstrap.BsListGroupComponent)}.call(this); \ No newline at end of file +(function(){Bootstrap.BsListGroupComponent=Bootstrap.ItemsView.extend({tagName:"ul",classNames:["list-group"],itemViewClass:Bootstrap.ItemView.extend(Bootstrap.ItemSelection,{classNames:["list-group-item"],template:Ember.Handlebars.compile('{{#if view.badge}}\n {{bs-badge contentBinding="view.badge"}}\n{{/if}}\n{{#if view.sub}}\n{{view.sub}}
\n{{else}}\n {{view.title}}\n{{/if}}'),badge:function(){var a;return a=this.get("content"),"instance"===Ember.typeOf(a)||Ember.canInvoke(a,"get")?a.get("badge"):null}.property("content"),sub:function(){var a;return a=this.get("content"),"instance"===Ember.typeOf(a)||Ember.canInvoke(a,"get")?a.get("sub"):null}.property("content")})}),Ember.Handlebars.helper("bs-list-group",Bootstrap.BsListGroupComponent)}).call(this); \ No newline at end of file diff --git a/dist/js/bs-modal.max.js b/dist/js/bs-modal.max.js index 04ae00e..5fac158 100644 --- a/dist/js/bs-modal.max.js +++ b/dist/js/bs-modal.max.js @@ -7,6 +7,7 @@ Modal component. Bootstrap.BsModalComponent = Ember.Component.extend(Ember.Evented, { layoutName: 'components/bs-modal', classNames: ['modal'], + classNameBindings: ['fade', 'isVis:in'], attributeBindings: ['role', 'aria-labelledby', 'isAriaHidden:aria-hidden', "ariaLabelledBy:aria-labelledby"], isAriaHidden: (function() { return "" + (this.get('isVisible')); @@ -18,6 +19,9 @@ Modal component. title: null, isVisible: false, manual: false, + isVis: false, + fullSizeButtons: false, + fade: true, didInsertElement: function() { var name; this._super(); @@ -33,11 +37,13 @@ Modal component. } }, becameVisible: function() { + Em.$('body').addClass('modal-open'); if (this.get("backdrop")) { return this.appendBackdrop(); } }, becameHidden: function() { + Em.$('body').removeClass('modal-open'); if (this._backdrop) { return this._backdrop.remove(); } @@ -48,10 +54,21 @@ Modal component. return this._backdrop = Em.$(this.modalBackdrop).appendTo(parentElement); }, show: function() { - return this.set('isVisible', true); + var current; + this.set('isVisible', true); + current = this; + setTimeout((function() { + current.set('isVis', true); + }), 15); }, hide: function() { - return this.set('isVisible', false); + var current; + this.set('isVis', false); + current = this; + this.$().one('webkitTransitionEnd', function(e) { + current.set('isVisible', false); + }); + return false; }, toggle: function() { return this.toggleProperty('isVisible'); @@ -70,15 +87,21 @@ Modal component. } }, close: function(event) { - if (this.get('manual')) { - this.destroy(); - } else { - this.hide(); - } + var current; + this.set('isVis', false); + current = this; + this.$().one('webkitTransitionEnd', function(e) { + if (current.get('manual')) { + current.destroy(); + } else { + current.hide(); + } + }); return this.trigger('closed'); }, willDestroyElement: function() { var name; + Em.$('body').removeClass('modal-open'); this.removeHandlers(); name = this.get('name'); if (name == null) { @@ -137,29 +160,86 @@ Modal component. toggle: function(name) { return this.get(name).toggle(); }, - confirm: function(controller, title, message, confirmButtonTitle, cancelButtonTitle) { + confirm: function(controller, title, message, confirmButtonTitle, confirmButtonEvent, confirmButtonType, cancelButtonTitle, cancelButtonEvent, cancelButtonType, targetObj, fade, fullSizeButtons) { var body, buttons; if (confirmButtonTitle == null) { confirmButtonTitle = "Confirm"; } + if (confirmButtonEvent == null) { + confirmButtonEvent = "modalConfirmed"; + } + if (confirmButtonType == null) { + confirmButtonType = null; + } if (cancelButtonTitle == null) { cancelButtonTitle = "Cancel"; } + if (cancelButtonEvent == null) { + cancelButtonEvent = "modalCanceled"; + } + if (cancelButtonType == null) { + cancelButtonType = null; + } + if (targetObj == null) { + targetObj = controller; + } + if (fade == null) { + fade = true; + } + if (fullSizeButtons == null) { + fullSizeButtons = false; + } body = Ember.View.extend({ template: Ember.Handlebars.compile(message || "Are you sure you would like to perform this action?") }); buttons = [ Ember.Object.create({ title: confirmButtonTitle, - clicked: "modalConfirmed", + clicked: confirmButtonEvent, + type: confirmButtonType, dismiss: 'modal' }), Ember.Object.create({ title: cancelButtonTitle, - clicked: "modalCanceled", + clicked: cancelButtonEvent, + type: cancelButtonType, dismiss: 'modal' }) ]; - return this.open('confirm-modal', title || 'Confirmation required!', body, buttons, controller); + return this.open('confirm-modal', title || 'Confirmation required!', body, buttons, controller, fade, fullSizeButtons, targetObj); + } + }, { + okModal: function(controller, title, message, okButtonTitle, okButtonEvent, okButtonType, targetObj, fade, fullSizeButtons) { + var body, buttons; + if (okButtonTitle == null) { + okButtonTitle = "OK"; + } + if (okButtonEvent == null) { + okButtonEvent = "okModal"; + } + if (okButtonType == null) { + okButtonType = null; + } + if (targetObj == null) { + targetObj = controller; + } + if (fade == null) { + fade = true; + } + if (fullSizeButtons == null) { + fullSizeButtons = false; + } + body = Ember.View.extend({ + template: Ember.Handlebars.compile(message || "Are you sure you would like to perform this action?") + }); + buttons = [ + Ember.Object.create({ + title: okButtonTitle, + clicked: okButtonEvent, + type: okButtonType, + dismiss: 'modal' + }) + ]; + return this.open('ok-modal', title || 'Confirmation required!', body, buttons, controller, fade, fullSizeButtons, targetObj); }, openModal: function(modalView, options) { var instance, rootElement; @@ -170,8 +250,14 @@ Modal component. instance = modalView.create(options); return instance.appendTo(rootElement); }, - open: function(name, title, view, footerButtons, controller) { + open: function(name, title, view, footerButtons, controller, fade, fullSizeButtons, targetObj) { var cl, modalComponent, template; + if (fullSizeButtons == null) { + fullSizeButtons = false; + } + if (targetObj == null) { + targetObj = controller; + } cl = controller.container.lookup('component-lookup:main'); modalComponent = cl.lookupFactory('bs-modal', controller.get('container')).create(); modalComponent.setProperties({ @@ -179,7 +265,9 @@ Modal component. title: title, manual: true, footerButtons: footerButtons, - targetObject: controller + targetObject: targetObj, + fade: fade, + fullSizeButtons: fullSizeButtons }); if (Ember.typeOf(view) === 'string') { template = controller.container.lookup("template:" + view); @@ -217,7 +305,7 @@ this["Ember"]["TEMPLATES"] = this["Ember"]["TEMPLATES"] || {}; this["Ember"]["TEMPLATES"]["components/bs-modal"] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) { this.compilerInfo = [4,'>= 1.0.0']; helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {}; - var buffer = '', stack1, hashTypes, hashContexts, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this; + var buffer = '', stack1, stack2, hashContexts, hashTypes, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this; function program1(depth0,data) { @@ -281,33 +369,47 @@ function program9(depth0,data) { return buffer; } - data.buffer.push("