1
0
Fork 0
forked from OpenNeo/impress

closet lists, round one

This commit is contained in:
Emi Matchu 2011-07-29 10:52:04 -04:00
parent b86ce67c02
commit 358840076c
26 changed files with 581 additions and 200 deletions

View file

@ -35,6 +35,8 @@ gem "character-encodings", "~> 0.4.1", :platforms => :ruby_18
gem "nokogiri", "~> 1.5.0" gem "nokogiri", "~> 1.5.0"
gem 'sanitize', '~> 2.0.3'
group :development_async do group :development_async do
# async wrappers # async wrappers
gem 'eventmachine', :git => 'git://github.com/eventmachine/eventmachine.git' gem 'eventmachine', :git => 'git://github.com/eventmachine/eventmachine.git'

View file

@ -165,9 +165,11 @@ GEM
ruby-hmac (0.4.0) ruby-hmac (0.4.0)
rufus-scheduler (2.0.9) rufus-scheduler (2.0.9)
tzinfo (>= 0.3.23) tzinfo (>= 0.3.23)
sanitize (2.0.3)
nokogiri (< 1.6, >= 1.4.4)
sinatra (1.2.6) sinatra (1.2.6)
rack (~> 1.1) rack (~> 1.1)
tilt (>= 1.2.2, < 2.0) tilt (< 2.0, >= 1.2.2)
swf_converter (0.0.3) swf_converter (0.0.3)
thor (0.14.6) thor (0.14.6)
tilt (1.3.2) tilt (1.3.2)
@ -215,6 +217,7 @@ DEPENDENCIES
resque-scheduler (~> 2.0.0.d) resque-scheduler (~> 2.0.0.d)
right_aws (~> 2.1.0) right_aws (~> 2.1.0)
rspec-rails (~> 2.0.0.beta.22) rspec-rails (~> 2.0.0.beta.22)
sanitize (~> 2.0.3)
swf_converter (~> 0.0.3) swf_converter (~> 0.0.3)
whenever (~> 0.6.2) whenever (~> 0.6.2)
will_paginate (~> 3.0.pre2) will_paginate (~> 3.0.pre2)

View file

@ -14,8 +14,11 @@ class ClosetHangersController < ApplicationController
def index def index
@user = User.find params[:user_id] @user = User.find params[:user_id]
@closet_hangers_by_owned = @user.closet_hangers.owned_before_wanted. @closet_lists_by_owned = @user.closet_lists.alphabetical.
alphabetical_by_item_name.includes(:item).group_by(&:owned) 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) @public_perspective = params.has_key?(:public) || !user_is?(@user)
end end
@ -37,7 +40,9 @@ class ClosetHangersController < ApplicationController
if @closet_hanger.save if @closet_hanger.save
respond_to do |format| respond_to do |format|
format.html { 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) redirect_back!(@item)
} }

View file

@ -1,19 +1,49 @@
class ClosetListsController < ApplicationController class ClosetListsController < ApplicationController
before_filter :authorize_user! before_filter :authorize_user!
before_filter :find_closet_list, :only => [:edit, :update, :destroy]
def new
@closet_list = current_user.closet_lists.build
end
def create def create
@closet_list = current_user.closet_lists.build params[:closet_list] @closet_list = current_user.closet_lists.build params[:closet_list]
if @closet_list.save if @closet_list.save
flash[:success] = "Successfully saved \"#{@closet_list.name}\"" save_successful!
redirect_to user_closet_hangers_path(current_user)
else else
flash.now[:alert] = "We can't save this list because: #{@closet_list.errors.full_messages.to_sentence}" save_failed!
render :action => :new render :action => :new
end end
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 end

View file

@ -94,6 +94,11 @@ module ApplicationHelper
hidden_field_tag :return_to, request.fullpath hidden_field_tag :return_to, request.fullpath
end end
def secondary_nav(&block)
content_for :before_flashes,
content_tag(:nav, :id => 'secondary-nav', &block)
end
def show_title_header? def show_title_header?
params[:controller] != 'items' params[:controller] != 'items'
end end

View file

@ -13,14 +13,57 @@ module ClosetHangersHelper
public_perspective? ? @user.name : :you public_perspective? ? @user.name : :you
end 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? def public_perspective?
@public_perspective @public_perspective
end end
def render_closet_hangers(owned) def render_closet_lists(lists)
render :partial => 'closet_hanger', if lists
:collection => @closet_hangers_by_owned[owned], render :partial => 'closet_lists/closet_list', :collection => lists,
:locals => {:show_controls => !public_perspective?} :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
end end

View file

@ -1,9 +1,30 @@
module ClosetListsHelper 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 def hangers_owned_options
@hangers_owned_options ||= [true, false].map do |owned| @hangers_owned_options ||= [true, false].map do |owned|
verb = ClosetHanger.verb(:i, owned) verb = ClosetHanger.verb(:i, owned)
["items I #{verb}", owned] ["items I #{verb}", owned]
end end
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 end

