From 5b2014dd2ac06c05e5a864e374680a61e7566298 Mon Sep 17 00:00:00 2001
From: Dan Keck <keck.60@osu.edu>
Date: Mon, 29 Jan 2024 01:01:56 -0500
Subject: [PATCH] Fixed naming

---
 listbox.bux.css | 18 +++++++-------
 listbox.bux.js  | 65 +++++++++++++++++++++++++++++++++----------------
 sample.html     |  2 +-
 3 files changed, 54 insertions(+), 31 deletions(-)

diff --git a/listbox.bux.css b/listbox.bux.css
index 9cd516b..8332fef 100644
--- a/listbox.bux.css
+++ b/listbox.bux.css
@@ -1,5 +1,5 @@
-.bux-multiselection-dropdown button,
-.bux-multiselection-dropdown button:hover
+.bux-listbox button,
+.bux-listbox button:hover
 {
     background-color: #fff;
     text-align: left;
@@ -10,14 +10,14 @@
     padding: 0.625rem 1.25rem 0.625rem 6px;
     color: #000;
 }
-.bux-multiselection-dropdown button:focus
+.bux-listbox button:focus
 {
     background-color: #fff;
     color: #000;
     outline: 2px solid #3492b8;
     border: 2px solid #212325;
 }
-.bux-multiselection-dropdown .bux-checkbox
+.bux-listbox .bux-checkbox
 {
     border: 2px solid #212325;
     background-color: #fff;
@@ -29,20 +29,20 @@
     border: 2px solid #B0B0B0;
     box-shadow: 1px 1px 5px #C0C0C0;
 }
-.bux-multiselection-dropdown tr:hover,
-.bux-multiselection-dropdown tr:focus-within
+.bux-listbox tr:hover,
+.bux-listbox tr:focus-within
 {
     background-color:#E0E0E6;
 }
-.bux-multiselection-dropdown fieldset table
+.bux-listbox fieldset table
 {
     width:100%;
 }
-.bux-multiselection-dropdown fieldset td
+.bux-listbox fieldset td
 {
     padding: 8px 8px 8px 8px;
 }
-.bux-multiselection-dropdown fieldset .bux-checkbox__option
+.bux-listbox fieldset .bux-checkbox__option
 {
     margin: 0 0.125rem 0 0.125rem;
 }
diff --git a/listbox.bux.js b/listbox.bux.js
index ffc5270..ca06413 100644
--- a/listbox.bux.js
+++ b/listbox.bux.js
@@ -1,8 +1,8 @@
 // opening = true, false, or the word "toggle"
-function buxMultiselectionDropdownChangeState($multiselect, opening, focus)
+function buxListboxChangeState($listbox, opening, focus)
 {
-    var $checkboxContainer = $multiselect.find(".bux-checkbox");
-    var $button = $multiselect.find("button");
+    var $checkboxContainer = $listbox.find(".bux-checkbox");
+    var $button = $listbox.find("button");
 
     if(opening == "toggle")
     {
@@ -22,39 +22,44 @@ function buxMultiselectionDropdownChangeState($multiselect, opening, focus)
     }
 }
 
