{{ page.lead }}
- {{partial "ads"}} -diff --git a/Gruntfile.js b/Gruntfile.js index 34f4c8d..e8ec902 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -37,9 +37,9 @@ module.exports = function (grunt) { files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'], tasks: ['compass:server'] }, - ember_handlebars: { + emberTemplates: { files: '<%= yeoman.app %>/templates/**/*.hbs', - tasks: ['ember_handlebars'] + tasks: ['emberTemplates'] }, markdown: { files: '<%= yeoman.app %>/templates/**/*.md', @@ -309,7 +309,7 @@ module.exports = function (grunt) { server: [ 'compass', 'markdown', - 'ember_handlebars', + 'emberTemplates', 'coffee:dist' ], test: [ @@ -318,21 +318,21 @@ module.exports = function (grunt) { dist: [ 'coffee', 'markdown', - 'ember_handlebars', + 'emberTemplates', 'compass', 'imagemin', 'svgmin', 'htmlmin' ] }, - ember_handlebars: { + emberTemplates: { compile_components: { options: { - processName: function(filename) { - var fromComponent = filename.substring(filename.lastIndexOf('/components/')+1,filename.length); - return fromComponent.substring(0,fromComponent.length-4); + templateName: function(filename) { + return filename.substring(filename.lastIndexOf('/components/')+1,filename.length); }, - namespace: "Ember.TEMPLATES" + templateCompilerPath: 'app/bower_components/ember/ember-template-compiler.js', + handlebarsPath: 'app/bower_components/handlebars/handlebars.js' }, files: { '.tmp/scripts/bs-core.js': '<%= yeoman.app %>/templates/views/item-pane.hbs', @@ -356,11 +356,11 @@ module.exports = function (grunt) { }, compile_showcase: { options: { - processName: function(filename) { - var fromShowcase = filename.substring(filename.lastIndexOf('/showcase/')+1,filename.length) - return fromShowcase.substring(fromShowcase.indexOf('/')+1,fromShowcase.length-4); + templateName: function(filename) { + return filename.substring(filename.lastIndexOf('/showcase/')+1,filename.length).replace('showcase/', ''); }, - namespace: "Ember.TEMPLATES" + templateCompilerPath: 'app/bower_components/ember/ember-template-compiler.js', + handlebarsPath: 'app/bower_components/handlebars/handlebars.js' }, files: { '.tmp/scripts/showcase-templates.js': '<%= yeoman.app %>/templates/showcase/**/*.hbs' @@ -445,7 +445,6 @@ module.exports = function (grunt) { 'concat', 'copy:unminified', 'cssmin', - 'uglify', 'copy:dist', 'rev', 'usemin' diff --git a/app/index.html b/app/index.html index f7f00fe..f2bafc6 100644 --- a/app/index.html +++ b/app/index.html @@ -31,6 +31,7 @@ + diff --git a/app/scripts/components/BsAlertComponent.coffee b/app/scripts/components/BsAlertComponent.coffee index ef5025a..34b3e26 100644 --- a/app/scripts/components/BsAlertComponent.coffee +++ b/app/scripts/components/BsAlertComponent.coffee @@ -23,7 +23,8 @@ Bootstrap.BsAlertComponent = Ember.Component.extend(Bootstrap.TypeSupport, ) dismiss: () -> - Ember.$("##{@elementId}").alert('close') + Ember.run this, () -> + Ember.$("##{@elementId}").alert('close') ) diff --git a/app/scripts/components/BsButtonComponent.coffee b/app/scripts/components/BsButtonComponent.coffee index eae0453..942ba5e 100644 --- a/app/scripts/components/BsButtonComponent.coffee +++ b/app/scripts/components/BsButtonComponent.coffee @@ -6,12 +6,14 @@ Bootstrap.BsButtonComponent = Ember.Component.extend(Bootstrap.TypeSupport, Boot classTypePrefix: 'btn' clickedParam: null block: null - attributeBindings: ['disabled', 'dismiss:data-dismiss', '_type:type', 'style'] + attributeBindings: ['disabled', 'dismiss:data-dismiss', '_type:type', 'style', 'loadingText:data-loading-text', 'failText:data-fail-text', 'successText:data-success-text', 'loading', 'clicked'] _type: 'button' bubbles: true - allowedProperties: ['title', 'type', 'size', 'block', 'disabled', 'clicked', 'dismiss', 'class'] + allowedProperties: ['title', '_type', 'type', 'size', 'block', 'disabled', 'clicked', 'dismiss', 'class', 'loadingText', 'failText', 'successText', 'loading'] icon_active: undefined icon_inactive: undefined + successText: 'Saved!' + failText: 'Failed!' init: -> @_super() @@ -26,7 +28,7 @@ Bootstrap.BsButtonComponent = Ember.Component.extend(Bootstrap.TypeSupport, Boot blockClass: ( -> if @block then "#{@classTypePrefix}-block" else null - ).property('block').cacheable() + ).property('block') click: (evt) -> evt.stopPropagation() unless @get('bubbles') diff --git a/app/scripts/components/BsModalComponent.coffee b/app/scripts/components/BsModalComponent.coffee index e34fa67..731475d 100644 --- a/app/scripts/components/BsModalComponent.coffee +++ b/app/scripts/components/BsModalComponent.coffee @@ -21,6 +21,8 @@ Bootstrap.BsModalComponent = Ember.Component.extend(Ember.Evented, isVis: false fullSizeButtons: false fade: true + allowClose: true + loadingState: null didInsertElement: -> @._super() @@ -49,18 +51,19 @@ Bootstrap.BsModalComponent = Ember.Component.extend(Ember.Evented, show: -> @set 'isVisible', true current = this - setTimeout (-> + Ember.run.later (-> + if current.get('isDestroyed') or current.get('isDestroying') + return current.set 'isVis', true return ), 15 - return hide: -> @set 'isVis', false current = this - @$().one 'webkitTransitionEnd', (e) -> - current.set 'isVisible', false - return + #@$().one 'webkitTransitionEnd', (e) -> + current.set 'isVisible', false + # return false toggle: -> @@ -79,12 +82,9 @@ Bootstrap.BsModalComponent = Ember.Component.extend(Ember.Evented, close: (event) -> @set 'isVis', false - current = this - @$().one 'webkitTransitionEnd', (e) -> - if current.get('manual') then current.destroy() else current.hide() - return - @trigger 'closed' - + current = this + if current.get('manual') then current.destroy() else current.hide() + @trigger 'closed' #Invoked automatically by ember when the view is destroyed, giving us a chance to perform cleanups willDestroyElement: -> @@ -195,6 +195,8 @@ Bootstrap.ModalManager = Ember.Object.create( ) modalComponent.appendTo(controller.namespace.rootElement) + + return modalComponent ) diff --git a/app/scripts/components/BsPopover.coffee b/app/scripts/components/BsPopover.coffee index c66ef4a..e94b4e2 100644 --- a/app/scripts/components/BsPopover.coffee +++ b/app/scripts/components/BsPopover.coffee @@ -108,13 +108,9 @@ Bootstrap.BsPopoverComponent = Ember.Component.extend( @set "html", @get("data.html") or false @set "template", @get("data.template") isnt `undefined` if @get("template") - name = "components/bs-popover/_partial-content-" + @get("tip_id") + name = "components/bs-popover/partial-content-" + @get("tip_id") tpl = @get("data.template") - if typeof tpl is "function" - Ember.TEMPLATES[name] = tpl - else - Ember.TEMPLATES[name] = Ember.Handlebars.compile(tpl) - @set "partialTemplateName", name + @set "partialTemplateName", tpl didInsertElement: -> @$tip = @$() @@ -125,16 +121,17 @@ Bootstrap.BsPopoverComponent = Ember.Component.extend( if @get("data.trigger") is "hover" and @get("data.sticky") @$().on "mouseenter", -> - clearTimeout Bootstrap.TooltipBoxManager.timeout + Ember.run.cancel Bootstrap.TooltipBoxManager.timeout - @$().on "mouseleave", => - Bootstrap.TooltipBoxManager.removeTip @get("tip_id") + # @$().on "mouseleave", => + # Bootstrap.TooltipBoxManager.removeTip @get("tip_id") @$().find("img").load => @afterRender() afterRender: -> - @notifyPropertyChange "content" + Ember.run @, -> + @notifyPropertyChange "content" realPlacement: (-> return null unless @$tip @@ -187,8 +184,10 @@ Bootstrap.BsPopoverComponent = Ember.Component.extend( left: pos.left + pos.width actions: - close: -> - Bootstrap.TooltipBoxManager.removeTip @get("tip_id") + close: (selectedItem) -> + @sendAction "action", selectedItem + Bootstrap.TooltipBoxManager.removeTip @get("tip_id") + ) Ember.Handlebars.helper 'bs-popover', Bootstrap.BsPopoverComponent @@ -229,6 +228,7 @@ template = "" + " {{bs-popover" + " tip_id=pop.tip_id" + " data=pop.data" + + " action=pop.data.action" + " }}" + "{{/each}}" + "{{#each pop in tooltips}}" + @@ -281,6 +281,9 @@ Bootstrap.TooltipBoxManager = Ember.Object.create( return options.data.view.on "willClearRender", -> + pop = self.registeredTips[id] + if pop.eventName is 'manual' + pop.data.removeObserver "show", pop Bootstrap.TooltipBoxManager.removeTip id $("[" + self.attribute + "='" + id + "']").unbind() delete Bootstrap.TooltipBoxManager.registeredTips[id] @@ -353,9 +356,8 @@ Bootstrap.TooltipBoxManager = Ember.Object.create( return timedRemove: (id) -> - self = this - @timeout = setTimeout(-> - self.removeTip id + @timeout = Ember.run.later(@, -> + this.removeTip id return , 100) return @@ -397,47 +399,31 @@ Bootstrap.TooltipBoxManager = Ember.Object.create( #strings and variables are supported!! if path instanceof Object object = Ember.Object.create({}) - for name of path.hash - value = path.hash[name] - type = options.hashTypes[name] - - #set string directrly - if type is "STRING" - object.set name, value - else if type is "ID" - - #is variable to which we can bind - #get context from keywords -> the each helper defines it - p = value.split(".") - keyword = p[0] - o = options.data.keywords[keyword] - unless o - - #no context in keywords, assuming current context - o = this - else - p.removeAt 0 - object._bindings = o unless object._bindings - p.insertAt 0, "_bindings" - p = p.join(".") - object[name] = "" - binding = Ember.Binding.from(p).to(name) - binding.connect object - else - object.set name, value + for name of path + value = path[name] + object.set name, value object ) -Ember.Handlebars.registerHelper "bs-bind-popover", (path) -> - options = arguments[arguments.length - 1] +Ember.HTMLBars._registerHelper "bs-bind-popover", (params, hash, options, env) -> object = this - object = Bootstrap.TooltipBoxManager.helper.call(this, path, object, options) + object = Bootstrap.TooltipBoxManager.helper.call(this, hash, object, options) + if params instanceof Array and params.length > 0 + object = params[0].value() + options = env + else + options = arguments[arguments.length - 1] id = Bootstrap.TooltipBoxManager.registerTip("popover", object, options) new Ember.Handlebars.SafeString(Bootstrap.TooltipBoxManager.attribute + "='" + id + "'") -Ember.Handlebars.registerHelper "bs-bind-tooltip", (path) -> - options = arguments[arguments.length - 1] +Ember.HTMLBars._registerHelper "bs-bind-tooltip", (params, hash, options, env) -> object = this - object = Bootstrap.TooltipBoxManager.helper.call(this, path, object, options) + object = Bootstrap.TooltipBoxManager.helper.call(this, hash, object, options) + if params instanceof Array and params.length > 0 + object = params[0].value() + options = env + else + options = arguments[arguments.length - 1] + id = Bootstrap.TooltipBoxManager.registerTip("tooltip", object, options) new Ember.Handlebars.SafeString(Bootstrap.TooltipBoxManager.attribute + "='" + id + "'") diff --git a/app/scripts/components/BsProgressbarComponent.coffee b/app/scripts/components/BsProgressbarComponent.coffee index 452aa1b..096335d 100644 --- a/app/scripts/components/BsProgressbarComponent.coffee +++ b/app/scripts/components/BsProgressbarComponent.coffee @@ -12,11 +12,11 @@ Bootstrap.BsProgressbarComponent = Ember.Component.extend(Bootstrap.TypeSupport, style: ( -> "width:#{@progress}%;" - ).property('progress').cacheable() + ).property('progress') ariaValueNow: ( -> @progress - ).property('progress').cacheable() + ).property('progress') ) Ember.Handlebars.helper 'bs-progressbar', Bootstrap.BsProgressbarComponent \ No newline at end of file diff --git a/app/scripts/components/Notifications.coffee b/app/scripts/components/Notifications.coffee index d004151..7d8f4e1 100644 --- a/app/scripts/components/Notifications.coffee +++ b/app/scripts/components/Notifications.coffee @@ -84,5 +84,5 @@ Notification(s) are added into the NotificationQueue by the pushNotification fun Bootstrap.Notification = Ember.Object.extend( classType: (-> if @type? then "alert-#{@type}" else null - ).property('type').cacheable() + ).property('type') ) \ No newline at end of file diff --git a/app/scripts/mixins/ItemSelection.coffee b/app/scripts/mixins/ItemSelection.coffee index fc7ba1e..cedf9e7 100644 --- a/app/scripts/mixins/ItemSelection.coffee +++ b/app/scripts/mixins/ItemSelection.coffee @@ -39,7 +39,7 @@ Bootstrap.ItemSelection = Ember.Mixin.create(Bootstrap.ItemValue, Bootstrap.With return false selected is value - ).property('value', 'parentView.selected', 'content.linkTo').cacheable() + ).property('value', 'parentView.selected', 'content.linkTo') ### Handle selection by click event. diff --git a/app/scripts/mixins/ItemValue.coffee b/app/scripts/mixins/ItemValue.coffee index 796400a..504e614 100644 --- a/app/scripts/mixins/ItemValue.coffee +++ b/app/scripts/mixins/ItemValue.coffee @@ -14,5 +14,5 @@ Bootstrap.ItemValue = Ember.Mixin.create( value = @get('content') value - ).property('content').cacheable() + ).property('content') ) \ No newline at end of file diff --git a/app/scripts/mixins/Nav.coffee b/app/scripts/mixins/Nav.coffee index 5cdf4a2..1bd255d 100644 --- a/app/scripts/mixins/Nav.coffee +++ b/app/scripts/mixins/Nav.coffee @@ -9,5 +9,5 @@ Bootstrap.Nav = Ember.Mixin.create( navTypeClass: ( -> if @navType? then "nav-#{@navType}" else null - ).property('navType').cacheable() + ).property('navType') ) \ No newline at end of file diff --git a/app/scripts/mixins/Size.coffee b/app/scripts/mixins/Size.coffee index df7a375..d89dbf1 100644 --- a/app/scripts/mixins/Size.coffee +++ b/app/scripts/mixins/Size.coffee @@ -16,22 +16,22 @@ Bootstrap.SizeSupport = Ember.Mixin.create( extraSmallSizeClass: ( -> pref = @get 'classTypePrefix' if @xs then "#{pref}-xs" else null - ).property('xs').cacheable() + ).property('xs') smallSizeClass: ( -> pref = @get 'classTypePrefix' if @small then "#{pref}-sm" else null - ).property('small').cacheable() + ).property('small') largeSizeClass: ( -> pref = @get 'classTypePrefix' if @large then "#{pref}-lg" else null - ).property('large').cacheable() + ).property('large') sizeClass: ( -> size = @get 'size' pref = @get 'classTypePrefix' if size then "#{pref}-#{size}" else null - ).property('size').cacheable() + ).property('size') ) diff --git a/app/scripts/mixins/Type.coffee b/app/scripts/mixins/Type.coffee index 80f5f2f..215ddf5 100644 --- a/app/scripts/mixins/Type.coffee +++ b/app/scripts/mixins/Type.coffee @@ -13,5 +13,5 @@ Bootstrap.TypeSupport = Ember.Mixin.create( pref = @get 'classTypePrefix' "#{pref}-#{type}" - ).property('type').cacheable() + ).property('type') ) \ No newline at end of file diff --git a/app/scripts/showcase/controllers/ShowComponentsPopoverController.coffee b/app/scripts/showcase/controllers/ShowComponentsPopoverController.coffee index d454cc9..3dfb6d0 100644 --- a/app/scripts/showcase/controllers/ShowComponentsPopoverController.coffee +++ b/app/scripts/showcase/controllers/ShowComponentsPopoverController.coffee @@ -35,11 +35,7 @@ Showcase.ShowComponentsPopoverController = Ember.Controller.extend( templPop: Ember.Object.create firstName: 'numbers' title: 'Popover with Template' - template: 'numbers:
{{ page.lead }}
- {{partial "ads"}} -