View file

@ -3,7 +3,7 @@ class ClosetHanger < ActiveRecord::Base
belongs_to :list, :class_name => 'ClosetList' belongs_to :list, :class_name => 'ClosetList'
belongs_to :user belongs_to :user
attr_accessible :owned, :quantity attr_accessible :list_id, :owned, :quantity
validates :item_id, :uniqueness => {:scope => [:user_id, :owned]} validates :item_id, :uniqueness => {:scope => [:user_id, :owned]}
validates :quantity, :numericality => {:greater_than => 0} 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 :alphabetical_by_item_name, joins(:item).order(Item.arel_table[:name])
scope :owned_before_wanted, order(arel_table[:owned].desc) scope :owned_before_wanted, order(arel_table[:owned].desc)
scope :unlisted, where(:list_id => nil)
before_validation :set_owned_by_list before_validation :set_owned_by_list
def 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 end
def verb(subject=:someone) def verb(subject=:someone)

View file

@ -1,6 +1,7 @@
class ClosetList < ActiveRecord::Base class ClosetList < ActiveRecord::Base
belongs_to :user 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 attr_accessible :description, :hangers_owned, :name
@ -8,6 +9,8 @@ class ClosetList < ActiveRecord::Base
validates :user, :presence => true validates :user, :presence => true
validates :hangers_owned, :inclusion => {:in => [true, false], :message => "can't be blank"} validates :hangers_owned, :inclusion => {:in => [true, false], :message => "can't be blank"}
scope :alphabetical, order(:name)
after_save :sync_hangers_owned! after_save :sync_hangers_owned!
def sync_hangers_owned! def sync_hangers_owned!

View file

@ -93,9 +93,6 @@ a.button, input[type=submit], button
&.loud &.loud
+loud-awesome-button +loud-awesome-button
a.button
+arrowed-awesome-button
ul.buttons ul.buttons
margin-bottom: 1em margin-bottom: 1em
li li

View file

@ -1,21 +1,16 @@
@import "partials/context_button" @import "partials/context_button"
@import "partials/icon" @import "partials/icon"
@import "partials/secondary_nav"
body.closet_hangers-index body.closet_hangers-index
+secondary-nav
#title #title
float: left
margin-bottom: 0 margin-bottom: 0
.flash
clear: both
#import-link, #closet-hangers-items-search
margin-top: .75em
#import-link #import-link
+awesome-button +awesome-button
+loud-awesome-button-color +loud-awesome-button-color
margin-left: 2em
#closet-hangers-items-search #closet-hangers-items-search
float: right float: right
@ -101,35 +96,87 @@ body.closet_hangers-index
form form
display: none display: none
header .quantity-1
border-bottom: 1px solid $soft-border-color display: none
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
.closet-hangers-group .closet-hangers-group
border-top: 1px solid $module-border-color border-top: 1px solid $module-border-color
margin-bottom: 2em margin-bottom: 2em
padding-bottom: 1em 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 &.current-user
#closet-hangers #closet-hangers
.object:hover .object:hover
@ -163,6 +210,8 @@ body.closet_hangers-index
&.js &.js
#closet-hangers #closet-hangers
.object:hover .quantity .object:hover .quantity
display: block
input[type=number] input[type=number]
width: 2.5em width: 2.5em
@ -173,8 +222,11 @@ body.closet_hangers-index
background: $module-bg-color background: $module-bg-color
outline: 1px solid $module-border-color outline: 1px solid $module-border-color
.quantity span:after .quantity
content: "" display: block
span:after
content: ""
#closet-hangers-contact #closet-hangers-contact
form form
@ -192,7 +244,8 @@ body.closet_hangers-index
.closet-hangers-group .closet-hangers-group
header header
cursor: pointer .show, .hide
cursor: pointer
.hide .hide
display: block display: block

View file

@ -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 form ul.fields
list-style: none list-style: none

View file

@ -68,7 +68,7 @@ body.items-show
float: right float: right
font-size: 85% font-size: 85%
padding: 1em padding: 1em
width: 18em width: 21em
label, header label, header
display: block display: block
@ -80,6 +80,9 @@ body.items-show
form form
padding: .5em 0 padding: .5em 0
select
width: 9em
input[type=number] input[type=number]
width: 4em width: 4em

View file

@ -0,0 +1,12 @@
=secondary-nav
#title
float: left
margin-right: .5em
.flash
clear: both
#secondary-nav
display: block
margin-top: .75em

View file

