From 36452a470476d97dafffcaca817dfe9322d3208f Mon Sep 17 00:00:00 2001 From: Emi Matchu Date: Sat, 15 Jun 2024 15:47:52 -0700 Subject: [PATCH] Flag items you already own in the Item Getting Guide --- app/assets/stylesheets/items/sources.sass | 35 +++++- app/controllers/items_controller.rb | 11 ++ app/views/items/_item_list_row.html.haml | 7 +- app/views/items/sources.html.haml | 129 ++++++++++++---------- 4 files changed, 117 insertions(+), 65 deletions(-) diff --git a/app/assets/stylesheets/items/sources.sass b/app/assets/stylesheets/items/sources.sass index 117e2cb8..93a1e6b7 100644 --- a/app/assets/stylesheets/items/sources.sass +++ b/app/assets/stylesheets/items/sources.sass @@ -58,9 +58,33 @@ .thumbnail-cell img outline: 1px solid $soft-border-color - .actions-cell button - /* Bootstrap's Purple 600 */ - +awesome-button-color(#59359a) + .actions-cell + button, a.button + /* Bootstrap's Purple 600 */ + +awesome-button-color(#59359a) + + tr[data-item-owned] + color: #aaa + + a:not(.button) + color: inherit + + .thumbnail-cell + filter: grayscale(1) + opacity: .75 + + .item-name + font-style: italic + text-decoration: line-through + text-decoration-color: rgba($text-color, 0.35) + + .owned-explanation + font-style: italic + font-size: 85% + + .actions-cell + button, a.button + +awesome-button-color(#999) .price-breakdown text-decoration-line: underline @@ -100,3 +124,8 @@ tr:hover .thumbnail-cell opacity: 0.85 + + &[data-group-owned] + thead + button, a.button + +awesome-button-color(#999) diff --git a/app/controllers/items_controller.rb b/app/controllers/items_controller.rb index fc720a04..1b9c20e1 100644 --- a/app/controllers/items_controller.rb +++ b/app/controllers/items_controller.rb @@ -116,6 +116,7 @@ class ItemsController < ApplicationController item_ids = params[:ids].split(",") @items = Item.where(id: item_ids).includes(:nc_mall_record). includes(:dyeworks_base_item).order(:name).limit(50) + assign_closeted! if @items.empty? render file: "public/404.html", status: :not_found, layout: nil @@ -155,6 +156,16 @@ class ItemsController < ApplicationController [color, color.example_pet_type(preferred_species: species)] end.to_h + # Create a second value that only include the items the user *needs*: that + # is, that they don't already own. + @nc_mall_items_needed = @nc_mall_items.reject(&:owned?) + @buyable_dyeworks_items_needed = @buyable_dyeworks_items.reject(&:owned?) + @np_items_needed = @np_items.reject(&:owned?) + @pb_items_needed = @pb_items.reject(&:owned?) + @other_nc_items_needed = @other_nc_items.reject(&:owned?) + @pb_items_needed_by_color = + @pb_items_by_color.transform_values { |items| items.reject(&:owned?) } + # Finish loading the NC trade values. trade_values_task.wait diff --git a/app/views/items/_item_list_row.html.haml b/app/views/items/_item_list_row.html.haml index 4ee172bf..93b59baf 100644 --- a/app/views/items/_item_list_row.html.haml +++ b/app/views/items/_item_list_row.html.haml @@ -4,12 +4,15 @@ - content = yield - subtitle = yield :subtitle -%tr +%tr{"data-item-owned": item.owned?} %td.thumbnail-cell = link_to item_thumbnail_for(item), item, target: "_blank", tabindex: "-1" %td.name-cell - = link_to item.name, item, target: "_blank" + = link_to item.name, item, target: "_blank", class: "item-name" + - if item.owned? + %span.owned-explanation + (You own this) - if subtitle.present? .subtitle= subtitle %td.actions-cell= content diff --git a/app/views/items/sources.html.haml b/app/views/items/sources.html.haml index 1ce5aa1e..b48b606d 100644 --- a/app/views/items/sources.html.haml +++ b/app/views/items/sources.html.haml @@ -16,13 +16,14 @@ %tr %td %th - Total: #{nc_total_for @nc_mall_items} NC - (#{pluralize @nc_mall_items.size, "item"}) + Total: #{nc_total_for @nc_mall_items_needed} NC + (#{pluralize @nc_mall_items_needed.size, "item"}) %td.actions-cell - %button{onclick: "alert('Todo!')"} - = cart_icon alt: "" - Buy all in NC Mall + - if @nc_mall_items_needed.present? + %button{onclick: "alert('Todo!')"} + = cart_icon alt: "" + Buy all in NC Mall %tbody - @nc_mall_items.each do |item| = render "item_list_row", item: do @@ -42,25 +43,27 @@ %table.item-list %thead - %td.thumbnail-cell - = image_tag "https://images.neopets.com/items/mall_80x80_cleaning.gif", - alt: "Dyeworks Hue Brew Potion" - %th - Total: #{dyeworks_nc_total_for @buyable_dyeworks_items} NC - = surround "(", ")" do - %span.price-breakdown{ - title: "#{dyeworks_items_nc_total_for(@buyable_dyeworks_items)} NC" - }< - #{pluralize @buyable_dyeworks_items.size, "item"} - + - %span.price-breakdown{ - title: dyeworks_potions_nc_summary(@buyable_dyeworks_items.size) - }< - #{pluralize @buyable_dyeworks_items.size, "potion"} - %td.actions-cell - %button{onclick: "alert('Todo!')"} - = cart_icon alt: "" - Buy all in NC Mall + %tr + %td.thumbnail-cell + = image_tag "https://images.neopets.com/items/mall_80x80_cleaning.gif", + alt: "Dyeworks Hue Brew Potion" + %th + Total: #{dyeworks_nc_total_for @buyable_dyeworks_items_needed} NC + = surround "(", ")" do + %span.price-breakdown{ + title: "#{dyeworks_items_nc_total_for(@buyable_dyeworks_items_needed)} NC" + }< + #{pluralize @buyable_dyeworks_items_needed.size, "item"} + + + %span.price-breakdown{ + title: dyeworks_potions_nc_summary(@buyable_dyeworks_items_needed.size) + }< + #{pluralize @buyable_dyeworks_items_needed.size, "potion"} + %td.actions-cell + - if @buyable_dyeworks_items_needed.present? + %button{onclick: "alert('Todo!')"} + = cart_icon alt: "" + Buy all in NC Mall %tbody - @buyable_dyeworks_items.each do |item| = render "item_list_row", item: do @@ -96,9 +99,10 @@ %table.item-list %thead - %td - %th{colspan: 2} - Total: #{pluralize @np_items.size, "item"} + %tr + %td + %th{colspan: 2} + Total: #{pluralize @np_items_needed.size, "item"} %tbody - @np_items.each do |item| = render "item_list_row", item: do @@ -116,39 +120,44 @@ "cross-paint" outfits. - @pb_items_by_color.each do |color, items| - %table.item-list{"data-group-type": "bundle"} + - items_needed = @pb_items_needed_by_color[color] + %table.item-list{ + "data-group-type": "bundle", + "data-group-owned": items.all?(&:owned?), + } %thead - %td.thumbnail-cell - - if color&.pb_item_thumbnail_url? - = image_tag color.pb_item_thumbnail_url, - alt: "Item thumbnail for #{color.pb_item_name}" - - elsif color - = image_tag pet_type_image_url(@pb_color_pet_types[color], size: :face), - srcset: ["#{pet_type_image_url(@pb_color_pet_types[color], size: :face_2x)} 2x"], - alt: @pb_color_pet_types[color].human_name - - else - = image_tag "https://images.neopets.com/items/starter_red_pb.gif", - alt: "Item thumbnail for Starter Red Paint Brush" - %th - - if color - #{color.pb_item_name || color.name.humanize} - - else - Basic colors - (#{pluralize items.size, "item"}) - %td.actions-cell - - if color&.pb_item_name? - = button_link_to "Shops", - shop_wizard_url_for(color.pb_item_name), - target: "_blank", icon: search_icon - = button_link_to "Trades", - trading_post_url_for(color.pb_item_name), - target: "_blank", icon: search_icon - - elsif color - .special-color-explanation - Get via Lab Ray, morphing potions, etc. - - else - .special-color-explanation - Many colors, like Red, will grant these items. + %tr + %td.thumbnail-cell + - if color&.pb_item_thumbnail_url? + = image_tag color.pb_item_thumbnail_url, + alt: "Item thumbnail for #{color.pb_item_name}" + - elsif color + = image_tag pet_type_image_url(@pb_color_pet_types[color], size: :face), + srcset: ["#{pet_type_image_url(@pb_color_pet_types[color], size: :face_2x)} 2x"], + alt: @pb_color_pet_types[color].human_name + - else + = image_tag "https://images.neopets.com/items/starter_red_pb.gif", + alt: "Item thumbnail for Starter Red Paint Brush" + %th + - if color + #{color.pb_item_name || color.name.humanize} + - else + Basic colors + (#{pluralize items_needed.size, "item"}) + %td.actions-cell + - if color&.pb_item_name? + = button_link_to "Shops", + shop_wizard_url_for(color.pb_item_name), + target: "_blank", icon: search_icon + = button_link_to "Trades", + trading_post_url_for(color.pb_item_name), + target: "_blank", icon: search_icon + - elsif color + .special-color-explanation + Get via Lab Ray, morphing potions, etc. + - else + .special-color-explanation + Many colors, like Red, will grant these items. %tbody - items.each do |item| = render "item_list_row", item: @@ -175,7 +184,7 @@ %thead %td %th{colspan: 2} - Total: #{pluralize @other_nc_items.size, "item"} + Total: #{pluralize @other_nc_items_needed.size, "item"} %tbody - @other_nc_items.each do |item| = render "item_list_row", item: do