Sha256: 97312d40a7fd3b9701b08e78e7e7b70428dfb1dbb1c70aaaca374303b01bc85b

Contents?: true

Size: 1.42 KB

Versions: 8

Compression:

Stored size: 1.42 KB

Contents

_.def("Luca.Router").extends("Backbone.Router").with
  routes:
    "" : "default"

  initialize: (@options)->
    _.extend @, @options

    @routeHandlers = _( @routes ).values()

    # when a route handler is fired, the route:route_name event is triggered by the router
    # unfortunately this doesn't apply to calls to @navigate() so we override Backbone.Router.navigate
    # and trigger an event separately.
    _( @routeHandlers ).each (route_id) =>
      @bind "route:#{ route_id }", ()=>
        @trigger.apply @, ["change:navigation", route_id  ].concat( _( arguments ).flatten() )

  #### Router Functions

  # Intercept calls to Backbone.Router.navigate so that we can at least
  # build a path from the route, even if we don't trigger the route handler
  navigate: (route, triggerRoute=false)->
    Backbone.Router.prototype.navigate.apply @, arguments
    @buildPathFrom( Backbone.history.getFragment() )

  # given a url fragment, construct an argument chain similar to what would be
  # emitted from a normal route:#{ name } event that gets triggered
  # when a route is actually fired.  This is used to trap route changes that happen
  # through calls to @navigate()
  buildPathFrom: (matchedRoute)->
    _(@routes).each (route_id, route)=>
      regex = @_routeToRegExp(route)
      if regex.test(matchedRoute)
        args = @_extractParameters(regex, matchedRoute)
        @trigger.apply @, ["change:navigation", route_id].concat( args )

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
luca-0.9.7 src/components/router.coffee
luca-0.9.65 src/components/router.coffee
luca-0.9.6 src/components/router.coffee
luca-0.9.42 src/components/router.coffee
luca-0.9.4 src/components/router.coffee
luca-0.9.2 src/components/router.coffee
luca-0.9.1 src/components/router.coffee
luca-0.9.0 src/components/router.coffee