@ -1,7 +1,7 @@
- show_controls ||= false # we could do user check here, but may as well do it once - show_controls ||= false # we could do user check here, but may as well do it once
.object .object
= render :partial => 'items/item_link', :locals => {:item => closet_hanger.item} = render :partial => 'items/item_link', :locals => {:item => closet_hanger.item}
.quantity .quantity{:class => "quantity-#{closet_hanger.quantity}"}
%span= closet_hanger.quantity %span= closet_hanger.quantity
- if show_controls - 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| = form_for closet_hanger, :url => user_item_closet_hanger_path(current_user, closet_hanger.item), :html => {:class => 'closet-hanger-update'} do |f|

View file

@ -1,7 +1,7 @@
- unless public_perspective? - unless public_perspective?
- title 'Your Items' - title 'Your Items'
- add_body_class 'current-user' - 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' = 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 = 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" = text_field_tag :q, nil, :placeholder => "Find items to add"
@ -31,19 +31,18 @@
= f.submit "Save" = f.submit "Save"
%span#cancel-contact-link cancel %span#cancel-contact-link cancel
- unless @closet_hangers_by_owned.empty? %p
%p These are the items you are tracking on Dress to Impress. Hover over an
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.
item to remove it from the list or to change the quantity.
%p %p
You can share You can share
= link_to "this page", request.fullpath = link_to "this page", request.fullpath
with the world, and they'll be able to see what items you own and want. with the world, and they'll be able to see what items you own and want.
It's also a good idea to It's also a good idea to
%span.edit-contact-link add your Neopets username %span.edit-contact-link add your Neopets username
so that when other users see your items they will know how to contact you for so that when other users see your items they will know how to contact you for
trades. trades.
#closet-hangers{:class => public_perspective? ? nil : 'current-user'} #closet-hangers{:class => public_perspective? ? nil : 'current-user'}
- [true, false].each do |owned| - [true, false].each do |owned|
@ -53,14 +52,17 @@
Items Items
= closet_hanger_subject = closet_hanger_subject
%span.verb= closet_hanger_verb(owned) %span.verb= closet_hanger_verb(owned)
%span.show click to show %span.toggle.show show
%span.hide click to hide %span.toggle.hide hide
= link_to_add_closet_list 'Add new list', :owned => owned, :class => 'add-closet-list'
.closet-hangers-group-content .closet-hangers-group-content
= render_closet_lists(@closet_lists_by_owned[owned])
= render_unlisted_closet_hangers(owned)
- if public_perspective? - 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. %p #{@user.name} doesn't seem to #{closet_hanger_verb(owned, false)} anything.
- else - else
- unless @closet_hangers_by_owned[owned] - unless has_hangers?(owned)
%p %p
You haven't tracked any items you #{closet_hanger_verb(owned)} on 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 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 = link_to "import your Neopets closet in a few quick steps", new_closet_page_path
so why not? so why not?
%p Have fun! %p Have fun!
= render_closet_hangers(owned)
- content_for :stylesheets do - content_for :stylesheets do
= stylesheet_link_tag 'south-street/jquery-ui' = stylesheet_link_tag 'south-street/jquery-ui'

View 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.

View file

@ -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| = form_for [@closet_list.user, @closet_list] do |f|
%ul.fields %ul.fields
%li %li
@ -13,5 +16,13 @@
Why are these items in a list? What are your terms for trading? Why are these items in a list? What are your terms for trading?
Or you can leave this blank. Or you can leave this blank.
= f.text_area :description = f.text_area :description
%span.hint
We
= surround '_' do
%em support
= surround '**' do
%strong Markdown
and
some HTML.
= f.submit 'Save list' = f.submit 'Save list'

View file

@ -0,0 +1,3 @@
- title "Editing list \"#{@closet_list.name}\""
= render 'form'

View file

@ -26,6 +26,9 @@
= f.hidden_field :owned = f.hidden_field :owned
= f.label :quantity, "How many of these do you #{hanger.verb(:you)}?" = f.label :quantity, "How many of these do you #{hanger.verb(:you)}?"
= f.number_field :quantity, :min => 0, :required => true = 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" = f.submit "Save"
%p= @item.description %p= @item.description

View file

@ -42,7 +42,7 @@ OpenneoImpressItems::Application.routes.draw do |map|
resources :users, :path => 'user', :only => [:update] do resources :users, :path => 'user', :only => [:update] do
resources :contributions, :only => [:index] resources :contributions, :only => [:index]
resources :closet_hangers, :only => [:index], :path => 'closet' 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 resources :items, :only => [] do
resource :closet_hanger, :only => [:create, :update, :destroy] resource :closet_hanger, :only => [:create, :update, :destroy]

View file

@ -9,13 +9,13 @@ class CreateClosetLists < ActiveRecord::Migration
t.timestamps t.timestamps
end end
add_column :closet_hangers, :closet_list_id, :integer add_column :closet_hangers, :list_id, :integer
end end
def self.down def self.down
drop_table :closet_lists drop_table :closet_lists
remove_column :closet_hangers, :closet_list_id remove_column :closet_hangers, :list_id
end end
end end

