Add namespacing to photoclipboard.js.
This commit is contained in:
parent
c7cce5a4e5
commit
d7b9020585
5 changed files with 116 additions and 86 deletions
|
@ -1,54 +1,60 @@
|
|||
var photo_clipboard = new Set();
|
||||
var on_clipboard_load_hooks = [];
|
||||
var on_clipboard_save_hooks = [];
|
||||
var photo_clipboard = {};
|
||||
|
||||
photo_clipboard.clipboard = new Set();
|
||||
photo_clipboard.on_load_hooks = [];
|
||||
photo_clipboard.on_save_hooks = [];
|
||||
|
||||
// Load save ///////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function clear_photo_clipboard()
|
||||
photo_clipboard.clear_clipboard =
|
||||
function clear_clipboard()
|
||||
{
|
||||
photo_clipboard.clear();
|
||||
save_photo_clipboard();
|
||||
photo_clipboard.clipboard.clear();
|
||||
photo_clipboard.save_clipboard();
|
||||
}
|
||||
|
||||
function load_photo_clipboard(event)
|
||||
photo_clipboard.load_clipboard =
|
||||
function load_clipboard(event)
|
||||
{
|
||||
console.log("Loading photo clipboard");
|
||||
console.log("Loading photo clipboard.");
|
||||
var stored = localStorage.getItem("photo_clipboard");
|
||||
if (stored === null)
|
||||
{
|
||||
if (photo_clipboard.size != 0)
|
||||
if (photo_clipboard.clipboard.size != 0)
|
||||
{
|
||||
photo_clipboard = new Set();
|
||||
photo_clipboard.clipboard = new Set();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
photo_clipboard = new Set(JSON.parse(stored));
|
||||
photo_clipboard.clipboard = new Set(JSON.parse(stored));
|
||||
}
|
||||
|
||||
for (var index = 0; index < on_clipboard_load_hooks.length; index += 1)
|
||||
for (var index = 0; index < photo_clipboard.on_load_hooks.length; index += 1)
|
||||
{
|
||||
on_clipboard_load_hooks[index]();
|
||||
photo_clipboard.on_load_hooks[index]();
|
||||
}
|
||||
|
||||
return photo_clipboard;
|
||||
return photo_clipboard.clipboard;
|
||||
}
|
||||
|
||||
function save_photo_clipboard()
|
||||
photo_clipboard.save_clipboard =
|
||||
function save_clipboard()
|
||||
{
|
||||
console.log("Saving photo clipboard");
|
||||
var serialized = JSON.stringify(Array.from(photo_clipboard));
|
||||
console.log("Saving photo clipboard.");
|
||||
var serialized = JSON.stringify(Array.from(photo_clipboard.clipboard));
|
||||
localStorage.setItem("photo_clipboard", serialized);
|
||||
update_pagestate();
|
||||
photo_clipboard.update_pagestate();
|
||||
|
||||
for (var index = 0; index < on_clipboard_save_hooks.length; index += 1)
|
||||
for (var index = 0; index < photo_clipboard.on_save_hooks.length; index += 1)
|
||||
{
|
||||
on_clipboard_save_hooks[index]();
|
||||
photo_clipboard.on_save_hooks[index]();
|
||||
}
|
||||
}
|
||||
|
||||
// Card management /////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
photo_clipboard.apply_check =
|
||||
function apply_check(photo_card)
|
||||
{
|
||||
/*
|
||||
|
@ -56,7 +62,7 @@ function apply_check(photo_card)
|
|||
whether the clipboard contains this card's ID.
|
||||
*/
|
||||
var checkbox = photo_card.getElementsByClassName("photo_card_selector_checkbox")[0];
|
||||
if (photo_clipboard.has(photo_card.dataset.id))
|
||||
if (photo_clipboard.clipboard.has(photo_card.dataset.id))
|
||||
{
|
||||
checkbox.checked = true;
|
||||
}
|
||||
|
@ -66,6 +72,7 @@ function apply_check(photo_card)
|
|||
}
|
||||
}
|
||||
|
||||
photo_clipboard.apply_check_all =
|
||||
function apply_check_all()
|
||||
{
|
||||
/*
|
||||
|
@ -73,12 +80,18 @@ function apply_check_all()
|
|||
correct value.
|
||||
*/
|
||||
var photo_divs = Array.from(document.getElementsByClassName("photo_card"));
|
||||
photo_divs.forEach(apply_check);
|
||||
photo_divs.forEach(photo_clipboard.apply_check);
|
||||
}
|
||||
|
||||
var _action_select = function(photo_div){photo_clipboard.add(photo_div.dataset.id)}
|
||||
var _action_unselect = function(photo_div){photo_clipboard.delete(photo_div.dataset.id)}
|
||||
var previous_photo_select = null;
|
||||
photo_clipboard._action_select =
|
||||
function(photo_div){photo_clipboard.clipboard.add(photo_div.dataset.id)}
|
||||
|
||||
photo_clipboard._action_unselect =
|
||||
function(photo_div){photo_clipboard.clipboard.delete(photo_div.dataset.id)}
|
||||
|
||||
photo_clipboard.previous_photo_select = null;
|
||||
|
||||
photo_clipboard.on_photo_select =
|
||||
function on_photo_select(event)
|
||||
{
|
||||
/*
|
||||
|
@ -90,17 +103,17 @@ function on_photo_select(event)
|
|||
*/
|
||||
if (event.target.checked)
|
||||
{
|
||||
action = _action_select;
|
||||
action = photo_clipboard._action_select;
|
||||
}
|
||||
else
|
||||
{
|
||||
action = _action_unselect;
|
||||
action = photo_clipboard._action_unselect;
|
||||
}
|
||||
|
||||
if (event.shiftKey && previous_photo_select)
|
||||
if (event.shiftKey && photo_clipboard.previous_photo_select)
|
||||
{
|
||||
var current_photo_div = event.target.parentElement;
|
||||
var previous_photo_div = previous_photo_select.target.parentElement;
|
||||
var previous_photo_div = photo_clipboard.previous_photo_select.target.parentElement;
|
||||
var photo_divs = Array.from(current_photo_div.parentElement.children);
|
||||
|
||||
var current_index = photo_divs.indexOf(current_photo_div);
|
||||
|
@ -127,54 +140,63 @@ function on_photo_select(event)
|
|||
var photo_div = event.target.parentElement;
|
||||
action(photo_div);
|
||||
}
|
||||
previous_photo_select = event;
|
||||
save_photo_clipboard();
|
||||
photo_clipboard.previous_photo_select = event;
|
||||
photo_clipboard.save_clipboard();
|
||||
}
|
||||
|
||||
photo_clipboard.select_photo =
|
||||
function select_photo(photo_div)
|
||||
{
|
||||
photo_div.getElementsByClassName("photo_card_selector_checkbox")[0].checked = true;
|
||||
_action_select(photo_div);
|
||||
save_photo_clipboard();
|
||||
photo_clipboard._action_select(photo_div);
|
||||
photo_clipboard.save_clipboard();
|
||||
}
|
||||
|
||||
photo_clipboard.unselect_photo =
|
||||
function unselect_photo(photo_div)
|
||||
{
|
||||
photo_div.getElementsByClassName("photo_card_selector_checkbox")[0].checked = false;
|
||||
_action_unselect(photo_div)
|
||||
save_photo_clipboard();
|
||||
photo_clipboard._action_unselect(photo_div)
|
||||
photo_clipboard.save_clipboard();
|
||||
}
|
||||
|
||||
photo_clipboard.select_all_photos =
|
||||
function select_all_photos()
|
||||
{
|
||||
var photo_divs = Array.from(document.getElementsByClassName("photo_card"));
|
||||
photo_divs.forEach(_action_select);
|
||||
apply_check_all();
|
||||
save_photo_clipboard();
|
||||
photo_divs.forEach(photo_clipboard._action_select);
|
||||
photo_clipboard.apply_check_all();
|
||||
photo_clipboard.save_clipboard();
|
||||
}
|
||||
|
||||
photo_clipboard.unselect_all_photos =
|
||||
function unselect_all_photos()
|
||||
{
|
||||
var photo_divs = Array.from(document.getElementsByClassName("photo_card"));
|
||||
photo_divs.forEach(_action_unselect);
|
||||
apply_check_all()
|
||||
previous_photo_select = null;
|
||||
save_photo_clipboard();
|
||||
photo_divs.forEach(photo_clipboard._action_unselect);
|
||||
photo_clipboard.apply_check_all()
|
||||
photo_clipboard.previous_photo_select = null;
|
||||
photo_clipboard.save_clipboard();
|
||||
}
|
||||
|
||||
// Tray management /////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
photo_clipboard.clipboard_tray_collapse =
|
||||
function clipboard_tray_collapse()
|
||||
{
|
||||
var tray_body = document.getElementById("clipboard_tray_body");
|
||||
tray_body.classList.add("hidden");
|
||||
}
|
||||
|
||||
photo_clipboard.clipboard_tray_uncollapse =
|
||||
function clipboard_tray_uncollapse()
|
||||
{
|
||||
var tray_body = document.getElementById("clipboard_tray_body");
|
||||
tray_body.classList.remove("hidden");
|
||||
update_clipboard_tray();
|
||||
photo_clipboard.update_clipboard_tray();
|
||||
}
|
||||
|
||||
photo_clipboard.clipboard_tray_collapse_toggle =
|
||||
function clipboard_tray_collapse_toggle()
|
||||
{
|
||||
/*
|
||||
|
@ -186,16 +208,17 @@ function clipboard_tray_collapse_toggle()
|
|||
return;
|
||||
}
|
||||
|
||||
if (tray_body.classList.contains("hidden") && photo_clipboard.size > 0)
|
||||
if (tray_body.classList.contains("hidden") && photo_clipboard.clipboard.size > 0)
|
||||
{
|
||||
clipboard_tray_uncollapse();
|
||||
photo_clipboard.clipboard_tray_uncollapse();
|
||||
}
|
||||
else
|
||||
{
|
||||
clipboard_tray_collapse();
|
||||
photo_clipboard.clipboard_tray_collapse();
|
||||
}
|
||||
}
|
||||
|
||||
photo_clipboard.on_tray_delete_button =
|
||||
function on_tray_delete_button(event)
|
||||
{
|
||||
/*
|
||||
|
@ -203,10 +226,11 @@ function on_tray_delete_button(event)
|
|||
*/
|
||||
var clipboard_line = event.target.parentElement;
|
||||
var photo_id = clipboard_line.dataset.id;
|
||||
photo_clipboard.delete(photo_id);
|
||||
save_photo_clipboard();
|
||||
photo_clipboard.clipboard.delete(photo_id);
|
||||
photo_clipboard.save_clipboard();
|
||||
}
|
||||
|
||||
photo_clipboard.update_clipboard_tray =
|
||||
function update_clipboard_tray()
|
||||
{
|
||||
/*
|
||||
|
@ -218,16 +242,16 @@ function update_clipboard_tray()
|
|||
return;
|
||||
}
|
||||
|
||||
if (photo_clipboard.size == 0)
|
||||
if (photo_clipboard.clipboard.size == 0)
|
||||
{
|
||||
clipboard_tray_collapse();
|
||||
photo_clipboard.clipboard_tray_collapse();
|
||||
}
|
||||
|
||||
var tray_lines = document.getElementById("clipboard_tray_lines");
|
||||
if (!clipboard_tray.classList.contains("hidden"))
|
||||
{
|
||||
common.delete_all_children(tray_lines);
|
||||
var photo_ids = Array.from(photo_clipboard);
|
||||
var photo_ids = Array.from(photo_clipboard.clipboard);
|
||||
photo_ids.sort();
|
||||
for (var i = 0; i < photo_ids.length; i += 1)
|
||||
{
|
||||
|
@ -238,7 +262,7 @@ function update_clipboard_tray()
|
|||
var clipboard_line_delete_button = document.createElement("button");
|
||||
clipboard_line_delete_button.classList.add("remove_tag_button_perm");
|
||||
clipboard_line_delete_button.classList.add("red_button");
|
||||
clipboard_line_delete_button.onclick = on_tray_delete_button;
|
||||
clipboard_line_delete_button.onclick = photo_clipboard.on_tray_delete_button;
|
||||
|
||||
var clipboard_line_link = document.createElement("a");
|
||||
clipboard_line_link.target = "_blank";
|
||||
|
@ -254,44 +278,50 @@ function update_clipboard_tray()
|
|||
|
||||
// Page and event management ///////////////////////////////////////////////////////////////////////
|
||||
|
||||
photo_clipboard.open_full_clipboard_tab =
|
||||
function open_full_clipboard_tab()
|
||||
{
|
||||
url = "/clipboard";
|
||||
var url = "/clipboard";
|
||||
window.open(url, "full_clipboard");
|
||||
}
|
||||
|
||||
photo_clipboard.update_clipboard_count =
|
||||
function update_clipboard_count()
|
||||
{
|
||||
var elements = document.getElementsByClassName("clipboard_count");
|
||||
for (var index = 0; index < elements.length; index += 1)
|
||||
{
|
||||
elements[index].innerText = photo_clipboard.size;
|
||||
elements[index].innerText = photo_clipboard.clipboard.size;
|
||||
}
|
||||
}
|
||||
|
||||
photo_clipboard.on_storage_event =
|
||||
function on_storage_event()
|
||||
{
|
||||
/*
|
||||
Receive storage events from other tabs and update our state to match.
|
||||
*/
|
||||
load_photo_clipboard();
|
||||
update_pagestate();
|
||||
photo_clipboard.load_clipboard();
|
||||
photo_clipboard.update_pagestate();
|
||||
}
|
||||
|
||||
photo_clipboard.update_pagestate =
|
||||
function update_pagestate()
|
||||
{
|
||||
update_clipboard_count();
|
||||
update_clipboard_tray();
|
||||
apply_check_all();
|
||||
photo_clipboard.update_clipboard_count();
|
||||
photo_clipboard.update_clipboard_tray();
|
||||
photo_clipboard.apply_check_all();
|
||||
}
|
||||
|
||||
photo_clipboard.on_pageload =
|
||||
function on_pageload()
|
||||
{
|
||||
window.addEventListener("storage", on_storage_event, false);
|
||||
register_hotkey("a", 1, 0, 0, select_all_photos, "Select all photos.");
|
||||
register_hotkey("d", 1, 0, 0, unselect_all_photos, "Deselect all photos.");
|
||||
register_hotkey("c", 0, 0, 0, clipboard_tray_collapse_toggle, "Toggle clipboard tray.");
|
||||
register_hotkey("c", 0, 1, 0, open_full_clipboard_tab, "Open full clipboard page.");
|
||||
load_photo_clipboard();
|
||||
update_pagestate();
|
||||
window.addEventListener("storage", photo_clipboard.on_storage_event, false);
|
||||
register_hotkey("a", 1, 0, 0, photo_clipboard.select_all_photos, "Select all photos.");
|
||||
register_hotkey("d", 1, 0, 0, photo_clipboard.unselect_all_photos, "Deselect all photos.");
|
||||
register_hotkey("c", 0, 0, 0, photo_clipboard.clipboard_tray_collapse_toggle, "Toggle clipboard tray.");
|
||||
register_hotkey("c", 0, 1, 0, photo_clipboard.open_full_clipboard_tab, "Open full clipboard page.");
|
||||
photo_clipboard.load_clipboard();
|
||||
photo_clipboard.update_pagestate();
|
||||
}
|
||||
document.addEventListener("DOMContentLoaded", on_pageload);
|
||||
document.addEventListener("DOMContentLoaded", photo_clipboard.on_pageload);
|
||||
|
|
|
@ -85,7 +85,7 @@ body
|
|||
{{header.make_header(session=session)}}
|
||||
<div id="left">
|
||||
<span>The clipboard contains <span class="clipboard_count">0</span> items.</span>
|
||||
<button id="clear_clipboard_button" class="red_button" onclick="clear_photo_clipboard()">Clear it.</button>
|
||||
<button id="clear_clipboard_button" class="red_button" onclick="photo_clipboard.clear_clipboard()">Clear it.</button>
|
||||
<div id="photo_card_holder">
|
||||
</div>
|
||||
</div>
|
||||
|
@ -135,7 +135,7 @@ common.bind_box_to_button(remove_box, remove_button);
|
|||
function recalculate_needed()
|
||||
{
|
||||
needed = new Set();
|
||||
photo_clipboard.forEach(function(photo_id)
|
||||
photo_clipboard.clipboard.forEach(function(photo_id)
|
||||
{
|
||||
if (!(photo_id in divs))
|
||||
{
|
||||
|
@ -149,7 +149,7 @@ function refresh_divs()
|
|||
for (var photo_id in divs)
|
||||
{
|
||||
var photo_div = divs[photo_id];
|
||||
var should_keep = photo_clipboard.has(photo_id);
|
||||
var should_keep = photo_clipboard.clipboard.has(photo_id);
|
||||
var on_page = holder.contains(photo_div);
|
||||
if (on_page && !should_keep)
|
||||
{
|
||||
|
@ -187,7 +187,7 @@ function request_more_divs()
|
|||
needed.delete(photo_id)
|
||||
holder.appendChild(photo_div);
|
||||
}
|
||||
apply_check_all();
|
||||
photo_clipboard.apply_check_all();
|
||||
}
|
||||
common.post(url, data, callback);
|
||||
}
|
||||
|
@ -199,8 +199,8 @@ function myhook()
|
|||
refresh_divs();
|
||||
}
|
||||
|
||||
on_clipboard_load_hooks.push(myhook);
|
||||
on_clipboard_save_hooks.push(myhook);
|
||||
photo_clipboard.on_load_hooks.push(myhook);
|
||||
photo_clipboard.on_save_hooks.push(myhook);
|
||||
|
||||
|
||||
function submit_add_tag(callback)
|
||||
|
@ -225,10 +225,10 @@ function submit_remove_tag(callback)
|
|||
}
|
||||
function submit_add_remove_tag(action, tagname, callback)
|
||||
{
|
||||
if (photo_clipboard.size == 0)
|
||||
if (photo_clipboard.clipboard.size == 0)
|
||||
{return;}
|
||||
var url = "/batch/photos/" + action + "_tag";
|
||||
var photo_ids = Array.from(photo_clipboard).join(",");
|
||||
var photo_ids = Array.from(photo_clipboard.clipboard).join(",");
|
||||
var data = new FormData();
|
||||
data.append("photo_ids", photo_ids);
|
||||
data.append("tagname", tagname);
|
||||
|
@ -266,11 +266,11 @@ function submit_refresh_metadata(callback)
|
|||
if (refresh_in_progress)
|
||||
{return;}
|
||||
|
||||
if (photo_clipboard.size == 0)
|
||||
if (photo_clipboard.clipboard.size == 0)
|
||||
{return;}
|
||||
|
||||
var url = "/batch/photos/refresh_metadata";
|
||||
var photo_ids = Array.from(photo_clipboard).join(",");
|
||||
var photo_ids = Array.from(photo_clipboard.clipboard).join(",");
|
||||
var data = new FormData();
|
||||
data.append("photo_ids", photo_ids);
|
||||
refresh_in_progress = true;
|
||||
|
@ -313,24 +313,24 @@ function searchhidden_callback(response)
|
|||
}
|
||||
function submit_set_searchhidden(callback)
|
||||
{
|
||||
if (photo_clipboard.size == 0)
|
||||
if (photo_clipboard.clipboard.size == 0)
|
||||
{return;}
|
||||
|
||||
var url = "/batch/photos/set_searchhidden";
|
||||
var data = new FormData();
|
||||
var photo_ids = Array.from(photo_clipboard).join(",");
|
||||
var photo_ids = Array.from(photo_clipboard.clipboard).join(",");
|
||||
|
||||
data.append("photo_ids", photo_ids);
|
||||
common.post(url, data, callback);
|
||||
}
|
||||
function submit_unset_searchhidden(callback)
|
||||
{
|
||||
if (photo_clipboard.size == 0)
|
||||
if (photo_clipboard.clipboard.size == 0)
|
||||
{return;}
|
||||
|
||||
var url = "/batch/photos/unset_searchhidden";
|
||||
var data = new FormData();
|
||||
var photo_ids = Array.from(photo_clipboard).join(",");
|
||||
var photo_ids = Array.from(photo_clipboard.clipboard).join(",");
|
||||
|
||||
data.append("photo_ids", photo_ids);
|
||||
common.post(url, data, callback);
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
<button
|
||||
id="clipboard_tray_expandbutton"
|
||||
class="yellow_button"
|
||||
onclick="clipboard_tray_collapse_toggle()"
|
||||
onclick="photo_clipboard.clipboard_tray_collapse_toggle()"
|
||||
>Clipboard: <span class="clipboard_count">0</span> items</button>
|
||||
<div id="clipboard_tray_body" class="hidden">
|
||||
<div id="clipboard_tray_toolbox">
|
||||
<span id="clipboard_tray_toolbox_firstline">
|
||||
<a target="_blank" href="/clipboard">Full clipboard</a>
|
||||
<button id="clear_clipboard_button" class="red_button" onclick="clear_photo_clipboard()">Clear</button>
|
||||
<button id="clear_clipboard_button" class="red_button" onclick="photo_clipboard.clear_clipboard()">Clear</button>
|
||||
</span>
|
||||
<!-- More elements can be added here by the page. -->
|
||||
</div>
|
||||
|
|
|
@ -203,7 +203,7 @@
|
|||
</ul>
|
||||
|
||||
<div>
|
||||
<label class="photo_card" data-id="{{photo.id}}"><input type="checkbox" class="photo_card_selector_checkbox" onclick="on_photo_select(event)"/>Clipboard</label>
|
||||
<label class="photo_card" data-id="{{photo.id}}"><input type="checkbox" class="photo_card_selector_checkbox" onclick="photo_clipboard.on_photo_select(event)"/>Clipboard</label>
|
||||
</div>
|
||||
|
||||
<!-- CONTAINING ALBUMS -->
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
{% if view == "list" %}
|
||||
<div class="photo_card photo_card_list" data-id="{{photo.id}}">
|
||||
<input type="checkbox" class="photo_card_selector_checkbox" onclick="on_photo_select(event)"/>
|
||||
<input type="checkbox" class="photo_card_selector_checkbox" onclick="photo_clipboard.on_photo_select(event)"/>
|
||||
<span class="photo_card_filename"><a target="_blank" href="/photo/{{photo.id}}">{{photo.basename}}</a></span>
|
||||
<a class="photo_card_metadata" target="_blank" href="{{photo|file_link}}">{{photo.bytestring}}</a>
|
||||
</div>
|
||||
|
@ -72,7 +72,7 @@
|
|||
<a target="_blank" href="{{photo|file_link}}">{{photo.bytestring}}</a>
|
||||
</span>
|
||||
|
||||
<input type="checkbox" class="photo_card_selector_checkbox" onclick="on_photo_select(event)"/>
|
||||
<input type="checkbox" class="photo_card_selector_checkbox" onclick="photo_clipboard.on_photo_select(event)"/>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endmacro %}
|
||||
|
|
Loading…
Reference in a new issue