diff --git a/app/controllers/items_controller.rb b/app/controllers/items_controller.rb index c626ea36..8dc76ffa 100644 --- a/app/controllers/items_controller.rb +++ b/app/controllers/items_controller.rb @@ -1,6 +1,8 @@ class ItemsController < ApplicationController before_filter :set_query + layout 'items' + def index if params.has_key?(:q) begin @@ -18,7 +20,7 @@ class ItemsController < ApplicationController end rescue respond_to do |format| - format.html { flash.now[:error] = $!.message } + format.html { flash.now[:alert] = $!.message } format.js { render :json => {:error => $!.message}, :callback => params[:callback] } end end diff --git a/app/controllers/outfits_controller.rb b/app/controllers/outfits_controller.rb index 14b40bba..ebc8022b 100644 --- a/app/controllers/outfits_controller.rb +++ b/app/controllers/outfits_controller.rb @@ -2,4 +2,10 @@ class OutfitsController < ApplicationController def edit render :layout => false end + + def new + @colors = Color.all + @species = Species.all + @top_contributors = User.top_contributors.limit(3) + end end diff --git a/app/controllers/pets_controller.rb b/app/controllers/pets_controller.rb index 63fa8c2f..b610081a 100644 --- a/app/controllers/pets_controller.rb +++ b/app/controllers/pets_controller.rb @@ -1,7 +1,28 @@ class PetsController < ApplicationController - def show - @pet = Pet.load(params[:id]) + rescue_from Pet::PetNotFound, :with => :pet_not_found + + DESTINATIONS = { + 'needed_items' => '?', + 'root' => '#', + 'wardrobe' => '#' + } + + def load + raise Pet::PetNotFound unless params[:name] + @pet = Pet.load(params[:name]) @pet.save - redirect_to wardrobe_path(:anchor => @pet.wardrobe_query) + destination = params[:destination] + destination = 'root' unless DESTINATIONS[destination] + query_joiner = DESTINATIONS[destination] + path = send("#{destination}_path") + query_joiner + @pet.wardrobe_query + redirect_to path + end + + protected + + def pet_not_found + path = params[:origin] || root_path + path += "?name=#{params[:name]}" + redirect_to path, :alert => 'Could not find any pet by that name. Did you spell it correctly?' end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 0d2f783c..8257b317 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -7,11 +7,29 @@ module ApplicationHelper ).to_s end + def body_class + "#{params[:controller]} #{params[:controller]}-#{params[:action]}" + end + def flashes - flash.inject('') do |html, pair| + raw(flash.inject('') do |html, pair| key, value = pair - content_tag 'p', value, :class => key - end + html + content_tag('p', value, :class => key) + end) + end + + JAVASCRIPT_LIBRARIES = { + :addthis => 'http://s7.addthis.com/js/250/addthis_widget.js#username=openneo', + :bitly => 'http://bit.ly/javascript-api.js?version=latest&login=openneo&apiKey=R_4d0438829b7a99860de1d3edf55d8dc8', + :html5 => 'http://html5shim.googlecode.com/svn/trunk/html5.js', + :jquery => 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js', + :swfobject => 'http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js' + } + + def include_javascript_libraries(*library_names) + raw(library_names.inject('') do |html, name| + html + javascript_include_tag(JAVASCRIPT_LIBRARIES[name]) + end) end def login_path_with_return_to diff --git a/app/helpers/outfits_helper.rb b/app/helpers/outfits_helper.rb new file mode 100644 index 00000000..d13a630c --- /dev/null +++ b/app/helpers/outfits_helper.rb @@ -0,0 +1,18 @@ +module OutfitsHelper + def destination_tag(value) + hidden_field_tag 'destination', value, :id => nil + end + + def origin_tag(value) + hidden_field_tag 'origin', value, :id => nil + end + + def pet_attribute_select(name, collection, value=nil) + select_tag name, + options_from_collection_for_select(collection, :id, :human_name, value) + end + + def pet_name_tag + text_field_tag 'name', nil, :spellcheck => false, :id => nil + end +end diff --git a/app/models/pet_attribute.rb b/app/models/pet_attribute.rb index 5f70a6d3..b131573b 100644 --- a/app/models/pet_attribute.rb +++ b/app/models/pet_attribute.rb @@ -2,10 +2,14 @@ class PetAttribute < StaticResource def as_json(options={}) { :id => self.id, - :name => self.name.capitalize + :name => self.human_name } end + def human_name + self.name.capitalize + end + def self.find_by_name(name) @objects_by_name[name.downcase] end diff --git a/app/models/user.rb b/app/models/user.rb index f77ec893..6aec9d37 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,6 +1,8 @@ class User < ActiveRecord::Base DefaultAuthServerId = 1 + scope :top_contributors, order('points DESC') + def self.find_or_create_from_remote_auth_data(user_data) user = find_or_initialize_by_remote_id_and_auth_server_id( user_data['id'], diff --git a/app/stylesheets/_clean_constants.sass b/app/stylesheets/_clean_constants.sass deleted file mode 100644 index 435f5093..00000000 --- a/app/stylesheets/_clean_constants.sass +++ /dev/null @@ -1,21 +0,0 @@ -$text-color: #004400 -$link-color: $text-color + #222222 -$module-bg-color: #eeffee -$module-border-color: #006600 -$input-border-color: #cceecc -$marked-button-color: #0b61a4 - -$notice-color: #264409 -$notice-bg-color: #e6efc2 -$notice-border-color: #c6d880 -$error-color: #8a1f11 -$error-bg-color: #fbe3e4 -$error-border-color: #fbc2c4 - -$header-font: Delicious, Helvetica, Arial, Verdana, sans-serif -$body-font: "Droid Serif", Georgia, "Times New Roman", Times, serif - -$object-img-size: 80px -$object-width: 100px -$object-padding: 6px -$nc-icon-size: 16px diff --git a/app/stylesheets/_items.sass b/app/stylesheets/_items.sass new file mode 100644 index 00000000..c40a8993 --- /dev/null +++ b/app/stylesheets/_items.sass @@ -0,0 +1,19 @@ +body.items + text-align: center + + input[type=text] + font-size: 125% + width: 15em + + h1 + margin-bottom: 1em + img + height: 80px + margin-bottom: -0.5em + width: 80px + a + text-decoration: none + span + text-decoration: underline + &:hover span + text-decoration: none diff --git a/app/stylesheets/_layout.sass b/app/stylesheets/_layout.sass new file mode 100644 index 00000000..1f6d5d38 --- /dev/null +++ b/app/stylesheets/_layout.sass @@ -0,0 +1,239 @@ +/* Reset + +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, +blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, +font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, +u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, +caption, tbody, tfoot, thead, tr, th, td + margin: 0 + padding: 0 + border: 0 + outline: 0 + font-size: 100% + vertical-align: baseline + background: transparent + +/* Typography + +html, body + height: 100% + +body + color: $text-color + font: + family: $main-font + size: 90% + line-height: 1.5 + +a + color: $link-color + +p + font-family: $text-font + +input, button, select + font: + family: inherit + size: 100% + +p + margin-bottom: 1em + +h1, h2, h3 + +header-text + +h1 + font-size: 3em + line-height: 1 + margin-bottom: 0.50em + +h2 + font-size: 2em + margin-bottom: 0.75em + +h3 + font-size: 1.5em + line-height: 1 + margin-bottom: 1.00em + +.inline-image + margin-right: 1em + vertical-align: middle + +/* Main + +$container_width: 800px + +#container + margin: 1em auto + padding-top: 3em + position: relative + width: $container_width + +input, button, select, label + cursor: pointer + +input[type=text], input[type=password], input[type=search], select + +border-radius(3px) + background: #fff + border: 1px solid $input-border-color + color: $text-color + #444444 + padding: .25em + &:focus, &:active + color: inherit + +a.button, input[type=submit], button + +awesome-button + &.loud + +loud-awesome-button + +a.button + +arrowed-awesome-button + +ul.buttons + margin-bottom: 1em + li + list-style: none + margin: 0 .5em + &, form + display: inline + +#footer + clear: both + font-size: 75% + margin-bottom: 1em + padding-top: 2em + text-align: center + ul, div + display: inline + margin: 0 1em + li, div ul + display: inline + margin: 0 .5em + +.success, .alert, .warning + margin-bottom: 1em + padding: .25em .5em + text-align: center + +.success + background: $notice-bg-color + border: 1px solid $notice-border-color + color: $notice-color + +.alert + background: $error-bg-color + border: 1px solid $error-border-color + color: $error-color + +.warning + background: $warning-bg-color + border: 1px solid $warning-border-color + color: $warning-color + +#userbar + +header-text + position: absolute + right: 0 + top: 0 + > * + display: inline + margin: 0 .25em + +#userbar-log-in + text-decoration: none + img + margin: + bottom: -4px + right: .25em + span + text-decoration: underline + &:hover span + text-decoration: none + +.object + +inline-block + padding: .5em + position: relative + text-align: center + vertical-align: top + width: $object-width + a + text-decoration: none + img + +opacity(0.75) + &:hover img + +opacity(1) + img + display: block + height: $object-img-size + margin: 0 auto + width: $object-img-size + +dt + font-weight: bold + +dd + margin: 0 0 1.5em 1em + +#home-link + +header-text + font: + size: 175% + weight: bold + left: 0 + line-height: 1 + padding: .25em + position: absolute + top: 0 + &:hover + background: $module-bg-color + text-decoration: none + span:before + content: "<< " + +.pagination + a, span + margin: 0 .5em + .current + font-weight: bold + +/* Fonts + +/* A font by Jos Buivenga (exljbris) -> www.exljbris.nl +@font-face + font-family: Delicious + src: url("/assets/fonts/Delicious-Roman.otf") + + +@font-face + font-family: Delicious + font-weight: bold + src: url("/assets/fonts/Delicious-Bold.otf") + + +@font-face + font-family: Delicious + font-style: italic + src: url("/assets/fonts/Delicious-Italic.otf") + + +@font-face + font-family: 'Droid Serif' + font-style: normal + font-weight: normal + src: local("Droid Serif"), url("http://themes.googleusercontent.com/font?kit=70P0G8gxVDIV6F9om0DsKg") format("truetype") + + +@font-face + font-family: 'Droid Serif' + font-style: normal + font-weight: bold + src: local("Droid Serif"), url("http://themes.googleusercontent.com/font?kit=QQt14e8dY39u-eYBZmppwf5Jgr8ufe5A6KahQF76Xmg") format("truetype") + + +@font-face + font-family: 'Droid Sans' + font-style: normal + font-weight: normal + src: local("Droid Sans"), url("http://themes.googleusercontent.com/font?kit=POVDFY-UUf0WFR9DIMCU8g") format("truetype") diff --git a/app/stylesheets/items/_show.sass b/app/stylesheets/items/_show.sass index efe67ab7..24b3b239 100644 --- a/app/stylesheets/items/_show.sass +++ b/app/stylesheets/items/_show.sass @@ -48,7 +48,7 @@ body.items-show width: 300px #item-zones font: - family: $body-font + family: $text-font size: 85% p:first-child margin-bottom: .25em diff --git a/app/stylesheets/outfits/_new.sass b/app/stylesheets/outfits/_new.sass new file mode 100644 index 00000000..dee34334 --- /dev/null +++ b/app/stylesheets/outfits/_new.sass @@ -0,0 +1,145 @@ +body.outfits-new + #outfit-forms + +clearfix + +module + margin-bottom: 3em + position: relative + h1 + margin-bottom: 0 + h2 + font: + size: 150% + style: italic + text-indent: 1em + #pet-preview + float: left + height: 300px + margin-right: 2em + position: relative + width: 300px + img + height: 100% + width: 100% + &.loading img + +opacity(0.5) + &.hidden img + display: none + &.loaded + cursor: pointer + span + background: rgb(128, 128, 128) + background: rgba(0, 0, 0, 0.5) + bottom: 0 + color: #fff + padding: .25em .5em + position: absolute + right: 0 + &:empty + display: none + fieldset + position: relative + left: 1em + legend + margin-left: -1em + #load-pet-to-wardrobe + font-size: 175% + margin: + bottom: 1em + top: 2em + input + font-size: 67% + padding: .5em + width: 10em + button + +loud-awesome-button + font-size: 67% + #description, #top-contributors + float: left + #description + margin-right: 2% + width: 64% + #top-contributors + border: 1px solid $input-border-color + margin-top: 1em + padding: 1% + width: 30% + ol + margin-left: 2em + padding-left: 1em + > a + font-size: 80% + display: block + text-align: right + #how-can-i-help, #i-found-something + +module + float: left + padding: 1% + width: 46% + h2 + font-style: italic + input, button + font-size: 115% + input[type=text] + border-color: $module-border-color + width: 12em + #how-can-i-help + margin-right: 1% + #i-found-something + margin-left: 1% + a + float: right + font-size: 87.5% + margin-top: 1em + $section-count: 3 + $section-border-width: 1px + $section-padding: 0.5em + $section-width: 100% / $section-count + // (A - (B-1)*C) / B + #sections + +clearfix + display: table + list-style: none + margin-bottom: 1em + h3 + margin-bottom: .25em + li + border-left: + color: $module-border-color + style: solid + width: $section-border-width + display: table-cell + padding: $section-padding + position: relative + width: $section-width + &:first-child + border-left: 0 + div + color: $soft-text-color + font-size: 75% + margin-left: 1em + z-index: 2 + h4, input + font-size: 116% + h4, input[type=text] + color: inherit + h4 a + background: #ffffc0 + img + +opacity(0.75) + float: right + margin-left: .5em + &:hover + +opacity(1) + #read-more + float: right + #tell-the-world + font-size: 87.5% + left: 0 + position: absolute + top: 0 + img + margin: + bottom: -0.25em + right: .25em + height: 16px + width: 16px diff --git a/app/stylesheets/partials/clean/_constants.sass b/app/stylesheets/partials/clean/_constants.sass new file mode 100644 index 00000000..8894fc35 --- /dev/null +++ b/app/stylesheets/partials/clean/_constants.sass @@ -0,0 +1,27 @@ +$text-color: #040 +$soft-text-color: $text-color + #444 +$link-color: $text-color + #222 +$module-bg-color: #efe +$module-border-color: #060 +$soft-border-color: #ada +$input-border-color: #cec +$marked-button-color: #0b61a4 + +$notice-color: #264409 +$notice-bg-color: #e6efc2 +$notice-border-color: #c6d880 +$warning-color: #514721 +$warning-bg-color: #fff6bf +$warning-border-color: #ffd324 +$error-color: #8a1f11 +$error-bg-color: #fbe3e4 +$error-border-color: #fbc2c4 + +$header-font: Delicious, Helvetica, Arial, Verdana, sans-serif +$main-font: "Droid Sans", Helvetica, Arial, Verdana, sans-serif +$text-font: "Droid Serif", Georgia, "Times New Roman", Times, serif + +$object-img-size: 80px +$object-width: 100px +$object-padding: 6px +$nc-icon-size: 16px diff --git a/app/stylesheets/partials/clean/_mixins.sass b/app/stylesheets/partials/clean/_mixins.sass new file mode 100644 index 00000000..5d80dc1c --- /dev/null +++ b/app/stylesheets/partials/clean/_mixins.sass @@ -0,0 +1,73 @@ +=box-sizing($bs) + $bs: unquote($bs) + +experimental(box-sizing, $bs, -moz, -webkit, not -o, -ms, not -khtml, official) + +=clearfix + overflow: hidden + display: inline-block + & + display: block + +=border-radius($r) + -moz-border-radius: $r + -webkit-border-radius: $r + +=inline-block + display: -moz-inline-box + -moz-box-orient: vertical + display: inline-block + vertical-align: middle + *display: inline + *vertical-align: auto + +=opacity($o) + -moz-opacity: $o + -webkit-opacity: $o + -o-opacity: $o + -khtml-opacity: $o + +=header-text + font-family: $header-font + +=awesome-button-color($c) + background: $c url(/assets/images/alert-overlay.png) repeat-x + &:hover + background-color: $c - #111111 + +=awesome-button + /* http://www.zurb.com/blog_uploads/0000/0617/buttons-03.html + +border-radius(5px) + +awesome-button-color(#006400) + border: 0 + display: inline-block + padding: .5em .75em .45em + color: #fff + 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 + &:hover + color: #fff + &:active + top: 1px + +=loud-awesome-button-color + +awesome-button-color(#ff5c00) + +=loud-awesome-button + +loud-awesome-button-color + font-size: 125% + padding: 8px 14px 9px + +=arrowed-awesome-button + &:after + content: " >>" + +=module + background: $module-bg-color + border: 1px solid $module-border-color + padding: 1em diff --git a/app/stylesheets/screen.sass b/app/stylesheets/screen.sass index 611897e2..df04c6d8 100644 --- a/app/stylesheets/screen.sass +++ b/app/stylesheets/screen.sass @@ -1,36 +1,10 @@ @import compass -@import clean_constants +@import partials/clean/constants +@import partials/clean/mixins -body - text-align: center - -input[type=text] - font-size: 125% - width: 15em - -h1 - margin-bottom: 1em - img - height: 80px - margin-bottom: -0.5em - width: 80px - a - text-decoration: none - span - text-decoration: underline - &:hover span - text-decoration: none - -#userbar-log-in - text-decoration: none - img - margin: - bottom: -4px - right: .25em - span - text-decoration: underline - &:hover span - text-decoration: none +@import layout +@import items @import items/index @import items/show +@import outfits/new diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml new file mode 100644 index 00000000..1a44812c --- /dev/null +++ b/app/views/layouts/application.html.haml @@ -0,0 +1,55 @@ +!!! 5 +%html + %head + %title Dress to Impress + = stylesheet_link_tag "compiled/screen" + = javascript_include_tag "http://#{RemoteImpressHost}/assets/js/analytics.js" + %body{:class => body_class} + #container + = yield :before_flashes + = flashes + + - if content_for? :content + = yield(:content) + - else + = yield + + - if content_for? :home_link + = yield :home_link + - else + %a#home-link{:href => root_path} + %span Dress to Impress + + #userbar + - if user_signed_in? + == Hey, #{current_user.name}! + == You have #{current_user.points} points. + = link_to 'Log out', logout_path + - else + = link_to login_path_with_return_to, :id => 'userbar-log-in' do + = image_tag auth_server_icon_url + %span Log in + + #footer + %ul + %li + %a{:href => "http://openneo.net/", :target => "_blank"} OpenNeo + %li + %a{:href => "http://blog.openneo.net/", :target => "_blank"} Blog + %li + %a{:href => "http://forum.openneo.net/", :target => "_blank"} Forum + %li + %a{:href => "http://github.com/matchu/openneo-impress"} The Source Code + %li + %a{:href => "/terms.html"} Terms of Use + %div + Contact: + %ul + %li + %a{:href => "http://openneo.uservoice.com/forums/40720-dress-to-impress"} Feedback + %li + %a{:href => "mailto:webmaster@openneo.net"} Questions, comments, bug reports + %p + Images © 2000-2010 Neopets, Inc. All Rights Reserved. + Used With Permission + = yield(:javascripts) diff --git a/app/views/layouts/items.html.haml b/app/views/layouts/items.html.haml index 661c7bdf..6e04e5c3 100644 --- a/app/views/layouts/items.html.haml +++ b/app/views/layouts/items.html.haml @@ -1,40 +1,11 @@ -!!! 5 -%html - %head - %title Infinite Closet - = stylesheet_link_tag "http://#{RemoteImpressHost}/assets/css/clean/layout.css" - = stylesheet_link_tag "compiled/screen" - = javascript_include_tag "http://#{RemoteImpressHost}/assets/js/analytics.js" - %body{:class => params[:action]} - #container - %h1 - = link_to items_path do - = image_tag 'http://images.neopets.com/items/mall_floatingneggfaerie.gif' - %span Infinite Closet - = flashes - = form_tag items_path, :method => :get do - = text_field_tag :q, @query - = submit_tag 'Search', :name => nil - = yield - %a#home-link{:href => "http://#{RemoteImpressHost}"} - %span Dress to Impress - #userbar - - if user_signed_in? - == Hey, #{current_user.name}! - == You have #{current_user.points} points. - = link_to 'Log out', logout_path - - else - = link_to login_path_with_return_to, :id => 'userbar-log-in' do - = image_tag auth_server_icon_url - %span Log in - #footer - %ul - %li= link_to 'OpenNeo', 'http://www.openneo.net/' - %li= link_to 'Blog', 'http://blog.openneo.net/' - %li= link_to 'The Source Code', 'http://github.com/matchu/openneo-impress' - %li= link_to 'Forum', 'http://forum.openneo.net/' - %li= link_to 'Terms of Use', "http://#{RemoteImpressHost}/terms.html" - %p - Images © 2000-2010 Neopets, Inc. All Rights Reserved. - Used With Permission - = yield(:javascripts) +- content_for :before_flashes do + %h1 + = link_to items_path do + = image_tag 'http://images.neopets.com/items/mall_floatingneggfaerie.gif' + %span Infinite Closet +- content_for :content do + = form_tag items_path, :method => :get do + = text_field_tag :q, @query + = submit_tag 'Search', :name => nil + = yield += render :file => 'layouts/application' diff --git a/app/views/outfits/edit.html.haml b/app/views/outfits/edit.html.haml index 337c9231..36fdd316 100644 --- a/app/views/outfits/edit.html.haml +++ b/app/views/outfits/edit.html.haml @@ -81,11 +81,8 @@ #no-assets-full-message We haven't seen this item on this body type before. Have you? Submit its name on the home page if you have! /[if IE] - - %script{:src => "http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js", :type => "text/javascript"} - %script{:src => "http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js", :type => "text/javascript"} - %script{:src => "http://bit.ly/javascript-api.js?version=latest&login=openneo&apiKey=R_4d0438829b7a99860de1d3edf55d8dc8", :type => "text/javascript"} - %script{:src => "http://s7.addthis.com/js/250/addthis_widget.js#username=openneo", :type => "text/javascript"} + = include_javascript_libraries :html5 + = include_javascript_libraries :jquery, :swfobject, :bitly, :addthis %script{:src => "http://#{RemoteImpressHost}/assets/timestamped/js/jquery.jgrowl-v1278204174.js", :type => "text/javascript"} = include_javascripts :edit_outfit_package #userbar @@ -115,5 +112,5 @@ %li %a{:href => "mailto:webmaster@openneo.net"} Questions, comments, bug reports %p - Images © 2000-2010 Neopets, Inc. All Rights Reserved. + Images © 2000-2010 Neopets, Inc. All Rights Reserved. Used With Permission diff --git a/app/views/outfits/new.html.haml b/app/views/outfits/new.html.haml new file mode 100644 index 00000000..807f7b8c --- /dev/null +++ b/app/views/outfits/new.html.haml @@ -0,0 +1,107 @@ +#outfit-forms + #pet-preview + = image_tag 'default_preview.png' + %span + %h1 Dress to Impress + %h2 Neopets wearables made easy! + = form_tag load_pet_path, :id => 'load-pet-to-wardrobe' do + = origin_tag root_path + = destination_tag 'wardrobe' + %fieldset + %legend Enter your pet's name + = pet_name_tag + %button{:type => "submit"} + Plan my outfit! + = form_tag wardrobe_path, :method => 'get', :id => 'start-from-scratch' do + %fieldset + %legend Or start from scratch + = pet_attribute_select 'color', @colors, 8 + = pet_attribute_select 'species', @species + %input{:type => "submit", :value => "Go"} +%ul#sections + %li + %a{:href => "http://forum.openneo.net"} + = image_tag 'forum.png' + %h3 + %a{:href => "http://forum.openneo.net/"} Forum + %div + %h4 Join our community! + %p + Show off your designs, ask for advice, or play silly forum games + here. + %li + %a{:href => items_path} + = image_tag 'items.png' + %h3 + %a{:href => items_path} + Infinite Closet + %div + %h4 Looking for something? + %p + Take a look through our wearables database! + = form_tag items_path, :method => 'get' do + = text_field_tag 'q', '', :placeholder => raw('search items…'), :type => 'search' + = submit_tag 'search' + %li#blog-preview + %a{:href => "http://blog.openneo.net"} + = image_tag 'blog.png' + %h3 + %a{:href => "http://blog.openneo.net/"} OpenNeo Blog + %div + %h4 We'll keep you posted! + %p + Dress to Impress is always improving, and you can always stay in + the loop through our blog. +#description + %h2 Built by you, just for you! + %p + Dress to Impress lets you plan how you want to dress up your Neopets, + before you even go shopping! Whenever you give us a Neopet's name, we + automatically look up what it's wearing and organize the data into + our own wearables database — a community closet, if you will. + Then you can plan your outfit, mixing and matching various items, so + you can have the best-dressed Neopet in all of Neopia! + %p + To make all this possible, though, we need your help — and if + you log in at the top, we'll keep track of your + = link_to 'contributions', contributions_path + and award + = link_to 'points', top_contributors_path + so you can show off just how dedicated you really are! +#top-contributors + %h3 Top Contributors + %ol + - @top_contributors.each do |user| + %li + = link_to user.name, user_contributions_path(user) + — + = user.points + %a{:href => top_contributors_path} see more += form_tag load_pet_path, :id => 'how-can-i-help' do + = destination_tag 'needed_items' + = origin_tag root_path + %h2 How can I help? + %p + Enter your pet's name, and we'll tell you what items you can help us + model. Thanks so much! + = pet_name_tag + %button{:type => "submit"} + Let's model! += form_tag load_pet_path, :id => 'i-found-something' do + = origin_tag root_path + %a{:href => bulk_pets_path} + add many pets + %h2 I found something! + %p + Enter the name of the pet you found, and we'll keep a copy of what + it's wearing. Thanks so much! + = pet_name_tag + %button{:type => "submit"} + I pwn! +- content_for :home_link do + %button#tell-the-world.button.addthis_button + %img{:src => "http://s7.addthis.com/static/t00/logo1414.gif"} + Tell the world! +- content_for :javascripts do + = include_javascript_libraries :jquery, :addthis + = include_javascripts :new_outfit_package diff --git a/config/assets.yml b/config/assets.yml index 5e430863..1b812a46 100644 --- a/config/assets.yml +++ b/config/assets.yml @@ -4,3 +4,7 @@ javascripts: edit_outfit_package: - public/javascripts/wardrobe.js - public/javascripts/outfits/edit.js + + new_outfit_package: + - public/javascripts/pet_query.js + - public/javascripts/outfits/new.js diff --git a/config/routes.rb b/config/routes.rb index b3ff211e..68ec96a2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,5 @@ OpenneoImpressItems::Application.routes.draw do |map| - root :to => 'items#index' + root :to => 'outfits#new' match '/' => 'items#index', :as => :items match '/index.js' => 'items#index', :format => :js match '/items.json' => 'items#index', :format => :json @@ -15,13 +15,26 @@ OpenneoImpressItems::Application.routes.draw do |map| match '/pet_states/:pet_state_id/swf_assets.json' => 'swf_assets#index', :as => :pet_state_swf_assets match '/species/:species_id/color/:color_id/pet_type.json' => 'pet_types#show' - resources :items, :only => [:index] + resources :contributions, :only => [:index] + resources :items, :only => [:index] do + collection do + get :needed + end + end resources :pet_attributes, :only => [:index] - resources :pets, :only => [:show] + + match '/pets/load' => 'pets#load', :method => :post, :as => :load_pet + match '/pets/bulk' => 'pets#bulk', :as => :bulk_pets match '/login' => 'sessions#new', :as => :login match '/logout' => 'sessions#destroy', :as => :logout match '/users/authorize' => 'sessions#create' + resources :user, :only => [] do + resources :contributions, :only => [:index] + end + match 'users/top-contributors' => 'users#top_contributors', :as => :top_contributors + match 'users/top_contributors' => redirect('/users/top-contributors') + match '/wardrobe' => 'outfits#edit', :as => :wardrobe end diff --git a/public/images/blog.png b/public/images/blog.png new file mode 100644 index 00000000..0b118eef Binary files /dev/null and b/public/images/blog.png differ diff --git a/public/images/default_preview.png b/public/images/default_preview.png new file mode 100644 index 00000000..1abc124b Binary files /dev/null and b/public/images/default_preview.png differ diff --git a/public/images/forum.png b/public/images/forum.png new file mode 100644 index 00000000..8ec45952 Binary files /dev/null and b/public/images/forum.png differ diff --git a/public/images/items.png b/public/images/items.png new file mode 100644 index 00000000..0e7ec487 Binary files /dev/null and b/public/images/items.png differ diff --git a/public/javascripts/outfits/new.js b/public/javascripts/outfits/new.js new file mode 100644 index 00000000..477de0a9 --- /dev/null +++ b/public/javascripts/outfits/new.js @@ -0,0 +1,176 @@ +(function () { // don't need to export anything in here + +var preview_el = $('#pet-preview'), + img_el = preview_el.find('img'), + response_el = preview_el.find('span'), + name_el = $('#name'); + +preview_el.click(function () { + name_el.val(Preview.Job.current.name).closest('form').submit(); +}); + +var Preview = { + clear: function () { + if(typeof Preview.Job.fallback != 'undefined') Preview.Job.fallback.setAsCurrent(); + }, + displayLoading: function () { + preview_el.addClass('loading'); + response_el.text('Loading...'); + }, + notFound: function (str) { + preview_el.addClass('hidden'); + response_el.text(str); + }, + updateWithName: function () { + var name = name_el.val(), job; + if(name) { + currentName = name; + if(!Preview.Job.current || name != Preview.Job.current.name) { + job = new Preview.Job.Name(name); + job.setAsCurrent(); + Preview.displayLoading(); + } + } else { + Preview.clear(); + } + } +} + +$.get('/spotlight_pets.txt', function (data) { + var names = data.split('\n'), i = Math.floor(Math.random()*(names.length-1)); + Preview.Job.fallback = new Preview.Job.Name(names[i]); + if(!Preview.Job.current) { + Preview.Job.fallback.setAsCurrent(); + } +}); + +Preview.Job = function (key, base) { + var job = this, + quality = 2; + job.loading = false; + + function getImageSrc() { + return petImage(base + '/' + key, quality); + } + + function load() { + job.loading = true; + img_el.attr('src', getImageSrc()); + } + + this.increaseQualityIfPossible = function () { + if(quality == 2) { + quality = 4; + load(); + } + } + + this.setAsCurrent = function () { + Preview.Job.current = job; + load(); + } +} + +Preview.Job.Name = function (name) { + this.name = name; + Preview.Job.apply(this, [name, 'cpn']); +} + +Preview.Job.Hash = function (hash) { + Preview.Job.apply(this, [hash, 'cp']); +} + + +$(function () { + var previewWithNameTimeout; + + name_el.val(PetQuery.name); + Preview.updateWithName(); + + name_el.keyup(function () { + if(previewWithNameTimeout) { + clearTimeout(previewWithNameTimeout); + Preview.Job.current.loading = false; + } + previewWithNameTimeout = setTimeout(Preview.updateWithName, 250); + }); + + img_el.load(function () { + if(Preview.Job.current.loading) { + Preview.Job.loading = false; + Preview.Job.current.increaseQualityIfPossible(); + preview_el.removeClass('loading').removeClass('hidden').addClass('loaded'); + response_el.text(Preview.Job.current.name); + } + }).error(function () { + if(Preview.Job.current.loading) { + Preview.Job.loading = false; + Preview.notFound('Pet not found.'); + } + }); + + var selectFields = $('#species, #color'); + selectFields.change(function () { + var type = {}, name = []; + selectFields.each(function () { + var el = $(this), selectedEl = el.children(':selected'); + type[el.attr('id')] = selectedEl.val(); + name.push(selectedEl.text()); + }); + name = name.join(' '); + Preview.displayLoading(); + $.ajax({ + url: '/pet_types.json', + data: { + 'for': 'image', + 'species_id': type.species, + 'color_id': type.color + }, + dataType: 'json', + success: function (data) { + var job; + if(data) { + job = new Preview.Job.Hash(data.image_hash); + job.name = name; + job.setAsCurrent(); + } else { + Preview.notFound("We haven't seen a " + name + ". Have you?"); + } + }, + error: function () { + Preview.notFound("Error fetching preview. Try again?"); + } + }); + }); + + $.getJSON('http://blog.openneo.net/api/read/json?callback=?', function (data) { + var post = data.posts[0], el = $('#blog-preview'), + url = post['url-with-slug'], header = "Here's the latest!", body = '', + truncate_body_at = 100, image; + if(post.type == 'regular') { + header = post['regular-title']; + body = post['regular-body']; + } else if(post.type == 'link') { + header = post['link-text']; + body = post['link-description']; + } else if(post.type == 'photo') { + body = post['photo-caption']; + image = post['photo-url-75']; + } + body = body.replace(/(<\/?[\S][^>]*>)/gi, ''); + if(body.length > truncate_body_at) { + body = body.substring(0, truncate_body_at); + body = body.replace(/\s+\w+$/, ''); + body += '…'; + } + el.find('h4').text(header).wrapInner($('', {href: url})); + el.find('p').html(body); + $('', {'id': 'read-more', href: url, text: 'read more'}).appendTo(el.find('div')); + if(image) { + el.find('img').attr('src', image).parent().attr('href', url); + } + el.children('div').hide().fadeIn('slow'); + }); +}); + +})(); diff --git a/public/javascripts/pet_query.js b/public/javascripts/pet_query.js new file mode 100644 index 00000000..77f8e7a8 --- /dev/null +++ b/public/javascripts/pet_query.js @@ -0,0 +1,29 @@ +function petImage(id, size) { + return 'http://pets.neopets.com/' + id + '/1/' + size + '.png'; +} + +var PetQuery = {}, + query_string = document.location.hash || document.location.search; + +$.each(query_string.substr(1).split('&'), function () { + var split_piece = this.split('='); + if(split_piece.length == 2) { + PetQuery[split_piece[0]] = split_piece[1]; + } +}); + +if(PetQuery.name) { + if(PetQuery.species && PetQuery.color) { + var notice = $('
', { + 'class': 'success', + 'html': "Thanks for showing us " + PetQuery.name + "! " + + "Keep up the good work!" + }), + image = $('', { + 'class': 'inline-image', + 'src': petImage('cpn/' + PetQuery.name, 1) + }); + image.prependTo(notice); + notice.prependTo('#container'); + } +} diff --git a/public/spotlight_pets.txt b/public/spotlight_pets.txt new file mode 100644 index 00000000..20f14638 --- /dev/null +++ b/public/spotlight_pets.txt @@ -0,0 +1,58 @@ +Tanymu +Yenivie +__Shippou_chan__ +Veii +Mexitl +Dizum +estermineishon +TavishDileas +Mattid +Oraille +Tommy_XBoy +Kapurnia +Dakota6252 +hlos +JCMK0589 +xorol +bramley +Okebi +Viqc +Kithiarah +Kuschelix +Hiawana +Aramaoi +Amtal +D3SFrosch +Xhrounis +kim_pik +Manshierah +0Max_Sombra0 +Venus +Grymma +DivaBlu +Skaech +__FIRE_WING_2001 +Jieane +ambersands +Milkstick +cutecumberrr +Frost_Pelt +lauren_ashley09 +Melina_Rodriges +sara_626_778 +Marrie_MyCuteKacheek +cauchy_xvii +Kahq +Xaeladora +darck_faerie +Sweet_Seraph +Kauboii_ +LunaScarlett +Vuranje +Aubepines +rubythexweetok4 +suzusuzu0423 +Tzaviare +Delphinid_Redux +CrunchCrunch979_2005 +Lennythebluedumdum diff --git a/public/stylesheets/compiled/screen.css b/public/stylesheets/compiled/screen.css index 2d3843c6..827786c7 100644 --- a/public/stylesheets/compiled/screen.css +++ b/public/stylesheets/compiled/screen.css @@ -1,55 +1,404 @@ -/* line 4, ../../../app/stylesheets/screen.sass */ +/* Reset */ +/* line 3, ../../../app/stylesheets/_layout.sass */ +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, +blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, +font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, +u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, +caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} + +/* Typography */ +/* line 18, ../../../app/stylesheets/_layout.sass */ +html, body { + height: 100%; +} + +/* line 21, ../../../app/stylesheets/_layout.sass */ body { + color: #004400; + font-family: "Droid Sans", Helvetica, Arial, Verdana, sans-serif; + font-size: 90%; + line-height: 1.5; +} + +/* line 28, ../../../app/stylesheets/_layout.sass */ +a { + color: #226622; +} + +/* line 31, ../../../app/stylesheets/_layout.sass */ +p { + font-family: "Droid Serif", Georgia, "Times New Roman", Times, serif; +} + +/* line 34, ../../../app/stylesheets/_layout.sass */ +input, button, select { + font-family: inherit; + font-size: 100%; +} + +/* line 39, ../../../app/stylesheets/_layout.sass */ +p { + margin-bottom: 1em; +} + +/* line 42, ../../../app/stylesheets/_layout.sass */ +h1, h2, h3 { + font-family: Delicious, Helvetica, Arial, Verdana, sans-serif; +} + +/* line 45, ../../../app/stylesheets/_layout.sass */ +h1 { + font-size: 3em; + line-height: 1; + margin-bottom: 0.5em; +} + +/* line 50, ../../../app/stylesheets/_layout.sass */ +h2 { + font-size: 2em; + margin-bottom: 0.75em; +} + +/* line 54, ../../../app/stylesheets/_layout.sass */ +h3 { + font-size: 1.5em; + line-height: 1; + margin-bottom: 1em; +} + +/* line 59, ../../../app/stylesheets/_layout.sass */ +.inline-image { + margin-right: 1em; + vertical-align: middle; +} + +/* Main */ +/* line 67, ../../../app/stylesheets/_layout.sass */ +#container { + margin: 1em auto; + padding-top: 3em; + position: relative; + width: 800px; +} + +/* line 73, ../../../app/stylesheets/_layout.sass */ +input, button, select, label { + cursor: pointer; +} + +/* line 76, ../../../app/stylesheets/_layout.sass */ +input[type=text], input[type=password], input[type=search], select { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + background: white; + border: 1px solid #cceecc; + color: #448844; + padding: 0.25em; +} +/* line 82, ../../../app/stylesheets/_layout.sass */ +input[type=text]:focus, input[type=text]:active, input[type=password]:focus, input[type=password]:active, input[type=search]:focus, input[type=search]:active, select:focus, select:active { + color: inherit; +} + +/* line 85, ../../../app/stylesheets/_layout.sass */ +a.button, input[type=submit], button { + /* http://www.zurb.com/blog_uploads/0000/0617/buttons-03.html */ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + background: #006400 url(/assets/images/alert-overlay.png) 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; +} +/* line 34, ../../../app/stylesheets/partials/clean/_mixins.sass */ +a.button:hover, input[type=submit]:hover, button:hover { + background-color: #005300; +} +/* line 53, ../../../app/stylesheets/partials/clean/_mixins.sass */ +a.button:hover, input[type=submit]:hover, button:hover { + color: white; +} +/* line 55, ../../../app/stylesheets/partials/clean/_mixins.sass */ +a.button:active, input[type=submit]:active, button:active { + top: 1px; +} +/* line 87, ../../../app/stylesheets/_layout.sass */ +a.button.loud, input[type=submit].loud, button.loud { + background: #ff5c00 url(/assets/images/alert-overlay.png) repeat-x; + font-size: 125%; + padding: 8px 14px 9px; +} +/* line 34, ../../../app/stylesheets/partials/clean/_mixins.sass */ +a.button.loud:hover, input[type=submit].loud:hover, button.loud:hover { + background-color: #ee4b00; +} + +/* line 67, ../../../app/stylesheets/partials/clean/_mixins.sass */ +a.button:after { + content: " >>"; +} + +/* line 93, ../../../app/stylesheets/_layout.sass */ +ul.buttons { + margin-bottom: 1em; +} +/* line 95, ../../../app/stylesheets/_layout.sass */ +ul.buttons li { + list-style: none; + margin: 0 0.5em; +} +/* line 98, ../../../app/stylesheets/_layout.sass */ +ul.buttons li, ul.buttons li form { + display: inline; +} + +/* line 101, ../../../app/stylesheets/_layout.sass */ +#footer { + clear: both; + font-size: 75%; + margin-bottom: 1em; + padding-top: 2em; + text-align: center; +} +/* line 107, ../../../app/stylesheets/_layout.sass */ +#footer ul, #footer div { + display: inline; + margin: 0 1em; +} +/* line 110, ../../../app/stylesheets/_layout.sass */ +#footer li, #footer div ul { + display: inline; + margin: 0 0.5em; +} + +/* line 114, ../../../app/stylesheets/_layout.sass */ +.success, .alert, .warning { + margin-bottom: 1em; + padding: 0.25em 0.5em; text-align: center; } -/* line 7, ../../../app/stylesheets/screen.sass */ -input[type=text] { - font-size: 125%; - width: 15em; +/* line 119, ../../../app/stylesheets/_layout.sass */ +.success { + background: #e6efc2; + border: 1px solid #c6d880; + color: #264409; } -/* line 11, ../../../app/stylesheets/screen.sass */ -h1 { - margin-bottom: 1em; -} -/* line 13, ../../../app/stylesheets/screen.sass */ -h1 img { - height: 80px; - margin-bottom: -0.5em; - width: 80px; -} -/* line 17, ../../../app/stylesheets/screen.sass */ -h1 a { - text-decoration: none; -} -/* line 19, ../../../app/stylesheets/screen.sass */ -h1 a span { - text-decoration: underline; -} -/* line 21, ../../../app/stylesheets/screen.sass */ -h1 a:hover span { - text-decoration: none; +/* line 124, ../../../app/stylesheets/_layout.sass */ +.alert { + background: #fbe3e4; + border: 1px solid #fbc2c4; + color: #8a1f11; } -/* line 24, ../../../app/stylesheets/screen.sass */ +/* line 129, ../../../app/stylesheets/_layout.sass */ +.warning { + background: #fff6bf; + border: 1px solid #ffd324; + color: #514721; +} + +/* line 134, ../../../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 */ +#userbar > * { + display: inline; + margin: 0 0.25em; +} + +/* line 143, ../../../app/stylesheets/_layout.sass */ #userbar-log-in { text-decoration: none; } -/* line 26, ../../../app/stylesheets/screen.sass */ +/* line 145, ../../../app/stylesheets/_layout.sass */ #userbar-log-in img { margin-bottom: -4px; margin-right: 0.25em; } -/* line 30, ../../../app/stylesheets/screen.sass */ +/* line 149, ../../../app/stylesheets/_layout.sass */ #userbar-log-in span { text-decoration: underline; } -/* line 32, ../../../app/stylesheets/screen.sass */ +/* line 151, ../../../app/stylesheets/_layout.sass */ #userbar-log-in:hover span { text-decoration: none; } +/* line 154, ../../../app/stylesheets/_layout.sass */ +.object { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + *display: inline; + *vertical-align: auto; + padding: 0.5em; + position: relative; + text-align: center; + vertical-align: top; + width: 100px; +} +/* line 161, ../../../app/stylesheets/_layout.sass */ +.object a { + text-decoration: none; +} +/* line 163, ../../../app/stylesheets/_layout.sass */ +.object a img { + -moz-opacity: 0.75; + -webkit-opacity: 0.75; + -o-opacity: 0.75; + -khtml-opacity: 0.75; +} +/* line 165, ../../../app/stylesheets/_layout.sass */ +.object a:hover img { + -moz-opacity: 1; + -webkit-opacity: 1; + -o-opacity: 1; + -khtml-opacity: 1; +} +/* line 167, ../../../app/stylesheets/_layout.sass */ +.object img { + display: block; + height: 80px; + margin: 0 auto; + width: 80px; +} + +/* line 173, ../../../app/stylesheets/_layout.sass */ +dt { + font-weight: bold; +} + +/* line 176, ../../../app/stylesheets/_layout.sass */ +dd { + margin: 0 0 1.5em 1em; +} + +/* line 179, ../../../app/stylesheets/_layout.sass */ +#home-link { + font-family: Delicious, Helvetica, Arial, Verdana, sans-serif; + font-size: 175%; + font-weight: bold; + left: 0; + line-height: 1; + padding: 0.25em; + position: absolute; + top: 0; +} +/* line 189, ../../../app/stylesheets/_layout.sass */ +#home-link:hover { + background: #eeffee; + text-decoration: none; +} +/* line 192, ../../../app/stylesheets/_layout.sass */ +#home-link span:before { + content: "<< "; +} + +/* line 196, ../../../app/stylesheets/_layout.sass */ +.pagination a, .pagination span { + margin: 0 0.5em; +} +/* line 198, ../../../app/stylesheets/_layout.sass */ +.pagination .current { + font-weight: bold; +} + +/* Fonts */ +/* A font by Jos Buivenga (exljbris) -> www.exljbris.nl */ +@font-face { + font-family: Delicious; + src: url("/assets/fonts/Delicious-Roman.otf"); +} + +@font-face { + font-family: Delicious; + font-weight: bold; + src: url("/assets/fonts/Delicious-Bold.otf"); +} + +@font-face { + font-family: Delicious; + font-style: italic; + src: url("/assets/fonts/Delicious-Italic.otf"); +} + +@font-face { + font-family: "Droid Serif"; + font-style: normal; + font-weight: normal; + src: local("Droid Serif"), url("http://themes.googleusercontent.com/font?kit=70P0G8gxVDIV6F9om0DsKg") format("truetype"); +} + +@font-face { + font-family: "Droid Serif"; + font-style: normal; + font-weight: bold; + src: local("Droid Serif"), url("http://themes.googleusercontent.com/font?kit=QQt14e8dY39u-eYBZmppwf5Jgr8ufe5A6KahQF76Xmg") format("truetype"); +} + +@font-face { + font-family: "Droid Sans"; + font-style: normal; + font-weight: normal; + src: local("Droid Sans"), url("http://themes.googleusercontent.com/font?kit=POVDFY-UUf0WFR9DIMCU8g") format("truetype"); +} + +/* line 1, ../../../app/stylesheets/_items.sass */ +body.items { + text-align: center; +} +/* line 4, ../../../app/stylesheets/_items.sass */ +body.items input[type=text] { + font-size: 125%; + width: 15em; +} +/* line 8, ../../../app/stylesheets/_items.sass */ +body.items h1 { + margin-bottom: 1em; +} +/* line 10, ../../../app/stylesheets/_items.sass */ +body.items h1 img { + height: 80px; + margin-bottom: -0.5em; + width: 80px; +} +/* line 14, ../../../app/stylesheets/_items.sass */ +body.items h1 a { + text-decoration: none; +} +/* line 16, ../../../app/stylesheets/_items.sass */ +body.items h1 a span { + text-decoration: underline; +} +/* line 18, ../../../app/stylesheets/_items.sass */ +body.items h1 a:hover span { + text-decoration: none; +} + /* line 8, ../../../app/stylesheets/items/_index.sass */ body.items-index form { margin-bottom: 2em; @@ -64,9 +413,10 @@ body.items-index .object .nc-icon { } /* line 17, ../../../app/stylesheets/items/_index.sass */ body.items-index .object .nc-icon:hover { - opacity: 0.5; - -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + -moz-opacity: 0.5; + -webkit-opacity: 0.5; + -o-opacity: 0.5; + -khtml-opacity: 0.5; } /* line 20, ../../../app/stylesheets/items/_index.sass */ body.items-index #search-help { @@ -167,9 +517,10 @@ body.items-show #item-preview-species a.current { } /* line 34, ../../../app/stylesheets/items/_show.sass */ body.items-show #item-preview-species a.deactivated { - opacity: 0.5; - -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + -moz-opacity: 0.5; + -webkit-opacity: 0.5; + -o-opacity: 0.5; + -khtml-opacity: 0.5; background: #fbe3e4; } /* line 39, ../../../app/stylesheets/items/_show.sass */ @@ -220,3 +571,248 @@ body.items-show .nc-icon { height: 16px; width: 16px; } + +/* line 2, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #outfit-forms { + overflow: hidden; + display: inline-block; + background: #eeffee; + border: 1px solid #006600; + padding: 1em; + margin-bottom: 3em; + position: relative; +} +/* line 8, ../../../app/stylesheets/partials/clean/_mixins.sass */ +body.outfits-new #outfit-forms { + display: block; +} +/* line 7, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #outfit-forms h1 { + margin-bottom: 0; +} +/* line 9, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #outfit-forms h2 { + font-size: 150%; + font-style: italic; + text-indent: 1em; +} +/* line 14, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #outfit-forms #pet-preview { + float: left; + height: 300px; + margin-right: 2em; + position: relative; + width: 300px; +} +/* line 20, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #outfit-forms #pet-preview img { + height: 100%; + width: 100%; +} +/* line 23, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #outfit-forms #pet-preview.loading img { + -moz-opacity: 0.5; + -webkit-opacity: 0.5; + -o-opacity: 0.5; + -khtml-opacity: 0.5; +} +/* line 25, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #outfit-forms #pet-preview.hidden img { + display: none; +} +/* line 27, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #outfit-forms #pet-preview.loaded { + cursor: pointer; +} +/* line 29, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #outfit-forms #pet-preview span { + background: gray; + background: rgba(0, 0, 0, 0.5); + bottom: 0; + color: white; + padding: 0.25em 0.5em; + position: absolute; + right: 0; +} +/* line 37, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #outfit-forms #pet-preview span:empty { + display: none; +} +/* line 39, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #outfit-forms fieldset { + position: relative; + left: 1em; +} +/* line 42, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #outfit-forms fieldset legend { + margin-left: -1em; +} +/* line 44, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #load-pet-to-wardrobe { + font-size: 175%; + margin-bottom: 1em; + margin-top: 2em; +} +/* line 49, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #load-pet-to-wardrobe input { + font-size: 67%; + padding: 0.5em; + width: 10em; +} +/* line 53, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #load-pet-to-wardrobe button { + background: #ff5c00 url(/assets/images/alert-overlay.png) repeat-x; + font-size: 125%; + padding: 8px 14px 9px; + font-size: 67%; +} +/* line 34, ../../../app/stylesheets/partials/clean/_mixins.sass */ +body.outfits-new #load-pet-to-wardrobe button:hover { + background-color: #ee4b00; +} +/* line 56, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #description, body.outfits-new #top-contributors { + float: left; +} +/* line 58, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #description { + margin-right: 2%; + width: 64%; +} +/* line 61, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #top-contributors { + border: 1px solid #cceecc; + margin-top: 1em; + padding: 1%; + width: 30%; +} +/* line 66, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #top-contributors ol { + margin-left: 2em; + padding-left: 1em; +} +/* line 69, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #top-contributors > a { + font-size: 80%; + display: block; + text-align: right; +} +/* line 73, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #how-can-i-help, body.outfits-new #i-found-something { + background: #eeffee; + border: 1px solid #006600; + padding: 1em; + float: left; + padding: 1%; + width: 46%; +} +/* line 78, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #how-can-i-help h2, body.outfits-new #i-found-something h2 { + font-style: italic; +} +/* line 80, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #how-can-i-help input, body.outfits-new #how-can-i-help button, body.outfits-new #i-found-something input, body.outfits-new #i-found-something button { + font-size: 115%; +} +/* line 82, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #how-can-i-help input[type=text], body.outfits-new #i-found-something input[type=text] { + border-color: #006600; + width: 12em; +} +/* line 85, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #how-can-i-help { + margin-right: 1%; +} +/* line 87, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #i-found-something { + margin-left: 1%; +} +/* line 89, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #i-found-something a { + float: right; + font-size: 87.5%; + margin-top: 1em; +} +/* line 98, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #sections { + overflow: hidden; + display: inline-block; + display: table; + list-style: none; + margin-bottom: 1em; +} +/* line 8, ../../../app/stylesheets/partials/clean/_mixins.sass */ +body.outfits-new #sections { + display: block; +} +/* line 103, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #sections h3 { + margin-bottom: 0.25em; +} +/* line 105, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #sections li { + border-left-color: #006600; + border-left-style: solid; + border-left-width: 1px; + display: table-cell; + padding: 0.5em; + position: relative; + width: 33.333%; +} +/* line 114, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #sections li:first-child { + border-left: 0; +} +/* line 116, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #sections div { + color: #448844; + font-size: 75%; + margin-left: 1em; + z-index: 2; +} +/* line 121, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #sections h4, body.outfits-new #sections input { + font-size: 116%; +} +/* line 123, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #sections h4, body.outfits-new #sections input[type=text] { + color: inherit; +} +/* line 125, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #sections h4 a { + background: #ffffc0; +} +/* line 127, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #sections img { + -moz-opacity: 0.75; + -webkit-opacity: 0.75; + -o-opacity: 0.75; + -khtml-opacity: 0.75; + float: right; + margin-left: 0.5em; +} +/* line 131, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #sections img:hover { + -moz-opacity: 1; + -webkit-opacity: 1; + -o-opacity: 1; + -khtml-opacity: 1; +} +/* line 133, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #read-more { + float: right; +} +/* line 135, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #tell-the-world { + font-size: 87.5%; + left: 0; + position: absolute; + top: 0; +} +/* line 140, ../../../app/stylesheets/outfits/_new.sass */ +body.outfits-new #tell-the-world img { + margin-bottom: -0.25em; + margin-right: 0.25em; + height: 16px; + width: 16px; +}