@internetarchive/ia-topnav 1.3.3 → 1.3.5-alpha1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/assets/img/hamburger.js +38 -0
- package/src/assets/img/icon-close.js +2 -2
- package/src/assets/img/icons.js +0 -2
- package/src/nav-search.js +1 -7
- package/src/primary-nav.js +14 -3
- package/src/search-menu.js +25 -1
- package/src/styles/primary-nav.js +4 -4
- package/src/styles/search-menu.js +3 -0
- package/test/ia-topnav.test.js +1 -1
- package/test/primary-nav.test.js +1 -1
- package/src/assets/img/icon-hamburger.js +0 -18
package/package.json
CHANGED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { html, css } from 'https://offshoot.prod.archive.org/lit.js';
|
|
2
|
+
import Icon from './icon.js';
|
|
3
|
+
import icons from './icons.js';
|
|
4
|
+
|
|
5
|
+
class HamBurger extends Icon {
|
|
6
|
+
static get styles() {
|
|
7
|
+
return css`
|
|
8
|
+
svg {
|
|
9
|
+
display: block;
|
|
10
|
+
height: 4rem;
|
|
11
|
+
width: 4rem;
|
|
12
|
+
}
|
|
13
|
+
.fill-color {
|
|
14
|
+
fill: var(--activeColor);
|
|
15
|
+
}
|
|
16
|
+
`;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
static get closed() {
|
|
20
|
+
return html`
|
|
21
|
+
<svg viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg" aria-labelledby="hamburgerTitleID hamburgerDescID">
|
|
22
|
+
<title id="hamburgerTitleID">Hamburger icon</title>
|
|
23
|
+
<desc id="hamburgerDescID">An icon used to represent a menu that can be toggled by interacting with this icon.</desc>
|
|
24
|
+
<path d="m30.5 26.5c.8284271 0 1.5.6715729 1.5 1.5s-.6715729 1.5-1.5 1.5h-21c-.82842712 0-1.5-.6715729-1.5-1.5s.67157288-1.5 1.5-1.5zm0-8c.8284271 0 1.5.6715729 1.5 1.5s-.6715729 1.5-1.5 1.5h-21c-.82842712 0-1.5-.6715729-1.5-1.5s.67157288-1.5 1.5-1.5zm0-8c.8284271 0 1.5.6715729 1.5 1.5s-.6715729 1.5-1.5 1.5h-21c-.82842712 0-1.5-.6715729-1.5-1.5s.67157288-1.5 1.5-1.5z" fill="#999" fill-rule="evenodd"/>
|
|
25
|
+
</svg>
|
|
26
|
+
`;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
static get opened() {
|
|
30
|
+
return icons.close;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
render() {
|
|
34
|
+
return this.active ? HamBurger.opened : HamBurger.closed;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
customElements.define('icon-hamburger', HamBurger);
|
package/src/assets/img/icons.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import audio from './icon-audio.js';
|
|
2
2
|
import close from './icon-close.js';
|
|
3
|
-
import hamburger from './icon-hamburger.js';
|
|
4
3
|
import donate from './icon-donate.js';
|
|
5
4
|
import donateUnpadded from './icon-donate-unpadded.js';
|
|
6
5
|
import ellipses from './icon-ellipses.js';
|
|
@@ -18,7 +17,6 @@ import web from './icon-web.js';
|
|
|
18
17
|
export default {
|
|
19
18
|
audio,
|
|
20
19
|
close,
|
|
21
|
-
hamburger,
|
|
22
20
|
donate,
|
|
23
21
|
donateUnpadded,
|
|
24
22
|
ellipses,
|
package/src/nav-search.js
CHANGED
|
@@ -34,13 +34,6 @@ class NavSearch extends TrackedElement {
|
|
|
34
34
|
this.initSearchBetaOptIn();
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
updated() {
|
|
38
|
-
if (this.open) {
|
|
39
|
-
this.shadowRoot.querySelector('[name=query]').focus();
|
|
40
|
-
}
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
37
|
initSearchBetaOptIn() {
|
|
45
38
|
this.inSearchBeta = !!window.localStorage?.getItem('SearchBeta-opt-in') ||
|
|
46
39
|
!!window.localStorage?.getItem('SearchBeta-launched');
|
|
@@ -112,6 +105,7 @@ class NavSearch extends TrackedElement {
|
|
|
112
105
|
<button
|
|
113
106
|
type="submit"
|
|
114
107
|
class="search"
|
|
108
|
+
tabindex="-1"
|
|
115
109
|
data-event-click-tracking="${this.config.eventCategory}|NavSearchClose"
|
|
116
110
|
>
|
|
117
111
|
${icons.search}
|
package/src/primary-nav.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { html, nothing } from 'https://offshoot.prod.archive.org/lit.js';
|
|
2
2
|
import TrackedElement from './tracked-element.js';
|
|
3
3
|
import icons from './assets/img/icons.js';
|
|
4
|
+
import './assets/img/hamburger.js';
|
|
4
5
|
import './login-button.js';
|
|
5
6
|
import './nav-search.js';
|
|
6
7
|
import './media-menu.js';
|
|
@@ -106,6 +107,7 @@ class PrimaryNav extends TrackedElement {
|
|
|
106
107
|
.dropdownOpen=${this.signedOutMenuOpen}
|
|
107
108
|
.openMenu=${this.openMenu}
|
|
108
109
|
@signedOutMenuToggled=${this.signedOutMenuToggled}
|
|
110
|
+
tabindex="-1"
|
|
109
111
|
></login-button>
|
|
110
112
|
`;
|
|
111
113
|
}
|
|
@@ -123,7 +125,7 @@ class PrimaryNav extends TrackedElement {
|
|
|
123
125
|
|
|
124
126
|
return html`
|
|
125
127
|
<button
|
|
126
|
-
class="
|
|
128
|
+
class="search-trigger"
|
|
127
129
|
@click="${this.toggleSearchMenu}"
|
|
128
130
|
data-event-click-tracking="${this.config.eventCategory}|NavSearchOpen"
|
|
129
131
|
>
|
|
@@ -151,7 +153,15 @@ class PrimaryNav extends TrackedElement {
|
|
|
151
153
|
}
|
|
152
154
|
|
|
153
155
|
get uploadButtonTemplate() {
|
|
154
|
-
return html
|
|
156
|
+
return html`
|
|
157
|
+
<a href="${formatUrl('/create', this.baseHost)}"
|
|
158
|
+
class="upload"
|
|
159
|
+
tabindex="1"
|
|
160
|
+
@focus=${(e) => {
|
|
161
|
+
if (e.relatedTarget !== null) {
|
|
162
|
+
this.toggleSearchMenu(e)
|
|
163
|
+
}
|
|
164
|
+
}}>
|
|
155
165
|
${icons.upload}
|
|
156
166
|
<span>Upload</span>
|
|
157
167
|
</a>`;
|
|
@@ -187,6 +197,7 @@ class PrimaryNav extends TrackedElement {
|
|
|
187
197
|
data-event-click-tracking="${this.config.eventCategory}|NavHome"
|
|
188
198
|
title="Go home"
|
|
189
199
|
class="link-home"
|
|
200
|
+
tabindex="-1"
|
|
190
201
|
>${icons.iaLogo}${logoWordmarkStacked}</a
|
|
191
202
|
>
|
|
192
203
|
${this.secondLogoSlot}
|
|
@@ -213,7 +224,7 @@ class PrimaryNav extends TrackedElement {
|
|
|
213
224
|
data-event-click-tracking="${this.config.eventCategory}|NavHamburger"
|
|
214
225
|
title="Open main menu"
|
|
215
226
|
>
|
|
216
|
-
|
|
227
|
+
<icon-hamburger ?active=${this.openMenu === 'media'}></icon-hamburger>
|
|
217
228
|
</button>
|
|
218
229
|
</nav>
|
|
219
230
|
`;
|
package/src/search-menu.js
CHANGED
|
@@ -29,6 +29,29 @@ class SearchMenu extends TrackedElement {
|
|
|
29
29
|
this.selectedSearchType = '';
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
firstUpdated() {
|
|
33
|
+
this.shadowRoot.addEventListener('keyup', (e) => {
|
|
34
|
+
const searchTypes = this.shadowRoot.querySelectorAll('.search-menu-inner label input[type=radio]');
|
|
35
|
+
const length = searchTypes.length - 1;
|
|
36
|
+
|
|
37
|
+
// early return if searchTypes not found
|
|
38
|
+
if (!length) return;
|
|
39
|
+
|
|
40
|
+
const searchTypeHandler = (index) => {
|
|
41
|
+
const searchType = searchTypes[index];
|
|
42
|
+
searchType.checked = true;
|
|
43
|
+
searchType.dispatchEvent(new Event('change'));
|
|
44
|
+
searchType.focus();
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
if (e.key === 'Home') {
|
|
48
|
+
searchTypeHandler(0);
|
|
49
|
+
} else if (e.key === 'End') {
|
|
50
|
+
searchTypeHandler(length);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
32
55
|
selectSearchType(e) {
|
|
33
56
|
this.selectedSearchType = e.target.value;
|
|
34
57
|
}
|
|
@@ -70,7 +93,7 @@ class SearchMenu extends TrackedElement {
|
|
|
70
93
|
}
|
|
71
94
|
return html`
|
|
72
95
|
<label @click="${this.selectSearchType}">
|
|
73
|
-
<input form="nav-search" type="radio" name="sin" value="${value}" ?checked=${isDefault} @change=${this.searchInChanged} />
|
|
96
|
+
<input tabindex="3" form="nav-search" type="radio" name="sin" value="${value}" ?checked=${isDefault} @change=${this.searchInChanged} />
|
|
74
97
|
Search ${label}
|
|
75
98
|
</label>
|
|
76
99
|
`;
|
|
@@ -104,6 +127,7 @@ class SearchMenu extends TrackedElement {
|
|
|
104
127
|
href="${formatUrl('/advancedsearch.php', this.baseHost)}"
|
|
105
128
|
@click=${this.trackClick}
|
|
106
129
|
data-event-click-tracking="${this.config.eventCategory}|NavAdvancedSearch"
|
|
130
|
+
tabindex="4"
|
|
107
131
|
>Advanced Search</a
|
|
108
132
|
>
|
|
109
133
|
</div>
|
|
@@ -109,14 +109,14 @@ export default css`
|
|
|
109
109
|
user-select: none;
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
.
|
|
112
|
+
.search-trigger {
|
|
113
113
|
padding: 0;
|
|
114
114
|
}
|
|
115
|
-
.
|
|
115
|
+
.search-trigger svg {
|
|
116
116
|
height: 4rem;
|
|
117
117
|
width: 4rem;
|
|
118
118
|
}
|
|
119
|
-
.
|
|
119
|
+
.search-trigger .fill-color {
|
|
120
120
|
fill: var(--iconFill);
|
|
121
121
|
}
|
|
122
122
|
|
|
@@ -220,7 +220,7 @@ export default css`
|
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
.hamburger,
|
|
223
|
-
.
|
|
223
|
+
.search-trigger,
|
|
224
224
|
.mobile-donate-link {
|
|
225
225
|
display: none;
|
|
226
226
|
}
|
package/test/ia-topnav.test.js
CHANGED
|
@@ -198,7 +198,7 @@ describe('<ia-topnav>', () => {
|
|
|
198
198
|
|
|
199
199
|
it('toggles search menu when search toggle button clicked', async () => {
|
|
200
200
|
const el = await fixture(container());
|
|
201
|
-
el.shadowRoot.querySelector('primary-nav').shadowRoot.querySelector('.
|
|
201
|
+
el.shadowRoot.querySelector('primary-nav').shadowRoot.querySelector('.search-trigger').click();
|
|
202
202
|
await el.updateComplete;
|
|
203
203
|
|
|
204
204
|
expect(el.openMenu).to.equal('search');
|
package/test/primary-nav.test.js
CHANGED
|
@@ -40,7 +40,7 @@ describe('<primary-nav>', () => {
|
|
|
40
40
|
hideSearch: true,
|
|
41
41
|
}));
|
|
42
42
|
|
|
43
|
-
expect(el.shadowRoot.querySelector('.
|
|
43
|
+
expect(el.shadowRoot.querySelector('.search-trigger')).to.equal(null);
|
|
44
44
|
expect(el.shadowRoot.querySelector('nav-search')).to.equal(null);
|
|
45
45
|
});
|
|
46
46
|
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { html } from 'https://offshoot.prod.archive.org/lit.js';
|
|
2
|
-
|
|
3
|
-
export default html`
|
|
4
|
-
<svg
|
|
5
|
-
viewBox="0 0 40 40"
|
|
6
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
-
aria-labelledby="hamburgerTitleID"
|
|
8
|
-
>
|
|
9
|
-
<title id="hamburgerTitleID">Hamburger icon</title>
|
|
10
|
-
<path
|
|
11
|
-
d="m30.5 26.5c.8284271 0 1.5.6715729 1.5 1.5s-.6715729 1.5-1.5 1.5h-21c-.82842712 0-1.5-.6715729-1.5-1.5s.67157288-1.5 1.5-1.5zm0-8c.8284271 0 1.5.6715729 1.5 1.5s-.6715729 1.5-1.5 1.5h-21c-.82842712 0-1.5-.6715729-1.5-1.5s.67157288-1.5 1.5-1.5zm0-8c.8284271 0 1.5.6715729 1.5 1.5s-.6715729 1.5-1.5 1.5h-21c-.82842712 0-1.5-.6715729-1.5-1.5s.67157288-1.5 1.5-1.5z"
|
|
12
|
-
fill="#999"
|
|
13
|
-
fill-rule="evenodd"
|
|
14
|
-
/>
|
|
15
|
-
</svg>
|
|
16
|
-
`;
|
|
17
|
-
|
|
18
|
-
|