Sha256: 0bdbcbb4208446ec9b11cd2c84614ab08a4bc2bb457afa5ec1a8dfea8ac5812b

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

Backbone.Router = (options) ->
  options or (options = {})
  @routes = options.routes if options.routes
  @_bindRoutes()
  @initialize.apply this, arguments

namedParam   = /:([\w\d]+)/g
splatParam   = /\*([\w\d]+)/g
escapeRegExp = /[-[\]{}()+?.,\\^$|#\s]/g
_.extend Backbone.Router::, Backbone.Events,
  initialize: ->
  route: (route, name, callback) ->
    Backbone.history or (Backbone.history = new Backbone.History)
    route = @_routeToRegExp route unless _.isRegExp(route)
    Backbone.history.route route, _.bind((fragment) ->
      args = @_extractParameters(route, fragment)
      callback and callback.apply(this, args)
      @trigger.apply this, [ "route:" + name ].concat(args)
    , this)

  navigate: (fragment, triggerRoute) ->
    Backbone.history.navigate fragment, triggerRoute

  _bindRoutes: ->
    return  unless @routes
    routes = []
    for route of @routes
      routes.unshift [ route, @routes[route] ]
    i = 0
    l = routes.length

    while i < l
      @route routes[i][0],
             routes[i][1],
             this[routes[i][1]]
      i++

  _routeToRegExp: (route) ->
    route  = route.replace escapeRegExp, "\\$&"
    route  = route.replace namedParam  , "([^/]*)"
    route  = route.replace splatParam  , "(.*?)"
    new RegExp("^" + route + "$")

  _extractParameters: (route, fragment) ->
    route.exec(fragment).slice 1

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
laces-0.1.0 templates/app/assets/javascripts/lib/backbone/router.coffee