diff --git a/app/assets/stylesheets/items/_show.sass b/app/assets/stylesheets/items/_show.sass
index 0c0c2f6e..4958c1d6 100644
--- a/app/assets/stylesheets/items/_show.sass
+++ b/app/assets/stylesheets/items/_show.sass
@@ -37,3 +37,23 @@ body.items-show
.nc-icon
height: 16px
width: 16px
+
+ outfit-viewer
+ position: relative
+ display: block
+ width: 300px
+ height: 300px
+ border: 1px solid $module-border-color
+ border-radius: 1em
+ overflow: hidden
+
+ margin: 0 auto .75em
+
+ outfit-layer
+ display: block
+ position: absolute
+ inset: 0
+
+ img
+ width: 100%
+ height: 100%
diff --git a/app/controllers/items_controller.rb b/app/controllers/items_controller.rb
index e086c031..cc75d736 100644
--- a/app/controllers/items_controller.rb
+++ b/app/controllers/items_controller.rb
@@ -82,6 +82,16 @@ class ItemsController < ApplicationController
group_by_owned
@current_user_quantities = current_user.item_quantities_for(@item)
end
+
+ @preview_pet_type = PetType.find_by_color_id_and_species_id(
+ Color.find_by_name("Blue"),
+ Species.find_by_name("Acara"),
+ )
+ @item_layers = @item.appearance_for(
+ @preview_pet_type, swf_asset_includes: [:zone]
+ ).swf_assets
+ @pet_layers = @preview_pet_type.canonical_pet_state.swf_assets.
+ includes(:zone)
end
format.gif do
diff --git a/app/helpers/items_helper.rb b/app/helpers/items_helper.rb
index 31f0bfde..7a4021b7 100644
--- a/app/helpers/items_helper.rb
+++ b/app/helpers/items_helper.rb
@@ -244,5 +244,15 @@ module ItemsHelper
def item_header_user_lists_form_state
cookies.fetch("DTIItemPageUserListsFormState", "closed")
end
+
+ def outfit_viewer_layers(swf_assets)
+ swf_assets.map { |a| outfit_viewer_layer(a) }.join("\n").html_safe
+ end
+
+ def outfit_viewer_layer(swf_asset)
+ content_tag "outfit-layer", style: "z-index: #{swf_asset.zone.depth}" do
+ image_tag swf_asset.image_url, alt: ""
+ end
+ end
end
diff --git a/app/javascript/item-page.js b/app/javascript/item-page.js
index 5d8d56b0..afc9235c 100644
--- a/app/javascript/item-page.js
+++ b/app/javascript/item-page.js
@@ -1,15 +1,2 @@
-import React from "react";
-import ReactDOM from "react-dom";
-
-import { AppProvider, ItemPageOutfitPreview } from "./wardrobe-2020";
-
-const rootNode = document.querySelector("#outfit-preview-root");
-const itemId = rootNode.getAttribute("data-item-id");
-// TODO: Use the new React 18 APIs instead!
-// eslint-disable-next-line react/no-deprecated
-ReactDOM.render(
-
-
- ,
- rootNode,
-);
+// eslint-disable-next-line no-console
+console.log("OwO!");
diff --git a/app/models/item.rb b/app/models/item.rb
index e246be6f..5739e082 100644
--- a/app/models/item.rb
+++ b/app/models/item.rb
@@ -595,6 +595,10 @@ class Item < ApplicationRecord
end
end
+ def appearance_for(target, ...)
+ Item.appearances_for([id], target, ...)[id]
+ end
+
# Given a list of item IDs, return how they look on the given target (either
# a pet type or an alt style).
def self.appearances_for(item_ids, target, swf_asset_includes: [])
diff --git a/app/views/items/show.html.haml b/app/views/items/show.html.haml
index 84f3aeea..b4416fdd 100644
--- a/app/views/items/show.html.haml
+++ b/app/views/items/show.html.haml
@@ -13,7 +13,11 @@
how we handle zones. Until then, these items will be very buggy,
sorry!
-#outfit-preview-root{'data-item-id': @item.id}
+%outfit-viewer
+ %outfit-pet-appearance
+ = outfit_viewer_layers @pet_layers
+ %outfit-item-appearance
+ = outfit_viewer_layers @item_layers
- unless @contributors_with_counts.empty?
#item-contributors