Replace jQuery animations with CSS animations

This commit is contained in:
Andrew Miner
2015-03-21 19:00:46 -07:00
parent 3d0908c421
commit 9956e64af0
32 changed files with 385 additions and 369 deletions
+65 -12
View File
@@ -5,7 +5,8 @@ Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
views = require '../views'
views = require '../views'
{Event} = require '../constants'
########################################################################################################################
@@ -31,13 +32,31 @@ module.exports = class BaseController extends Backbone.View
options.parent = this
child = new Controller options
child.render()
child.render options
@_children.push child
return child
hide: (args...)->
{$el, callback} = @_resolveShowHideArgs args
$el.addClass 'hideable' unless $el.hasClass 'hideable'
if $el.hasClass('hiding') or $el.hasClass('hidden')
_.defer => callback this
else
$el.one Event.transitionEnd, =>
$el.addClass 'hidden'
$el.removeClass 'hiding'
callback this
$el.addClass 'hiding'
refresh: ->
logger.verbose => "#{this} refreshing"
remove: ->
@hide -> @$el.remove()
routeLinkClick: (event)->
event.preventDefault()
href = $(event.target).attr 'href'
@@ -45,6 +64,23 @@ module.exports = class BaseController extends Backbone.View
logger.info "Re-routing link to internal navigation: #{href}"
router.navigate href, trigger:true
show: (args...)->
{$el, callback} = @_resolveShowHideArgs args
$el.addClass 'hideable' unless $el.hasClass 'hideable'
if $el.hasClass('hiding') or $el.hasClass('hidden')
$el.one Event.transitionEnd, =>
callback this
$el.removeClass 'hiding'
$el.removeClass 'hidden'
else
_.defer => callback this
unrender: ->
@undelegateEvents()
@$el.empty()
# Event Methods ################################################################################
onDidModelChange: ->
@@ -68,7 +104,7 @@ module.exports = class BaseController extends Backbone.View
if newModel?.on?
@listenTo newModel, 'sync', (e)=> @onDidModelSync e
@listenTo newModel, 'change', (e)=> @onDidModelChange e
return true
return newModel
# Property Methods #############################################################################
@@ -77,8 +113,8 @@ module.exports = class BaseController extends Backbone.View
setModel: (newModel)->
return if @model is newModel
return unless @onWillChangeModel @_model, newModel
newModel = @onWillChangeModel @_model, newModel
@_model = newModel
@tryRefresh()
@@ -88,23 +124,27 @@ module.exports = class BaseController extends Backbone.View
return {}
render: (options={})->
options.force ?= false
options.show ?= true
return this unless not @_rendered or options.force
data = (@model?.toHash? and @model.toHash()) or @model or {}
if not @_template?
logger.error => "Default render called for #{@constructor.name} without a template"
return this
data = (@model?.toHash? and @model.toHash()) or @model or {}
logger.verbose => "#{this} rendering with data: #{data}"
$renderedEl = $($(@_template(data))[0])
@onWillRender()
$oldEl = @$el
$newEl = Backbone.$(@_template(data))
if $oldEl
$oldEl.replaceWith $newEl
$newEl.addClass $oldEl.attr 'class'
@hide()
@unrender()
@$el.append $renderedEl.children()
@$el.addClass $renderedEl.attr 'class'
@delegateEvents()
@show() if options.show
@setElement $newEl
@_rendered = true
@onDidRender()
@@ -121,6 +161,19 @@ module.exports = class BaseController extends Backbone.View
if templateName?
@_template = views[templateName]
_resolveShowHideArgs: (args)->
if args.length is 0
return $el:@$el, callback:->
else if args.length is 1
if _.isFunction args[0]
return $el:@$el, callback:args[0]
else
return $el:args[0], callback:->
else if args.length is 2
return $el:args[0], callback:args[1]
else
throw new Error "expected to get 0, 1, or 2 args"
_tryRefresh: ->
return unless @_rendered
@refresh()