summaryrefslogtreecommitdiff
path: root/app/assets/javascripts
diff options
context:
space:
mode:
authormo k <mo.khan@gmail.com>2014-07-02 22:29:12 -0600
committermo k <mo.khan@gmail.com>2014-07-02 22:29:12 -0600
commitab64290da6dabfb212f997eaa9fefe3a63a38d78 (patch)
tree27ae946b9ccc3c530668c9013d8fbd819a21bed0 /app/assets/javascripts
parenta980c3396ab1d7c7ac4227ddb262c72dc7d94287 (diff)
parent524d0159abc5ab5e65e24cac3c0376f41025c8c9 (diff)
Merged in mocheen/cakeside/new-cake (pull request #66)
Create/Destroy cakes using backbone views.
Diffstat (limited to 'app/assets/javascripts')
-rw-r--r--app/assets/javascripts/backbone/models/cake.js.coffee2
-rw-r--r--app/assets/javascripts/backbone/templates/cakes/cake.jst.ejs8
-rw-r--r--app/assets/javascripts/backbone/templates/cakes/delete_modal.jst.ejs24
-rw-r--r--app/assets/javascripts/backbone/templates/cakes/edit.jst.ejs2
-rw-r--r--app/assets/javascripts/backbone/templates/cakes/show.jst.ejs26
-rw-r--r--app/assets/javascripts/backbone/templates/photos/new-modal.jst.ejs2
-rw-r--r--app/assets/javascripts/backbone/views/cakes/cake_view.js.coffee7
-rw-r--r--app/assets/javascripts/backbone/views/cakes/delete_cake_modal_view.js.coffee40
-rw-r--r--app/assets/javascripts/backbone/views/cakes/index_view.js.coffee1
-rw-r--r--app/assets/javascripts/backbone/views/cakes/new_view.js.coffee2
-rw-r--r--app/assets/javascripts/backbone/views/cakes/show_view.js.coffee18
11 files changed, 116 insertions, 16 deletions
diff --git a/app/assets/javascripts/backbone/models/cake.js.coffee b/app/assets/javascripts/backbone/models/cake.js.coffee
index 1b743e6b..9773a20f 100644
--- a/app/assets/javascripts/backbone/models/cake.js.coffee
+++ b/app/assets/javascripts/backbone/models/cake.js.coffee
@@ -16,7 +16,7 @@ class CakeSide.Models.Cake extends Backbone.Model
return "Category can't be blank" unless attributes.category_id
photos: ->
- photos = CakeSide.Application.request('PhotosRepository', @id)
+ CakeSide.Application.request('PhotosRepository', @id)
class CakeSide.Collections.CakesCollection extends Backbone.Collection
model: CakeSide.Models.Cake
diff --git a/app/assets/javascripts/backbone/templates/cakes/cake.jst.ejs b/app/assets/javascripts/backbone/templates/cakes/cake.jst.ejs
index 59a8bdd2..3dfc1cfc 100644
--- a/app/assets/javascripts/backbone/templates/cakes/cake.jst.ejs
+++ b/app/assets/javascripts/backbone/templates/cakes/cake.jst.ejs
@@ -1,11 +1,9 @@
<div class="thumbnail">
- <% if(_.any(photos)) { %>
- <a href="#/cakes/<%= id %>"><img src="<%= photos[0].large_url %>" /></a>
+ <% if(hasImage()) { %>
+ <a href="#/cakes/<%= id %>"><img src="<%= randomPhoto().thumb_url %>" /></a>
<% } %>
<div class="caption">
<h3><a href="#/cakes/<%= id %>"><%= name %></a></h3>
- <p><a href="#/cakes/<%= id %>/edit">(edit)</a></p>
- <p><%= story %></p>
- <span class="badge badge-warning"><i class="icon-comments"> <a href="<%= Routes.creation_path(id) %>#disqus_thread" data-disqus-identifier="c-<%= id %>"></a></i></span>
+ <span class="badge badge-warning"><i class="icon-comments"> <a href="/creations/<%= id %>#disqus_thread" data-disqus-identifier="c-<%= id %>"></a></i></span>
</div>
</div>
diff --git a/app/assets/javascripts/backbone/templates/cakes/delete_modal.jst.ejs b/app/assets/javascripts/backbone/templates/cakes/delete_modal.jst.ejs
new file mode 100644
index 00000000..64f2c21a
--- /dev/null
+++ b/app/assets/javascripts/backbone/templates/cakes/delete_modal.jst.ejs
@@ -0,0 +1,24 @@
+<div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <h2>Are you ABSOLUTELY sure?</h2>
+</div>
+<div class="modal-body">
+ <% if (hasError()) { %>
+ <div class="alert">
+ <button type="button" class="close" data-dismiss="alert">&times</button>
+ <strong>Error!</strong> <%= errorMessage %>
+ </div>
+ <% } %>
+ <p>
+ This action <b>CANNOT</b> be undone.
+ This will permanently delete <b><%= name %></b> photos, and comments.
+ </p>
+ <p>
+ Please type in the name of the repository to confirm.
+ <input id="confirmation-textbox" type="text" class="input-xxlarge" autofocus="" required="" aria-label="Type in the name of the cake to confirm that you want to delete this repository.">
+ </p>
+</div>
+<div class="modal-footer">
+ <a href="#" class="btn" data-dismiss="modal">Cancel</a>
+ <button id="remove-button" type="submit" class="btn btn-danger" disabled="disabled">I understand the consequences, delete this cake</button>
+</div>
diff --git a/app/assets/javascripts/backbone/templates/cakes/edit.jst.ejs b/app/assets/javascripts/backbone/templates/cakes/edit.jst.ejs
index 55bb9847..b62819bf 100644
--- a/app/assets/javascripts/backbone/templates/cakes/edit.jst.ejs
+++ b/app/assets/javascripts/backbone/templates/cakes/edit.jst.ejs
@@ -53,7 +53,7 @@
</div>
</div>
<div class="form-actions">
- <button id='save-button' type="submit" class="btn btn-primary">NEXT STEP</button>
+ <button id='save-button' type="submit" class="btn btn-primary">Save</button>
<a href="#/cakes/<%= cake.id %>" class="btn">Cancel</a>
</div>
</fieldset>
diff --git a/app/assets/javascripts/backbone/templates/cakes/show.jst.ejs b/app/assets/javascripts/backbone/templates/cakes/show.jst.ejs
index 92c261e8..0aa3b0da 100644
--- a/app/assets/javascripts/backbone/templates/cakes/show.jst.ejs
+++ b/app/assets/javascripts/backbone/templates/cakes/show.jst.ejs
@@ -1,9 +1,27 @@
<div class="row">
+ <div class="span12">
+ <p>
+ <a href="#/cakes/<%= id %>/edit" class="btn">
+ <i class="icon-edit"></i> <strong>Edit</strong>
+ </a>
+ <a class="btn add-photo">
+ <i class="icon-plus"></i><strong>Add Photo</strong>
+ </a>
+ <a href="<%= Routes.creation_favorites_path(id) %>" class="btn">
+ <i class="icon-heart"></i> <strong>Fan Club</strong>
+ </a>
+ <a id="remove-cake-button" class="btn btn-danger pull-right">
+ <i class="icon-white icon-remove"></i> <strong>Delete this cake</strong>
+ </a>
+ </p>
+ </div>
+</div>
+<div class="row">
<div class="span6">
- <% if(_.any(photos)) { %>
- <% random_photo = photos[Math.floor(Math.random()*photos.length)]%>
+ <% if (hasImage()) { %>
+ <% random_photo = randomPhoto()%>
<a href="#/cakes/<%= id %>/photos/<%= random_photo.id %>">
- <img class="thumbnail" src="<%= random_photo.large_url %>" alt="<%= name %>" />
+ <img class="thumbnail" src="<%= random_photo.large_url %>" alt="<%= name %>" />
</a>
<% } %>
</div>
@@ -29,7 +47,7 @@
</div>
<div class="row">
<div class="span12">
- <a id="add-photo" class="btn">Add Photo</a>
+ <a class="btn add-photo">Add Photo</a>
<a href="#/cakes/<%= id %>/edit">(edit)</a>
</div>
<div class="span12">
diff --git a/app/assets/javascripts/backbone/templates/photos/new-modal.jst.ejs b/app/assets/javascripts/backbone/templates/photos/new-modal.jst.ejs
index c728331f..9731d94d 100644
--- a/app/assets/javascripts/backbone/templates/photos/new-modal.jst.ejs
+++ b/app/assets/javascripts/backbone/templates/photos/new-modal.jst.ejs
@@ -11,6 +11,6 @@
</form>
</div>
<div class="modal-footer">
- <a href="#" class="btn" data-dismiss="modal">Close</a>
+ <a href="#" class="btn" data-dismiss="modal">Cancel</a>
<button id="upload-photo-button" type="submit" class="btn btn-primary">Upload Photo</button>
</div>
diff --git a/app/assets/javascripts/backbone/views/cakes/cake_view.js.coffee b/app/assets/javascripts/backbone/views/cakes/cake_view.js.coffee
index e22938f7..cd7691de 100644
--- a/app/assets/javascripts/backbone/views/cakes/cake_view.js.coffee
+++ b/app/assets/javascripts/backbone/views/cakes/cake_view.js.coffee
@@ -3,4 +3,9 @@ CakeSide.Views.Cakes ||= {}
class CakeSide.Views.Cakes.CakeView extends Marionette.ItemView
template: JST["backbone/templates/cakes/cake"]
tagName: 'li'
- className: 'span4'
+ className: 'span3'
+ templateHelpers:
+ randomPhoto: ->
+ @photos[Math.floor(Math.random()*@photos.length)]
+ hasImage: ->
+ typeof(@photos) != 'undefined' && _.any(@photos)
diff --git a/app/assets/javascripts/backbone/views/cakes/delete_cake_modal_view.js.coffee b/app/assets/javascripts/backbone/views/cakes/delete_cake_modal_view.js.coffee
new file mode 100644
index 00000000..13208156
--- /dev/null
+++ b/app/assets/javascripts/backbone/views/cakes/delete_cake_modal_view.js.coffee
@@ -0,0 +1,40 @@
+CakeSide.Views.Cakes ||= {}
+
+class CakeSide.Views.Cakes.DeleteCakeModalView extends Marionette.ItemView
+ template: JST["backbone/templates/cakes/delete_modal"]
+ ui:
+ remove_button: "#remove-button"
+ confirmation_textbox: '#confirmation-textbox'
+
+ templateHelpers:
+ hasError: ->
+ typeof(@errorMessage) != "undefined"
+
+ events:
+ "click #remove-button": "remove"
+ 'keyup #confirmation-textbox': 'refreshStatus'
+
+ modelEvents:
+ 'change:errorMessage':'render'
+
+ remove: (e) ->
+ e.preventDefault()
+ e.stopPropagation()
+ @model.unset('errorMessage')
+ @model.destroy(success: @successfullyDeleted, error: @errorDeletingCake)
+
+ successfullyDeleted: =>
+ @closeDialog()
+ window.location.hash = "cakes/"
+
+ errorDeletingCake: (model, response, options) ->
+ model.set('errorMessage', 'Could not delete cake.')
+
+ refreshStatus: ->
+ if @ui.confirmation_textbox.val() == @model.get('name')
+ @ui.remove_button.removeAttr('disabled')
+ else
+ @ui.remove_button.attr('disabled', 'disabled')
+
+ closeDialog: (photo) ->
+ $('#modal').modal('hide')
diff --git a/app/assets/javascripts/backbone/views/cakes/index_view.js.coffee b/app/assets/javascripts/backbone/views/cakes/index_view.js.coffee
index b53f66ab..527ab960 100644
--- a/app/assets/javascripts/backbone/views/cakes/index_view.js.coffee
+++ b/app/assets/javascripts/backbone/views/cakes/index_view.js.coffee
@@ -2,6 +2,7 @@ CakeSide.Views.Cakes ||= {}
class CakeSide.Views.Cakes.NoCakesView extends Marionette.ItemView
template: JST["backbone/templates/cakes/no_cakes"]
+ tagName: 'li'
class CakeSide.Views.Cakes.IndexView extends Marionette.CollectionView
childView: CakeSide.Views.Cakes.CakeView
diff --git a/app/assets/javascripts/backbone/views/cakes/new_view.js.coffee b/app/assets/javascripts/backbone/views/cakes/new_view.js.coffee
index dad8b54e..0b33dd4a 100644
--- a/app/assets/javascripts/backbone/views/cakes/new_view.js.coffee
+++ b/app/assets/javascripts/backbone/views/cakes/new_view.js.coffee
@@ -37,7 +37,7 @@ class CakeSide.Views.Cakes.NewView extends Marionette.ItemView
@$('.tooltip-item').tooltip()
savedSuccessfully: (cake) =>
- window.location.hash = "/cakes/#{cake.id}/photos/new"
+ window.location.hash = "/cakes/#{cake.id}"
couldNotSave: (cake, xhr) =>
@enableSaveButton()
diff --git a/app/assets/javascripts/backbone/views/cakes/show_view.js.coffee b/app/assets/javascripts/backbone/views/cakes/show_view.js.coffee
index 45e0aa67..6d6e968b 100644
--- a/app/assets/javascripts/backbone/views/cakes/show_view.js.coffee
+++ b/app/assets/javascripts/backbone/views/cakes/show_view.js.coffee
@@ -7,13 +7,27 @@ class CakeSide.Views.Cakes.ShowView extends Marionette.CompositeView
childViewContainer: '.thumbnails'
events:
- "click #add-photo": "launchAddPhoto"
+ "click .add-photo": "launchAddPhoto"
+ "click #remove-cake-button": "removeCake"
+
+ templateHelpers:
+ hasImage: ->
+ typeof(@photos) != 'undefined' && _.any(@photos)
+
+ randomPhoto: ->
+ @photos[Math.floor(Math.random()*@photos.length)]
constructor: (options) ->
super(options)
@collection = @model.photos()
launchAddPhoto: ->
- view = new CakeSide.Views.Photos.NewModalView(cake: @model)
+ @displayModal(new CakeSide.Views.Photos.NewModalView(cake: @model))
+
+ removeCake: ->
+ @displayModal(new CakeSide.Views.Cakes.DeleteCakeModalView(model: @model))
+
+ displayModal: (view) ->
$("#modal").html(view.render().el)
$("#modal").modal()
+