Skip to content

Commit 6290497

Browse files
authored
Merge pull request #552 from GSA-TTS/hmm/partner-portal#58/auto-accordion-js
Expand accordion elements based on URL
2 parents d4f66a8 + 993473c commit 6290497

File tree

6 files changed

+110
-2
lines changed

6 files changed

+110
-2
lines changed

Gemfile

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,17 @@ gem 'kramdown-parser-gfm', '~> 1.0'
88
gem 'jekyll-redirect-from'
99
gem 'jekyll-sitemap'
1010

11+
group :development, :test do
12+
gem 'pry-byebug'
13+
end
14+
1115
group :test do
16+
gem 'capybara'
1217
gem 'html-proofer', '~> 4.0'
18+
gem 'nokogiri', '>= 1.10.5'
19+
gem 'rackup' # required for `Capybara.server = :webrick`
20+
gem 'rack-jekyll'
1321
gem 'rspec'
1422
gem 'rspec_junit_formatter', require: false
15-
gem 'nokogiri', '>= 1.10.5'
23+
gem 'selenium-webdriver'
1624
end

Gemfile.lock

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,19 @@ GEM
33
specs:
44
addressable (2.8.7)
55
public_suffix (>= 2.0.2, < 7.0)
6+
base64 (0.3.0)
67
bigdecimal (3.1.8)
8+
byebug (12.0.0)
9+
capybara (3.40.0)
10+
addressable
11+
matrix
12+
mini_mime (>= 0.1.3)
13+
nokogiri (~> 1.11)
14+
rack (>= 1.6.0)
15+
rack-test (>= 0.6.3)
16+
regexp_parser (>= 1.5, < 3.0)
17+
xpath (~> 3.2)
18+
coderay (1.1.3)
719
colorator (1.1.0)
820
concurrent-ruby (1.3.4)
921
diff-lcs (1.5.1)
@@ -62,21 +74,42 @@ GEM
6274
listen (3.9.0)
6375
rb-fsevent (~> 0.10, >= 0.10.3)
6476
rb-inotify (~> 0.9, >= 0.9.10)
77+
logger (1.7.0)
78+
matrix (0.4.2)
6579
mercenary (0.4.0)
80+
method_source (1.1.0)
81+
mini_mime (1.1.5)
6682
mini_portile2 (2.8.9)
6783
nokogiri (1.18.8)
6884
mini_portile2 (~> 2.8.2)
6985
racc (~> 1.4)
7086
parallel (1.26.3)
7187
pathutil (0.16.2)
7288
forwardable-extended (~> 2.6)
89+
pry (0.15.2)
90+
coderay (~> 1.1)
91+
method_source (~> 1.0)
92+
pry-byebug (3.11.0)
93+
byebug (~> 12.0)
94+
pry (>= 0.13, < 0.16)
7395
public_suffix (6.0.1)
7496
racc (1.8.1)
97+
rack (1.6.13)
98+
rack-jekyll (0.5.0)
99+
jekyll (>= 1.3)
100+
listen (>= 1.3)
101+
rack (~> 1.5)
102+
rack-test (2.2.0)
103+
rack (>= 1.3)
104+
rackup (1.0.1)
105+
rack (< 3)
106+
webrick
75107
rainbow (3.1.1)
76108
rake (13.2.1)
77109
rb-fsevent (0.11.2)
78110
rb-inotify (0.11.1)
79111
ffi (~> 1.0)
112+
regexp_parser (2.10.0)
80113
rexml (3.3.9)
81114
rouge (4.4.0)
82115
rspec (3.13.0)
@@ -94,35 +127,50 @@ GEM
94127
rspec-support (3.13.1)
95128
rspec_junit_formatter (0.6.0)
96129
rspec-core (>= 2, < 4, != 2.12.0)
130+
rubyzip (2.4.1)
97131
safe_yaml (1.0.5)
98132
sass-embedded (1.80.6)
99133
google-protobuf (~> 4.28)
100134
rake (>= 13)
135+
selenium-webdriver (4.33.0)
136+
base64 (~> 0.2)
137+
logger (~> 1.4)
138+
rexml (~> 3.2, >= 3.2.5)
139+
rubyzip (>= 1.2.2, < 3.0)
140+
websocket (~> 1.0)
101141
terminal-table (3.0.2)
102142
unicode-display_width (>= 1.1.1, < 3)
103143
typhoeus (1.4.1)
104144
ethon (>= 0.9.0)
105145
unicode-display_width (2.6.0)
106146
webrick (1.9.0)
147+
websocket (1.2.11)
148+
xpath (3.2.0)
149+
nokogiri (~> 1.8)
107150
yell (2.2.2)
108151
zeitwerk (2.7.1)
109152

