Compare commits

..

15 commits

Author SHA1 Message Date
16deee94e4 Remove now-unused pet state show page 2024-10-11 17:48:23 -07:00
2cc0c5b031 Link pet states to outfit editor instead of their not-useful show page
I was considering doing more with the show page at one point, but ehh,
I think the outfit editor is the better place for that stuff anyway.
2024-10-11 17:44:56 -07:00
381a892af8 Add a bit more space around Rainbow Pool filter forms 2024-10-11 17:39:35 -07:00
1a0fb68b1c Add more explanation copy to Rainbow Pool pages 2024-10-11 17:38:34 -07:00
4f9fbc1ac0 Improve pet type "Added" timestamp styles 2024-10-11 16:24:47 -07:00
ad51690617 Sort pet types alphabetically when filtering the Rainbow Pool
The default is latest first, but when you're searching a color or
species, you probably just want a consistent alphabetical order.
2024-10-11 16:24:24 -07:00
5648f55d2c Add date to pet types in Rainbow Pool 2024-10-11 16:00:07 -07:00
6934b636fb Update Pet Styles copy 2024-10-11 15:50:31 -07:00
83fe0d20e0 Add Rainbow Pool breadcrumbs to Pet Styles page 2024-10-11 15:42:19 -07:00
be5ad31a1d Link alt styles to the outfit editor, rather than to the big image URL 2024-10-11 15:40:20 -07:00
1626f0706c Move Alt Styles into /rainbow-pool URLs, say "Pet Styles" more in text 2024-10-11 15:37:37 -07:00
7fad6abfed Add homepage link to Rainbow Pool, and move Modeling Hub to footer 2024-10-11 15:27:36 -07:00
c985c50a1b Add special styles for the placeholder option in select tags
Noticed this for the Rainbow Pool filters!
2024-10-11 15:23:35 -07:00
bba863b94b When filtering to a specific pet type, redirect right to it!
That is, if you filter to "Candy Chia", we just redirect straight to
it, if it exists; rather than showing you a results page.
2024-10-11 15:13:59 -07:00
7c1b3ca447 Add "no results" output for Rainbow Pool filters with no results 2024-10-11 15:13:22 -07:00
24 changed files with 173 additions and 155 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -83,6 +83,15 @@ input[type=text], input[type=password], input[type=search], input[type=number],
&:focus, &:active &:focus, &:active
color: inherit color: inherit
select:has(option[value='']:checked)
color: #666
option[value='']
color: #666
option:not([value=''])
color: $text-color
textarea textarea
font: inherit font: inherit

View file

@ -1,6 +1,8 @@
@import "../partials/clean/constants" @import "../partials/clean/constants"
.rainbow-pool-filters .rainbow-pool-filters
margin-block: .5em
fieldset fieldset
display: flex display: flex
flex-direction: row flex-direction: row
@ -57,9 +59,16 @@
.info .info
font-size: .85em font-size: .85em
p
margin-block: .25em
.rainbow-pool-pagination .rainbow-pool-pagination
margin-block: .5em margin-block: .5em
display: flex display: flex
justify-content: center justify-content: center
gap: 1em gap: 1em
.rainbow-pool-no-results
margin-block: 1em
text-align: center
font-style: italic

View file

@ -1,5 +0,0 @@
outfit-viewer
margin: 0 auto
dt
cursor: help

View file

@ -2,6 +2,7 @@
.rainbow-pool-list .rainbow-pool-list
--preview-base-width: 200px --preview-base-width: 200px
margin-bottom: 2em
.glitched .glitched
cursor: help cursor: help

View file

@ -1,9 +1,6 @@
class PetStatesController < ApplicationController class PetStatesController < ApplicationController
before_action :find_pet_state before_action :find_pet_state
before_action :support_staff_only, except: [:show] before_action :support_staff_only
def show
end
def edit def edit
end end

View file

