Add the clipboard checkbox on pageload, not in server response.

With the recent addition of search_embed iframes on other pages, we
had photo cards appearing but the photo_clipboard module was not
imported thus the checkboxes did nothing. I don't want to import
photo_clipboard onto every single page, I'd rather they click through
to the full search UI. Otherwise every single page will have the tray
and often not a good enough reason for it.
So, since the functionality of the checkbox is completely reliant on
the photo_clipboard.js module anyway, there's no reason not to have it
generated by that module.
This commit is contained in:
voussoir 2021-01-05 01:24:03 -08:00
parent 7c62c064cb
commit 29774f2524
3 changed files with 25 additions and 5 deletions

View file

@ -54,6 +54,21 @@ function save_clipboard()
// Card management ///////////////////////////////////////////////////////////////////////////////// // Card management /////////////////////////////////////////////////////////////////////////////////
photo_clipboard.give_checkbox =
function give_checkbox(photo_card)
{
// There are some UIs where photo cards appear
const checkbox = document.createElement("input")
checkbox.type = "checkbox";
checkbox.className = "photo_clipboard_selector_checkbox";
checkbox.onclick = function(event)
{
return photo_clipboard.on_photo_select(event);
}
photo_card.appendChild(checkbox);
return checkbox;
}
photo_clipboard.apply_check = photo_clipboard.apply_check =
function apply_check(checkbox) function apply_check(checkbox)
{ {
@ -104,12 +119,17 @@ photo_clipboard.apply_check_all =
function apply_check_all() function apply_check_all()
{ {
/* /*
Run through all the photo cards on the page and set their checkbox to the Run through all the photo cards, give them their checkbox if they don't
correct value. already have it, and check it if that photo is on the clipboard.
*/ */
const checkboxes = document.getElementsByClassName("photo_clipboard_selector_checkbox"); const cards = document.getElementsByClassName("photo_card");
for (const checkbox of checkboxes) for (const card of cards)
{ {
let checkbox = card.getElementsByClassName("photo_clipboard_selector_checkbox")[0];
if (! checkbox)
{
checkbox = photo_clipboard.give_checkbox(card);
}
photo_clipboard.apply_check(checkbox); photo_clipboard.apply_check(checkbox);
} }
} }

View file

@ -607,6 +607,7 @@ function autofocus_add_tag_box()
function on_pageload() function on_pageload()
{ {
autofocus_add_tag_box(); autofocus_add_tag_box();
photo_clipboard.apply_check(document.getElementById("clipboard_checkbox"));
} }
document.addEventListener("DOMContentLoaded", on_pageload); document.addEventListener("DOMContentLoaded", on_pageload);
</script> </script>

View file

@ -29,7 +29,6 @@
data-id="{{photo.id}}" data-id="{{photo.id}}"
class="photo_card photo_card_{{view}} photo_card_unselected {%if photo.searchhidden%}photo_card_searchhidden{%endif%}" class="photo_card photo_card_{{view}} photo_card_unselected {%if photo.searchhidden%}photo_card_searchhidden{%endif%}"
> >
<input type="checkbox" class="photo_clipboard_selector_checkbox" onclick="return photo_clipboard.on_photo_select(event);"/>
<div class="photo_card_filename"><a target="_blank" href="/photo/{{photo.id}}">{{photo.basename}}</a></div> <div class="photo_card_filename"><a target="_blank" href="/photo/{{photo.id}}">{{photo.basename}}</a></div>
<span class="photo_card_metadata"> <span class="photo_card_metadata">
{{- metadata_inner|safe -}} {{- metadata_inner|safe -}}