diff options
| author | mo khan <mo@mokhan.ca> | 2014-06-28 08:47:54 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2014-06-28 08:47:54 -0600 |
| commit | 1587bb47ecff31f5aed1ebe8369ff810ea032888 (patch) | |
| tree | fe52b07f9528e3aa012e9cbdd66f3da718d6df12 | |
| parent | e081f9b2c35e8227c5e99a76e6c5462490feac1a (diff) | |
load up photos in a composite view.
24 files changed, 95 insertions, 76 deletions
diff --git a/app/assets/javascripts/backbone/cake.js.coffee b/app/assets/javascripts/backbone/cake.js.coffee index 8a4c3c84..45af84cc 100644 --- a/app/assets/javascripts/backbone/cake.js.coffee +++ b/app/assets/javascripts/backbone/cake.js.coffee @@ -4,7 +4,7 @@ #= require_tree ./views #= require_tree ./routers -window.Cake = +window.CakeSide = Models: {} Collections: {} Routers: {} @@ -14,18 +14,22 @@ window.Cake = if data.access_token xhr.setRequestHeader "Authorization", "Token token=#{data.access_token}" - Cake.Application = new Marionette.Application() - Cake.Application.addInitializer (options) -> - new Cake.Routers.CakesRouter() - new Cake.Routers.PhotosRouter() + CakeSide.Application = new Marionette.Application() + CakeSide.Application.addInitializer (options) -> + new CakeSide.Routers.CakesRouter() + new CakeSide.Routers.PhotosRouter() - Cake.Application.on 'start', -> + CakeSide.Application.on 'start', -> if Backbone.history Backbone.history.start() - @cakes = new Cake.Collections.CakesCollection() - Cake.Application.reqres.setHandler 'CakeRepository', => + @cakes = new CakeSide.Collections.CakesCollection() + CakeSide.Application.reqres.setHandler 'CakesRepository', => @cakes + CakeSide.Application.reqres.setHandler 'PhotosRepository', (cake_id) => + photos = new CakeSide.Collections.PhotosCollection(cake_id: cake_id) + photos.fetch(reset: true) + photos @cakes.fetch(reset: true).done -> - Cake.Application.start() + CakeSide.Application.start() diff --git a/app/assets/javascripts/backbone/models/cake.js.coffee b/app/assets/javascripts/backbone/models/cake.js.coffee index 347ba02b..5c888d38 100644 --- a/app/assets/javascripts/backbone/models/cake.js.coffee +++ b/app/assets/javascripts/backbone/models/cake.js.coffee @@ -1,4 +1,4 @@ -class Cake.Models.Cake extends Backbone.Model +class CakeSide.Models.Cake extends Backbone.Model paramRoot: 'cake' defaults: @@ -10,6 +10,9 @@ class Cake.Models.Cake extends Backbone.Model return "Name can't be blank" unless attributes.name && attributes.name.trim() return "Category can't be blank" unless attributes.category_id -class Cake.Collections.CakesCollection extends Backbone.Collection - model: Cake.Models.Cake + photos: -> + photos = CakeSide.Application.request('PhotosRepository', @id) + +class CakeSide.Collections.CakesCollection extends Backbone.Collection + model: CakeSide.Models.Cake url: '/api/v1/cakes' diff --git a/app/assets/javascripts/backbone/models/photo.js.coffee b/app/assets/javascripts/backbone/models/photo.js.coffee index 6bf962c5..6e4de338 100644 --- a/app/assets/javascripts/backbone/models/photo.js.coffee +++ b/app/assets/javascripts/backbone/models/photo.js.coffee @@ -1,14 +1,19 @@ -class Cake.Models.Photo extends Backbone.Model +class CakeSide.Models.Photo extends Backbone.Model paramRoot: 'photo' fileAttribute: 'image' defaults: + id: 0 + content_type: null + original_filename: null thumb_url: null large_url: null original_url: null + created_at: null + updated_at: null -class Cake.Collections.PhotosCollection extends Backbone.Collection - model: Cake.Models.Photo +class CakeSide.Collections.PhotosCollection extends Backbone.Collection + model: CakeSide.Models.Photo initialize: (options) -> @url="/api/v1/cakes/#{options.cake_id}/photos" diff --git a/app/assets/javascripts/backbone/routers/cakes_router.js.coffee b/app/assets/javascripts/backbone/routers/cakes_router.js.coffee index 65d2620a..aecc0225 100644 --- a/app/assets/javascripts/backbone/routers/cakes_router.js.coffee +++ b/app/assets/javascripts/backbone/routers/cakes_router.js.coffee @@ -1,4 +1,4 @@ -class Cake.Routers.CakesRouter extends Backbone.Router +class CakeSide.Routers.CakesRouter extends Backbone.Router routes: "new" : "newCake" "index" : "index" @@ -7,20 +7,20 @@ class Cake.Routers.CakesRouter extends Backbone.Router ".*" : "index" index: -> - @view = new Cake.Views.Cakes.IndexView(collection: Cake.Application.request('CakeRepository')) + @view = new CakeSide.Views.Cakes.IndexView(collection: CakeSide.Application.request('CakesRepository')) $("#backbone-content").html(@view.render().el) show: (id) -> - cake = Cake.Application.request('CakeRepository').get(id) - @view = new Cake.Views.Cakes.ShowView(model: cake) + cake = CakeSide.Application.request('CakesRepository').get(id) + @view = new CakeSide.Views.Cakes.ShowView(model: cake) $("#backbone-content").html(@view.render().el) newCake: -> - @view = new Cake.Views.Cakes.NewView(collection: Cake.Application.request('CakeRepository')) + @view = new CakeSide.Views.Cakes.NewView(collection: CakeSide.Application.request('CakesRepository')) $("#backbone-content").html(@view.render().el) edit: (id) -> - cake = Cake.Application.request('CakeRepository').get(id) + cake = CakeSide.Application.request('CakesRepository').get(id) - @view = new Cake.Views.Cakes.EditView(model: cake) + @view = new CakeSide.Views.Cakes.EditView(model: cake) $("#backbone-content").html(@view.render().el) diff --git a/app/assets/javascripts/backbone/routers/photos_router.js.coffee b/app/assets/javascripts/backbone/routers/photos_router.js.coffee index 247378f7..9110b237 100644 --- a/app/assets/javascripts/backbone/routers/photos_router.js.coffee +++ b/app/assets/javascripts/backbone/routers/photos_router.js.coffee @@ -1,4 +1,4 @@ -class Cake.Routers.PhotosRouter extends Backbone.Router +class CakeSide.Routers.PhotosRouter extends Backbone.Router routes: "cakes/:cake_id/photos/new" : "newPhoto" "cakes/:cake_id/photos/index" : "index" @@ -7,23 +7,23 @@ class Cake.Routers.PhotosRouter extends Backbone.Router "cakes/:cake_id/photos/.*" : "index" newPhoto: (cake_id) -> - @photos = new Cake.Collections.PhotosCollection(cake_id: cake_id) - @view = new Cake.Views.Photos.NewView(collection: @photos) + @photos = new CakeSide.Collections.PhotosCollection(cake_id: cake_id) + @view = new CakeSide.Views.Photos.NewView(collection: @photos) $("#backbone-content").html(@view.render().el) index: (cake_id) -> - @photos = new Cake.Collections.PhotosCollection(cake_id: cake_id) - @view = new Cake.Views.Photos.IndexView(photos: @photos) + @photos = new CakeSide.Collections.PhotosCollection(cake_id: cake_id) + @view = new CakeSide.Views.Photos.IndexView(photos: @photos) $("#backbone-content").html(@view.render().el) show: (cake_id, id) -> photo = @photos.get(id) - @view = new Cake.Views.Photos.ShowView(model: photo) + @view = new CakeSide.Views.Photos.ShowView(model: photo) $("#backbone-content").html(@view.render().el) edit: (cake_id, id) -> photo = @photos.get(id) - @view = new Cake.Views.Photos.EditView(model: photo) + @view = new CakeSide.Views.Photos.EditView(model: photo) $("#backbone-content").html(@view.render().el) diff --git a/app/assets/javascripts/backbone/templates/cakes/show.jst.ejs b/app/assets/javascripts/backbone/templates/cakes/show.jst.ejs index f365d5fe..5205ecc2 100644 --- a/app/assets/javascripts/backbone/templates/cakes/show.jst.ejs +++ b/app/assets/javascripts/backbone/templates/cakes/show.jst.ejs @@ -24,14 +24,6 @@ <a href="<%= Routes.creation_photos_path(id) %>">View photos »</a> </div> <div class="span12"> - <ul class="thumbnails"> - <% _.each(photos, function(photo) { %> - <li class="span2"> - <a href="<%= Routes.creation_photo_path(id, photo.id) %>"> - <img src="<%= photo.thumb_url %>" class="thumbnail" /> - </a> - </li> - <% }); %> - </ul> + <ul class="thumbnails"></ul> </div> </div> diff --git a/app/assets/javascripts/backbone/templates/cakes/thumbnail.jst.ejs b/app/assets/javascripts/backbone/templates/cakes/thumbnail.jst.ejs new file mode 100644 index 00000000..c0481e24 --- /dev/null +++ b/app/assets/javascripts/backbone/templates/cakes/thumbnail.jst.ejs @@ -0,0 +1,5 @@ +<li class="span2"> +<a href="<%= Routes.creation_photo_path(cake_id, id) %>"> + <img src="<%= thumb_url %>" class="thumbnail" /> +</a> +</li> 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 7b77c0da..e1364ce4 100644 --- a/app/assets/javascripts/backbone/views/cakes/cake_view.js.coffee +++ b/app/assets/javascripts/backbone/views/cakes/cake_view.js.coffee @@ -1,4 +1,4 @@ -Cake.Views.Cakes ||= {} +CakeSide.Views.Cakes ||= {} -class Cake.Views.Cakes.CakeView extends Marionette.ItemView +class CakeSide.Views.Cakes.CakeView extends Marionette.ItemView template: JST["backbone/templates/cakes/cake"] diff --git a/app/assets/javascripts/backbone/views/cakes/edit_view.js.coffee b/app/assets/javascripts/backbone/views/cakes/edit_view.js.coffee index b29e8613..f92dc5d6 100644 --- a/app/assets/javascripts/backbone/views/cakes/edit_view.js.coffee +++ b/app/assets/javascripts/backbone/views/cakes/edit_view.js.coffee @@ -1,6 +1,6 @@ -Cake.Views.Cakes ||= {} +CakeSide.Views.Cakes ||= {} -class Cake.Views.Cakes.EditView extends Backbone.View +class CakeSide.Views.Cakes.EditView extends Backbone.View template : JST["backbone/templates/cakes/edit"] events : 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 adbea323..a5f755f6 100644 --- a/app/assets/javascripts/backbone/views/cakes/index_view.js.coffee +++ b/app/assets/javascripts/backbone/views/cakes/index_view.js.coffee @@ -1,4 +1,4 @@ -Cake.Views.Cakes ||= {} +CakeSide.Views.Cakes ||= {} -class Cake.Views.Cakes.IndexView extends Marionette.CollectionView - childView: Cake.Views.Cakes.CakeView +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 f8e81b07..4ee2bfd8 100644 --- a/app/assets/javascripts/backbone/views/cakes/new_view.js.coffee +++ b/app/assets/javascripts/backbone/views/cakes/new_view.js.coffee @@ -1,6 +1,6 @@ -Cake.Views.Cakes ||= {} +CakeSide.Views.Cakes ||= {} -class Cake.Views.Cakes.NewView extends Marionette.ItemView +class CakeSide.Views.Cakes.NewView extends Marionette.ItemView template: JST["backbone/templates/cakes/new"] ui: name: "#cake_name" @@ -39,7 +39,7 @@ class Cake.Views.Cakes.NewView extends Marionette.ItemView window.location.hash = "/cakes/#{cake.id}/photos/new" couldNotSave: (cake, xhr) -> - error = new Cake.Views.ErrorView + error = new CakeSide.Views.ErrorView el: @$('form#new-cake'), attributesWithErrors: $.parseJSON(xhr.responseText) error.render() 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 bd2efb37..57d12f07 100644 --- a/app/assets/javascripts/backbone/views/cakes/show_view.js.coffee +++ b/app/assets/javascripts/backbone/views/cakes/show_view.js.coffee @@ -1,20 +1,26 @@ -Cake.Views.Cakes ||= {} +CakeSide.Views.Cakes ||= {} -class Cake.Views.Cakes.ShowView extends Backbone.View +class CakeSide.Views.Cakes.ThumbnailView extends Marionette.ItemView + template: JST['backbone/templates/cakes/thumbnail'] + +class CakeSide.Views.Cakes.ShowView extends Marionette.CompositeView template: JST["backbone/templates/cakes/show"] + childView: CakeSide.Views.Cakes.ThumbnailView + childViewContainer: '.thumbnails' events: "click #add-photo": "launchAddPhoto" constructor: (options) -> super(options) - @model.on('sync', @render) + #@model.on('sync', @render) + @collection = @model.photos() - render: -> - $(@el).html(@template(@model.toJSON())) - return this + #render: -> + #$(@el).html(@template(@model.toJSON())) + #return this launchAddPhoto: -> - view = new Cake.Views.Photos.NewModalView(cake: @model) + view = new CakeSide.Views.Photos.NewModalView(cake: @model) $("#modal").html(view.render().el) $("#modal").modal() diff --git a/app/assets/javascripts/backbone/views/error_view.js.coffee b/app/assets/javascripts/backbone/views/error_view.js.coffee index e2b92874..86f907e0 100644 --- a/app/assets/javascripts/backbone/views/error_view.js.coffee +++ b/app/assets/javascripts/backbone/views/error_view.js.coffee @@ -1,6 +1,6 @@ -Cake.Views.Cakes ||= {} +CakeSide.Views.Cakes ||= {} -class Cake.Views.ErrorView extends Backbone.View +class CakeSide.Views.ErrorView extends Backbone.View initialize: (options) -> @attributesWithErrors = options.attributesWithErrors _.bindAll(@, "clearOldErrors", "renderErrors", "renderError", "fieldFor") diff --git a/app/assets/javascripts/backbone/views/photos/edit_view.js.coffee b/app/assets/javascripts/backbone/views/photos/edit_view.js.coffee index 70df132c..d158b0c8 100644 --- a/app/assets/javascripts/backbone/views/photos/edit_view.js.coffee +++ b/app/assets/javascripts/backbone/views/photos/edit_view.js.coffee @@ -1,6 +1,6 @@ -Cake.Views.Photos ||= {} +CakeSide.Views.Photos ||= {} -class Cake.Views.Photos.EditView extends Backbone.View +class CakeSide.Views.Photos.EditView extends Backbone.View template : JST["backbone/templates/photos/edit"] events : diff --git a/app/assets/javascripts/backbone/views/photos/index_view.js.coffee b/app/assets/javascripts/backbone/views/photos/index_view.js.coffee index 0b9fa24e..06b510d3 100644 --- a/app/assets/javascripts/backbone/views/photos/index_view.js.coffee +++ b/app/assets/javascripts/backbone/views/photos/index_view.js.coffee @@ -1,6 +1,6 @@ -Cake.Views.Photos ||= {} +CakeSide.Views.Photos ||= {} -class Cake.Views.Photos.IndexView extends Backbone.View +class CakeSide.Views.Photos.IndexView extends Backbone.View template: JST["backbone/templates/photos/index"] initialize: () -> @@ -10,7 +10,7 @@ class Cake.Views.Photos.IndexView extends Backbone.View @options.photos.each(@addOne) addOne: (photo) => - view = new Cake.Views.Photos.PhotoView({model : photo}) + view = new CakeSide.Views.Photos.PhotoView({model : photo}) @$("tbody").append(view.render().el) render: => diff --git a/app/assets/javascripts/backbone/views/photos/new_modal_view.js.coffee b/app/assets/javascripts/backbone/views/photos/new_modal_view.js.coffee index c1d838e3..62e8106c 100644 --- a/app/assets/javascripts/backbone/views/photos/new_modal_view.js.coffee +++ b/app/assets/javascripts/backbone/views/photos/new_modal_view.js.coffee @@ -1,6 +1,6 @@ -Cake.Views.Photos ||= {} +CakeSide.Views.Photos ||= {} -class Cake.Views.Photos.NewModalView extends Backbone.View +class CakeSide.Views.Photos.NewModalView extends Backbone.View template: JST["backbone/templates/photos/new-modal"] events: @@ -9,7 +9,7 @@ class Cake.Views.Photos.NewModalView extends Backbone.View constructor: (options) -> super(options) - @collection = new Cake.Collections.PhotosCollection(cake_id: options.cake.id) + @collection = new CakeSide.Collections.PhotosCollection(cake_id: options.cake.id) @model = new @collection.model() @cake = options.cake diff --git a/app/assets/javascripts/backbone/views/photos/new_view.js.coffee b/app/assets/javascripts/backbone/views/photos/new_view.js.coffee index f6651a73..e53f3eaa 100644 --- a/app/assets/javascripts/backbone/views/photos/new_view.js.coffee +++ b/app/assets/javascripts/backbone/views/photos/new_view.js.coffee @@ -1,6 +1,6 @@ -Cake.Views.Photos ||= {} +CakeSide.Views.Photos ||= {} -class Cake.Views.Photos.NewView extends Backbone.View +class CakeSide.Views.Photos.NewView extends Backbone.View template: JST["backbone/templates/photos/new"] events: diff --git a/app/assets/javascripts/backbone/views/photos/photo_view.js.coffee b/app/assets/javascripts/backbone/views/photos/photo_view.js.coffee index a5eb825d..5abbe8e6 100644 --- a/app/assets/javascripts/backbone/views/photos/photo_view.js.coffee +++ b/app/assets/javascripts/backbone/views/photos/photo_view.js.coffee @@ -1,6 +1,6 @@ -Cake.Views.Photos ||= {} +CakeSide.Views.Photos ||= {} -class Cake.Views.Photos.PhotoView extends Backbone.View +class CakeSide.Views.Photos.PhotoView extends Backbone.View template: JST["backbone/templates/photos/photo"] events: diff --git a/app/assets/javascripts/backbone/views/photos/show_view.js.coffee b/app/assets/javascripts/backbone/views/photos/show_view.js.coffee index 00d02102..112ce7c0 100644 --- a/app/assets/javascripts/backbone/views/photos/show_view.js.coffee +++ b/app/assets/javascripts/backbone/views/photos/show_view.js.coffee @@ -1,6 +1,6 @@ -Cake.Views.Photos ||= {} +CakeSide.Views.Photos ||= {} -class Cake.Views.Photos.ShowView extends Backbone.View +class CakeSide.Views.Photos.ShowView extends Backbone.View template: JST["backbone/templates/photos/show"] render: -> diff --git a/app/controllers/api/v1/photos_controller.rb b/app/controllers/api/v1/photos_controller.rb index 6a9d12a2..99fae4e1 100644 --- a/app/controllers/api/v1/photos_controller.rb +++ b/app/controllers/api/v1/photos_controller.rb @@ -3,6 +3,10 @@ module Api class PhotosController < ApiController respond_to :json + def index + respond_with(@photos = current_user.creations.find(params[:cake_id]).photos) + end + def create cake_id = params[:cake_id] UploadPhoto.new.run(cake_id, params) diff --git a/app/views/api/v1/photos/_photo.json.jbuilder b/app/views/api/v1/photos/_photo.json.jbuilder index f145b350..98a8c92d 100644 --- a/app/views/api/v1/photos/_photo.json.jbuilder +++ b/app/views/api/v1/photos/_photo.json.jbuilder @@ -2,9 +2,6 @@ json.id photo.id json.cake_id photo.creation_id json.content_type photo.content_type json.original_filename photo.original_filename -json.latitude photo.latitude -json.longitude photo.longitude -json.sha256 photo.sha256 json.thumb_url photo.url_for(:thumb) json.large_url photo.url_for(:large) json.original_url photo.url_for(:original) diff --git a/app/views/api/v1/photos/index.json.jbuilder b/app/views/api/v1/photos/index.json.jbuilder new file mode 100644 index 00000000..e220a35f --- /dev/null +++ b/app/views/api/v1/photos/index.json.jbuilder @@ -0,0 +1,3 @@ +json.array! @photos do |photo| + json.partial! 'photo', photo: photo +end diff --git a/app/views/my/cakes/index.html.erb b/app/views/my/cakes/index.html.erb index 6b5fe73c..4110c521 100644 --- a/app/views/my/cakes/index.html.erb +++ b/app/views/my/cakes/index.html.erb @@ -1,7 +1,7 @@ <%= content_for :javascript do -%> <%= javascript_tag do %> var ALL_TAGS = [ <% ActsAsTaggableOn::Tag.pluck(:name).sort!.each { |item| %> '<%= item %>', <% } %> ]; - Cake.initialize({ access_token: '<%= current_user.authentication_token %>' }); + CakeSide.initialize({ access_token: '<%= current_user.authentication_token %>' }); <% end %> <% end -%> diff --git a/config/routes.rb b/config/routes.rb index bb864448..76efbac7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -47,7 +47,7 @@ Cake::Application.routes.draw do namespace :api, :defaults => { :format => 'json' } do namespace :v1 do resources :cakes, :only => [:index, :show, :create, :update] do - resources :photos, :only => [:create] + resources :photos, :only => [:index, :create] end resources :logins, :only => [:create] end |