@ -13,17 +13,27 @@ class PetTypesController < ApplicationController
@selected_color = Color.find_by!(name: params[:color]) @selected_color = Color.find_by!(name: params[:color])
@selected_color_name = @selected_color.human_name @selected_color_name = @selected_color.human_name
end end
@selected_order =
if @selected_species.present? || @selected_color.present?
:alphabetical
else
:newest
end
@pet_types = PetType. @pet_types = PetType.
includes(:color, :species, :pet_states). includes(:color, :species, :pet_states).
order(created_at: :desc).
paginate(page: params[:page], per_page: 30) paginate(page: params[:page], per_page: 30)
if @selected_species @pet_types.where!(species_id: @selected_species) if @selected_species
@pet_types = @pet_types.where(species_id: @selected_species) @pet_types.where!(color_id: @selected_color) if @selected_color
if @selected_order == :newest
@pet_types.order!(created_at: :desc)
elsif @selected_order == :alphabetical
@pet_types.merge!(Color.alphabetical).merge!(Species.alphabetical)
end end
if @selected_color
@pet_types = @pet_types.where(color_id: @selected_color) if @selected_species && @selected_color && @pet_types.size == 1
redirect_to @pet_types.first
end end
} }

View file

@ -3,7 +3,11 @@ module AltStylesHelper
if support_staff? if support_staff?
edit_alt_style_path alt_style edit_alt_style_path alt_style
else else
alt_style.preview_image_url wardrobe_path(
species: alt_style.species_id,
color: alt_style.color_id,
style: alt_style.id,
)
end end
end end
end end

View file

@ -26,11 +26,16 @@ module PetStatesHelper
POSE_OPTIONS POSE_OPTIONS
end end
def useful_pet_state_path(...) def useful_pet_state_path(pet_type, pet_state)
if support_staff? if support_staff?
edit_pet_type_pet_state_path(...) edit_pet_type_pet_state_path(pet_type, pet_state)
else else
pet_type_pet_state_path(...) wardrobe_path(
color: pet_type.color_id,
species: pet_type.species_id,
pose: pet_state.pose,
state: pet_state.id,
)
end end
end end
end end

View file

@ -777,8 +777,13 @@ function StyleExplanation() {
opacity="0.7" opacity="0.7"
marginTop="2" marginTop="2"
> >
<Box as="a" href="/alt-styles" target="_blank" textDecoration="underline"> <Box
Alt Styles as="a"
href="/rainbow-pool/styles"
target="_blank"
textDecoration="underline"
>
Pet Styles
</Box>{" "} </Box>{" "}
are NC items that override the pet's appearance via the{" "} are NC items that override the pet's appearance via the{" "}
<Box <Box
@ -789,7 +794,7 @@ function StyleExplanation() {
> >
Styling Chamber Styling Chamber
</Box> </Box>
. Not all items fit Alt Style pets. The pet's color doesn't have to match. . Not all items fit all Pet Styles. The pet's color doesn't have to match.
</Box> </Box>
); );
} }

View file

@ -1,18 +1,25 @@
- title "Styling Studio" - title "NC Pet Styles"
- use_responsive_design - use_responsive_design
%p %ul.breadcrumbs
Here's all the new NC Pet Styles we have! They're available in the app too, %li= link_to "Rainbow Pool", pet_types_path
by opening the emotion picker and clicking the "Styles" tab. %li Pet Styles
%p :markdown
If you have an Alt Style we don't, please model it by entering your pet's Pet Styles drastically change the appearance of your pet! They're [available
in the NC Mall][1], or via "NC Trading". They're generally reminiscent of
classic Neopets designs from long ago.
Pet Styles only fit pets of the same species—but the *color* of the pet
doesn't matter! A Blue Acara can wear the "Nostalgic Faerie Acara" Pet Style.
Only some items fit pets wearing Pet Styles: mostly Backgrounds, Foregrounds,
and other items that aren't designed to fit a specific body shape.
If you have an Pet Style we don't, please model it by entering your pet's
name on the homepage! Thank you! 💖 name on the homepage! Thank you! 💖
%p [1]: https://www.neopets.com/mall/stylingstudio/
Also, heads-up: Because our system can only collect "item data" for normal
wearable items, there's not a great way for us to get style tokens onto
tradelists… this may change someday, but probably not soon, sorry!
= form_with url: alt_styles_path, method: :get, = form_with url: alt_styles_path, method: :get,
class: "rainbow-pool-filters" do |f| class: "rainbow-pool-filters" do |f|
@ -33,5 +40,6 @@
= will_paginate @alt_styles, class: "rainbow-pool-pagination" = will_paginate @alt_styles, class: "rainbow-pool-pagination"
- content_for :stylesheets do - content_for :stylesheets do
= stylesheet_link_tag "application/breadcrumbs"
= stylesheet_link_tag "application/rainbow-pool" = stylesheet_link_tag "application/rainbow-pool"
= page_stylesheet_link_tag "alt_styles/index" = page_stylesheet_link_tag "alt_styles/index"