110153
PLATFORMS
111154
ruby
112155

113156
DEPENDENCIES
157+
capybara
114158
html-proofer (~> 4.0)
115159
jekyll (~> 4.3.0)
116160
jekyll-redirect-from
117161
jekyll-sass-converter (~> 3.0.0)
118162
jekyll-sitemap
119163
kramdown-parser-gfm (~> 1.0)
120164
nokogiri (>= 1.10.5)
165+
pry-byebug
166+
rack-jekyll
167+
rackup
121168
rspec
122169
rspec_junit_formatter
170+
selenium-webdriver
123171

124172
RUBY VERSION
125173
ruby 3.2.5p208
126174

127175
BUNDLED WITH
128-
2.5.9
176+
2.6.9

_layouts/base.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ <h1 class="usa-display">{{ page.title }}</h1>
153153
<script src="{{ site.baseurl }}/assets/js/toggle_view.js"></script>
154154
<script src="{{ site.baseurl }}/assets/js/main.js"></script>
155155
<script src="{{ site.baseurl }}/assets/js/anchor.js"></script>
156+
<script src="{{ site.baseurl }}/assets/js/anchor_accordion.js"></script>
156157

157158
<script>
158159
anchors.add([

assets/js/anchor_accordion.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
(() => {
2+
const onChange = (_event) => {
3+
const urlHash = new URL(document.URL).hash;
4+
const idFromHash = urlHash.match(/^(#[A-Za-z0-9_-]+)$/);
5+
if (idFromHash) {
6+
const accordionHeading = document.querySelector(
7+
`${idFromHash[1]}.usa-accordion__heading > button`,
8+
);
9+
if (accordionHeading) {
10+
accordionHeading.click();
11+
}
12+
}
13+
};
14+
document.addEventListener('DOMContentLoaded', onChange);
15+
window.addEventListener('hashchange', onChange);
16+
})();

spec/capybara_helper.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
require 'spec_helper'
2+
require 'capybara/rspec'
3+
require 'rack/jekyll'
4+
require 'selenium-webdriver'
5+
require 'yaml'
6+
7+
Capybara.javascript_driver = :selenium_chrome_headless
8+
Capybara.app = Rack::Jekyll.new(force_build: true)
9+
Capybara.server = :webrick
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
require 'capybara_helper'
2+
require 'pry-byebug'
3+
4+
RSpec.describe 'accordions on /oidc/authorization/', :js, type: :feature do
5+
it 'is not expanded by default' do
6+
visit '/oidc/authorization'
7+
expect(page).to have_element('dt')
8+
expect(page).to have_no_element('dd')
9+
accordion_button = find('#service_level button')
10+
expect(accordion_button.native.attribute('aria-expanded')).to eq('false')
11+
end
12+
13+
it 'is expanded with an anchor in the URL' do
14+
visit '/oidc/authorization#service_level'
15+
expect(page).to have_element('dt')
16+
expect(page).to have_element('dd')
17+
definition = find('#service_level ~ dd').text
18+
expect(definition).to include('acr.login.gov:verified')
19+
accordion_button = find('#service_level > button')
20+
expect(accordion_button.native.attribute('aria-expanded')).to eq('true')
21+
22+
visit '/oidc/authorization#aal_values'
23+
next_definition = find('#aal_values ~ dd').text
24+
expect(next_definition).to include('http://idmanagement.gov/ns/assurance/aal/2')
25+
end
26+
end

0 commit comments

Comments
 (0)