diff --git a/Gemfile b/Gemfile index ab837d3b..9c29670d 100644 --- a/Gemfile +++ b/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' diff --git a/Gemfile.lock b/Gemfile.lock index 1554d6b9..487b8a40 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -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) diff --git a/app/controllers/closet_hangers_controller.rb b/app/controllers/closet_hangers_controller.rb index 2c3b079f..3598d232 100644 --- a/app/controllers/closet_hangers_controller.rb +++ b/app/controllers/closet_hangers_controller.rb @@ -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) } diff --git a/app/controllers/closet_lists_controller.rb b/app/controllers/closet_lists_controller.rb index 7409d05d..55bb75ce 100644 --- a/app/controllers/closet_lists_controller.rb +++ b/app/controllers/closet_lists_controller.rb @@ -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 diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index b253f37f..516dab4a 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -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 diff --git a/app/helpers/closet_hangers_helper.rb b/app/helpers/closet_hangers_helper.rb index 3691ddf4..2e6a5296 100644 --- a/app/helpers/closet_hangers_helper.rb +++ b/app/helpers/closet_hangers_helper.rb @@ -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 diff --git a/app/helpers/closet_lists_helper.rb b/app/helpers/closet_lists_helper.rb index fbcfd38b..fff481e3 100644 --- a/app/helpers/closet_lists_helper.rb +++ b/app/helpers/closet_lists_helper.rb @@ -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 diff --git a/app/models/closet_hanger.rb b/app/models/closet_hanger.rb index c70ec426..dfef7c7f 100644 --- a/app/models/closet_hanger.rb +++ b/app/models/closet_hanger.rb @@ -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) diff --git a/app/models/closet_list.rb b/app/models/closet_list.rb index d0c14151..d74fd956 100644 --- a/app/models/closet_list.rb +++ b/app/models/closet_list.rb @@ -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! diff --git a/app/stylesheets/_layout.sass b/app/stylesheets/_layout.sass index c4477add..bed2cd43 100644 --- a/app/stylesheets/_layout.sass +++ b/app/stylesheets/_layout.sass @@ -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 diff --git a/app/stylesheets/closet_hangers/_index.sass b/app/stylesheets/closet_hangers/_index.sass index 37a3eb09..57b3c14e 100644 --- a/app/stylesheets/closet_hangers/_index.sass +++ b/app/stylesheets/closet_hangers/_index.sass @@ -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 diff --git a/app/stylesheets/closet_lists/_form.sass b/app/stylesheets/closet_lists/_form.sass index 1c1295bb..4d85c2ec 100644 --- a/app/stylesheets/closet_lists/_form.sass +++ b/app/stylesheets/closet_lists/_form.sass @@ -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 diff --git a/app/stylesheets/items/_show.sass b/app/stylesheets/items/_show.sass index 9f98674a..98df4601 100644 --- a/app/stylesheets/items/_show.sass +++ b/app/stylesheets/items/_show.sass @@ -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 diff --git a/app/stylesheets/partials/_secondary_nav.sass b/app/stylesheets/partials/_secondary_nav.sass new file mode 100644 index 00000000..f4f501e1 --- /dev/null +++ b/app/stylesheets/partials/_secondary_nav.sass @@ -0,0 +1,12 @@ +=secondary-nav + #title + float: left + margin-right: .5em + + .flash + clear: both + + #secondary-nav + display: block + margin-top: .75em + diff --git a/app/views/closet_hangers/_closet_hanger.html.haml b/app/views/closet_hangers/_closet_hanger.html.haml index ad7dd007..44a20148 100644 --- a/app/views/closet_hangers/_closet_hanger.html.haml +++ b/app/views/closet_hangers/_closet_hanger.html.haml @@ -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| diff --git a/app/views/closet_hangers/index.html.haml b/app/views/closet_hangers/index.html.haml index 92c26f57..6e921a1d 100644 --- a/app/views/closet_hangers/index.html.haml +++ b/app/views/closet_hangers/index.html.haml @@ -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' diff --git a/app/views/closet_lists/_closet_list.html.haml b/app/views/closet_lists/_closet_list.html.haml new file mode 100644 index 00000000..56a6cc19 --- /dev/null +++ b/app/views/closet_lists/_closet_list.html.haml @@ -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. + diff --git a/app/views/closet_lists/_form.html.haml b/app/views/closet_lists/_form.html.haml index 8c5e229f..d4d43c03 100644 --- a/app/views/closet_lists/_form.html.haml +++ b/app/views/closet_lists/_form.html.haml @@ -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' diff --git a/app/views/closet_lists/edit.html.haml b/app/views/closet_lists/edit.html.haml new file mode 100644 index 00000000..d5ed6893 --- /dev/null +++ b/app/views/closet_lists/edit.html.haml @@ -0,0 +1,3 @@ +- title "Editing list \"#{@closet_list.name}\"" += render 'form' + diff --git a/app/views/items/show.html.haml b/app/views/items/show.html.haml index 28845458..15219b1a 100644 --- a/app/views/items/show.html.haml +++ b/app/views/items/show.html.haml @@ -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 diff --git a/config/routes.rb b/config/routes.rb index d5f9f611..49cf66c8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -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] diff --git a/db/migrate/20110726231143_create_closet_lists.rb b/db/migrate/20110726231143_create_closet_lists.rb index 272cbb71..85ec7f33 100644 --- a/db/migrate/20110726231143_create_closet_lists.rb +++ b/db/migrate/20110726231143_create_closet_lists.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index 2b6d18c2..c8547726 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -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| diff --git a/public/javascripts/closet_hangers/index.js b/public/javascripts/closet_hangers/index.js index 9ce9a744..f2636a2c 100644 --- a/public/javascripts/closet_hangers/index.js +++ b/public/javascripts/closet_hangers/index.js @@ -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(); + }); })(); diff --git a/public/stylesheets/compiled/screen.css b/public/stylesheets/compiled/screen.css index 43e89f3d..6929cf3a 100644 --- a/public/stylesheets/compiled/screen.css +++ b/public/stylesheets/compiled/screen.css @@ -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; diff --git a/vendor/cache/sanitize-2.0.3.gem b/vendor/cache/sanitize-2.0.3.gem new file mode 100644 index 00000000..8d81d81e Binary files /dev/null and b/vendor/cache/sanitize-2.0.3.gem differ