summaryrefslogtreecommitdiff
path: root/app/assets/javascripts
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts')
-rw-r--r--app/assets/javascripts/application.js5
-rw-r--r--app/assets/javascripts/backbone/cake.js.coffee14
-rw-r--r--app/assets/javascripts/backbone/models/.gitkeep0
-rw-r--r--app/assets/javascripts/backbone/models/cake.js.coffee10
-rw-r--r--app/assets/javascripts/backbone/routers/.gitkeep0
-rw-r--r--app/assets/javascripts/backbone/routers/cakes_router.js.coffee31
-rw-r--r--app/assets/javascripts/backbone/templates/.gitkeep0
-rw-r--r--app/assets/javascripts/backbone/templates/cakes/cake.jst.ejs6
-rw-r--r--app/assets/javascripts/backbone/templates/cakes/edit.jst.ejs20
-rw-r--r--app/assets/javascripts/backbone/templates/cakes/index.jst.ejs15
-rw-r--r--app/assets/javascripts/backbone/templates/cakes/new.jst.ejs20
-rw-r--r--app/assets/javascripts/backbone/templates/cakes/show.jst.ejs12
-rw-r--r--app/assets/javascripts/backbone/views/.gitkeep0
-rw-r--r--app/assets/javascripts/backbone/views/cakes/cake_view.js.coffee19
-rw-r--r--app/assets/javascripts/backbone/views/cakes/edit_view.js.coffee24
-rw-r--r--app/assets/javascripts/backbone/views/cakes/index_view.js.coffee20
-rw-r--r--app/assets/javascripts/backbone/views/cakes/new_view.js.coffee37
-rw-r--r--app/assets/javascripts/backbone/views/cakes/show_view.js.coffee8
18 files changed, 241 insertions, 0 deletions
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index 478c48d7..0f80d8ad 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -22,4 +22,9 @@
//= require jquery.embedly
//= require tag-it
//= require bootstrap
+//= require underscore
+//= require backbone
+//= require backbone_rails_sync
+//= require backbone_datalink
+//= require backbone/cake
//= require_tree .
diff --git a/app/assets/javascripts/backbone/cake.js.coffee b/app/assets/javascripts/backbone/cake.js.coffee
new file mode 100644
index 00000000..ef65c9b3
--- /dev/null
+++ b/app/assets/javascripts/backbone/cake.js.coffee
@@ -0,0 +1,14 @@
+#= require_self
+#= require_tree ./templates
+#= require_tree ./models
+#= require_tree ./views
+#= require_tree ./routers
+
+window.Cake =
+ Models: {}
+ Collections: {}
+ Routers: {}
+ Views: {}
+ initialize: (data) ->
+ new Cake.Routers.CakesRouter({ cakes: data.cakes })
+ Backbone.history.start()
diff --git a/app/assets/javascripts/backbone/models/.gitkeep b/app/assets/javascripts/backbone/models/.gitkeep
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/app/assets/javascripts/backbone/models/.gitkeep
diff --git a/app/assets/javascripts/backbone/models/cake.js.coffee b/app/assets/javascripts/backbone/models/cake.js.coffee
new file mode 100644
index 00000000..c11d1611
--- /dev/null
+++ b/app/assets/javascripts/backbone/models/cake.js.coffee
@@ -0,0 +1,10 @@
+class Cake.Models.Cake extends Backbone.Model
+ paramRoot: 'cake'
+
+ defaults:
+ name: null
+ story: null
+
+class Cake.Collections.CakesCollection extends Backbone.Collection
+ model: Cake.Models.Cake
+ url: '/cakes'
diff --git a/app/assets/javascripts/backbone/routers/.gitkeep b/app/assets/javascripts/backbone/routers/.gitkeep
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/app/assets/javascripts/backbone/routers/.gitkeep
diff --git a/app/assets/javascripts/backbone/routers/cakes_router.js.coffee b/app/assets/javascripts/backbone/routers/cakes_router.js.coffee
new file mode 100644
index 00000000..d852df56
--- /dev/null
+++ b/app/assets/javascripts/backbone/routers/cakes_router.js.coffee
@@ -0,0 +1,31 @@
+class Cake.Routers.CakesRouter extends Backbone.Router
+ initialize: (options) ->
+ @cakes = new Cake.Collections.CakesCollection()
+ @cakes.reset options.cakes
+
+ routes:
+ "new" : "newCake"
+ "index" : "index"
+ ":id/edit" : "edit"
+ ":id" : "show"
+ ".*" : "index"
+
+ newCake: ->
+ @view = new Cake.Views.Cakes.NewView(collection: @cakes)
+ $("#cakes").html(@view.render().el)
+
+ index: ->
+ @view = new Cake.Views.Cakes.IndexView(cakes: @cakes)
+ $("#cakes").html(@view.render().el)
+
+ show: (id) ->
+ cake = @cakes.get(id)
+
+ @view = new Cake.Views.Cakes.ShowView(model: cake)
+ $("#cakes").html(@view.render().el)
+
+ edit: (id) ->
+ cake = @cakes.get(id)
+
+ @view = new Cake.Views.Cakes.EditView(model: cake)
+ $("#cakes").html(@view.render().el)
diff --git a/app/assets/javascripts/backbone/templates/.gitkeep b/app/assets/javascripts/backbone/templates/.gitkeep
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/app/assets/javascripts/backbone/templates/.gitkeep
diff --git a/app/assets/javascripts/backbone/templates/cakes/cake.jst.ejs b/app/assets/javascripts/backbone/templates/cakes/cake.jst.ejs
new file mode 100644
index 00000000..cd7c8588
--- /dev/null
+++ b/app/assets/javascripts/backbone/templates/cakes/cake.jst.ejs
@@ -0,0 +1,6 @@
+<td><%= name %></td>
+<td><%= story %></td>
+
+<td><a href="#/<%= id %>">Show</td>
+<td><a href="#/<%= id %>/edit">Edit</td>
+<td><a href="#/<%= id %>/destroy" class="destroy">Destroy</a></td>
diff --git a/app/assets/javascripts/backbone/templates/cakes/edit.jst.ejs b/app/assets/javascripts/backbone/templates/cakes/edit.jst.ejs
new file mode 100644
index 00000000..a8440447
--- /dev/null
+++ b/app/assets/javascripts/backbone/templates/cakes/edit.jst.ejs
@@ -0,0 +1,20 @@
+<h1>Edit cake</h1>
+
+<form id="edit-cake" name="cake">
+ <div class="field">
+ <label for="name"> name:</label>
+ <input type="text" name="name" id="name" value="<%= name %>" >
+ </div>
+
+ <div class="field">
+ <label for="story"> story:</label>
+ <input type="text" name="story" id="story" value="<%= story %>" >
+ </div>
+
+ <div class="actions">
+ <input type="submit" value="Update Cake" />
+ </div>
+
+</form>
+
+<a href="#/index">Back</a> \ No newline at end of file
diff --git a/app/assets/javascripts/backbone/templates/cakes/index.jst.ejs b/app/assets/javascripts/backbone/templates/cakes/index.jst.ejs
new file mode 100644
index 00000000..058ff2e2
--- /dev/null
+++ b/app/assets/javascripts/backbone/templates/cakes/index.jst.ejs
@@ -0,0 +1,15 @@
+<h1>Listing cakes</h1>
+
+<table id="cakes-table">
+ <tr>
+ <th>Name</th>
+ <th>Story</th>
+ <th></th>
+ <th></th>
+ <th></th>
+ </tr>
+</table>
+
+<br/>
+
+<a href="#/new">New Cake</a>
diff --git a/app/assets/javascripts/backbone/templates/cakes/new.jst.ejs b/app/assets/javascripts/backbone/templates/cakes/new.jst.ejs
new file mode 100644
index 00000000..2f4dbd7f
--- /dev/null
+++ b/app/assets/javascripts/backbone/templates/cakes/new.jst.ejs
@@ -0,0 +1,20 @@
+<h1>New cake</h1>
+
+<form id="new-cake" name="cake">
+ <div class="field">
+ <label for="name"> name:</label>
+ <input type="text" name="name" id="name" value="<%= name %>" >
+ </div>
+
+ <div class="field">
+ <label for="story"> story:</label>
+ <input type="text" name="story" id="story" value="<%= story %>" >
+ </div>
+
+ <div class="actions">
+ <input type="submit" value="Create Cake" />
+ </div>
+
+</form>
+
+<a href="#/index">Back</a> \ No newline at end of file
diff --git a/app/assets/javascripts/backbone/templates/cakes/show.jst.ejs b/app/assets/javascripts/backbone/templates/cakes/show.jst.ejs
new file mode 100644
index 00000000..d24b2aef
--- /dev/null
+++ b/app/assets/javascripts/backbone/templates/cakes/show.jst.ejs
@@ -0,0 +1,12 @@
+<p>
+ <b>Name:</b>
+ <%= name %>
+</p>
+
+<p>
+ <b>Story:</b>
+ <%= story %>
+</p>
+
+
+<a href="#/index">Back</a> \ No newline at end of file
diff --git a/app/assets/javascripts/backbone/views/.gitkeep b/app/assets/javascripts/backbone/views/.gitkeep
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/app/assets/javascripts/backbone/views/.gitkeep
diff --git a/app/assets/javascripts/backbone/views/cakes/cake_view.js.coffee b/app/assets/javascripts/backbone/views/cakes/cake_view.js.coffee
new file mode 100644
index 00000000..3a96f5f7
--- /dev/null
+++ b/app/assets/javascripts/backbone/views/cakes/cake_view.js.coffee
@@ -0,0 +1,19 @@
+Cake.Views.Cakes ||= {}
+
+class Cake.Views.Cakes.CakeView extends Backbone.View
+ template: JST["backbone/templates/cakes/cake"]
+
+ events:
+ "click .destroy" : "destroy"
+
+ tagName: "tr"
+
+ destroy: () ->
+ @model.destroy()
+ this.remove()
+
+ return false
+
+ render: ->
+ $(@el).html(@template(@model.toJSON()))
+ return this
diff --git a/app/assets/javascripts/backbone/views/cakes/edit_view.js.coffee b/app/assets/javascripts/backbone/views/cakes/edit_view.js.coffee
new file mode 100644
index 00000000..b29e8613
--- /dev/null
+++ b/app/assets/javascripts/backbone/views/cakes/edit_view.js.coffee
@@ -0,0 +1,24 @@
+Cake.Views.Cakes ||= {}
+
+class Cake.Views.Cakes.EditView extends Backbone.View
+ template : JST["backbone/templates/cakes/edit"]
+
+ events :
+ "submit #edit-cake" : "update"
+
+ update : (e) ->
+ e.preventDefault()
+ e.stopPropagation()
+
+ @model.save(null,
+ success : (cake) =>
+ @model = cake
+ window.location.hash = "/#{@model.id}"
+ )
+
+ render : ->
+ $(@el).html(@template(@model.toJSON() ))
+
+ this.$("form").backboneLink(@model)
+
+ return this
diff --git a/app/assets/javascripts/backbone/views/cakes/index_view.js.coffee b/app/assets/javascripts/backbone/views/cakes/index_view.js.coffee
new file mode 100644
index 00000000..0d67fc63
--- /dev/null
+++ b/app/assets/javascripts/backbone/views/cakes/index_view.js.coffee
@@ -0,0 +1,20 @@
+Cake.Views.Cakes ||= {}
+
+class Cake.Views.Cakes.IndexView extends Backbone.View
+ template: JST["backbone/templates/cakes/index"]
+
+ initialize: () ->
+ @options.cakes.bind('reset', @addAll)
+
+ addAll: () =>
+ @options.cakes.each(@addOne)
+
+ addOne: (cake) =>
+ view = new Cake.Views.Cakes.CakeView({model : cake})
+ @$("tbody").append(view.render().el)
+
+ render: =>
+ $(@el).html(@template(cakes: @options.cakes.toJSON() ))
+ @addAll()
+
+ return this
diff --git a/app/assets/javascripts/backbone/views/cakes/new_view.js.coffee b/app/assets/javascripts/backbone/views/cakes/new_view.js.coffee
new file mode 100644
index 00000000..e43f7f31
--- /dev/null
+++ b/app/assets/javascripts/backbone/views/cakes/new_view.js.coffee
@@ -0,0 +1,37 @@
+Cake.Views.Cakes ||= {}
+
+class Cake.Views.Cakes.NewView extends Backbone.View
+ template: JST["backbone/templates/cakes/new"]
+
+ events:
+ "submit #new-cake": "save"
+
+ constructor: (options) ->
+ super(options)
+ @model = new @collection.model()
+
+ @model.bind("change:errors", () =>
+ this.render()
+ )
+
+ save: (e) ->
+ e.preventDefault()
+ e.stopPropagation()
+
+ @model.unset("errors")
+
+ @collection.create(@model.toJSON(),
+ success: (cake) =>
+ @model = cake
+ window.location.hash = "/#{@model.id}"
+
+ error: (cake, jqXHR) =>
+ @model.set({errors: $.parseJSON(jqXHR.responseText)})
+ )
+
+ render: ->
+ $(@el).html(@template(@model.toJSON() ))
+
+ this.$("form").backboneLink(@model)
+
+ return this
diff --git a/app/assets/javascripts/backbone/views/cakes/show_view.js.coffee b/app/assets/javascripts/backbone/views/cakes/show_view.js.coffee
new file mode 100644
index 00000000..a8c4063d
--- /dev/null
+++ b/app/assets/javascripts/backbone/views/cakes/show_view.js.coffee
@@ -0,0 +1,8 @@
+Cake.Views.Cakes ||= {}
+
+class Cake.Views.Cakes.ShowView extends Backbone.View
+ template: JST["backbone/templates/cakes/show"]
+
+ render: ->
+ $(@el).html(@template(@model.toJSON() ))
+ return this