forked from OpenNeo/impress
nice page to view current user's outfits
This commit is contained in:
parent
88fbc72a46
commit
1207e84804
14 changed files with 663 additions and 514 deletions
|
@ -10,9 +10,19 @@ class OutfitsController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def for_current_user
|
||||
@outfits = user_signed_in? ? current_user.outfits : []
|
||||
render :json => @outfits
|
||||
def index
|
||||
if user_signed_in?
|
||||
@outfits = current_user.outfits.wardrobe_order
|
||||
respond_to do |format|
|
||||
format.html { render }
|
||||
format.json { render :json => @outfits }
|
||||
end
|
||||
else
|
||||
respond_to do |format|
|
||||
format.html { redirect_to login_path(:return_to => request.fullpath) }
|
||||
format.json { render :json => [] }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
|
@ -60,3 +70,4 @@ class OutfitsController < ApplicationController
|
|||
render :json => {:errors => @outfit.errors}, :status => :bad_request
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -3,6 +3,25 @@ module OutfitsHelper
|
|||
hidden_field_tag 'destination', value, :id => nil
|
||||
end
|
||||
|
||||
def link_to_edit_outfit(content_or_outfit, outfit_or_options, options={})
|
||||
if block_given?
|
||||
content = capture_haml(&Proc.new)
|
||||
outfit = content_or_outfit
|
||||
options = outfit_or_options
|
||||
else
|
||||
content = content_or_outfit
|
||||
outfit = outfit_or_options
|
||||
end
|
||||
query = outfit.to_query
|
||||
query << "&outfit=#{outfit.id}" if outfit.user == current_user
|
||||
link_to content, wardrobe_path(:anchor => query), options
|
||||
end
|
||||
|
||||
def outfit_li_for(outfit)
|
||||
class_name = outfit.starred? ? 'starred' : nil
|
||||
content_tag :li, :class => class_name, &Proc.new
|
||||
end
|
||||
|
||||
def pet_attribute_select(name, collection, value=nil)
|
||||
select_tag name,
|
||||
options_from_collection_for_select(collection, :id, :human_name, value)
|
||||
|
@ -13,3 +32,4 @@ module OutfitsHelper
|
|||
text_field_tag 'name', nil, options
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -11,6 +11,8 @@ class Outfit < ActiveRecord::Base
|
|||
|
||||
attr_accessible :name, :pet_state_id, :starred, :worn_and_unworn_item_ids
|
||||
|
||||
scope :wardrobe_order, order('starred DESC', :name)
|
||||
|
||||
def as_json(more_options={})
|
||||
serializable_hash :only => [:id, :name, :pet_state_id, :starred],
|
||||
:methods => [:color_id, :species_id, :worn_and_unworn_item_ids]
|
||||
|
@ -80,3 +82,4 @@ class Outfit < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
@import ../shared/jquery.jgrowl
|
||||
|
||||
@import icon
|
||||
@import star
|
||||
|
||||
$object-padding: 6px
|
||||
$nc-icon-size: 16px
|
||||
|
||||
|
@ -16,14 +19,8 @@ $outfit-header-padding: 24px
|
|||
$outfit-content-width: $sidebar-unit-inner-width - $outfit-thumbnail-size - $outfit-thumbnail-margin - 32px
|
||||
$outfit-content-inner-width: $outfit-content-width - $outfit-header-padding
|
||||
|
||||
=icon
|
||||
bottom: -2px
|
||||
height: 16px
|
||||
position: relative
|
||||
width: 16px
|
||||
|
||||
=outfit
|
||||
//+clearfix
|
||||
+outfit-star-shifted
|
||||
padding: .25em 0
|
||||
//.outfit-thumbnail
|
||||
float: left
|
||||
|
@ -38,9 +35,6 @@ $outfit-content-inner-width: $outfit-content-width - $outfit-header-padding
|
|||
position: absolute
|
||||
top: -$outfit-thumbnail-original-size / 4
|
||||
width: $outfit-thumbnail-original-size
|
||||
//> div
|
||||
float: left
|
||||
width: $outfit-content-width
|
||||
.outfit-delete
|
||||
+reset-awesome-button
|
||||
+opacity(.5)
|
||||
|
@ -55,23 +49,6 @@ $outfit-content-inner-width: $outfit-content-width - $outfit-header-padding
|
|||
header
|
||||
display: block
|
||||
padding-left: $outfit-header-padding
|
||||
.outfit-star
|
||||
+icon
|
||||
background:
|
||||
image: image-url("unstarred.png")
|
||||
position: left top
|
||||
repeat: no-repeat
|
||||
cursor: pointer
|
||||
display: block
|
||||
float: left
|
||||
margin-left: -24px
|
||||
/* makes it not take up inline space
|
||||
&.starred .outfit-star
|
||||
background-image: image-url("star.png")
|
||||
&.loading .outfit-star
|
||||
background-image: image-url("loading.gif")
|
||||
&.loading.active .outfit-star
|
||||
background-image: image-url("loading_current_outfit.gif")
|
||||
h4
|
||||
cursor: pointer
|
||||
display: inline
|
||||
|
@ -506,3 +483,4 @@ body.outfits-edit
|
|||
#save-outfit-wrapper.shared-outfit
|
||||
#current-outfit-permalink, #current-outfit-url
|
||||
display: inline-block
|
||||
|
||||
|
|
9
app/stylesheets/outfits/_icon.sass
Normal file
9
app/stylesheets/outfits/_icon.sass
Normal file
|
@ -0,0 +1,9 @@
|
|||
$icon-width: 16px
|
||||
$icon-height: 16px
|
||||
|
||||
=icon
|
||||
bottom: -2px
|
||||
height: $icon-height
|
||||
position: relative
|
||||
width: $icon-width
|
||||
|
16
app/stylesheets/outfits/_index.sass
Normal file
16
app/stylesheets/outfits/_index.sass
Normal file
|
@ -0,0 +1,16 @@
|
|||
@import star
|
||||
|
||||
body.outfits-index
|
||||
#outfits
|
||||
list-style: none
|
||||
|
||||
li
|
||||
+outfit-star
|
||||
|
||||
h4
|
||||
display: inline
|
||||
|
||||
.outfit-edit-link
|
||||
font-size: 85%
|
||||
margin-left: 1em
|
||||
|
27
app/stylesheets/outfits/_star.sass
Normal file
27
app/stylesheets/outfits/_star.sass
Normal file
|
@ -0,0 +1,27 @@
|
|||
@import icon
|
||||
|
||||
=outfit-star
|
||||
.outfit-star
|
||||
+icon
|
||||
background:
|
||||
image: image-url("unstarred.png")
|
||||
position: left top
|
||||
repeat: no-repeat
|
||||
cursor: pointer
|
||||
display: block
|
||||
float: left
|
||||
margin-right: $icon-width / 2
|
||||
&.starred .outfit-star
|
||||
background-image: image-url("star.png")
|
||||
&.loading .outfit-star
|
||||
background-image: image-url("loading.gif")
|
||||
&.loading.active .outfit-star
|
||||
background-image: image-url("loading_current_outfit.gif")
|
||||
|
||||
=outfit-star-shifted
|
||||
+outfit-star
|
||||
|
||||
.outfit-star
|
||||
margin-left: -$icon-width * 1.5
|
||||
margin-right: 0
|
||||
|
|
@ -11,8 +11,10 @@
|
|||
@import items/index
|
||||
@import items/show
|
||||
@import outfits/edit
|
||||
@import outfits/index
|
||||
@import outfits/new
|
||||
@import outfits/show
|
||||
@import pets/bulk
|
||||
@import static/terms
|
||||
@import users/top_contributors
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
%span
|
||||
== Hey, #{link_to current_user.name, user_contributions_path(current_user)}!
|
||||
== You have #{current_user.points} points.
|
||||
= link_to 'Outfits', current_user_outfits_path
|
||||
= link_to 'Settings', Openneo::Auth.remote_settings_url
|
||||
= link_to 'Log out', logout_path_with_return_to
|
||||
- else
|
||||
|
@ -64,3 +65,4 @@
|
|||
Images © 2000-2010 Neopets, Inc. All Rights Reserved.
|
||||
Used With Permission
|
||||
= yield(:javascripts)
|
||||
|
||||
|
|
5
app/views/outfits/_outfit.html.haml
Normal file
5
app/views/outfits/_outfit.html.haml
Normal file
|
@ -0,0 +1,5 @@
|
|||
= outfit_li_for(outfit) do
|
||||
.outfit-star
|
||||
%h4= link_to outfit.name, outfit
|
||||
= link_to_edit_outfit '(edit)', outfit, :class => 'outfit-edit-link'
|
||||
|
20
app/views/outfits/index.html.haml
Normal file
20
app/views/outfits/index.html.haml
Normal file
|
@ -0,0 +1,20 @@
|
|||
- title 'Your outfits'
|
||||
%p
|
||||
These are the outfits that you've saved to Dress to Impress so far. To save
|
||||
some more, head to the wardrobe and click Save Outfit in the top right
|
||||
corner.
|
||||
%p
|
||||
The link for each outfit is totally public, so please feel free to share the
|
||||
URL with the whole wide world.
|
||||
- unless @outfits.empty?
|
||||
%ul#outfits= render @outfits
|
||||
- else
|
||||
%p
|
||||
You haven't saved any outfits yet.
|
||||
- succeed ',' do
|
||||
= link_to 'Start at the home page', root_path
|
||||
enter a pet name or choose a color combination, create the outfit of your
|
||||
dreams, and click "Save Outfit" in the top right corner.
|
||||
%p
|
||||
It'll be fantastic. Promise.
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
- title(@outfit.name || "Shared outfit")
|
||||
%a.button#outfit-wardrobe-link{:href => wardrobe_path(:anchor => @outfit.to_query)}
|
||||
Edit a copy
|
||||
= link_to_edit_outfit(@outfit, :class => 'button', :id => 'outfit-wardrobe-link') do
|
||||
Edit
|
||||
- unless @outfit.user == current_user
|
||||
a copy
|
||||
- if @outfit.user_id
|
||||
#outfit-user
|
||||
Created by
|
||||
|
@ -15,3 +17,4 @@
|
|||
var INITIAL_OUTFIT_DATA = #{@outfit.to_json};
|
||||
= include_javascript_libraries :jquery, :swfobject
|
||||
= include_javascripts :show_outfit_package
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ OpenneoImpressItems::Application.routes.draw do |map|
|
|||
resources :outfits, :only => [:show, :create, :update, :destroy]
|
||||
resources :pet_attributes, :only => [:index]
|
||||
|
||||
match '/users/current-user/outfits.json' => 'outfits#for_current_user'
|
||||
match '/users/current-user/outfits' => 'outfits#index', :as => :current_user_outfits
|
||||
|
||||
match '/pets/load' => 'pets#load', :method => :post, :as => :load_pet
|
||||
match '/pets/bulk' => 'pets#bulk', :as => :bulk_pets
|
||||
|
@ -42,3 +42,4 @@ OpenneoImpressItems::Application.routes.draw do |map|
|
|||
|
||||
match '/terms' => 'static#terms', :as => :terms
|
||||
end
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue