closet lists, round one
This commit is contained in:
parent
b86ce67c02
commit
358840076c
26 changed files with 581 additions and 200 deletions
2
Gemfile
2
Gemfile
|
@ -35,6 +35,8 @@ gem "character-encodings", "~> 0.4.1", :platforms => :ruby_18
|
|||
|
||||
gem "nokogiri", "~> 1.5.0"
|
||||
|
||||
gem 'sanitize', '~> 2.0.3'
|
||||
|
||||
group :development_async do
|
||||
# async wrappers
|
||||
gem 'eventmachine', :git => 'git://github.com/eventmachine/eventmachine.git'
|
||||
|
|
|
@ -165,9 +165,11 @@ GEM
|
|||
ruby-hmac (0.4.0)
|
||||
rufus-scheduler (2.0.9)
|
||||
tzinfo (>= 0.3.23)
|
||||
sanitize (2.0.3)
|
||||
nokogiri (< 1.6, >= 1.4.4)
|
||||
sinatra (1.2.6)
|
||||
rack (~> 1.1)
|
||||
tilt (>= 1.2.2, < 2.0)
|
||||
tilt (< 2.0, >= 1.2.2)
|
||||
swf_converter (0.0.3)
|
||||
thor (0.14.6)
|
||||
tilt (1.3.2)
|
||||
|
@ -215,6 +217,7 @@ DEPENDENCIES
|
|||
resque-scheduler (~> 2.0.0.d)
|
||||
right_aws (~> 2.1.0)
|
||||
rspec-rails (~> 2.0.0.beta.22)
|
||||
sanitize (~> 2.0.3)
|
||||
swf_converter (~> 0.0.3)
|
||||
whenever (~> 0.6.2)
|
||||
will_paginate (~> 3.0.pre2)
|
||||
|
|
|
@ -14,8 +14,11 @@ class ClosetHangersController < ApplicationController
|
|||
|
||||
def index
|
||||
@user = User.find params[:user_id]
|
||||
@closet_hangers_by_owned = @user.closet_hangers.owned_before_wanted.
|
||||
alphabetical_by_item_name.includes(:item).group_by(&:owned)
|
||||
@closet_lists_by_owned = @user.closet_lists.alphabetical.
|
||||
includes(:hangers => :item).group_by(&:hangers_owned)
|
||||
@unlisted_closet_hangers_by_owned = @user.closet_hangers.unlisted.
|
||||
owned_before_wanted.alphabetical_by_item_name.includes(:item).
|
||||
group_by(&:owned)
|
||||
@public_perspective = params.has_key?(:public) || !user_is?(@user)
|
||||
end
|
||||
|
||||
|
@ -37,7 +40,9 @@ class ClosetHangersController < ApplicationController
|
|||
if @closet_hanger.save
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
flash[:success] = "Success! You #{@closet_hanger.verb(:you)} #{@closet_hanger.quantity} #{@item.name.pluralize}."
|
||||
message = "Success! You #{@closet_hanger.verb(:you)} #{@closet_hanger.quantity} #{@item.name.pluralize}"
|
||||
message << " in the \"#{@closet_hanger.list.name}\" list" if @closet_hanger.list
|
||||
flash[:success] = "#{message}."
|
||||
redirect_back!(@item)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,19 +1,49 @@
|
|||
class ClosetListsController < ApplicationController
|
||||
before_filter :authorize_user!
|
||||
|
||||
def new
|
||||
@closet_list = current_user.closet_lists.build
|
||||
end
|
||||
before_filter :find_closet_list, :only => [:edit, :update, :destroy]
|
||||
|
||||
def create
|
||||
@closet_list = current_user.closet_lists.build params[:closet_list]
|
||||
if @closet_list.save
|
||||
flash[:success] = "Successfully saved \"#{@closet_list.name}\""
|
||||
redirect_to user_closet_hangers_path(current_user)
|
||||
save_successful!
|
||||
else
|
||||
flash.now[:alert] = "We can't save this list because: #{@closet_list.errors.full_messages.to_sentence}"
|
||||
save_failed!
|
||||
render :action => :new
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
@closet_list.destroy
|
||||
flash[:success] = "Successfully deleted \"#{@closet_list.name}\""
|
||||
redirect_to user_closet_hangers_path(current_user)
|
||||
end
|
||||
|
||||
def new
|
||||
@closet_list = current_user.closet_lists.build params[:closet_list]
|
||||
end
|
||||
|
||||
def update
|
||||
if @closet_list.update_attributes(params[:closet_list])
|
||||
save_successful!
|
||||
else
|
||||
save_failed!
|
||||
render :action => :edit
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def find_closet_list
|
||||
@closet_list = current_user.closet_lists.find params[:id]
|
||||
end
|
||||
|
||||
def save_failed!
|
||||
flash.now[:alert] = "We can't save this list because: #{@closet_list.errors.full_messages.to_sentence}"
|
||||
end
|
||||
|
||||
def save_successful!
|
||||
flash[:success] = "Successfully saved \"#{@closet_list.name}\""
|
||||
redirect_to user_closet_hangers_path(current_user)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -94,6 +94,11 @@ module ApplicationHelper
|
|||
hidden_field_tag :return_to, request.fullpath
|
||||
end
|
||||
|
||||
def secondary_nav(&block)
|
||||
content_for :before_flashes,
|
||||
content_tag(:nav, :id => 'secondary-nav', &block)
|
||||
end
|
||||
|
||||
def show_title_header?
|
||||
params[:controller] != 'items'
|
||||
end
|
||||
|
|
|
@ -13,14 +13,57 @@ module ClosetHangersHelper
|
|||
public_perspective? ? @user.name : :you
|
||||
end
|
||||
|
||||
# Do we have either unlisted hangers that are owned/wanted, or non-empty
|
||||
# owned/wanted lists?
|
||||
def has_hangers?(owned)
|
||||
# If we have unlisted hangers of this type, pass.
|
||||
return true if @unlisted_closet_hangers_by_owned.has_key?(owned)
|
||||
|
||||
# Additionally, if we have no lists of this type, fail.
|
||||
lists = @closet_lists_by_owned[owned]
|
||||
return false unless lists
|
||||
|
||||
# If any of those lists are non-empty, pass.
|
||||
lists.each do |list|
|
||||
return true unless list.hangers.empty?
|
||||
end
|
||||
|
||||
# Otherwise, all of the lists are empty. Fail.
|
||||
return false
|
||||
end
|
||||
|
||||
def has_lists?(owned)
|
||||
@closet_lists_by_owned.has_key?(owned)
|
||||
end
|
||||
|
||||
def link_to_add_closet_list(content, options)
|
||||
owned = options.delete(:owned)
|
||||
path = new_user_closet_list_path current_user,
|
||||
:closet_list => {:hangers_owned => owned}
|
||||
link_to(content, path, options)
|
||||
end
|
||||
|
||||
def public_perspective?
|
||||
@public_perspective
|
||||
end
|
||||
|
||||
def render_closet_hangers(owned)
|
||||
render :partial => 'closet_hanger',
|
||||
:collection => @closet_hangers_by_owned[owned],
|
||||
:locals => {:show_controls => !public_perspective?}
|
||||
def render_closet_lists(lists)
|
||||
if lists
|
||||
render :partial => 'closet_lists/closet_list', :collection => lists,
|
||||
:locals => {:show_controls => !public_perspective?}
|
||||
end
|
||||
end
|
||||
|
||||
def render_unlisted_closet_hangers(owned)
|
||||
if @unlisted_closet_hangers_by_owned[owned]
|
||||
content = render :partial => 'closet_hanger',
|
||||
:collection => @unlisted_closet_hangers_by_owned[owned],
|
||||
:locals => {:show_controls => !public_perspective?}
|
||||
if has_lists?(owned)
|
||||
content = content_tag(:header, content_tag(:h4, '(Not in a list)')) + content
|
||||
end
|
||||
content_tag(:div, content, :class => 'closet-list unlisted')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -1,9 +1,30 @@
|
|||
module ClosetListsHelper
|
||||
def closet_list_delete_confirmation(closet_list)
|
||||
"Are you sure you want to delete \"#{closet_list.name}\"?".tap do |msg|
|
||||
unless closet_list.hangers.empty?
|
||||
msg << " Even if you do, we'll remember that you " +
|
||||
ClosetHanger.verb(closet_list.hangers_owned, :you) +
|
||||
" these items."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def closet_list_description_format(list)
|
||||
md = RDiscount.new(list.description)
|
||||
Sanitize.clean(md.to_html, Sanitize::Config::BASIC).html_safe
|
||||
end
|
||||
|
||||
def hangers_owned_options
|
||||
@hangers_owned_options ||= [true, false].map do |owned|
|
||||
verb = ClosetHanger.verb(:i, owned)
|
||||
["items I #{verb}", owned]
|
||||
end
|
||||
end
|
||||
|
||||
def render_sorted_hangers(list, show_controls)
|
||||
render :partial => 'closet_hanger',
|
||||
:collection => list.hangers.sort { |x,y| x.item.name <=> y.item.name },
|
||||
:locals => {:show_controls => show_controls}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ class ClosetHanger < ActiveRecord::Base
|
|||
belongs_to :list, :class_name => 'ClosetList'
|
||||
belongs_to :user
|
||||
|
||||
attr_accessible :owned, :quantity
|
||||
attr_accessible :list_id, :owned, :quantity
|
||||
|
||||
validates :item_id, :uniqueness => {:scope => [:user_id, :owned]}
|
||||
validates :quantity, :numericality => {:greater_than => 0}
|
||||
|
@ -11,11 +11,13 @@ class ClosetHanger < ActiveRecord::Base
|
|||
|
||||
scope :alphabetical_by_item_name, joins(:item).order(Item.arel_table[:name])
|
||||
scope :owned_before_wanted, order(arel_table[:owned].desc)
|
||||
scope :unlisted, where(:list_id => nil)
|
||||
|
||||
before_validation :set_owned_by_list
|
||||
|
||||
def set_owned_by_list
|
||||
self.owned = list.hangers_owned if list?
|
||||
self.owned = list.hangers_owned if list_id?
|
||||
true
|
||||
end
|
||||
|
||||
def verb(subject=:someone)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
class ClosetList < ActiveRecord::Base
|
||||
belongs_to :user
|
||||
has_many :hangers, :class_name => 'ClosetHanger'
|
||||
has_many :hangers, :class_name => 'ClosetHanger', :foreign_key => 'list_id',
|
||||
:dependent => :nullify
|
||||
|
||||
attr_accessible :description, :hangers_owned, :name
|
||||
|
||||
|
@ -8,6 +9,8 @@ class ClosetList < ActiveRecord::Base
|
|||
validates :user, :presence => true
|
||||
validates :hangers_owned, :inclusion => {:in => [true, false], :message => "can't be blank"}
|
||||
|
||||
scope :alphabetical, order(:name)
|
||||
|
||||
after_save :sync_hangers_owned!
|
||||
|
||||
def sync_hangers_owned!
|
||||
|
|
|
@ -93,9 +93,6 @@ a.button, input[type=submit], button
|
|||
&.loud
|
||||
+loud-awesome-button
|
||||
|
||||
a.button
|
||||
+arrowed-awesome-button
|
||||
|
||||
ul.buttons
|
||||
margin-bottom: 1em
|
||||
li
|
||||
|
|
|
@ -1,21 +1,16 @@
|
|||
@import "partials/context_button"
|
||||
@import "partials/icon"
|
||||
@import "partials/secondary_nav"
|
||||
|
||||
body.closet_hangers-index
|
||||
+secondary-nav
|
||||
|
||||
#title
|
||||
float: left
|
||||
margin-bottom: 0
|
||||
|
||||
.flash
|
||||
clear: both
|
||||
|
||||
#import-link, #closet-hangers-items-search
|
||||
margin-top: .75em
|
||||
|
||||
#import-link
|
||||
+awesome-button
|
||||
+loud-awesome-button-color
|
||||
margin-left: 2em
|
||||
|
||||
#closet-hangers-items-search
|
||||
float: right
|
||||
|
@ -101,35 +96,87 @@ body.closet_hangers-index
|
|||
form
|
||||
display: none
|
||||
|
||||
header
|
||||
border-bottom: 1px solid $soft-border-color
|
||||
display: block
|
||||
margin-bottom: .25em
|
||||
padding: .25em 0
|
||||
position: relative
|
||||
|
||||
h3
|
||||
font-size: 250%
|
||||
margin: 0
|
||||
|
||||
span.show, span.hide
|
||||
color: $soft-text-color
|
||||
display: none
|
||||
font-size: 85%
|
||||
position: absolute
|
||||
right: 1em
|
||||
bottom: 0
|
||||
|
||||
&:hover
|
||||
span.show, span.hide
|
||||
color: inherit
|
||||
text-decoration: underline
|
||||
.quantity-1
|
||||
display: none
|
||||
|
||||
.closet-hangers-group
|
||||
border-top: 1px solid $module-border-color
|
||||
margin-bottom: 2em
|
||||
padding-bottom: 1em
|
||||
|
||||
> header
|
||||
border-bottom: 1px solid $soft-border-color
|
||||
display: block
|
||||
margin-bottom: .25em
|
||||
padding: .25em 0
|
||||
position: relative
|
||||
|
||||
h3
|
||||
font-size: 250%
|
||||
margin: 0
|
||||
|
||||
.add-closet-list
|
||||
+awesome-button
|
||||
bottom: 50%
|
||||
margin-bottom: -1em
|
||||
position: absolute
|
||||
right: 1em
|
||||
|
||||
&:active
|
||||
margin-bottom: -1.1em
|
||||
top: auto
|
||||
|
||||
span.show, span.hide
|
||||
color: $soft-text-color
|
||||
display: none
|
||||
font-size: 85%
|
||||
left: 1em
|
||||
position: absolute
|
||||
top: 1em
|
||||
|
||||
&:hover
|
||||
color: inherit
|
||||
text-decoration: underline
|
||||
|
||||
.closet-list
|
||||
border-bottom: 1px solid $soft-border-color
|
||||
padding: .5em 0
|
||||
|
||||
header
|
||||
display: block
|
||||
position: relative
|
||||
|
||||
h4
|
||||
+header-text
|
||||
font-size: 150%
|
||||
margin: 0 auto
|
||||
|
||||
.empty-list
|
||||
font-style: italic
|
||||
|
||||
.closet-list-controls
|
||||
display: none
|
||||
position: absolute
|
||||
right: 1em
|
||||
top: 0
|
||||
|
||||
a, input[type=submit]
|
||||
+context-button
|
||||
|
||||
form
|
||||
display: inline
|
||||
|
||||
&.unlisted
|
||||
h4
|
||||
font-style: italic
|
||||
|
||||
&:hover
|
||||
.closet-list-controls
|
||||
display: block
|
||||
|
||||
&:last-child
|
||||
border-bottom: 0
|
||||
|
||||
&.current-user
|
||||
#closet-hangers
|
||||
.object:hover
|
||||
|
@ -163,6 +210,8 @@ body.closet_hangers-index
|
|||
&.js
|
||||
#closet-hangers
|
||||
.object:hover .quantity
|
||||
display: block
|
||||
|
||||
input[type=number]
|
||||
width: 2.5em
|
||||
|
||||
|
@ -173,8 +222,11 @@ body.closet_hangers-index
|
|||
background: $module-bg-color
|
||||
outline: 1px solid $module-border-color
|
||||
|
||||
.quantity span:after
|
||||
content: "…"
|
||||
.quantity
|
||||
display: block
|
||||
|
||||
span:after
|
||||
content: "…"
|
||||
|
||||
#closet-hangers-contact
|
||||
form
|
||||
|
@ -192,7 +244,8 @@ body.closet_hangers-index
|
|||
|
||||
.closet-hangers-group
|
||||
header
|
||||
cursor: pointer
|
||||
.show, .hide
|
||||
cursor: pointer
|
||||
|
||||
.hide
|
||||
display: block
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
body.closet_lists-new, body.closet_lists-create
|
||||
body.closet_lists-new, body.closet_lists-create, body.closet_lists-edit, body.closet_lists-update
|
||||
+secondary-nav
|
||||
|
||||
form ul.fields
|
||||
list-style: none
|
||||
|
|
|
@ -68,7 +68,7 @@ body.items-show
|
|||
float: right
|
||||
font-size: 85%
|
||||
padding: 1em
|
||||
width: 18em
|
||||
width: 21em
|
||||
|
||||
label, header
|
||||
display: block
|
||||
|
@ -80,6 +80,9 @@ body.items-show
|
|||
form
|
||||
padding: .5em 0
|
||||
|
||||
select
|
||||
width: 9em
|
||||
|
||||
input[type=number]
|
||||
width: 4em
|
||||
|
||||
|
|
12
app/stylesheets/partials/_secondary_nav.sass
Normal file
12
app/stylesheets/partials/_secondary_nav.sass
Normal file
|
@ -0,0 +1,12 @@
|
|||
=secondary-nav
|
||||
#title
|
||||
float: left
|
||||
margin-right: .5em
|
||||
|
||||
.flash
|
||||
clear: both
|
||||
|
||||
#secondary-nav
|
||||
display: block
|
||||
margin-top: .75em
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
- show_controls ||= false # we could do user check here, but may as well do it once
|
||||
.object
|
||||
= render :partial => 'items/item_link', :locals => {:item => closet_hanger.item}
|
||||
.quantity
|
||||
.quantity{:class => "quantity-#{closet_hanger.quantity}"}
|
||||
%span= closet_hanger.quantity
|
||||
- if show_controls
|
||||
= form_for closet_hanger, :url => user_item_closet_hanger_path(current_user, closet_hanger.item), :html => {:class => 'closet-hanger-update'} do |f|
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
- unless public_perspective?
|
||||
- title 'Your Items'
|
||||
- add_body_class 'current-user'
|
||||
- content_for :before_flashes do
|
||||
- secondary_nav do
|
||||
= link_to "Import closet from Neopets", new_closet_page_path, :id => 'import-link'
|
||||
= form_tag items_path, :method => :get, :id => 'closet-hangers-items-search', 'data-current-user-id' => current_user.id do
|
||||
= text_field_tag :q, nil, :placeholder => "Find items to add"
|
||||
|
@ -31,19 +31,18 @@
|
|||
= f.submit "Save"
|
||||
%span#cancel-contact-link cancel
|
||||
|
||||
- unless @closet_hangers_by_owned.empty?
|
||||
%p
|
||||
These are the items you are tracking on Dress to Impress. Hover over an
|
||||
item to remove it from the list or to change the quantity.
|
||||
%p
|
||||
These are the items you are tracking on Dress to Impress. Hover over an
|
||||
item to remove it from the list or to change the quantity.
|
||||
|
||||
%p
|
||||
You can share
|
||||
= link_to "this page", request.fullpath
|
||||
with the world, and they'll be able to see what items you own and want.
|
||||
It's also a good idea to
|
||||
%span.edit-contact-link add your Neopets username
|
||||
so that when other users see your items they will know how to contact you for
|
||||
trades.
|
||||
%p
|
||||
You can share
|
||||
= link_to "this page", request.fullpath
|
||||
with the world, and they'll be able to see what items you own and want.
|
||||
It's also a good idea to
|
||||
%span.edit-contact-link add your Neopets username
|
||||
so that when other users see your items they will know how to contact you for
|
||||
trades.
|
||||
|
||||
#closet-hangers{:class => public_perspective? ? nil : 'current-user'}
|
||||
- [true, false].each do |owned|
|
||||
|
@ -53,14 +52,17 @@
|
|||
Items
|
||||
= closet_hanger_subject
|
||||
%span.verb= closet_hanger_verb(owned)
|
||||
%span.show click to show
|
||||
%span.hide click to hide
|
||||
%span.toggle.show show
|
||||
%span.toggle.hide hide
|
||||
= link_to_add_closet_list 'Add new list', :owned => owned, :class => 'add-closet-list'
|
||||
.closet-hangers-group-content
|
||||
= render_closet_lists(@closet_lists_by_owned[owned])
|
||||
= render_unlisted_closet_hangers(owned)
|
||||
- if public_perspective?
|
||||
- unless @closet_hangers_by_owned[owned]
|
||||
- unless has_hangers?(owned)
|
||||
%p #{@user.name} doesn't seem to #{closet_hanger_verb(owned, false)} anything.
|
||||
- else
|
||||
- unless @closet_hangers_by_owned[owned]
|
||||
- unless has_hangers?(owned)
|
||||
%p
|
||||
You haven't tracked any items you #{closet_hanger_verb(owned)} on
|
||||
Dress to Impress. As you browse the site and create outfits, we'll
|
||||
|
@ -78,7 +80,6 @@
|
|||
= link_to "import your Neopets closet in a few quick steps", new_closet_page_path
|
||||
so why not?
|
||||
%p Have fun!
|
||||
= render_closet_hangers(owned)
|
||||
|
||||
- content_for :stylesheets do
|
||||
= stylesheet_link_tag 'south-street/jquery-ui'
|
||||
|
|
16
app/views/closet_lists/_closet_list.html.haml
Normal file
16
app/views/closet_lists/_closet_list.html.haml
Normal file
|
@ -0,0 +1,16 @@
|
|||
.closet-list
|
||||
%header
|
||||
- if show_controls
|
||||
.closet-list-controls
|
||||
= link_to 'Edit', edit_user_closet_list_path(closet_list.user, closet_list)
|
||||
= form_tag user_closet_list_path(closet_list.user, closet_list), :method => 'delete' do
|
||||
= submit_tag 'Delete', :confirm => closet_list_delete_confirmation(closet_list)
|
||||
%h4= closet_list.name
|
||||
|
||||
- if closet_list.description?
|
||||
= closet_list_description_format closet_list
|
||||
- unless closet_list.hangers.empty?
|
||||
= render_sorted_hangers(closet_list, show_controls)
|
||||
- else
|
||||
%span.empty-list This list is empty.
|
||||
|
|
@ -1,3 +1,6 @@
|
|||
- secondary_nav do
|
||||
= link_to 'Back to Your Items', user_closet_hangers_path(current_user), :class => 'button'
|
||||
|
||||
= form_for [@closet_list.user, @closet_list] do |f|
|
||||
%ul.fields
|
||||
%li
|
||||
|
@ -13,5 +16,13 @@
|
|||
Why are these items in a list? What are your terms for trading?
|
||||
Or you can leave this blank.
|
||||
= f.text_area :description
|
||||
%span.hint
|
||||
We
|
||||
= surround '_' do
|
||||
%em support
|
||||
= surround '**' do
|
||||
%strong Markdown
|
||||
and
|
||||
some HTML.
|
||||
= f.submit 'Save list'
|
||||
|
||||
|
|
3
app/views/closet_lists/edit.html.haml
Normal file
3
app/views/closet_lists/edit.html.haml
Normal file
|
@ -0,0 +1,3 @@
|
|||
- title "Editing list \"#{@closet_list.name}\""
|
||||
= render 'form'
|
||||
|
|
@ -26,6 +26,9 @@
|
|||
= f.hidden_field :owned
|
||||
= f.label :quantity, "How many of these do you #{hanger.verb(:you)}?"
|
||||
= f.number_field :quantity, :min => 0, :required => true
|
||||
- lists = current_user.closet_lists.where(:hangers_owned => hanger.owned).all
|
||||
- unless lists.empty?
|
||||
= f.collection_select :list_id, lists, :id, :name, :include_blank => 'Not in a list'
|
||||
= f.submit "Save"
|
||||
%p= @item.description
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ OpenneoImpressItems::Application.routes.draw do |map|
|
|||
resources :users, :path => 'user', :only => [:update] do
|
||||
resources :contributions, :only => [:index]
|
||||
resources :closet_hangers, :only => [:index], :path => 'closet'
|
||||
resources :closet_lists, :only => [:new, :create], :path => 'closet/lists'
|
||||
resources :closet_lists, :only => [:new, :create, :edit, :update, :destroy], :path => 'closet/lists'
|
||||
|
||||
resources :items, :only => [] do
|
||||
resource :closet_hanger, :only => [:create, :update, :destroy]
|
||||
|
|
|
@ -9,13 +9,13 @@ class CreateClosetLists < ActiveRecord::Migration
|
|||
t.timestamps
|
||||
end
|
||||
|
||||
add_column :closet_hangers, :closet_list_id, :integer
|
||||
add_column :closet_hangers, :list_id, :integer
|
||||
end
|
||||
|
||||
def self.down
|
||||
drop_table :closet_lists
|
||||
|
||||
remove_column :closet_hangers, :closet_list_id
|
||||
remove_column :closet_hangers, :list_id
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -26,8 +26,8 @@ ActiveRecord::Schema.define(:version => 20110726231143) do
|
|||
t.integer "quantity"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.boolean "owned", :default => true, :null => false
|
||||
t.integer "closet_list_id"
|
||||
t.boolean "owned", :default => true, :null => false
|
||||
t.integer "list_id"
|
||||
end
|
||||
|
||||
create_table "closet_lists", :force => true do |t|
|
||||
|
|
|
@ -13,8 +13,10 @@
|
|||
label: el.find('span.verb').text(),
|
||||
owned: (el.attr('data-owned') == 'true')
|
||||
};
|
||||
}).find('header').click(function () {
|
||||
$(this).parent().toggleClass('hidden');
|
||||
});
|
||||
|
||||
$('div.closet-hangers-group span.toggle').live('click', function () {
|
||||
$(this).closest('.closet-hangers-group').toggleClass('hidden');
|
||||
});
|
||||
|
||||
/*
|
||||
|
@ -78,7 +80,9 @@
|
|||
var input = form.children("input[type=number]");
|
||||
if(input.hasChanged()) {
|
||||
var objectWrapper = form.closest(".object").addClass("loading");
|
||||
var span = objectWrapper.find("span").text(input.val());
|
||||
var newQuantity = input.val();
|
||||
var span = objectWrapper.find("span").text(newQuantity);
|
||||
span.parent().attr('class', 'quantity quantity-' + newQuantity);
|
||||
var data = form.serialize(); // get data before disabling inputs
|
||||
objectWrapper.disableForms();
|
||||
form.data('loading', true);
|
||||
|
@ -284,5 +288,15 @@
|
|||
});
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
/*
|
||||
|
||||
Hanger list controls
|
||||
|
||||
*/
|
||||
|
||||
$('input[type=submit][data-confirm]').live('click', function (e) {
|
||||
if(!confirm(this.getAttribute('data-confirm'))) e.preventDefault();
|
||||
});
|
||||
})();
|
||||
|
||||
|
|
|
@ -157,26 +157,21 @@ a.button.loud:hover, input[type=submit].loud:hover, button.loud:hover {
|
|||
background-color: #ee4b00;
|
||||
}
|
||||
|
||||
/* line 87, ../../../app/stylesheets/partials/clean/_mixins.sass */
|
||||
a.button:after {
|
||||
content: " >>";
|
||||
}
|
||||
|
||||
/* line 99, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 96, ../../../app/stylesheets/_layout.sass */
|
||||
ul.buttons {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
/* line 101, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 98, ../../../app/stylesheets/_layout.sass */
|
||||
ul.buttons li {
|
||||
list-style: none;
|
||||
margin: 0 0.5em;
|
||||
}
|
||||
/* line 104, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 101, ../../../app/stylesheets/_layout.sass */
|
||||
ul.buttons li, ul.buttons li form {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
/* line 107, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 104, ../../../app/stylesheets/_layout.sass */
|
||||
#footer {
|
||||
clear: both;
|
||||
font-size: 75%;
|
||||
|
@ -184,65 +179,65 @@ ul.buttons li, ul.buttons li form {
|
|||
padding-top: 2em;
|
||||
text-align: center;
|
||||
}
|
||||
/* line 113, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 110, ../../../app/stylesheets/_layout.sass */
|
||||
#footer ul, #footer div {
|
||||
display: inline;
|
||||
margin: 0 1em;
|
||||
}
|
||||
/* line 116, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 113, ../../../app/stylesheets/_layout.sass */
|
||||
#footer li, #footer div ul {
|
||||
display: inline;
|
||||
margin: 0 0.5em;
|
||||
}
|
||||
|
||||
/* line 120, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 117, ../../../app/stylesheets/_layout.sass */
|
||||
.success, .alert, .warning {
|
||||
margin-bottom: 1em;
|
||||
padding: 0.25em 0.5em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* line 125, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 122, ../../../app/stylesheets/_layout.sass */
|
||||
.success {
|
||||
background: #e6efc2;
|
||||
border: 1px solid #c6d880;
|
||||
color: #264409;
|
||||
}
|
||||
|
||||
/* line 128, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 125, ../../../app/stylesheets/_layout.sass */
|
||||
.alert {
|
||||
background: #fbe3e4;
|
||||
border: 1px solid #fbc2c4;
|
||||
color: #8a1f11;
|
||||
}
|
||||
|
||||
/* line 131, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 128, ../../../app/stylesheets/_layout.sass */
|
||||
.warning {
|
||||
background: #fff6bf;
|
||||
border: 1px solid #ffd324;
|
||||
color: #514721;
|
||||
}
|
||||
|
||||
/* line 134, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 131, ../../../app/stylesheets/_layout.sass */
|
||||
#userbar {
|
||||
font-family: Delicious, Helvetica, Arial, Verdana, sans-serif;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
}
|
||||
/* line 139, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 136, ../../../app/stylesheets/_layout.sass */
|
||||
#userbar > * {
|
||||
display: inline;
|
||||
margin: 0 0.25em;
|
||||
}
|
||||
|
||||
/* line 143, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 140, ../../../app/stylesheets/_layout.sass */
|
||||
#userbar-image-mode {
|
||||
font-weight: bold;
|
||||
margin-right: 1em;
|
||||
text-decoration: none;
|
||||
}
|
||||
/* line 147, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 144, ../../../app/stylesheets/_layout.sass */
|
||||
#userbar-image-mode img {
|
||||
bottom: -2px;
|
||||
height: 16px;
|
||||
|
@ -250,25 +245,25 @@ ul.buttons li, ul.buttons li form {
|
|||
width: 16px;
|
||||
}
|
||||
|
||||
/* line 150, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 147, ../../../app/stylesheets/_layout.sass */
|
||||
#userbar-log-in {
|
||||
text-decoration: none;
|
||||
}
|
||||
/* line 152, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 149, ../../../app/stylesheets/_layout.sass */
|
||||
#userbar-log-in img {
|
||||
margin-bottom: -4px;
|
||||
margin-right: 0.25em;
|
||||
}
|
||||
/* line 156, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 153, ../../../app/stylesheets/_layout.sass */
|
||||
#userbar-log-in span {
|
||||
text-decoration: underline;
|
||||
}
|
||||
/* line 158, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 155, ../../../app/stylesheets/_layout.sass */
|
||||
#userbar-log-in:hover span {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* line 161, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 158, ../../../app/stylesheets/_layout.sass */
|
||||
.object {
|
||||
display: -moz-inline-box;
|
||||
-moz-box-orient: vertical;
|
||||
|
@ -283,32 +278,32 @@ ul.buttons li, ul.buttons li form {
|
|||
vertical-align: top;
|
||||
width: 100px;
|
||||
}
|
||||
/* line 169, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 166, ../../../app/stylesheets/_layout.sass */
|
||||
.object a {
|
||||
text-decoration: none;
|
||||
}
|
||||
/* line 171, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 168, ../../../app/stylesheets/_layout.sass */
|
||||
.object a img {
|
||||
-moz-opacity: 0.75;
|
||||
-webkit-opacity: 0.75;
|
||||
-o-opacity: 0.75;
|
||||
-khtml-opacity: 0.75;
|
||||
}
|
||||
/* line 173, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 170, ../../../app/stylesheets/_layout.sass */
|
||||
.object img {
|
||||
display: block;
|
||||
height: 80px;
|
||||
margin: 0 auto;
|
||||
width: 80px;
|
||||
}
|
||||
/* line 178, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 175, ../../../app/stylesheets/_layout.sass */
|
||||
.object:hover img, .object a:hover img {
|
||||
-moz-opacity: 1;
|
||||
-webkit-opacity: 1;
|
||||
-o-opacity: 1;
|
||||
-khtml-opacity: 1;
|
||||
}
|
||||
/* line 184, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 181, ../../../app/stylesheets/_layout.sass */
|
||||
.object .nc-icon, .object .closeted-icons {
|
||||
-moz-opacity: 1;
|
||||
-webkit-opacity: 1;
|
||||
|
@ -319,7 +314,7 @@ ul.buttons li, ul.buttons li form {
|
|||
position: absolute;
|
||||
top: 64px;
|
||||
}
|
||||
/* line 190, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 187, ../../../app/stylesheets/_layout.sass */
|
||||
.object .nc-icon:hover, .object .closeted-icons:hover {
|
||||
-moz-opacity: 0.5;
|
||||
-webkit-opacity: 0.5;
|
||||
|
@ -327,32 +322,32 @@ ul.buttons li, ul.buttons li form {
|
|||
-khtml-opacity: 0.5;
|
||||
background: transparent;
|
||||
}
|
||||
/* line 194, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 191, ../../../app/stylesheets/_layout.sass */
|
||||
.object .nc-icon, .object .closeted-icons img {
|
||||
display: inline;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
}
|
||||
/* line 199, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 196, ../../../app/stylesheets/_layout.sass */
|
||||
.object .nc-icon {
|
||||
right: 18px;
|
||||
}
|
||||
/* line 202, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 199, ../../../app/stylesheets/_layout.sass */
|
||||
.object .closeted-icons {
|
||||
left: 18px;
|
||||
}
|
||||
|
||||
/* line 205, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 202, ../../../app/stylesheets/_layout.sass */
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* line 208, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 205, ../../../app/stylesheets/_layout.sass */
|
||||
dd {
|
||||
margin: 0 0 1.5em 1em;
|
||||
}
|
||||
|
||||
/* line 211, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 208, ../../../app/stylesheets/_layout.sass */
|
||||
#home-link {
|
||||
font-family: Delicious, Helvetica, Arial, Verdana, sans-serif;
|
||||
font-size: 175%;
|
||||
|
@ -363,21 +358,21 @@ dd {
|
|||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
/* line 221, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 218, ../../../app/stylesheets/_layout.sass */
|
||||
#home-link:hover {
|
||||
background: #eeffee;
|
||||
text-decoration: none;
|
||||
}
|
||||
/* line 224, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 221, ../../../app/stylesheets/_layout.sass */
|
||||
#home-link span:before {
|
||||
content: "<< ";
|
||||
}
|
||||
|
||||
/* line 228, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 225, ../../../app/stylesheets/_layout.sass */
|
||||
.pagination a, .pagination span {
|
||||
margin: 0 0.5em;
|
||||
}
|
||||
/* line 230, ../../../app/stylesheets/_layout.sass */
|
||||
/* line 227, ../../../app/stylesheets/_layout.sass */
|
||||
.pagination .current {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
@ -561,20 +556,25 @@ div.jGrowl div.jGrowl-closer {
|
|||
}
|
||||
}
|
||||
|
||||
/* line 5, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 2, ../../../app/stylesheets/partials/_secondary_nav.sass */
|
||||
body.closet_hangers-index #title {
|
||||
float: left;
|
||||
margin-bottom: 0;
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
/* line 9, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 6, ../../../app/stylesheets/partials/_secondary_nav.sass */
|
||||
body.closet_hangers-index .flash {
|
||||
clear: both;
|
||||
}
|
||||
/* line 12, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #import-link, body.closet_hangers-index #closet-hangers-items-search {
|
||||
/* line 9, ../../../app/stylesheets/partials/_secondary_nav.sass */
|
||||
body.closet_hangers-index #secondary-nav {
|
||||
display: block;
|
||||
margin-top: 0.75em;
|
||||
}
|
||||
/* line 15, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 8, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #title {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
/* line 11, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #import-link {
|
||||
/* http://www.zurb.com/blog_uploads/0000/0617/buttons-03.html */
|
||||
-moz-border-radius: 5px;
|
||||
|
@ -593,7 +593,6 @@ body.closet_hangers-index #import-link {
|
|||
font-weight: bold;
|
||||
line-height: 1;
|
||||
background: #ff5c00 url('/images/alert-overlay.png?1296599919') repeat-x;
|
||||
margin-left: 2em;
|
||||
}
|
||||
/* line 34, ../../../app/stylesheets/partials/clean/_mixins.sass */
|
||||
body.closet_hangers-index #import-link:hover {
|
||||
|
@ -611,18 +610,18 @@ body.closet_hangers-index #import-link:active {
|
|||
body.closet_hangers-index #import-link:hover {
|
||||
background-color: #ee4b00;
|
||||
}
|
||||
/* line 20, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 15, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #closet-hangers-items-search {
|
||||
float: right;
|
||||
}
|
||||
/* line 24, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 19, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #closet-hangers-items-search input[name=q].loading {
|
||||
background-image: url(/images/loading.gif);
|
||||
background-position: 2px center;
|
||||
background-repeat: no-repeat;
|
||||
padding-left: 20px;
|
||||
}
|
||||
/* line 31, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 26, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #closet-hangers-contact {
|
||||
clear: both;
|
||||
font-size: 85%;
|
||||
|
@ -630,65 +629,65 @@ body.closet_hangers-index #closet-hangers-contact {
|
|||
margin-left: 2em;
|
||||
min-height: 16px;
|
||||
}
|
||||
/* line 38, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 33, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #closet-hangers-contact a {
|
||||
background-image: url('/images/neomail.png?1311369565');
|
||||
background-image: url('/images/neomail.png?1311877030');
|
||||
background-position: left center;
|
||||
background-repeat: no-repeat;
|
||||
padding-left: 18px;
|
||||
}
|
||||
/* line 45, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 40, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #closet-hangers-contact input[type=text], body.closet_hangers-index #closet-hangers-contact body.pets-bulk #bulk-pets-form textarea, body.pets-bulk #bulk-pets-form body.closet_hangers-index #closet-hangers-contact textarea {
|
||||
width: 10em;
|
||||
}
|
||||
/* line 48, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 43, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #closet-hangers-contact label {
|
||||
font-weight: bold;
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
/* line 52, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 47, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #closet-hangers-contact label:after {
|
||||
content: ":";
|
||||
}
|
||||
/* line 55, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 50, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #edit-contact-link-to-replace-form, body.closet_hangers-index #cancel-contact-link {
|
||||
display: none;
|
||||
}
|
||||
/* line 58, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 53, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .edit-contact-link, body.closet_hangers-index #cancel-contact-link {
|
||||
cursor: pointer;
|
||||
text-decoration: underline;
|
||||
}
|
||||
/* line 62, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 57, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .edit-contact-link:hover, body.closet_hangers-index #cancel-contact-link:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
/* line 66, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 61, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #edit-contact-link-to-replace-form #contact-link-has-value {
|
||||
display: none;
|
||||
}
|
||||
/* line 69, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 64, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #edit-contact-link-to-replace-form #contact-link-no-value {
|
||||
display: inline;
|
||||
}
|
||||
/* line 73, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 68, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #edit-contact-link-to-replace-form.has-value #contact-link-has-value {
|
||||
display: inline;
|
||||
}
|
||||
/* line 76, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 71, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #edit-contact-link-to-replace-form.has-value #contact-link-no-value {
|
||||
display: none;
|
||||
}
|
||||
/* line 79, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 74, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #cancel-contact-link {
|
||||
margin-left: 1em;
|
||||
}
|
||||
/* line 82, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 77, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #closet-hangers {
|
||||
clear: both;
|
||||
text-align: center;
|
||||
}
|
||||
/* line 87, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 82, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #closet-hangers .object .quantity {
|
||||
-moz-opacity: 0.75;
|
||||
-webkit-opacity: 0.75;
|
||||
|
@ -702,59 +701,187 @@ body.closet_hangers-index #closet-hangers .object .quantity {
|
|||
text-align: left;
|
||||
top: 60px;
|
||||
}
|
||||
/* line 97, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 92, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #closet-hangers .object .quantity span, body.closet_hangers-index #closet-hangers .object .quantity input[type=number] {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
/* line 101, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 96, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #closet-hangers .object form {
|
||||
display: none;
|
||||
}
|
||||
/* line 104, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index header {
|
||||
/* line 99, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index #closet-hangers .object .quantity-1 {
|
||||
display: none;
|
||||
}
|
||||
/* line 102, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-hangers-group {
|
||||
border-top: 1px solid #006600;
|
||||
margin-bottom: 2em;
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
/* line 107, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-hangers-group > header {
|
||||
border-bottom: 1px solid #aaddaa;
|
||||
display: block;
|
||||
margin-bottom: 0.25em;
|
||||
padding: 0.25em 0;
|
||||
position: relative;
|
||||
}
|
||||
/* line 111, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index header h3 {
|
||||
/* line 114, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-hangers-group > header h3 {
|
||||
font-size: 250%;
|
||||
margin: 0;
|
||||
}
|
||||
/* line 115, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index header span.show, body.closet_hangers-index header span.hide {
|
||||
/* line 118, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-hangers-group > header .add-closet-list {
|
||||
/* http://www.zurb.com/blog_uploads/0000/0617/buttons-03.html */
|
||||
-moz-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
background: #006400 url('/images/alert-overlay.png?1296599919') repeat-x;
|
||||
border: 0;
|
||||
display: inline-block;
|
||||
padding: 0.5em 0.75em 0.45em;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
|
||||
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
|
||||
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.25);
|
||||
position: relative;
|
||||
font-weight: bold;
|
||||
line-height: 1;
|
||||
bottom: 50%;
|
||||
margin-bottom: -1em;
|
||||
position: absolute;
|
||||
right: 1em;
|
||||
}
|
||||
/* line 34, ../../../app/stylesheets/partials/clean/_mixins.sass */
|
||||
body.closet_hangers-index .closet-hangers-group > header .add-closet-list:hover {
|
||||
background-color: #005300;
|
||||
}
|
||||
/* line 53, ../../../app/stylesheets/partials/clean/_mixins.sass */
|
||||
body.closet_hangers-index .closet-hangers-group > header .add-closet-list:hover {
|
||||
color: white;
|
||||
}
|
||||
/* line 55, ../../../app/stylesheets/partials/clean/_mixins.sass */
|
||||
body.closet_hangers-index .closet-hangers-group > header .add-closet-list:active {
|
||||
top: 1px;
|
||||
}
|
||||
/* line 125, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-hangers-group > header .add-closet-list:active {
|
||||
margin-bottom: -1.1em;
|
||||
top: auto;
|
||||
}
|
||||
/* line 129, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-hangers-group > header span.show, body.closet_hangers-index .closet-hangers-group > header span.hide {
|
||||
color: #448844;
|
||||
display: none;
|
||||
font-size: 85%;
|
||||
left: 1em;
|
||||
position: absolute;
|
||||
right: 1em;
|
||||
bottom: 0;
|
||||
top: 1em;
|
||||
}
|
||||
/* line 124, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index header:hover span.show, body.closet_hangers-index header:hover span.hide {
|
||||
/* line 137, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-hangers-group > header span.show:hover, body.closet_hangers-index .closet-hangers-group > header span.hide:hover {
|
||||
color: inherit;
|
||||
text-decoration: underline;
|
||||
}
|
||||
/* line 128, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-hangers-group {
|
||||
border-top: 1px solid #006600;
|
||||
margin-bottom: 2em;
|
||||
padding-bottom: 1em;
|
||||
/* line 141, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-list {
|
||||
border-bottom: 1px solid #aaddaa;
|
||||
padding: 0.5em 0;
|
||||
}
|
||||
/* line 136, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 145, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-list header {
|
||||
display: block;
|
||||
position: relative;
|
||||
}
|
||||
/* line 149, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-list h4 {
|
||||
font-family: Delicious, Helvetica, Arial, Verdana, sans-serif;
|
||||
font-size: 150%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
/* line 154, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-list .empty-list {
|
||||
font-style: italic;
|
||||
}
|
||||
/* line 157, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-list .closet-list-controls {
|
||||
display: none;
|
||||
position: absolute;
|
||||
right: 1em;
|
||||
top: 0;
|
||||
}
|
||||
/* line 163, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-list .closet-list-controls a, body.closet_hangers-index .closet-list .closet-list-controls input[type=submit] {
|
||||
/* http://www.zurb.com/blog_uploads/0000/0617/buttons-03.html */
|
||||
-moz-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
background: #006400 url('/images/alert-overlay.png?1296599919') repeat-x;
|
||||
border: 0;
|
||||
display: inline-block;
|
||||
padding: 0.5em 0.75em 0.45em;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
|
||||
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
|
||||
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.25);
|
||||
position: relative;
|
||||
font-weight: bold;
|
||||
line-height: 1;
|
||||
background: #aaaaaa url('/images/alert-overlay.png?1296599919') repeat-x;
|
||||
-moz-opacity: 0.9;
|
||||
-webkit-opacity: 0.9;
|
||||
-o-opacity: 0.9;
|
||||
-khtml-opacity: 0.9;
|
||||
font-size: 80%;
|
||||
}
|
||||
/* line 34, ../../../app/stylesheets/partials/clean/_mixins.sass */
|
||||
body.closet_hangers-index .closet-list .closet-list-controls a:hover, body.closet_hangers-index .closet-list .closet-list-controls input[type=submit]:hover {
|
||||
background-color: #005300;
|
||||
}
|
||||
/* line 53, ../../../app/stylesheets/partials/clean/_mixins.sass */
|
||||
body.closet_hangers-index .closet-list .closet-list-controls a:hover, body.closet_hangers-index .closet-list .closet-list-controls input[type=submit]:hover {
|
||||
color: white;
|
||||
}
|
||||
/* line 55, ../../../app/stylesheets/partials/clean/_mixins.sass */
|
||||
body.closet_hangers-index .closet-list .closet-list-controls a:active, body.closet_hangers-index .closet-list .closet-list-controls input[type=submit]:active {
|
||||
top: 1px;
|
||||
}
|
||||
/* line 34, ../../../app/stylesheets/partials/clean/_mixins.sass */
|
||||
body.closet_hangers-index .closet-list .closet-list-controls a:hover, body.closet_hangers-index .closet-list .closet-list-controls input[type=submit]:hover {
|
||||
background-color: #999999;
|
||||
}
|
||||
/* line 166, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-list .closet-list-controls form {
|
||||
display: inline;
|
||||
}
|
||||
/* line 170, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-list.unlisted h4 {
|
||||
font-style: italic;
|
||||
}
|
||||
/* line 174, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-list:hover .closet-list-controls {
|
||||
display: block;
|
||||
}
|
||||
/* line 177, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index .closet-list:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
/* line 183, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user #closet-hangers .object:hover form {
|
||||
display: inline;
|
||||
}
|
||||
/* line 139, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 186, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user #closet-hangers .object:hover .closet-hanger-destroy {
|
||||
position: absolute;
|
||||
right: 18px;
|
||||
top: 0;
|
||||
}
|
||||
/* line 144, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 191, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user #closet-hangers .object:hover .closet-hanger-destroy input {
|
||||
/* http://www.zurb.com/blog_uploads/0000/0617/buttons-03.html */
|
||||
-moz-border-radius: 5px;
|
||||
|
@ -795,7 +922,7 @@ body.closet_hangers-index.current-user #closet-hangers .object:hover .closet-han
|
|||
body.closet_hangers-index.current-user #closet-hangers .object:hover .closet-hanger-destroy input:hover {
|
||||
background-color: #999999;
|
||||
}
|
||||
/* line 147, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 194, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user #closet-hangers .object:hover .quantity {
|
||||
-moz-opacity: 1;
|
||||
-webkit-opacity: 1;
|
||||
|
@ -805,97 +932,119 @@ body.closet_hangers-index.current-user #closet-hangers .object:hover .quantity {
|
|||
top: 56px;
|
||||
padding: 0;
|
||||
}
|
||||
/* line 153, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 200, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user #closet-hangers .object:hover .quantity span {
|
||||
display: none;
|
||||
}
|
||||
/* line 156, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 203, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user #closet-hangers .object:hover .quantity input[type=number] {
|
||||
padding: 2px;
|
||||
width: 2em;
|
||||
}
|
||||
/* line 160, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 207, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user #closet-hangers .object:hover .quantity input[type=submit] {
|
||||
font-size: 85%;
|
||||
}
|
||||
/* line 166, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 212, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user.js #closet-hangers .object:hover .quantity {
|
||||
display: block;
|
||||
}
|
||||
/* line 215, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user.js #closet-hangers .object:hover .quantity input[type=number] {
|
||||
width: 2.5em;
|
||||
}
|
||||
/* line 169, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 218, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user.js #closet-hangers .object:hover .quantity input[type=submit] {
|
||||
display: none;
|
||||
}
|
||||
/* line 172, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 221, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user.js #closet-hangers .object.loading {
|
||||
background: #eeffee;
|
||||
outline: 1px solid #006600;
|
||||
}
|
||||
/* line 176, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 225, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user.js #closet-hangers .object.loading .quantity {
|
||||
display: block;
|
||||
}
|
||||
/* line 228, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user.js #closet-hangers .object.loading .quantity span:after {
|
||||
content: "…";
|
||||
}
|
||||
/* line 180, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 232, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user.js #closet-hangers-contact form {
|
||||
display: none;
|
||||
}
|
||||
/* line 183, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 235, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user.js #closet-hangers-contact .edit-contact-link, body.closet_hangers-index.current-user.js #closet-hangers-contact #cancel-contact-link {
|
||||
display: inline;
|
||||
}
|
||||
/* line 187, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 239, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user.js #closet-hangers-contact.editing form {
|
||||
display: block;
|
||||
}
|
||||
/* line 190, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 242, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user.js #closet-hangers-contact.editing .edit-contact-link {
|
||||
display: none;
|
||||
}
|
||||
/* line 194, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user.js .closet-hangers-group header {
|
||||
/* line 247, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user.js .closet-hangers-group header .show, body.closet_hangers-index.current-user.js .closet-hangers-group header .hide {
|
||||
cursor: pointer;
|
||||
}
|
||||
/* line 197, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 250, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user.js .closet-hangers-group header .hide {
|
||||
display: block;
|
||||
}
|
||||
/* line 201, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 254, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user.js .closet-hangers-group.hidden header .hide, body.closet_hangers-index.current-user.js .closet-hangers-group.hidden .closet-hangers-group-content {
|
||||
display: none;
|
||||
}
|
||||
/* line 204, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
/* line 257, ../../../app/stylesheets/closet_hangers/_index.sass */
|
||||
body.closet_hangers-index.current-user.js .closet-hangers-group.hidden header .show {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* line 3, ../../../app/stylesheets/closet_lists/_form.sass */
|
||||
body.closet_lists-new form ul.fields, body.closet_lists-create form ul.fields {
|
||||
/* line 2, ../../../app/stylesheets/partials/_secondary_nav.sass */
|
||||
body.closet_lists-new #title, body.closet_lists-create #title, body.closet_lists-edit #title, body.closet_lists-update #title {
|
||||
float: left;
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
/* line 6, ../../../app/stylesheets/partials/_secondary_nav.sass */
|
||||
body.closet_lists-new .flash, body.closet_lists-create .flash, body.closet_lists-edit .flash, body.closet_lists-update .flash {
|
||||
clear: both;
|
||||
}
|
||||
/* line 9, ../../../app/stylesheets/partials/_secondary_nav.sass */
|
||||
body.closet_lists-new #secondary-nav, body.closet_lists-create #secondary-nav, body.closet_lists-edit #secondary-nav, body.closet_lists-update #secondary-nav {
|
||||
display: block;
|
||||
margin-top: 0.75em;
|
||||
}
|
||||
/* line 4, ../../../app/stylesheets/closet_lists/_form.sass */
|
||||
body.closet_lists-new form ul.fields, body.closet_lists-create form ul.fields, body.closet_lists-edit form ul.fields, body.closet_lists-update form ul.fields {
|
||||
list-style: none;
|
||||
}
|
||||
/* line 6, ../../../app/stylesheets/closet_lists/_form.sass */
|
||||
body.closet_lists-new form ul.fields label, body.closet_lists-create form ul.fields label {
|
||||
/* line 7, ../../../app/stylesheets/closet_lists/_form.sass */
|
||||
body.closet_lists-new form ul.fields label, body.closet_lists-create form ul.fields label, body.closet_lists-edit form ul.fields label, body.closet_lists-update form ul.fields label {
|
||||
float: left;
|
||||
font-weight: bold;
|
||||
margin-right: 1em;
|
||||
}
|
||||
/* line 11, ../../../app/stylesheets/closet_lists/_form.sass */
|
||||
body.closet_lists-new form ul.fields li, body.closet_lists-create form ul.fields li {
|
||||
/* line 12, ../../../app/stylesheets/closet_lists/_form.sass */
|
||||
body.closet_lists-new form ul.fields li, body.closet_lists-create form ul.fields li, body.closet_lists-edit form ul.fields li, body.closet_lists-update form ul.fields li {
|
||||
padding: 0.75em 0;
|
||||
width: 25em;
|
||||
}
|
||||
/* line 15, ../../../app/stylesheets/closet_lists/_form.sass */
|
||||
body.closet_lists-new form ul.fields input, body.closet_lists-new form ul.fields textarea, body.closet_lists-new form ul.fields select, body.closet_lists-create form ul.fields input, body.closet_lists-create form ul.fields textarea, body.closet_lists-create form ul.fields select {
|
||||
/* line 16, ../../../app/stylesheets/closet_lists/_form.sass */
|
||||
body.closet_lists-new form ul.fields input, body.closet_lists-new form ul.fields textarea, body.closet_lists-new form ul.fields select, body.closet_lists-create form ul.fields input, body.closet_lists-create form ul.fields textarea, body.closet_lists-create form ul.fields select, body.closet_lists-edit form ul.fields input, body.closet_lists-edit form ul.fields textarea, body.closet_lists-edit form ul.fields select, body.closet_lists-update form ul.fields input, body.closet_lists-update form ul.fields textarea, body.closet_lists-update form ul.fields select {
|
||||
clear: both;
|
||||
display: block;
|
||||
margin-top: 0.25em;
|
||||
width: 80%;
|
||||
}
|
||||
/* line 21, ../../../app/stylesheets/closet_lists/_form.sass */
|
||||
body.closet_lists-new form ul.fields textarea, body.closet_lists-create form ul.fields textarea {
|
||||
/* line 22, ../../../app/stylesheets/closet_lists/_form.sass */
|
||||
body.closet_lists-new form ul.fields textarea, body.closet_lists-create form ul.fields textarea, body.closet_lists-edit form ul.fields textarea, body.closet_lists-update form ul.fields textarea {
|
||||
height: 12em;
|
||||
}
|
||||
/* line 24, ../../../app/stylesheets/closet_lists/_form.sass */
|
||||
body.closet_lists-new form ul.fields .hint, body.closet_lists-create form ul.fields .hint {
|
||||
/* line 25, ../../../app/stylesheets/closet_lists/_form.sass */
|
||||
body.closet_lists-new form ul.fields .hint, body.closet_lists-create form ul.fields .hint, body.closet_lists-edit form ul.fields .hint, body.closet_lists-update form ul.fields .hint {
|
||||
display: block;
|
||||
font-size: 85%;
|
||||
}
|
||||
|
@ -1303,7 +1452,7 @@ body.items-show #closet-hangers {
|
|||
float: right;
|
||||
font-size: 85%;
|
||||
padding: 1em;
|
||||
width: 18em;
|
||||
width: 21em;
|
||||
}
|
||||
/* line 73, ../../../app/stylesheets/items/_show.sass */
|
||||
body.items-show #closet-hangers label, body.items-show #closet-hangers header {
|
||||
|
@ -1319,6 +1468,10 @@ body.items-show #closet-hangers form {
|
|||
padding: 0.5em 0;
|
||||
}
|
||||
/* line 83, ../../../app/stylesheets/items/_show.sass */
|
||||
body.items-show #closet-hangers select {
|
||||
width: 9em;
|
||||
}
|
||||
/* line 86, ../../../app/stylesheets/items/_show.sass */
|
||||
body.items-show #closet-hangers input[type=number] {
|
||||
width: 4em;
|
||||
}
|
||||
|
@ -1901,7 +2054,7 @@ body.outfits-edit .object:hover ul, body.outfits-edit .object:hover .object-info
|
|||
}
|
||||
/* line 418, ../../../app/stylesheets/outfits/_edit.sass */
|
||||
body.outfits-edit .nc-icon {
|
||||
background: url('/images/nc.png?1311369565') no-repeat;
|
||||
background: url('/images/nc.png?1311877029') no-repeat;
|
||||
height: 16px;
|
||||
position: absolute;
|
||||
right: 16px;
|
||||
|
|
BIN
vendor/cache/sanitize-2.0.3.gem
vendored
Normal file
BIN
vendor/cache/sanitize-2.0.3.gem
vendored
Normal file
Binary file not shown.
Loading…
Reference in a new issue