View file

@ -26,8 +26,8 @@ ActiveRecord::Schema.define(:version => 20110726231143) do
t.integer "quantity" t.integer "quantity"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.boolean "owned", :default => true, :null => false t.boolean "owned", :default => true, :null => false
t.integer "closet_list_id" t.integer "list_id"
end end
create_table "closet_lists", :force => true do |t| create_table "closet_lists", :force => true do |t|

View file

@ -13,8 +13,10 @@
label: el.find('span.verb').text(), label: el.find('span.verb').text(),
owned: (el.attr('data-owned') == 'true') 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]"); var input = form.children("input[type=number]");
if(input.hasChanged()) { if(input.hasChanged()) {
var objectWrapper = form.closest(".object").addClass("loading"); 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 var data = form.serialize(); // get data before disabling inputs
objectWrapper.disableForms(); objectWrapper.disableForms();
form.data('loading', true); form.data('loading', true);
@ -284,5 +288,15 @@
}); });
e.preventDefault(); e.preventDefault();
}); });
/*
Hanger list controls
*/
$('input[type=submit][data-confirm]').live('click', function (e) {
if(!confirm(this.getAttribute('data-confirm'))) e.preventDefault();
});
})(); })();

View file

@ -157,26 +157,21 @@ a.button.loud:hover, input[type=submit].loud:hover, button.loud:hover {
background-color: #ee4b00; background-color: #ee4b00;
} }
/* line 87, ../../../app/stylesheets/partials/clean/_mixins.sass */ /* line 96, ../../../app/stylesheets/_layout.sass */
a.button:after {
content: " >>";
}
/* line 99, ../../../app/stylesheets/_layout.sass */
ul.buttons { ul.buttons {
margin-bottom: 1em; margin-bottom: 1em;
} }
/* line 101, ../../../app/stylesheets/_layout.sass */ /* line 98, ../../../app/stylesheets/_layout.sass */
ul.buttons li { ul.buttons li {
list-style: none; list-style: none;
margin: 0 0.5em; margin: 0 0.5em;
} }
/* line 104, ../../../app/stylesheets/_layout.sass */ /* line 101, ../../../app/stylesheets/_layout.sass */
ul.buttons li, ul.buttons li form { ul.buttons li, ul.buttons li form {
display: inline; display: inline;
} }
/* line 107, ../../../app/stylesheets/_layout.sass */ /* line 104, ../../../app/stylesheets/_layout.sass */
#footer { #footer {
clear: both; clear: both;
font-size: 75%; font-size: 75%;
@ -184,65 +179,65 @@ ul.buttons li, ul.buttons li form {
padding-top: 2em; padding-top: 2em;
text-align: center; text-align: center;
} }
/* line 113, ../../../app/stylesheets/_layout.sass */ /* line 110, ../../../app/stylesheets/_layout.sass */
#footer ul, #footer div { #footer ul, #footer div {
display: inline; display: inline;
margin: 0 1em; margin: 0 1em;
} }
/* line 116, ../../../app/stylesheets/_layout.sass */ /* line 113, ../../../app/stylesheets/_layout.sass */
#footer li, #footer div ul { #footer li, #footer div ul {
display: inline; display: inline;
margin: 0 0.5em; margin: 0 0.5em;
} }
/* line 120, ../../../app/stylesheets/_layout.sass */ /* line 117, ../../../app/stylesheets/_layout.sass */
.success, .alert, .warning { .success, .alert, .warning {
margin-bottom: 1em; margin-bottom: 1em;
padding: 0.25em 0.5em; padding: 0.25em 0.5em;
text-align: center; text-align: center;
} }
/* line 125, ../../../app/stylesheets/_layout.sass */ /* line 122, ../../../app/stylesheets/_layout.sass */
.success { .success {
background: #e6efc2; background: #e6efc2;
border: 1px solid #c6d880; border: 1px solid #c6d880;
color: #264409; color: #264409;
} }
/* line 128, ../../../app/stylesheets/_layout.sass */ /* line 125, ../../../app/stylesheets/_layout.sass */
.alert { .alert {
background: #fbe3e4; background: #fbe3e4;
border: 1px solid #fbc2c4; border: 1px solid #fbc2c4;
color: #8a1f11; color: #8a1f11;
} }
/* line 131, ../../../app/stylesheets/_layout.sass */ /* line 128, ../../../app/stylesheets/_layout.sass */
.warning { .warning {
background: #fff6bf; background: #fff6bf;
border: 1px solid #ffd324; border: 1px solid #ffd324;
color: #514721; color: #514721;
} }
/* line 134, ../../../app/stylesheets/_layout.sass */ /* line 131, ../../../app/stylesheets/_layout.sass */
#userbar { #userbar {
font-family: Delicious, Helvetica, Arial, Verdana, sans-serif; font-family: Delicious, Helvetica, Arial, Verdana, sans-serif;
position: absolute; position: absolute;
right: 0; right: 0;
top: 0; top: 0;
} }
/* line 139, ../../../app/stylesheets/_layout.sass */ /* line 136, ../../../app/stylesheets/_layout.sass */
#userbar > * { #userbar > * {
display: inline; display: inline;
margin: 0 0.25em; margin: 0 0.25em;
} }
/* line 143, ../../../app/stylesheets/_layout.sass */ /* line 140, ../../../app/stylesheets/_layout.sass */
#userbar-image-mode { #userbar-image-mode {
font-weight: bold; font-weight: bold;
margin-right: 1em; margin-right: 1em;
text-decoration: none; text-decoration: none;
} }
/* line 147, ../../../app/stylesheets/_layout.sass */ /* line 144, ../../../app/stylesheets/_layout.sass */
#userbar-image-mode img { #userbar-image-mode img {
bottom: -2px; bottom: -2px;
height: 16px; height: 16px;
@ -250,25 +245,25 @@ ul.buttons li, ul.buttons li form {
width: 16px; width: 16px;
} }
/* line 150, ../../../app/stylesheets/_layout.sass */ /* line 147, ../../../app/stylesheets/_layout.sass */
#userbar-log-in { #userbar-log-in {
text-decoration: none; text-decoration: none;
} }
/* line 152, ../../../app/stylesheets/_layout.sass */ /* line 149, ../../../app/stylesheets/_layout.sass */
#userbar-log-in img { #userbar-log-in img {
margin-bottom: -4px; margin-bottom: -4px;
margin-right: 0.25em; margin-right: 0.25em;
} }
/* line 156, ../../../app/stylesheets/_layout.sass */ /* line 153, ../../../app/stylesheets/_layout.sass */
#userbar-log-in span { #userbar-log-in span {
text-decoration: underline; text-decoration: underline;
} }
/* line 158, ../../../app/stylesheets/_layout.sass */ /* line 155, ../../../app/stylesheets/_layout.sass */
#userbar-log-in:hover span { #userbar-log-in:hover span {
text-decoration: none; text-decoration: none;
} }
/* line 161, ../../../app/stylesheets/_layout.sass */ /* line 158, ../../../app/stylesheets/_layout.sass */
.object { .object {
display: -moz-inline-box; display: -moz-inline-box;
-moz-box-orient: vertical; -moz-box-orient: vertical;
@ -283,32 +278,32 @@ ul.buttons li, ul.buttons li form {
vertical-align: top; vertical-align: top;
width: 100px; width: 100px;
} }
/* line 169, ../../../app/stylesheets/_layout.sass */ /* line 166, ../../../app/stylesheets/_layout.sass */
.object a { .object a {
text-decoration: none; text-decoration: none;
} }
/* line 171, ../../../app/stylesheets/_layout.sass */ /* line 168, ../../../app/stylesheets/_layout.sass */
.object a img { .object a img {
-moz-opacity: 0.75; -moz-opacity: 0.75;
-webkit-opacity: 0.75; -webkit-opacity: 0.75;
-o-opacity: 0.75; -o-opacity: 0.75;
-khtml-opacity: 0.75; -khtml-opacity: 0.75;
} }
/* line 173, ../../../app/stylesheets/_layout.sass */ /* line 170, ../../../app/stylesheets/_layout.sass */
.object img { .object img {
display: block; display: block;
height: 80px; height: 80px;
margin: 0 auto; margin: 0 auto;
width: 80px; width: 80px;
} }
/* line 178, ../../../app/stylesheets/_layout.sass */ /* line 175, ../../../app/stylesheets/_layout.sass */
.object:hover img, .object a:hover img { .object:hover img, .object a:hover img {
-moz-opacity: 1; -moz-opacity: 1;
-webkit-opacity: 1; -webkit-opacity: 1;
-o-opacity: 1; -o-opacity: 1;
-khtml-opacity: 1; -khtml-opacity: 1;
} }
/* line 184, ../../../app/stylesheets/_layout.sass */ /* line 181, ../../../app/stylesheets/_layout.sass */
.object .nc-icon, .object .closeted-icons { .object .nc-icon, .object .closeted-icons {
-moz-opacity: 1; -moz-opacity: 1;
-webkit-opacity: 1; -webkit-opacity: 1;
@ -319,7 +314,7 @@ ul.buttons li, ul.buttons li form {
position: absolute; position: absolute;
top: 64px; top: 64px;
} }
/* line 190, ../../../app/stylesheets/_layout.sass */ /* line 187, ../../../app/stylesheets/_layout.sass */
.object .nc-icon:hover, .object .closeted-icons:hover { .object .nc-icon:hover, .object .closeted-icons:hover {
-moz-opacity: 0.5; -moz-opacity: 0.5;
-webkit-opacity: 0.5; -webkit-opacity: 0.5;
@ -327,32 +322,32 @@ ul.buttons li, ul.buttons li form {
-khtml-opacity: 0.5; -khtml-opacity: 0.5;
background: transparent; background: transparent;
} }
/* line 194, ../../../app/stylesheets/_layout.sass */ /* line 191, ../../../app/stylesheets/_layout.sass */
.object .nc-icon, .object .closeted-icons img { .object .nc-icon, .object .closeted-icons img {
display: inline; display: inline;
height: 16px; height: 16px;
width: 16px; width: 16px;
} }
/* line 199, ../../../app/stylesheets/_layout.sass */ /* line 196, ../../../app/stylesheets/_layout.sass */
.object .nc-icon { .object .nc-icon {
right: 18px; right: 18px;
} }
/* line 202, ../../../app/stylesheets/_layout.sass */ /* line 199, ../../../app/stylesheets/_layout.sass */
.object .closeted-icons { .object .closeted-icons {
left: 18px; left: 18px;
} }
/* line 205, ../../../app/stylesheets/_layout.sass */ /* line 202, ../../../app/stylesheets/_layout.sass */
dt { dt {
font-weight: bold; font-weight: bold;
} }
/* line 208, ../../../app/stylesheets/_layout.sass */ /* line 205, ../../../app/stylesheets/_layout.sass */
dd { dd {
margin: 0 0 1.5em 1em; margin: 0 0 1.5em 1em;
} }
/* line 211, ../../../app/stylesheets/_layout.sass */ /* line 208, ../../../app/stylesheets/_layout.sass */
#home-link { #home-link {
font-family: Delicious, Helvetica, Arial, Verdana, sans-serif; font-family: Delicious, Helvetica, Arial, Verdana, sans-serif;
font-size: 175%; font-size: 175%;
@ -363,21 +358,21 @@ dd {
position: absolute; position: absolute;
top: 0; top: 0;
} }
/* line 221, ../../../app/stylesheets/_layout.sass */ /* line 218, ../../../app/stylesheets/_layout.sass */
#home-link:hover { #home-link:hover {
background: #eeffee; background: #eeffee;
text-decoration: none; text-decoration: none;
} }
/* line 224, ../../../app/stylesheets/_layout.sass */ /* line 221, ../../../app/stylesheets/_layout.sass */
#home-link span:before { #home-link span:before {
content: "<< "; content: "<< ";
} }
/* line 228, ../../../app/stylesheets/_layout.sass */ /* line 225, ../../../app/stylesheets/_layout.sass */
.pagination a, .pagination span { .pagination a, .pagination span {
margin: 0 0.5em; margin: 0 0.5em;
} }
/* line 230, ../../../app/stylesheets/_layout.sass */ /* line 227, ../../../app/stylesheets/_layout.sass */
.pagination .current { .pagination .current {
font-weight: bold; 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 { body.closet_hangers-index #title {
float: left; 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 { body.closet_hangers-index .flash {
clear: both; clear: both;
} }
/* line 12, ../../../app/stylesheets/closet_hangers/_index.sass */ /* line 9, ../../../app/stylesheets/partials/_secondary_nav.sass */
body.closet_hangers-index #import-link, body.closet_hangers-index #closet-hangers-items-search { body.closet_hangers-index #secondary-nav {
display: block;
margin-top: 0.75em; 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 { body.closet_hangers-index #import-link {
/* http://www.zurb.com/blog_uploads/0000/0617/buttons-03.html */ /* http://www.zurb.com/blog_uploads/0000/0617/buttons-03.html */
-moz-border-radius: 5px; -moz-border-radius: 5px;
@ -593,7 +593,6 @@ body.closet_hangers-index #import-link {
font-weight: bold; font-weight: bold;
line-height: 1; line-height: 1;
background: #ff5c00 url('/images/alert-overlay.png?1296599919') repeat-x; background: #ff5c00 url('/images/alert-overlay.png?1296599919') repeat-x;
margin-left: 2em;
} }
/* line 34, ../../../app/stylesheets/partials/clean/_mixins.sass */ /* line 34, ../../../app/stylesheets/partials/clean/_mixins.sass */
body.closet_hangers-index #import-link:hover { 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 { body.closet_hangers-index #import-link:hover {
background-color: #ee4b00; 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 { body.closet_hangers-index #closet-hangers-items-search {
float: right; 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 { body.closet_hangers-index #closet-hangers-items-search input[name=q].loading {
background-image: url(/images/loading.gif); background-image: url(/images/loading.gif);
background-position: 2px center; background-position: 2px center;
background-repeat: no-repeat; background-repeat: no-repeat;
padding-left: 20px; 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 { body.closet_hangers-index #closet-hangers-contact {
clear: both; clear: both;
font-size: 85%; font-size: 85%;
@ -630,65 +629,65 @@ body.closet_hangers-index #closet-hangers-contact {
margin-left: 2em; margin-left: 2em;
min-height: 16px; 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 { 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-position: left center;
background-repeat: no-repeat; background-repeat: no-repeat;
padding-left: 18px; 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 { 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; 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 { body.closet_hangers-index #closet-hangers-contact label {
font-weight: bold; font-weight: bold;
margin-right: 0.5em; 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 { body.closet_hangers-index #closet-hangers-contact label:after {
content: ":"; 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 { body.closet_hangers-index #edit-contact-link-to-replace-form, body.closet_hangers-index #cancel-contact-link {
display: none; 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 { body.closet_hangers-index .edit-contact-link, body.closet_hangers-index #cancel-contact-link {
cursor: pointer; cursor: pointer;
text-decoration: underline; 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 { body.closet_hangers-index .edit-contact-link:hover, body.closet_hangers-index #cancel-contact-link:hover {
text-decoration: none; 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 { body.closet_hangers-index #edit-contact-link-to-replace-form #contact-link-has-value {
display: none; 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 { body.closet_hangers-index #edit-contact-link-to-replace-form #contact-link-no-value {
display: inline; 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 { body.closet_hangers-index #edit-contact-link-to-replace-form.has-value #contact-link-has-value {
display: inline; 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 { body.closet_hangers-index #edit-contact-link-to-replace-form.has-value #contact-link-no-value {
display: none; 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 { body.closet_hangers-index #cancel-contact-link {
margin-left: 1em; 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 { body.closet_hangers-index #closet-hangers {
clear: both; clear: both;
text-align: center; 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 { body.closet_hangers-index #closet-hangers .object .quantity {
-moz-opacity: 0.75; -moz-opacity: 0.75;
-webkit-opacity: 0.75; -webkit-opacity: 0.75;
@ -702,59 +701,187 @@ body.closet_hangers-index #closet-hangers .object .quantity {
text-align: left; text-align: left;
top: 60px; 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] { body.closet_hangers-index #closet-hangers .object .quantity span, body.closet_hangers-index #closet-hangers .object .quantity input[type=number] {
font-size: 16px; font-size: 16px;
font-weight: bold; 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 { body.closet_hangers-index #closet-hangers .object form {
display: none; display: none;
} }
/* line 104, ../../../app/stylesheets/closet_hangers/_index.sass */ /* line 99, ../../../app/stylesheets/closet_hangers/_index.sass */
body.closet_hangers-index header { 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; border-bottom: 1px solid #aaddaa;
display: block; display: block;
margin-bottom: 0.25em; margin-bottom: 0.25em;
padding: 0.25em 0; padding: 0.25em 0;
position: relative; position: relative;
} }
/* line 111, ../../../app/stylesheets/closet_hangers/_index.sass */ /* line 114, ../../../app/stylesheets/closet_hangers/_index.sass */
body.closet_hangers-index header h3 { body.closet_hangers-index .closet-hangers-group > header h3 {
font-size: 250%; font-size: 250%;
margin: 0; margin: 0;
} }
/* line 115, ../../../app/stylesheets/closet_hangers/_index.sass */ /* line 118, ../../../app/stylesheets/closet_hangers/_index.sass */
body.closet_hangers-index header span.show, body.closet_hangers-index header span.hide { 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; color: #448844;
display: none; display: none;
font-size: 85%; font-size: 85%;
left: 1em;
position: absolute; position: absolute;
right: 1em; top: 1em;
bottom: 0;
} }
/* line 124, ../../../app/stylesheets/closet_hangers/_index.sass */ /* line 137, ../../../app/stylesheets/closet_hangers/_index.sass */
body.closet_hangers-index header:hover span.show, body.closet_hangers-index header:hover span.hide { body.closet_hangers-index .closet-hangers-group > header span.show:hover, body.closet_hangers-index .closet-hangers-group > header span.hide:hover {
color: inherit; color: inherit;
text-decoration: underline; text-decoration: underline;
} }
/* line 128, ../../../app/stylesheets/closet_hangers/_index.sass */ /* line 141, ../../../app/stylesheets/closet_hangers/_index.sass */
body.closet_hangers-index .closet-hangers-group { body.closet_hangers-index .closet-list {
border-top: 1px solid #006600; border-bottom: 1px solid #aaddaa;
margin-bottom: 2em; padding: 0.5em 0;
padding-bottom: 1em;
} }
/* 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 { body.closet_hangers-index.current-user #closet-hangers .object:hover form {
display: inline; 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 { body.closet_hangers-index.current-user #closet-hangers .object:hover .closet-hanger-destroy {
position: absolute; position: absolute;
right: 18px; right: 18px;
top: 0; 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 { 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 */ /* http://www.zurb.com/blog_uploads/0000/0617/buttons-03.html */
-moz-border-radius: 5px; -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 { body.closet_hangers-index.current-user #closet-hangers .object:hover .closet-hanger-destroy input:hover {
background-color: #999999; 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 { body.closet_hangers-index.current-user #closet-hangers .object:hover .quantity {
-moz-opacity: 1; -moz-opacity: 1;
-webkit-opacity: 1; -webkit-opacity: 1;
@ -805,97 +932,119 @@ body.closet_hangers-index.current-user #closet-hangers .object:hover .quantity {
top: 56px; top: 56px;
padding: 0; 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 { body.closet_hangers-index.current-user #closet-hangers .object:hover .quantity span {
display: none; 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] { body.closet_hangers-index.current-user #closet-hangers .object:hover .quantity input[type=number] {
padding: 2px; padding: 2px;
width: 2em; 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] { body.closet_hangers-index.current-user #closet-hangers .object:hover .quantity input[type=submit] {
font-size: 85%; 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] { body.closet_hangers-index.current-user.js #closet-hangers .object:hover .quantity input[type=number] {
width: 2.5em; 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] { body.closet_hangers-index.current-user.js #closet-hangers .object:hover .quantity input[type=submit] {
display: none; 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 { body.closet_hangers-index.current-user.js #closet-hangers .object.loading {
background: #eeffee; background: #eeffee;
outline: 1px solid #006600; 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 { body.closet_hangers-index.current-user.js #closet-hangers .object.loading .quantity span:after {
content: "…"; 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 { body.closet_hangers-index.current-user.js #closet-hangers-contact form {
display: none; 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 { 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; 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 { body.closet_hangers-index.current-user.js #closet-hangers-contact.editing form {
display: block; 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 { body.closet_hangers-index.current-user.js #closet-hangers-contact.editing .edit-contact-link {
display: none; display: none;
} }
/* line 194, ../../../app/stylesheets/closet_hangers/_index.sass */ /* line 247, ../../../app/stylesheets/closet_hangers/_index.sass */
body.closet_hangers-index.current-user.js .closet-hangers-group header { 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; 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 { body.closet_hangers-index.current-user.js .closet-hangers-group header .hide {
display: block; 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 { 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; 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 { body.closet_hangers-index.current-user.js .closet-hangers-group.hidden header .show {
display: block; display: block;
} }
/* line 3, ../../../app/stylesheets/closet_lists/_form.sass */ /* line 2, ../../../app/stylesheets/partials/_secondary_nav.sass */
body.closet_lists-new form ul.fields, body.closet_lists-create form ul.fields { 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; list-style: none;
} }
/* line 6, ../../../app/stylesheets/closet_lists/_form.sass */ /* 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-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; float: left;
font-weight: bold; font-weight: bold;
margin-right: 1em; margin-right: 1em;
} }
/* line 11, ../../../app/stylesheets/closet_lists/_form.sass */ /* 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-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; padding: 0.75em 0;
width: 25em; width: 25em;
} }
/* line 15, ../../../app/stylesheets/closet_lists/_form.sass */ /* 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-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; clear: both;
display: block; display: block;
margin-top: 0.25em; margin-top: 0.25em;
width: 80%; width: 80%;
} }
/* line 21, ../../../app/stylesheets/closet_lists/_form.sass */ /* 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-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; height: 12em;
} }
/* line 24, ../../../app/stylesheets/closet_lists/_form.sass */ /* 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-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; display: block;
font-size: 85%; font-size: 85%;
} }
@ -1303,7 +1452,7 @@ body.items-show #closet-hangers {
float: right; float: right;
font-size: 85%; font-size: 85%;
padding: 1em; padding: 1em;
width: 18em; width: 21em;
} }
/* line 73, ../../../app/stylesheets/items/_show.sass */ /* line 73, ../../../app/stylesheets/items/_show.sass */
body.items-show #closet-hangers label, body.items-show #closet-hangers header { 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; padding: 0.5em 0;
} }
/* line 83, ../../../app/stylesheets/items/_show.sass */ /* 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] { body.items-show #closet-hangers input[type=number] {
width: 4em; 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 */ /* line 418, ../../../app/stylesheets/outfits/_edit.sass */
body.outfits-edit .nc-icon { body.outfits-edit .nc-icon {
background: url('/images/nc.png?1311369565') no-repeat; background: url('/images/nc.png?1311877029') no-repeat;
height: 16px; height: 16px;
position: absolute; position: absolute;
right: 16px; right: 16px;

BIN
vendor/cache/sanitize-2.0.3.gem vendored Normal file

Binary file not shown.