diff options
| author | mo k <mo.khan@gmail.com> | 2014-07-02 22:29:12 -0600 |
|---|---|---|
| committer | mo k <mo.khan@gmail.com> | 2014-07-02 22:29:12 -0600 |
| commit | ab64290da6dabfb212f997eaa9fefe3a63a38d78 (patch) | |
| tree | 27ae946b9ccc3c530668c9013d8fbd819a21bed0 /app/assets/javascripts | |
| parent | a980c3396ab1d7c7ac4227ddb262c72dc7d94287 (diff) | |
| parent | 524d0159abc5ab5e65e24cac3c0376f41025c8c9 (diff) | |
Merged in mocheen/cakeside/new-cake (pull request #66)
Create/Destroy cakes using backbone views.
Diffstat (limited to 'app/assets/javascripts')
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">×</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">×</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() + |