-// Update the text of the button to reflect the newly selected values.
-$(document).on("refreshText", ".bux-multiselection-dropdown button", function ()
+function buxListboxUpdateButtonText($listbox)
 {
-    var $multiselect = $(this).parent().parent();
-    var selectedLabels = $multiselect.find("input[type=checkbox]:checked").toArray().map(cb => { return $(cb).parent().find("label").text(); }).join(", ");
+    var selectedLabels = $listbox.find("input[type=checkbox]:checked").toArray().map(cb => { return $(cb).parent().find("label").text(); }).join(", ");
     if(selectedLabels.trim().length == 0) selectedLabels = "&nbsp;";
-    $(this).html(selectedLabels);
+    $listbox.find("button").html(selectedLabels);
+}
+
+// Update the text of the button to reflect the newly selected values.
+$(document).on("refreshText", ".bux-listbox button", function ()
+{
+    var $listbox = $(this).parent().parent();
+    buxListboxUpdateButtonText($listbox);
 });
 
 // User changed state of a checkbox.
-$(document).on("change", ".bux-multiselection-dropdown input[type=checkbox]", function()
+$(document).on("change", ".bux-listbox input[type=checkbox]", function()
 {
-    var $multiselect = $(this).parent().parent().parent().parent().parent().parent().parent().parent();
-    $multiselect.find("button").trigger("refreshText");
+    var $listbox = $(this).parent().parent().parent().parent().parent().parent().parent().parent();
+    $listbox.find("button").trigger("refreshText");
 });
 
 // User toggled open the checkbox list.
-$(document).on("click", ".bux-multiselection-dropdown button", function ()
+$(document).on("click", ".bux-listbox button", function(e)
 {
-    var $multiselect = $(this).parent().parent();
-    buxMultiselectionDropdownChangeState($multiselect, "toggle", true);
+    var $listbox = $(this).parent().parent();
+    buxListboxChangeState($listbox, "toggle", true);
 });
 
 // Handle keystrokes inside the checkbox list.
-$(".bux-multiselection-dropdown").on("keyup", "input[type=checkbox]", function(e)
+$(".bux-listbox").on("keyup", "input[type=checkbox]", function(e)
 {
     var $tr = $(this).parent().parent().parent();
     var $table = $tr.parent();
-    var $multiselect = $table.parent().parent().parent().parent();
+    var $listbox = $table.parent().parent().parent().parent();
 
-    if (e.key === "Escape" || e.key === "Enter")
+    if (e.key === "Escape")
     {
-        buxMultiselectionDropdownChangeState($multiselect, false, true);
+        buxListboxChangeState($listbox, false, true);
         e.preventDefault();
     }
 
@@ -66,7 +71,7 @@ $(".bux-multiselection-dropdown").on("keyup", "input[type=checkbox]", function(e
         case "End": $table.children().last().find("input[type=checkbox]").focus(); e.preventDefault(); break;
     }
 });
-$(".bux-multiselection-dropdown").on("keydown", "input[type=checkbox]", function (e)
+$(".bux-listbox").on("keydown", "input[type=checkbox]", function (e)
 {
     switch (e.key)
     {
@@ -77,6 +82,24 @@ $(".bux-multiselection-dropdown").on("keydown", "input[type=checkbox]", function
     }
 });
 
+// Close the checkbox list with Escape
+$(".bux-listbox").on("keyup", "button", function(e)
+{
+    var $listbox = $(this).parent().parent();
+ 
+    if (e.key === "Escape")
+    {
+        buxListboxChangeState($listbox, false, true);
+        e.preventDefault();
+    }s
+});
+
 // User leaves the checkbox list.
-$(document).mouseup(function (e) { $(".bux-multiselection-dropdown").each(function (i, ms) { var $ms = $(ms);  if (!$ms.is(e.target) && $ms.has(e.target).length === 0) buxMultiselectionDropdownChangeState($ms, false); }); });
-$(document).keyup(function (e) { $(".bux-multiselection-dropdown").each(function (i, ms) { var $ms = $(ms); if (!$ms.is(e.target) && $ms.has(e.target).length === 0) buxMultiselectionDropdownChangeState($ms, false); }); });
+$(document).mouseup(function (e) { $(".bux-listbox").each(function (i, ms) { var $ms = $(ms);  if (!$ms.is(e.target) && $ms.has(e.target).length === 0) buxListboxChangeState($ms, false); }); });
+$(document).keyup(function (e) { $(".bux-listbox").each(function (i, ms) { var $ms = $(ms); if (!$ms.is(e.target) && $ms.has(e.target).length === 0) buxListboxChangeState($ms, false); }); });
+
+// Initialization
+$(function()
+{
+    $(".bux-listbox").each((i, lb) => buxListboxUpdateButtonText($(lb))); 
+});
\ No newline at end of file
diff --git a/sample.html b/sample.html
index c5250b3..bc60bc8 100644
--- a/sample.html
+++ b/sample.html
@@ -15,7 +15,7 @@
 	<main>
 		<div class="bux-container bux-grid">
 			<div class="bux-grid__cell bux-grid__cell--12">
-				<div class="bux-selection-dropdown bux-multiselection-dropdown">
+				<div class="bux-selection-dropdown bux-listbox">
 					<label for="weekdays" class="bux-selection-dropdown__label">Weekdays</label>
 					<div class="bux-selection-dropdown__input">
 						<button id="weekdays" type="button" name="weekdays" role="combobox" aria-expanded="false" aria-controls="weekdays-checkboxlist" aria-description="multiselect">&nbsp;</button>
-- 
GitLab