Skip to content

Commit 7561dfc

Browse files
committed
Add and remove HTML attribute and class while toggling via client side JS Commands
1 parent 7cbc9f3 commit 7561dfc

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

lib/live_cal_web/live/calendar_live/index.ex

+26
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,30 @@ defmodule LiveCalWeb.CalendarLive.Index do
4444

4545
{:noreply, stream_delete(socket, :calendars, calendar)}
4646
end
47+
48+
def accessible_js_toggle_1(js \\ %JS{}, [to: selector]) do
49+
js
50+
|> JS.remove_attribute("aria-hidden", to: selector <> "[style*='display: none']")
51+
|> JS.set_attribute({"aria-hidden", "true"}, to: selector <> ":not([style*='display: none'])")
52+
|> JS.remove_class("invisible", to: selector <> "[style*='display: none']")
53+
|> JS.add_class("invisible", to: selector <> ":not([style*='display: none'])")
54+
|> JS.toggle(to: selector)
55+
end
56+
57+
def accessible_js_toggle_2(js \\ %JS{}, [to: selector]) do
58+
js
59+
|> JS.remove_attribute("aria-hidden", to: selector <> ".invisible")
60+
|> JS.set_attribute({"aria-hidden", "true"}, to: selector <> ":not(.invisible)")
61+
|> JS.remove_class("invisible", to: selector <> ".invisible")
62+
|> JS.add_class("invisible", to: selector <> ":not(.invisible)")
63+
|> JS.toggle(to: selector)
64+
end
65+
66+
# note: toggling while selecting by attribute does not work
67+
#def accessible_js_toggle_3(js \\ %JS{}, [to: selector]) do
68+
#js
69+
#|> JS.remove_attribute("aria-hidden", to: selector <> "[aria-hidden='true']")
70+
#|> JS.set_attribute({"aria-hidden", "true"}, to: selector <> ":not([aria-hidden='true'])")
71+
#|> JS.toggle(to: selector)
72+
#end
4773
end

lib/live_cal_web/live/calendar_live/index.html.heex

+8
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@
1515
Toggle visibility of private calendars
1616
</.button>
1717

18+
<.button phx-click={accessible_js_toggle_1(to: "[data-visibility='private']")}>
19+
Aria toggle visibility of private calendars
20+
</.button>
21+
22+
<.button phx-click={accessible_js_toggle_2(to: "[data-visibility='public']")}>
23+
Aria toggle visibility of public calendars
24+
</.button>
25+
1826
<.table
1927
id="calendars"
2028
rows={@streams.calendars}

0 commit comments

Comments
 (0)