View file

@ -73,6 +73,7 @@
= link_to t('.footer.terms', date: terms_updated_timestamp), = link_to t('.footer.terms', date: terms_updated_timestamp),
terms_path terms_path
%li= link_to t('.footer.blog'), "https://blog.openneo.net/" %li= link_to t('.footer.blog'), "https://blog.openneo.net/"
%li= link_to t('modeling_hub'), bulk_pets_path
%div %div
#{t('.footer.contact')}: #{t('.footer.contact')}:

View file

@ -72,16 +72,18 @@
= submit_tag t('.infinite_closet.item_search.submit') = submit_tag t('.infinite_closet.item_search.submit')
%li %li
%h3= link_to t('modeling_hub'), bulk_pets_path %h3= link_to t('rainbow_pool'), pet_types_path
= link_to bulk_pets_path do = link_to bulk_pets_path do
= image_tag 'https://images.neopets.com/items/mall_ac_garland_spotlight.gif' = image_tag 'rainbow_pool.png'
.section-info .section-info
%strong= t '.modeling_hub.tagline' %strong= t('.rainbow_pool.tagline')
%p= t '.modeling_hub.description' %p= t('.rainbow_pool.description')
= form_tag load_pet_path, method: 'POST' do = form_with url: pet_types_path, method: 'GET' do |form|
= pet_name_tag placeholder: t('.modeling_hub.load_pet.placeholder'), = form.select :color, @colors.map(&:human_name),
required: true include_blank: t('.rainbow_pool.filters.color')
= submit_tag t('.modeling_hub.load_pet.submit') = form.select :species, @species.map(&:human_name),
include_blank: t('.rainbow_pool.filters.species')
= form.submit t('.rainbow_pool.filters.submit'), name: nil
- if @latest_contribution # will be nil for a fresh copy of the site ;P - if @latest_contribution # will be nil for a fresh copy of the site ;P
#latest-contribution #latest-contribution

View file

@ -13,9 +13,7 @@
%li %li
= link_to "Appearances", @pet_type = link_to "Appearances", @pet_type
%li %li
= link_to "\##{@pet_state.id}", [@pet_type, @pet_state] \##{@pet_state.id}
%li
Edit
= outfit_viewer pet_state: @pet_state = outfit_viewer pet_state: @pet_state

View file

