issues.coffee | |
---|---|
class IssueController extends Backbone.Router
routes: {
"issues" : "issues",
"issue/:id" : "issue"
},
issues: ->
App.Controllers.Issues.renderIssues()
issue: (id) ->
if App.Collections.Issues.models.length == 0 | |
Fetch collection if user lands directly on #issue/:id without first visiting #issues | App.Collections.Issues.fetch(
success: ->
App.Controllers.Issues.renderIssues()
App.Controllers.Issues.renderPanel(id)
)
else |
Otherwise just render the individual issue | App.Controllers.Issues.renderPanel(id)
renderIssues: ->
issues = new App.Views.IssuesView({collection: App.Collections.Issues})
$('#issues').html(issues.render().el)
renderPanel: (id) ->
view = new App.Views.IssuePanelView({model: App.Collections.Issues.get(id)})
$('article').html(view.render().el)
view.after_render()
App.Controllers.Issues = new IssueController
class Issue extends Backbone.Model
App.Models.Issue = Issue
class Issues extends Backbone.Collection
model: App.Models.Issue,
url: "https://api.github.com/repos/twitter/bootstrap/issues"
App.Collections.Issues = new Issues
class IssueView extends Backbone.View
initialize: ->
_.bindAll(this, 'render')
@model.bind('change', @render) |
Load iCanHaz.js template from script tag in index.html | @template = ich.issue
render: -> |
Pass model attribute to iCanHaz template | content = @template(@model.toJSON())
$(@el).html(content)
return this
App.Views.IssueView = IssueView
class IssuePanelView extends Backbone.View
initialize: ->
_.bindAll(this, 'render')
@model.bind('change', @render)
@template = ich.issuePanel
render: ->
attrs = @model.toJSON()
content = @template(attrs)
$(@el).html(content)
return this
after_render: ->
attrs = @model.toJSON()
markdown = new Markdown.Converter()
$('#body_html').html(markdown.makeHtml(attrs.body))
issue_id = '#issue_' + attrs.id
$('#issues .active').removeClass('active')
$(issue_id).addClass('active') # set active state to sidebar button
App.Views.IssuePanelView = IssuePanelView
class IssuesView extends Backbone.View
initialize: ->
_.bindAll(this, 'render')
@template = ich.issues
if App.Collections.Issues.models.length == 0
@collection.fetch()
@collection.bind('reset', @render)
@collection.bind('add', @render)
render: ->
collection = @collection
issues_html = ""
collection.each((issue) ->
view = new IssueView({ model: issue })
issues_html += view.render().el.innerHTML
)
$(@el).html(issues_html)
if $('#active_issue') |
Set active state to sidebar button if one if set in #active_issue div | issue_id = '#issue_' + $('#active_issue').val()
$('#issues .active').removeClass('active')
$(issue_id).addClass('active')
return this
App.Views.IssuesView = IssuesView
|