2011-05-13 05:07:59 -07:00
|
|
|
- title @item.name
|
2011-07-26 15:56:14 -07:00
|
|
|
- canonical_path @item
|
2024-09-05 16:18:48 -07:00
|
|
|
- use_responsive_design
|
2011-05-20 16:29:04 -07:00
|
|
|
|
2024-01-21 04:40:25 -08:00
|
|
|
= render partial: "item_header",
|
2024-01-21 06:42:24 -08:00
|
|
|
locals: {item: @item, trades: @trades, current_subpage: "preview",
|
|
|
|
current_user_lists: @current_user_lists,
|
|
|
|
current_user_quantities: @current_user_quantities}
|
2011-07-14 09:50:24 -07:00
|
|
|
|
Add warning for "Baby Body Paint" bugs
I *think* what I'm observing is that:
1. The zone restrictions are different between these items.
2. The zone restrictions *change* when reloading the page sometimes. (I
assume from remodeling?)
3. The items look very buggy on many pets, because many appearances
seem to expect different zone restrictions than the item actually
has.
I think what this means is:
1. TNT has finally unbound restricted zones from the item level, and
allowed different appearances to have different restrictions. Neat!
2. The API still serves it the same way, as a field on the item.
So I think this means we need to update our schema to reflect the fact
that an item's `zones_restrict` field isn't *really* a property of the
item; it's a property of the combination of the item and the current
body ID.
My gut take here is that maybe this means it's time for the Large
Refactor that I've kinda been interested in for a while, but been
avoiding because of Impress 2020 compatibility issues: instead of a
`body_id` field on assets, and having them directly belong to items,
make an `ItemAppearance` record (closer to how 2020's GQL API modeled
it, I was looking ahead to this possibility!) that's keyed on item and
body ID, and assets belong to *that*.
Then, we could move the zones restriction field onto the
`ItemAppearance` record instead. And then it doesn't really matter to
us how TNT models it internally; whatever we saw is what we use.
(Again, I looked ahead to this in the 2020 app, and tried to use the
`restrictedZones` field on `ItemAppearance` when possible—even though
it secretly just reads directly from the `Item`!)
…but that's a pretty big departure from how things are modeled now, and
isn't something we can just throw together—especially coordinating it
across both apps. I was getting close to being able to shut off 2020
from a *front-facing* perspective (but still keeping a lot of the GQL
endpoints open for the wardrobe-2020 frontend), but I don't think we're
very close to being able to try to target turning off 2020's *backend*
as a prereq to this; or at least, if we do, we should expect that to
take a while. (Counting now, there's still 9 GQL queries—not as many as
I expected tbh, but still quite a few.)
So idk how to sequence this! But for now, let's put out a warning, and
start setting expectations.
2024-02-27 18:16:23 -08:00
|
|
|
- if @item.name.include? "Baby Body Paint"
|
|
|
|
%p.warning
|
|
|
|
The Baby Body Paint items seem to have new zone restriction rules that our
|
|
|
|
system doesn't support yet, whuh oh! This might require major changes to
|
|
|
|
how we handle zones. Until then, these items will be <em>very</em> buggy,
|
|
|
|
sorry!
|
|
|
|
|
2024-07-01 13:48:20 -07:00
|
|
|
= turbo_frame_tag "item-preview" do
|
2024-09-06 16:24:58 -07:00
|
|
|
.preview-area
|
|
|
|
= render partial: "outfit_viewer", locals: {outfit: @preview_outfit}
|
|
|
|
.error-indicator
|
|
|
|
💥 We couldn't load all of this outfit. Try again?
|
2024-09-06 17:12:11 -07:00
|
|
|
= link_to wardrobe_path(params: @preview_outfit.wardrobe_params),
|
|
|
|
class: "customize-more", target: "_blank",
|
|
|
|
title: "Customize more", "aria-label": "Customize more" do
|
|
|
|
= edit_icon
|
2024-07-01 13:48:20 -07:00
|
|
|
|
2024-09-05 17:34:54 -07:00
|
|
|
%species-color-picker
|
|
|
|
= form_for item_path(@item), method: :get, data: {"is-valid": @preview_error.nil?} do |f|
|
|
|
|
- if @preview_error == :pet_type_does_not_exist
|
|
|
|
%span.error-icon{title: "We haven't seen this kind of pet before."} ⚠️
|
|
|
|
- elsif @preview_error == :no_item_data
|
|
|
|
%span.error-icon{title: "We haven't seen this item on this pet before."} ⚠️
|
2024-07-01 13:48:20 -07:00
|
|
|
|
2024-09-05 17:34:54 -07:00
|
|
|
= select_tag "preview[color_id]",
|
|
|
|
options_from_collection_for_select(Color.funny.alphabetical,
|
|
|
|
"id", "human_name", @selected_preview_pet_type.color_id)
|
|
|
|
= select_tag "preview[species_id]",
|
|
|
|
options_from_collection_for_select(Species.alphabetical,
|
|
|
|
"id", "human_name", @selected_preview_pet_type.species_id)
|
|
|
|
= submit_tag "Go", name: nil
|
2024-06-30 23:34:27 -07:00
|
|
|
|
2024-09-03 17:07:53 -07:00
|
|
|
%species-face-picker
|
2024-09-03 13:46:29 -07:00
|
|
|
%noscript
|
|
|
|
This fancy species picker requires Javascript, but you can still use the
|
|
|
|
dropdowns instead!
|
2024-09-03 17:07:53 -07:00
|
|
|
%species-face-picker-options{
|
|
|
|
inert: true, # waits for JS to remove
|
2024-09-03 13:46:29 -07:00
|
|
|
"aria-hidden": true, # waits for JS to remove
|
|
|
|
}
|
|
|
|
- @preview_pet_type_options.each do |pet_type|
|
2024-09-03 17:27:43 -07:00
|
|
|
%label{
|
|
|
|
title: species_face_tooltip(pet_type, @item),
|
|
|
|
}
|
2024-09-03 13:46:29 -07:00
|
|
|
= radio_button_tag "species_face_id", pet_type.species_id,
|
2024-09-03 16:42:04 -07:00
|
|
|
checked: pet_type == @preview_outfit.pet_type,
|
2024-09-03 17:27:43 -07:00
|
|
|
disabled: !item_fits?(@item, pet_type)
|
2024-09-03 16:42:04 -07:00
|
|
|
= pet_type_image pet_type,
|
2024-09-03 17:27:43 -07:00
|
|
|
item_fits?(@item, pet_type) ? :happy : :sad,
|
2024-09-03 16:42:04 -07:00
|
|
|
:face
|
2024-09-03 13:23:58 -07:00
|
|
|
|
2024-09-05 18:48:41 -07:00
|
|
|
.item-preview-meta-info
|
|
|
|
.item-zones-info
|
|
|
|
%section
|
|
|
|
%h3 Occupies
|
|
|
|
- if @appearances_by_occupied_zone.present?
|
|
|
|
%ul
|
|
|
|
- @appearances_by_occupied_zone.each do |zone, appearances_in_zone|
|
|
|
|
%li
|
|
|
|
= zone.label
|
|
|
|
- if item_zone_partial_fit? appearances_in_zone, @all_appearances
|
|
|
|
%span.zone-species-info{
|
|
|
|
title: item_zone_species_list(appearances_in_zone)
|
|
|
|
}
|
|
|
|
(#{appearances_in_zone.size} species)
|
|
|
|
- else
|
|
|
|
%span.no-zones (None)
|
|
|
|
|
|
|
|
%section
|
|
|
|
%h3 Restricts
|
|
|
|
- if @item.restricted_zones.present?
|
|
|
|
%ul
|
|
|
|
- @item.restricted_zones.sort_by(&:label).each do |zone|
|
|
|
|
%li= zone.label
|
|
|
|
- else
|
|
|
|
%span.no-zones (None)
|
2024-08-31 13:07:18 -07:00
|
|
|
|
2024-09-05 18:48:41 -07:00
|
|
|
%div
|
|
|
|
- if @selected_item_appearance.html5?
|
|
|
|
.item-html5-info{
|
|
|
|
"data-status": "converted",
|
|
|
|
"aria-label": "HTML5 supported!",
|
|
|
|
title: "This item is converted to HTML5, and ready to use on Neopets.com!",
|
|
|
|
}
|
|
|
|
%svg{viewBox: "0 0 24 24"}
|
|
|
|
%path{fill: "currentColor", d: "M12,0A12,12,0,1,0,24,12,12.014,12.014,0,0,0,12,0Zm6.927,8.2-6.845,9.289a1.011,1.011,0,0,1-1.43.188L5.764,13.769a1,1,0,1,1,1.25-1.562l4.076,3.261,6.227-8.451A1,1,0,1,1,18.927,8.2Z"}
|
|
|
|
%svg{viewBox: "0 0 36 36"}
|
|
|
|
%path{fill: "currentColor", d: "M16.389 14.489c.744-.155 1.551-.31 2.326-.31 3.752 0 6.418 2.977 6.418 6.604 0 5.178-2.851 8.589-8.216 8.589-2.201 0-6.821-1.427-6.821-4.155 0-1.147.961-2.107 2.108-2.107 1.24 0 2.729 1.984 4.806 1.984 2.17 0 3.288-2.109 3.288-4.062 0-1.86-1.055-3.131-2.977-3.131-1.799 0-2.078 1.023-3.659 1.023-1.209 0-1.829-.93-1.829-1.457 0-.403.062-.713.093-1.054l.774-6.544c.341-2.418.93-2.945 2.418-2.945h7.472c1.428 0 2.264.837 2.264 1.953 0 2.14-1.611 2.326-2.17 2.326h-5.829l-.466 3.286z"}
|
2024-08-31 13:07:18 -07:00
|
|
|
- else
|
2024-09-05 18:48:41 -07:00
|
|
|
.item-html5-info{
|
|
|
|
"data-status": "unconverted",
|
|
|
|
"aria-label": "HTML5 not supported",
|
|
|
|
title: "This item isn't converted to HTML5 yet, so it might not appear in " +
|
|
|
|
"Neopets.com customization yet. Once it's ready, it could look a " +
|
|
|
|
"bit different than our temporary preview here. It might even be " +
|
|
|
|
"animated!"
|
|
|
|
}
|
|
|
|
%svg{viewBox: "0 0 24 24"}
|
|
|
|
%path{fill: "currentColor", d: "M23.119,20,13.772,2.15h0a2,2,0,0,0-3.543,0L.881,20a2,2,0,0,0,1.772,2.928H21.347A2,2,0,0,0,23.119,20ZM11,8.423a1,1,0,0,1,2,0v6a1,1,0,1,1-2,0Zm1.05,11.51h-.028a1.528,1.528,0,0,1-1.522-1.47,1.476,1.476,0,0,1,1.448-1.53h.028A1.527,1.527,0,0,1,13.5,18.4,1.475,1.475,0,0,1,12.05,19.933Z"}
|
|
|
|
%svg{viewBox: "0 0 36 36"}
|
|
|
|
%path{fill: "currentColor", d: "M16.389 14.489c.744-.155 1.551-.31 2.326-.31 3.752 0 6.418 2.977 6.418 6.604 0 5.178-2.851 8.589-8.216 8.589-2.201 0-6.821-1.427-6.821-4.155 0-1.147.961-2.107 2.108-2.107 1.24 0 2.729 1.984 4.806 1.984 2.17 0 3.288-2.109 3.288-4.062 0-1.86-1.055-3.131-2.977-3.131-1.799 0-2.078 1.023-3.659 1.023-1.209 0-1.829-.93-1.829-1.457 0-.403.062-.713.093-1.054l.774-6.544c.341-2.418.93-2.945 2.418-2.945h7.472c1.428 0 2.264.837 2.264 1.953 0 2.14-1.611 2.326-2.17 2.326h-5.829l-.466 3.286z"}
|
|
|
|
%path{fill: "#DD2E44", opacity: "0.75", d: "M18 0C8.059 0 0 8.059 0 18s8.059 18 18 18 18-8.059 18-18S27.941 0 18 0zm13 18c0 2.565-.753 4.95-2.035 6.965L11.036 7.036C13.05 5.753 15.435 5 18 5c7.18 0 13 5.821 13 13zM5 18c0-2.565.753-4.95 2.036-6.964l17.929 17.929C22.95 30.247 20.565 31 18 31c-7.179 0-13-5.82-13-13z"}
|
2024-08-31 13:07:18 -07:00
|
|
|
|
2023-08-02 12:10:38 -07:00
|
|
|
- unless @contributors_with_counts.empty?
|
|
|
|
#item-contributors
|
|
|
|
%header #{t '.contributors.header'}:
|
|
|
|
%ul
|
|
|
|
- @contributors_with_counts.each do |contributor, count|
|
|
|
|
%li= link_to(contributor.name, user_contributions_path(contributor)) + format_contribution_count(count)
|
|
|
|
%footer= t '.contributors.footer'
|
2012-10-24 20:16:01 -07:00
|
|
|
|
2024-07-07 19:05:48 -07:00
|
|
|
- content_for :stylesheets do
|
|
|
|
= stylesheet_link_tag "application/hanger-spinner"
|
|
|
|
|
2024-07-02 22:03:43 -07:00
|
|
|
- content_for :javascripts do
|
2024-07-03 21:52:43 -07:00
|
|
|
= javascript_include_tag "lib/idiomorph", async: true
|
|
|
|
= javascript_include_tag "outfit-viewer", async: true
|
2024-09-03 13:23:58 -07:00
|
|
|
= javascript_include_tag "items/show", async: true
|