Compare commits

..

No commits in common. "0c615043f237ccf246dc8d05f92e2caeb7d6f735" and "23240005a2ae26ede7a1d691e80f3fe89bd6904d" have entirely different histories.

4 changed files with 89 additions and 98 deletions

View file

@ -1,23 +1,21 @@
function setFormStateCookie(value) { const userListSections = document.querySelectorAll(
const thirtyDays = 60 * 60 * 24 * 30; ".item-header .user-lists-section");
document.cookie = `DTIItemPageUserListsFormState=open;max-age=${thirtyDays}`; for (const section of userListSections) {
}
const headers = document.querySelectorAll(".item-header");
for (const header of headers) {
try { try {
const form = header.querySelector(".user-lists-form"); const dialog = section.querySelector("dialog");
const opener = header.querySelector(".user-lists-form-opener"); const opener = section.querySelector(".dialog-opener");
opener.addEventListener("click", (event) => { const closer = section.querySelector(".dialog-closer");
if (form.hasAttribute("hidden")) { if (dialog.showModal) { // check browser support
form.removeAttribute("hidden"); opener.addEventListener("click", (event) => {
setFormStateCookie("open"); dialog.show();
} else { event.preventDefault();
form.setAttribute("hidden", ""); });
setFormStateCookie("closed"); document.body.addEventListener("click", (event) => {
} if (dialog.open && !section.contains(event.target)) {
event.preventDefault(); dialog.close();
}); }
});
}
} catch (error) { } catch (error) {
console.error(`Error applying dialog behavior to item header:`, error); console.error(`Error applying dialog behavior to item header:`, error);
} }

View file

@ -59,59 +59,57 @@
background: #E2E8F0 background: #E2E8F0
color: #1A202C color: #1A202C
.user-lists-info .user-lists-section
grid-area: lists grid-area: lists
font-size: 85% font-size: 85%
text-align: left text-align: left
.user-lists-form-opener .dialog-opener
&::after &::after
content: " " content: " "
.user-lists-form dialog
background: $background-color background: $background-color
border: 1px solid $module-border-color border: 1px solid $module-border-color
border-radius: .5em border-radius: .5em
padding: 1em padding: 1em
width: 30em width: 30em
text-align: center text-align: center
z-index: 2 z-index: 2
margin-top: .5em margin-top: .5em
margin-inline: auto box-shadow: 0px 1px 4px #666
margin-bottom: 1.5em
font-size: 85%
h3 h3
font-size: 150% font-size: 150%
font-weight: bold font-weight: bold
margin-bottom: .75em margin-bottom: .25em
.closet-hangers-ownership-groups
+clearfix
margin-bottom: .5em
div
float: left
margin: 0 5%
text-align: left
width: 40%
li .closet-hangers-ownership-groups
list-style: none +clearfix
word-wrap: break-word margin-bottom: .5em
label.unlisted div
font-style: italic float: left
margin: 0 5%
text-align: left
width: 40%
li
list-style: none
word-wrap: break-word
label.unlisted
font-style: italic
form form
padding: .5em 0 padding: .5em 0
select select
width: 9em width: 9em
input[type=number] input[type=number]
margin-right: .5em margin-right: .5em
width: 3em width: 3em
.item-description .item-description
margin-top: .5em margin-top: .5em

View file

@ -118,9 +118,5 @@ module ItemsHelper
human_name = pet_type.species.name.humanize human_name = pet_type.species.name.humanize
image_tag(src, :alt => human_name, :title => human_name) image_tag(src, :alt => human_name, :title => human_name)
end end
def item_header_user_lists_form_state
cookies.fetch("DTIItemPageUserListsFormState", "closed")
end
end end

View file

@ -31,43 +31,42 @@
= link_to t('items.show.resources.auction_genie'), auction_genie_url_for(item) = link_to t('items.show.resources.auction_genie'), auction_genie_url_for(item)
- if user_signed_in? - if user_signed_in?
.user-lists-info .user-lists-section
= link_to t('items.show.closet_hangers.button'), = link_to t('items.show.closet_hangers.button'),
user_closet_hangers_path(current_user), user_closet_hangers_path(current_user),
class: 'user-lists-form-opener' class: 'dialog-opener'
%dialog
- if user_signed_in? %h3
= form_tag update_quantities_user_item_closet_hangers_path(user_id: current_user, item_id: item), method: :put, class: 'user-lists-form', hidden: item_header_user_lists_form_state != "open" do = t 'items.show.closet_hangers.header_html',
%h3 user_items_link: link_to(t('your_items'),
= t 'items.show.closet_hangers.header_html', user_closet_hangers_path(current_user))
user_items_link: link_to(t('your_items'), = form_tag update_quantities_user_item_closet_hangers_path(:user_id => current_user, :item_id => item), :method => :put do
user_closet_hangers_path(current_user)) .closet-hangers-ownership-groups
.closet-hangers-ownership-groups - [true, false].each do |owned|
- [true, false].each do |owned| - lists = current_user_lists[owned]
- lists = current_user_lists[owned] %div
%div %h4= closet_lists_group_name(:you, owned)
%h4= closet_lists_group_name(:you, owned) %ul
%ul - lists.each_with_index do |list, index|
- lists.each_with_index do |list, index| %li
%li = number_field_tag "quantity[#{list.id}]",
= number_field_tag "quantity[#{list.id}]", current_user_quantities[list.id], min: 0,
current_user_quantities[list.id], min: 0, autofocus: owned && index == 0
autofocus: owned && index == 0 = label_tag "quantity[#{list.id}]", list.name
= label_tag "quantity[#{list.id}]", list.name
%li
= number_field_tag "quantity[#{owned}]",
current_user_quantities[owned], min: 0,
autofocus: owned && lists.empty?
- unless lists.empty? %li
= label_tag "quantity[#{owned}]", = number_field_tag "quantity[#{owned}]",
t('closet_lists.unlisted_name'), current_user_quantities[owned], min: 0,
:class => 'unlisted' autofocus: owned && lists.empty?
- else
= label_tag "quantity[#{owned}]", - unless lists.empty?
t('items.show.closet_hangers.quantity_label') = label_tag "quantity[#{owned}]",
= submit_tag t('items.show.closet_hangers.submit') t('closet_lists.unlisted_name'),
:class => 'unlisted'
- else
= label_tag "quantity[#{owned}]",
t('items.show.closet_hangers.quantity_label')
= submit_tag t('items.show.closet_hangers.submit')
%p.item-description= item.description %p.item-description= item.description