diff --git a/public/javascripts/select_all.js b/public/javascripts/select_all.js index ce6baf6edc7..830f759e59c 100644 --- a/public/javascripts/select_all.js +++ b/public/javascripts/select_all.js @@ -1,46 +1,33 @@ // To be included only where needed: // tag_wranglings/index, tags/wrangle, admin/spam -// TODO: Refactor to be less repetitive -$j(document).ready(function(){ - $j("#wrangle_all_select").click(function() { - $j("#wrangulator").find(":checkbox[name='selected_tags[]']").each(function(index, ticky) { - $j(ticky).prop("checked", true); - }); - }); - $j("#wrangle_all_deselect").click(function() { - $j("#wrangulator").find(":checkbox[name='selected_tags[]']").each(function(index, ticky) { - $j(ticky).prop("checked", false); - }); - }); - $j("#canonize_all_select").click(function() { - $j("#wrangulator").find(":checkbox[name='canonicals[]']").each(function(index, ticky) { - $j(ticky).prop("checked", true); - }); - }); - $j("#canonize_all_deselect").click(function() { - $j("#wrangulator").find(":checkbox[name='canonicals[]']").each(function(index, ticky) { - $j(ticky).prop("checked", false); - }); - }); - $j("#spam_all_select").click(function() { - $j("#spam_works").find(":checkbox[name='spam[]']").each(function(index, ticky) { - $j(ticky).prop("checked", true); - }); - }); - $j("#spam_all_deselect").click(function() { - $j("#spam_works").find(":checkbox[name='spam[]']").each(function(index, ticky) { - $j(ticky).prop("checked", false); - }); - }); - $j("#ham_all_select").click(function() { - $j("#spam_works").find(":checkbox[name='ham[]']").each(function(index, ticky) { - $j(ticky).prop("checked", true); - }); - }); - $j("#ham_all_deselect").click(function() { - $j("#spam_works").find(":checkbox[name='ham[]']").each(function(index, ticky) { - $j(ticky).prop("checked", false); - }); +document.addEventListener("DOMContentLoaded", function() { + + function bindToggle(buttonId, container, checkboxName, state) { + var button = document.querySelector(buttonId); + if (!button) return; + button.addEventListener("click", function() { + document.querySelector(container) + .querySelectorAll("input[type='checkbox'][name='" + checkboxName + "']") + .forEach(function(checkbox) { + checkbox.checked = state; + }); + }); + } + + var toggles = [ + ["#wrangle_all_select", "#wrangulator", "selected_tags[]", true ], + ["#wrangle_all_deselect", "#wrangulator", "selected_tags[]", false], + ["#canonize_all_select", "#wrangulator", "canonicals[]", true ], + ["#canonize_all_deselect", "#wrangulator", "canonicals[]", false], + ["#spam_all_select", "#spam_works", "spam[]", true ], + ["#spam_all_deselect", "#spam_works", "spam[]", false], + ["#ham_all_select", "#spam_works", "ham[]", true ], + ["#ham_all_deselect", "#spam_works", "ham[]", false], + ]; + + toggles.forEach(function(t) { + bindToggle(t[0], t[1], t[2], t[3]); }); -}) + +}); \ No newline at end of file