@ -1,54 +0,0 @@
- title "#{@pet_type.human_name}: #{pose_name @pet_state.pose}"
- use_responsive_design
%ol.breadcrumbs
%li
= link_to "Rainbow Pool", pet_types_path
%li
= link_to @pet_type.color.human_name,
pet_types_path(color: @pet_type.color.human_name)
%li{"data-relation-to-prev": "sibling"}
= link_to @pet_type.species.human_name,
pet_types_path(species: @pet_type.species.human_name)
%li
= link_to "Appearances", @pet_type
%li
\##{@pet_state.id}
- if support_staff?
%li{"data-relation-to-prev": "menu"}
= link_to "Edit", edit_pet_type_pet_state_path(@pet_type, @pet_state)
= outfit_viewer pet_state: @pet_state
%dl
%dt{title: "Pose usually affects just the eyes and mouth. Neopets " +
"genders these as Male/Female, but I don't like those " +
"terms for like… it's just eyelashes! Sheesh!"}
Pose
%dd
= pose_name @pet_state.pose
- if @pet_state.pose == "UNCONVERTED"
(Retired, replaced by #{link_to "Alt Styles", alt_styles_path})
%dt{title: "This is our own internal ID number, nothing to do with " +
"Neopets's official data."}
DTI ID
%dd= @pet_state.id
%dt{title: "When we notice a form looks wrong, we mark it Glitched, to " +
"tell our systems to prefer other forms for this pose instead."}
Glitched?
%dd
- if @pet_state.glitched?
👾 Yes, it's bad news bonko'd
- else
✅ Not marked as Glitched
- content_for :stylesheets do
= stylesheet_link_tag "application/breadcrumbs"
= stylesheet_link_tag "application/hanger-spinner"
= stylesheet_link_tag "application/outfit-viewer"
= page_stylesheet_link_tag "pet_states/show"
- content_for :javascripts do
= javascript_include_tag "outfit-viewer", async: true

View file

@ -2,8 +2,9 @@
= link_to pet_type do = link_to pet_type do
= pet_type_image pet_type, :happy, :thumb, class: "preview" = pet_type_image pet_type, :happy, :thumb, class: "preview"
.name= pet_type.human_name .name= pet_type.human_name
- if support_staff?
.info .info
- if support_staff?
%p
- if pet_type.num_unlabeled_states > 0 - if pet_type.num_unlabeled_states > 0
%span{title: "Unlabeled states"} %span{title: "Unlabeled states"}
❓️ #{pet_type.num_unlabeled_states} + ❓️ #{pet_type.num_unlabeled_states} +
@ -13,3 +14,8 @@
- else - else
= moon_progress pet_type.num_poses, pet_type.num_poses + pet_type.num_missing_poses = moon_progress pet_type.num_poses, pet_type.num_poses + pet_type.num_missing_poses
#{pet_type.num_poses}/#{pet_type.num_poses + pet_type.num_missing_poses} #{pet_type.num_poses}/#{pet_type.num_poses + pet_type.num_missing_poses}
%p
Added
= time_tag pet_type.created_at,
title: pet_type.created_at.to_formatted_s(:long_nst) do
= time_with_only_month_if_old pet_type.created_at

View file

@ -1,6 +1,15 @@
- title "Rainbow Pool" - title "Rainbow Pool"
- use_responsive_design - use_responsive_design
:markdown
Welcome, welcome! These are all the colors and species of pet we've seen
before. You can also check out our [NC Pet Styles][1] listings, too!
If you've seen a new kind of pet, you can enter its name on the homepage to
show us! Thank you so much 💖
[1]: #{alt_styles_path}
= form_with method: :get, class: "rainbow-pool-filters" do |form| = form_with method: :get, class: "rainbow-pool-filters" do |form|
%fieldset %fieldset
%legend Filter by: %legend Filter by:
@ -8,11 +17,12 @@
= form.select :species, @species_names, selected: @selected_species&.human_name, include_blank: "Species…" = form.select :species, @species_names, selected: @selected_species&.human_name, include_blank: "Species…"
= form.submit "Go", name: nil = form.submit "Go", name: nil
- if @pet_types.present?
= will_paginate @pet_types, class: "rainbow-pool-pagination" = will_paginate @pet_types, class: "rainbow-pool-pagination"
%ui.rainbow-pool-list= render @pet_types %ui.rainbow-pool-list= render @pet_types
= will_paginate @pet_types, class: "rainbow-pool-pagination" = will_paginate @pet_types, class: "rainbow-pool-pagination"
- else
%p.rainbow-pool-no-results No matching pets found!
- content_for :stylesheets do - content_for :stylesheets do
= stylesheet_link_tag "application/rainbow-pool" = stylesheet_link_tag "application/rainbow-pool"

View file

@ -13,12 +13,35 @@
%li %li
Appearances Appearances
%p
These are the various appearances we've seen for this pet! We've hand-labeled
them by their emotion and their gender expression, as best we can.
%p
If you've seen another kind of #{@pet_type.human_name}, you can enter its
name on the homepage to show us! Thank you 💖
- if @pet_states[:canonical].any?(&:glitched?)
%p
Some of these appearances are marked as "glitched", but it's still the
best sample we have. If someone models an unglitched alternative for us,
we'll use that instead!
%ul.rainbow-pool-list %ul.rainbow-pool-list
= render @pet_states[:canonical] = render @pet_states[:canonical]
- if @pet_states[:other].present? - if @pet_states[:other].present?
%details %h3 Other appearances
%summary Other
%p
These are some other appearances we've seen over time!
- if @pet_states[:other].any?(&:labeled?)
The labeled appearances here don't appear in the outfit editor by
default anymore, because they've been replaced by better alternatives.
- unless @pet_states[:other].all?(&:labeled?)
The unlabeled appearances here <em>might</em> be what we show in the
outfit editor later, once we have the chance to label them.
%ul.rainbow-pool-list %ul.rainbow-pool-list
= render @pet_states[:other] = render @pet_states[:other]

View file

@ -1 +1,5 @@
Date::DATE_FORMATS[:month_and_day] = "%B %e" Date::DATE_FORMATS[:month_and_day] = "%B %e"
Time::DATE_FORMATS[:long_nst] = lambda { |time|
time.in_time_zone("Pacific Time (US & Canada)").
to_formatted_s(:long) + " NST"
}

View file

@ -554,14 +554,6 @@ en-MEEP:
item_search: item_search:
placeholder: meep an item… placeholder: meep an item…
submit: meep submit: meep
modeling_hub:
tagline: Found somemeep?
description:
Meep a pet's meep here and we'll meep a meep of what it's wearing.
Thanks so meep!
load_pet:
placeholder: meep a pet…
submit: meep
latest_contribution: latest_contribution:
header: Contribumeeps header: Contribumeeps
description_html: "%{user_link} meeped us %{contributed_description}. description_html: "%{user_link} meeped us %{contributed_description}.

View file

@ -4,6 +4,7 @@ en:
your_items: Your Items your_items: Your Items
infinite_closet: Infinite Closet infinite_closet: Infinite Closet
modeling_hub: Modeling Hub modeling_hub: Modeling Hub
rainbow_pool: Rainbow Pool
locale_name: English locale_name: English
activerecord: activerecord:
@ -32,7 +33,7 @@ en:
footer: footer:
source_code: Source Code source_code: Source Code
terms: Terms of Use (updated %{date}) terms: Terms of Use (%{date})
blog: Blog blog: Blog
contact: Contact contact: Contact
email: Questions, comments, bugs email: Questions, comments, bugs
@ -677,14 +678,15 @@ en:
item_search: item_search:
placeholder: find an item… placeholder: find an item…
submit: search submit: search
modeling_hub: rainbow_pool:
tagline: Found something? tagline: Explore your options!
description: description:
Enter a pet's name here and we'll keep a copy of what it's wearing. Browse the colors you can paint your pets, and the "style" options
Thanks so much! from the NC Mall!
load_pet: filters:
placeholder: model a pet… species: Species…
submit: submit color: Color…
submit: Go
latest_contribution: latest_contribution:
header: Contributions header: Contributions
description_html: "%{user_link} showed us %{contributed_description}. description_html: "%{user_link} showed us %{contributed_description}.

View file

@ -452,12 +452,6 @@ es:
item_search: item_search:
placeholder: buscar un objeto... placeholder: buscar un objeto...
submit: buscar submit: buscar
modeling_hub:
tagline: ¿Has encontrado algo?
description: Si no encuentras un objeto y sabes de un pet que lo lleve ¡Escribe su nombre aquí!
load_pet:
placeholder: desfilar con un pet...
submit: enviar
latest_contribution: latest_contribution:
header: Contribuciones header: Contribuciones
description_html: "%{user_link} nos ha mostrado %{contributed_description}. ¡Muchas gracias, %{user_link}!" description_html: "%{user_link} nos ha mostrado %{contributed_description}. ¡Muchas gracias, %{user_link}!"

View file

@ -448,12 +448,6 @@ pt:
item_search: item_search:
placeholder: Procurar um item… placeholder: Procurar um item…
submit: Vai! submit: Vai!
modeling_hub:
tagline: Encontrou alguma coisa?
description: Digite o nome do pet aqui e nós vamos copiar o que ele está vestindo. Muito Obrigado.
load_pet:
placeholder: modele um pet…
submit: Enviar
latest_contribution: latest_contribution:
header: Contribuições header: Contribuições
description_html: "%{user_link} nos mostrou %{contributed_description}. Obrigado, %{user_link}!" description_html: "%{user_link} nos mostrou %{contributed_description}. Obrigado, %{user_link}!"

View file

@ -35,11 +35,14 @@ OpenneoImpressItems::Application.routes.draw do
end end
resources :alt_styles, path: 'alt-styles', only: [:index] resources :alt_styles, path: 'alt-styles', only: [:index]
end end
resources :alt_styles, path: 'alt-styles', only: [:index, :edit, :update]
resources :swf_assets, path: 'swf-assets', only: [:show] resources :swf_assets, path: 'swf-assets', only: [:show]
scope "rainbow-pool" do
resources :alt_styles, path: 'alt-styles', only: [:index, :edit, :update],
path: 'styles'
end
resources :pet_types, path: 'rainbow-pool', param: "name", resources :pet_types, path: 'rainbow-pool', param: "name",
only: [:index, :show] do only: [:index, :show] do
resources :pet_states, only: [:show, :edit, :update], path: "appearances" resources :pet_states, only: [:edit, :update], path: "appearances"
end end
# Loading and modeling pets! # Loading and modeling pets!