@internetarchive/ia-topnav 1.4.1-alpha-webdev8259.6 → 1.4.1-alpha-webdev8259.7
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/dist/src/ia-topnav.js +1 -1
- package/dist/src/ia-topnav.js.map +1 -1
- package/dist/src/primary-nav.js +2 -2
- package/dist/src/primary-nav.js.map +1 -1
- package/dist/src/styles/primary-nav.js +10 -8
- package/dist/src/styles/primary-nav.js.map +1 -1
- package/dist/test/ia-topnav.test.js +2 -2
- package/dist/test/ia-topnav.test.js.map +1 -1
- package/dist/test/primary-nav.test.js +4 -5
- package/dist/test/primary-nav.test.js.map +1 -1
- package/package.json +1 -1
- package/src/ia-topnav.ts +1 -1
- package/src/primary-nav.ts +2 -2
- package/src/styles/primary-nav.ts +10 -8
- package/test/ia-topnav.test.ts +2 -2
- package/test/primary-nav.test.ts +4 -5
package/dist/src/ia-topnav.js
CHANGED
|
@@ -184,7 +184,7 @@ let IATopNav = class IATopNav extends LitElement {
|
|
|
184
184
|
return this.secondIdentitySlotMode === 'allow';
|
|
185
185
|
}
|
|
186
186
|
get searchSlot() {
|
|
187
|
-
return html `<slot name="
|
|
187
|
+
return html `<slot name="search" slot="search"></slot>`;
|
|
188
188
|
}
|
|
189
189
|
get secondLogoSlot() {
|
|
190
190
|
return this.allowSecondaryIcon
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ia-topnav.js","sourceRoot":"","sources":["../../src/ia-topnav.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, PropertyValues, html, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { buildTopNavMenus, defaultTopNavConfig } from './data/menus';\nimport './desktop-subnav';\nimport './dropdown-menu';\nimport './media-slider';\nimport {\n IATopNavConfig,\n IATopNavMenuConfig,\n IATopNavSecondIdentitySlotMode,\n} from './models';\nimport './primary-nav';\nimport './signed-out-dropdown';\nimport iaTopNavCSS from './styles/ia-topnav';\nimport './user-menu';\n\n@customElement('ia-topnav')\nexport class IATopNav extends LitElement {\n @property({ type: Boolean }) localLinks = false;\n\n @property({ type: String }) waybackPagesArchived = '';\n\n @property({ type: String }) baseHost = 'https://archive.org';\n\n @property({ type: String }) mediaBaseHost = 'https://archive.org';\n\n @property({ type: Boolean }) admin = false;\n\n @property({ type: Boolean }) canManageFlags = false;\n\n @property({ type: Object }) config: IATopNavConfig = defaultTopNavConfig;\n\n @property({ type: Boolean }) hideSearch = false;\n\n @property({ type: String }) itemIdentifier = '';\n\n @property({ type: Boolean }) mediaSliderOpen = false;\n\n @property({ type: String }) openMenu = '';\n\n @property({ type: String }) screenName: string = '';\n\n @property({ type: String }) selectedMenuOption = '';\n\n @property({ type: String }) username: string = '';\n\n @property({ type: String }) userProfileImagePath =\n '/services/img/user/profile';\n\n @property({ type: String })\n secondIdentitySlotMode: IATopNavSecondIdentitySlotMode = '';\n\n @property({ type: Object }) currentTab?: {\n mediatype: string;\n moveTo: string;\n };\n\n @state() private menus: IATopNavMenuConfig = buildTopNavMenus();\n\n private boundHandleKeydown = this.handleDocumentKeydown.bind(this);\n\n private boundHandleClick = this.handleDocumentClick.bind(this);\n\n private get normalizedBaseHost() {\n return !this.localLinks ? this.baseHost : '';\n }\n\n static get styles() {\n return iaTopNavCSS;\n }\n\n updated(props: PropertyValues) {\n if (\n props.has('username') ||\n props.has('waybackPagesArchived') ||\n props.has('itemIdentifier') ||\n props.has('localLinks') ||\n props.has('baseHost')\n ) {\n this.menuSetup();\n }\n }\n\n firstUpdated() {\n document.addEventListener('keydown', this.boundHandleKeydown);\n document.addEventListener('click', this.boundHandleClick);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener('keydown', this.boundHandleKeydown);\n document.removeEventListener('click', this.boundHandleClick);\n }\n\n private handleDocumentKeydown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n this.openMenu = '';\n this.mediaSliderOpen = false;\n }\n }\n\n private handleDocumentClick(e: MouseEvent) {\n if (!this.openMenu) return;\n const path = e.composedPath();\n if (!path.includes(this)) {\n this.closeMenus();\n }\n }\n\n menuSetup() {\n // re/build the nav\n this.menus = buildTopNavMenus(\n this.username,\n this.normalizedBaseHost,\n this.waybackPagesArchived,\n this.itemIdentifier,\n );\n }\n\n menuToggled(e: CustomEvent) {\n const currentMenu = this.openMenu;\n this.openMenu = currentMenu === e.detail.menuName ? '' : e.detail.menuName;\n // Keeps media slider open if media menu is open\n if (this.openMenu === 'media') {\n return;\n }\n this.closeMediaSlider();\n }\n\n openMediaSlider() {\n this.mediaSliderOpen = true;\n }\n\n closeMediaSlider() {\n this.mediaSliderOpen = false;\n this.selectedMenuOption = '';\n }\n\n closeMenus() {\n this.openMenu = '';\n this.closeMediaSlider();\n }\n\n trackClick(e: CustomEvent) {\n this.dispatchEvent(\n new CustomEvent('analyticsClick', {\n bubbles: true,\n composed: true,\n detail: e.detail,\n }),\n );\n }\n\n trackSubmit(e: CustomEvent) {\n this.dispatchEvent(\n new CustomEvent('analyticsSubmit', {\n bubbles: true,\n composed: true,\n detail: e.detail,\n }),\n );\n }\n\n mediaTypeSelected(e: CustomEvent) {\n if (this.selectedMenuOption === e.detail.mediatype) {\n this.closeMediaSlider();\n return;\n }\n this.selectedMenuOption = e.detail.mediatype;\n this.openMediaSlider();\n }\n\n get signedOutOpened() {\n return this.openMenu === 'login';\n }\n\n get userMenuOpened() {\n return this.openMenu === 'user';\n }\n\n get userMenuTabIndex() {\n return this.userMenuOpened ? '' : '-1';\n }\n\n get signedOutTabIndex() {\n return this.signedOutOpened ? '' : '-1';\n }\n\n get closeLayerClass() {\n return !!this.openMenu || this.mediaSliderOpen ? 'visible' : '';\n }\n\n get userMenu() {\n return html`\n <user-menu\n .baseHost=${this.normalizedBaseHost}\n .config=${this.config}\n .menuItems=${this.userMenuItems}\n ?open=${this.openMenu === 'user'}\n .username=${this.username}\n ?hideSearch=${this.hideSearch}\n tabindex=\"${this.userMenuTabIndex}\"\n @menuToggled=${this.menuToggled}\n @trackClick=${this.trackClick}\n @focusToOtherMenuItem=${(e: CustomEvent) =>\n (this.currentTab = e.detail)}\n ></user-menu>\n `;\n }\n\n get signedOutDropdown() {\n return html`\n <signed-out-dropdown\n .baseHost=${this.normalizedBaseHost}\n .config=${this.config}\n .open=${this.signedOutOpened}\n ?hideSearch=${this.hideSearch}\n tabindex=\"${this.signedOutTabIndex}\"\n .menuItems=${this.signedOutMenuItems}\n @focusToOtherMenuItem=${(e: CustomEvent) => {\n this.currentTab = e.detail;\n }}\n ></signed-out-dropdown>\n `;\n }\n\n get signedOutMenuItems() {\n return this.menus.signedOut;\n }\n\n /**\n * Most users just get the basic menu items.\n * For users with `/items` priv, additional admin menu items are included too.\n * Having the `/flags` priv adds a further admin item for managing flags.\n */\n get userMenuItems() {\n const basicItems = this.menus.user;\n\n let adminItems = this.menus.userAdmin;\n if (this.canManageFlags) {\n adminItems = adminItems.concat(this.menus.userAdminFlags);\n }\n\n return this.itemIdentifier && this.admin\n ? [basicItems, adminItems]\n : [basicItems];\n }\n\n get allowSecondaryIcon() {\n return this.secondIdentitySlotMode === 'allow';\n }\n\n get searchSlot() {\n return html`<slot name=\"custom-search\" slot=\"custom-search\"></slot>`;\n }\n\n get secondLogoSlot() {\n return this.allowSecondaryIcon\n ? html`\n <slot name=\"opt-sec-logo\" slot=\"opt-sec-logo\"></slot>\n <slot name=\"opt-sec-logo-mobile\" slot=\"opt-sec-logo-mobile\"></slot>\n `\n : nothing;\n }\n\n get separatorTemplate() {\n return html`<li class=\"divider\" role=\"presentation\"></li>`;\n }\n\n render() {\n return html`\n <div class=\"topnav\">\n <primary-nav\n .baseHost=${this.normalizedBaseHost}\n .mediaBaseHost=${this.mediaBaseHost}\n .config=${this.config}\n .openMenu=${this.openMenu}\n .screenName=${this.screenName}\n .secondIdentitySlotMode=${this.secondIdentitySlotMode}\n .selectedMenuOption=${this.selectedMenuOption}\n .username=${this.username}\n .userProfileImagePath=${this.userProfileImagePath}\n .currentTab=${this.currentTab}\n ?hideSearch=${this.hideSearch}\n @mediaTypeSelected=${this.mediaTypeSelected}\n @trackClick=${this.trackClick}\n @trackSubmit=${this.trackSubmit}\n @menuToggled=${this.menuToggled}\n >\n ${this.secondLogoSlot} ${this.searchSlot}\n </primary-nav>\n <media-slider\n .baseHost=${this.normalizedBaseHost}\n .config=${this.config}\n .selectedMenuOption=${this.selectedMenuOption}\n .mediaSliderOpen=${this.mediaSliderOpen}\n .menus=${this.menus}\n tabindex=\"${this.mediaSliderOpen ? '1' : '-1'}\"\n @focusToOtherMenuItem=${(e: CustomEvent) =>\n (this.currentTab = e.detail)}\n ></media-slider>\n </div>\n ${this.username ? this.userMenu : this.signedOutDropdown}\n <desktop-subnav\n .baseHost=${this.normalizedBaseHost}\n .menuItems=${this.menus.more.links}\n @focus=${this.closeMenus}\n ></desktop-subnav>\n <div\n id=\"close-layer\"\n class=\"${this.closeLayerClass}\"\n @click=${this.closeMenus}\n ></div>\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ia-topnav.js","sourceRoot":"","sources":["../../src/ia-topnav.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAkB,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,kBAAkB,CAAC;AAC1B,OAAO,iBAAiB,CAAC;AACzB,OAAO,gBAAgB,CAAC;AAMxB,OAAO,eAAe,CAAC;AACvB,OAAO,uBAAuB,CAAC;AAC/B,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,aAAa,CAAC;AAGd,IAAM,QAAQ,GAAd,MAAM,QAAS,SAAQ,UAAU;IAAjC;;QACwB,eAAU,GAAG,KAAK,CAAC;QAEpB,yBAAoB,GAAG,EAAE,CAAC;QAE1B,aAAQ,GAAG,qBAAqB,CAAC;QAEjC,kBAAa,GAAG,qBAAqB,CAAC;QAErC,UAAK,GAAG,KAAK,CAAC;QAEd,mBAAc,GAAG,KAAK,CAAC;QAExB,WAAM,GAAmB,mBAAmB,CAAC;QAE5C,eAAU,GAAG,KAAK,CAAC;QAEpB,mBAAc,GAAG,EAAE,CAAC;QAEnB,oBAAe,GAAG,KAAK,CAAC;QAEzB,aAAQ,GAAG,EAAE,CAAC;QAEd,eAAU,GAAW,EAAE,CAAC;QAExB,uBAAkB,GAAG,EAAE,CAAC;QAExB,aAAQ,GAAW,EAAE,CAAC;QAEtB,yBAAoB,GAC9C,4BAA4B,CAAC;QAG/B,2BAAsB,GAAmC,EAAE,CAAC;QAO3C,UAAK,GAAuB,gBAAgB,EAAE,CAAC;QAExD,uBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3D,qBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IA8PjE,CAAC;IA5PC,IAAY,kBAAkB;QAC5B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,CAAC,KAAqB;QAC3B,IACE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;YACrB,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC;YACjC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;YACvB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EACrB,CAAC;YACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,YAAY;QACV,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC9D,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5D,CAAC;IAED,oBAAoB;QAClB,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7B,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjE,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/D,CAAC;IAEO,qBAAqB,CAAC,CAAgB;QAC5C,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC/B,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,CAAa;QACvC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED,SAAS;QACP,mBAAmB;QACnB,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAC3B,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,cAAc,CACpB,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,CAAc;QACxB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,WAAW,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC3E,gDAAgD;QAChD,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED,eAAe;QACb,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,UAAU;QACR,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED,UAAU,CAAC,CAAc;QACvB,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,gBAAgB,EAAE;YAChC,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,CAAC,CAAC,MAAM;SACjB,CAAC,CACH,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,CAAc;QACxB,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,iBAAiB,EAAE;YACjC,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,CAAC,CAAC,MAAM;SACjB,CAAC,CACH,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,CAAc;QAC9B,IAAI,IAAI,CAAC,kBAAkB,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACnD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC;IACnC,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC;IAClC,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAA;;oBAEK,IAAI,CAAC,kBAAkB;kBACzB,IAAI,CAAC,MAAM;qBACR,IAAI,CAAC,aAAa;gBACvB,IAAI,CAAC,QAAQ,KAAK,MAAM;oBACpB,IAAI,CAAC,QAAQ;sBACX,IAAI,CAAC,UAAU;oBACjB,IAAI,CAAC,gBAAgB;uBAClB,IAAI,CAAC,WAAW;sBACjB,IAAI,CAAC,UAAU;gCACL,CAAC,CAAc,EAAE,EAAE,CACzC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;;KAEjC,CAAC;IACJ,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAA;;oBAEK,IAAI,CAAC,kBAAkB;kBACzB,IAAI,CAAC,MAAM;gBACb,IAAI,CAAC,eAAe;sBACd,IAAI,CAAC,UAAU;oBACjB,IAAI,CAAC,iBAAiB;qBACrB,IAAI,CAAC,kBAAkB;gCACZ,CAAC,CAAc,EAAE,EAAE;YACzC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;QAC7B,CAAC;;KAEJ,CAAC;IACJ,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,IAAI,aAAa;QACf,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAEnC,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QACtC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK;YACtC,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC;YAC1B,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,sBAAsB,KAAK,OAAO,CAAC;IACjD,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAA,2CAA2C,CAAC;IACzD,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,kBAAkB;YAC5B,CAAC,CAAC,IAAI,CAAA;;;SAGH;YACH,CAAC,CAAC,OAAO,CAAC;IACd,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAA,+CAA+C,CAAC;IAC7D,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;sBAGO,IAAI,CAAC,kBAAkB;2BAClB,IAAI,CAAC,aAAa;oBACzB,IAAI,CAAC,MAAM;sBACT,IAAI,CAAC,QAAQ;wBACX,IAAI,CAAC,UAAU;oCACH,IAAI,CAAC,sBAAsB;gCAC/B,IAAI,CAAC,kBAAkB;sBACjC,IAAI,CAAC,QAAQ;kCACD,IAAI,CAAC,oBAAoB;wBACnC,IAAI,CAAC,UAAU;wBACf,IAAI,CAAC,UAAU;+BACR,IAAI,CAAC,iBAAiB;wBAC7B,IAAI,CAAC,UAAU;yBACd,IAAI,CAAC,WAAW;yBAChB,IAAI,CAAC,WAAW;;YAE7B,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU;;;sBAG5B,IAAI,CAAC,kBAAkB;oBACzB,IAAI,CAAC,MAAM;gCACC,IAAI,CAAC,kBAAkB;6BAC1B,IAAI,CAAC,eAAe;mBAC9B,IAAI,CAAC,KAAK;sBACP,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;kCACrB,CAAC,CAAc,EAAE,EAAE,CACzC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;;;QAGhC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB;;oBAE1C,IAAI,CAAC,kBAAkB;qBACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;iBACzB,IAAI,CAAC,UAAU;;;;iBAIf,IAAI,CAAC,eAAe;iBACpB,IAAI,CAAC,UAAU;;KAE3B,CAAC;IACJ,CAAC;CACF,CAAA;AAzS8B;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;4CAAoB;AAEpB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;sDAA2B;AAE1B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;0CAAkC;AAEjC;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;+CAAuC;AAErC;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;uCAAe;AAEd;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gDAAwB;AAExB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCAA8C;AAE5C;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;4CAAoB;AAEpB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gDAAqB;AAEnB;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;iDAAyB;AAEzB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;0CAAe;AAEd;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;4CAAyB;AAExB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oDAAyB;AAExB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;0CAAuB;AAEtB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;sDACI;AAG/B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wDACiC;AAEhC;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;4CAGzB;AAEe;IAAhB,KAAK,EAAE;uCAAwD;AAxCrD,QAAQ;IADpB,aAAa,CAAC,WAAW,CAAC;GACd,QAAQ,CA0SpB","sourcesContent":["import { LitElement, PropertyValues, html, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { buildTopNavMenus, defaultTopNavConfig } from './data/menus';\nimport './desktop-subnav';\nimport './dropdown-menu';\nimport './media-slider';\nimport {\n IATopNavConfig,\n IATopNavMenuConfig,\n IATopNavSecondIdentitySlotMode,\n} from './models';\nimport './primary-nav';\nimport './signed-out-dropdown';\nimport iaTopNavCSS from './styles/ia-topnav';\nimport './user-menu';\n\n@customElement('ia-topnav')\nexport class IATopNav extends LitElement {\n @property({ type: Boolean }) localLinks = false;\n\n @property({ type: String }) waybackPagesArchived = '';\n\n @property({ type: String }) baseHost = 'https://archive.org';\n\n @property({ type: String }) mediaBaseHost = 'https://archive.org';\n\n @property({ type: Boolean }) admin = false;\n\n @property({ type: Boolean }) canManageFlags = false;\n\n @property({ type: Object }) config: IATopNavConfig = defaultTopNavConfig;\n\n @property({ type: Boolean }) hideSearch = false;\n\n @property({ type: String }) itemIdentifier = '';\n\n @property({ type: Boolean }) mediaSliderOpen = false;\n\n @property({ type: String }) openMenu = '';\n\n @property({ type: String }) screenName: string = '';\n\n @property({ type: String }) selectedMenuOption = '';\n\n @property({ type: String }) username: string = '';\n\n @property({ type: String }) userProfileImagePath =\n '/services/img/user/profile';\n\n @property({ type: String })\n secondIdentitySlotMode: IATopNavSecondIdentitySlotMode = '';\n\n @property({ type: Object }) currentTab?: {\n mediatype: string;\n moveTo: string;\n };\n\n @state() private menus: IATopNavMenuConfig = buildTopNavMenus();\n\n private boundHandleKeydown = this.handleDocumentKeydown.bind(this);\n\n private boundHandleClick = this.handleDocumentClick.bind(this);\n\n private get normalizedBaseHost() {\n return !this.localLinks ? this.baseHost : '';\n }\n\n static get styles() {\n return iaTopNavCSS;\n }\n\n updated(props: PropertyValues) {\n if (\n props.has('username') ||\n props.has('waybackPagesArchived') ||\n props.has('itemIdentifier') ||\n props.has('localLinks') ||\n props.has('baseHost')\n ) {\n this.menuSetup();\n }\n }\n\n firstUpdated() {\n document.addEventListener('keydown', this.boundHandleKeydown);\n document.addEventListener('click', this.boundHandleClick);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener('keydown', this.boundHandleKeydown);\n document.removeEventListener('click', this.boundHandleClick);\n }\n\n private handleDocumentKeydown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n this.openMenu = '';\n this.mediaSliderOpen = false;\n }\n }\n\n private handleDocumentClick(e: MouseEvent) {\n if (!this.openMenu) return;\n const path = e.composedPath();\n if (!path.includes(this)) {\n this.closeMenus();\n }\n }\n\n menuSetup() {\n // re/build the nav\n this.menus = buildTopNavMenus(\n this.username,\n this.normalizedBaseHost,\n this.waybackPagesArchived,\n this.itemIdentifier,\n );\n }\n\n menuToggled(e: CustomEvent) {\n const currentMenu = this.openMenu;\n this.openMenu = currentMenu === e.detail.menuName ? '' : e.detail.menuName;\n // Keeps media slider open if media menu is open\n if (this.openMenu === 'media') {\n return;\n }\n this.closeMediaSlider();\n }\n\n openMediaSlider() {\n this.mediaSliderOpen = true;\n }\n\n closeMediaSlider() {\n this.mediaSliderOpen = false;\n this.selectedMenuOption = '';\n }\n\n closeMenus() {\n this.openMenu = '';\n this.closeMediaSlider();\n }\n\n trackClick(e: CustomEvent) {\n this.dispatchEvent(\n new CustomEvent('analyticsClick', {\n bubbles: true,\n composed: true,\n detail: e.detail,\n }),\n );\n }\n\n trackSubmit(e: CustomEvent) {\n this.dispatchEvent(\n new CustomEvent('analyticsSubmit', {\n bubbles: true,\n composed: true,\n detail: e.detail,\n }),\n );\n }\n\n mediaTypeSelected(e: CustomEvent) {\n if (this.selectedMenuOption === e.detail.mediatype) {\n this.closeMediaSlider();\n return;\n }\n this.selectedMenuOption = e.detail.mediatype;\n this.openMediaSlider();\n }\n\n get signedOutOpened() {\n return this.openMenu === 'login';\n }\n\n get userMenuOpened() {\n return this.openMenu === 'user';\n }\n\n get userMenuTabIndex() {\n return this.userMenuOpened ? '' : '-1';\n }\n\n get signedOutTabIndex() {\n return this.signedOutOpened ? '' : '-1';\n }\n\n get closeLayerClass() {\n return !!this.openMenu || this.mediaSliderOpen ? 'visible' : '';\n }\n\n get userMenu() {\n return html`\n <user-menu\n .baseHost=${this.normalizedBaseHost}\n .config=${this.config}\n .menuItems=${this.userMenuItems}\n ?open=${this.openMenu === 'user'}\n .username=${this.username}\n ?hideSearch=${this.hideSearch}\n tabindex=\"${this.userMenuTabIndex}\"\n @menuToggled=${this.menuToggled}\n @trackClick=${this.trackClick}\n @focusToOtherMenuItem=${(e: CustomEvent) =>\n (this.currentTab = e.detail)}\n ></user-menu>\n `;\n }\n\n get signedOutDropdown() {\n return html`\n <signed-out-dropdown\n .baseHost=${this.normalizedBaseHost}\n .config=${this.config}\n .open=${this.signedOutOpened}\n ?hideSearch=${this.hideSearch}\n tabindex=\"${this.signedOutTabIndex}\"\n .menuItems=${this.signedOutMenuItems}\n @focusToOtherMenuItem=${(e: CustomEvent) => {\n this.currentTab = e.detail;\n }}\n ></signed-out-dropdown>\n `;\n }\n\n get signedOutMenuItems() {\n return this.menus.signedOut;\n }\n\n /**\n * Most users just get the basic menu items.\n * For users with `/items` priv, additional admin menu items are included too.\n * Having the `/flags` priv adds a further admin item for managing flags.\n */\n get userMenuItems() {\n const basicItems = this.menus.user;\n\n let adminItems = this.menus.userAdmin;\n if (this.canManageFlags) {\n adminItems = adminItems.concat(this.menus.userAdminFlags);\n }\n\n return this.itemIdentifier && this.admin\n ? [basicItems, adminItems]\n : [basicItems];\n }\n\n get allowSecondaryIcon() {\n return this.secondIdentitySlotMode === 'allow';\n }\n\n get searchSlot() {\n return html`<slot name=\"search\" slot=\"search\"></slot>`;\n }\n\n get secondLogoSlot() {\n return this.allowSecondaryIcon\n ? html`\n <slot name=\"opt-sec-logo\" slot=\"opt-sec-logo\"></slot>\n <slot name=\"opt-sec-logo-mobile\" slot=\"opt-sec-logo-mobile\"></slot>\n `\n : nothing;\n }\n\n get separatorTemplate() {\n return html`<li class=\"divider\" role=\"presentation\"></li>`;\n }\n\n render() {\n return html`\n <div class=\"topnav\">\n <primary-nav\n .baseHost=${this.normalizedBaseHost}\n .mediaBaseHost=${this.mediaBaseHost}\n .config=${this.config}\n .openMenu=${this.openMenu}\n .screenName=${this.screenName}\n .secondIdentitySlotMode=${this.secondIdentitySlotMode}\n .selectedMenuOption=${this.selectedMenuOption}\n .username=${this.username}\n .userProfileImagePath=${this.userProfileImagePath}\n .currentTab=${this.currentTab}\n ?hideSearch=${this.hideSearch}\n @mediaTypeSelected=${this.mediaTypeSelected}\n @trackClick=${this.trackClick}\n @trackSubmit=${this.trackSubmit}\n @menuToggled=${this.menuToggled}\n >\n ${this.secondLogoSlot} ${this.searchSlot}\n </primary-nav>\n <media-slider\n .baseHost=${this.normalizedBaseHost}\n .config=${this.config}\n .selectedMenuOption=${this.selectedMenuOption}\n .mediaSliderOpen=${this.mediaSliderOpen}\n .menus=${this.menus}\n tabindex=\"${this.mediaSliderOpen ? '1' : '-1'}\"\n @focusToOtherMenuItem=${(e: CustomEvent) =>\n (this.currentTab = e.detail)}\n ></media-slider>\n </div>\n ${this.username ? this.userMenu : this.signedOutDropdown}\n <desktop-subnav\n .baseHost=${this.normalizedBaseHost}\n .menuItems=${this.menus.more.links}\n @focus=${this.closeMenus}\n ></desktop-subnav>\n <div\n id=\"close-layer\"\n class=\"${this.closeLayerClass}\"\n @click=${this.closeMenus}\n ></div>\n `;\n }\n}\n"]}
|
package/dist/src/primary-nav.js
CHANGED
|
@@ -134,8 +134,8 @@ let PrimaryNav = class PrimaryNav extends TrackedElement {
|
|
|
134
134
|
if (this.hideSearch)
|
|
135
135
|
return nothing;
|
|
136
136
|
return html `
|
|
137
|
-
<div class="
|
|
138
|
-
<slot name="
|
|
137
|
+
<div class="search-container ${this.searchMenuOpen ? 'open' : ''}">
|
|
138
|
+
<slot name="search"></slot>
|
|
139
139
|
</div>
|
|
140
140
|
`;
|
|
141
141
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primary-nav.js","sourceRoot":"","sources":["../../src/primary-nav.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, PropertyValues } from 'lit';\nimport TrackedElement from './tracked-element';\nimport icons from './assets/img/icons';\nimport './assets/img/hamburger';\nimport './login-button';\nimport './media-menu';\nimport logoWordmarkStacked from './assets/img/wordmark-stacked';\nimport primaryNavCSS from './styles/primary-nav';\nimport formatUrl from './lib/format-url';\nimport { customElement, property } from 'lit/decorators.js';\nimport { IATopNavConfig, IATopNavSecondIdentitySlotMode } from './models';\nimport { defaultTopNavConfig } from './data/menus';\n\n@customElement('primary-nav')\nexport class PrimaryNav extends TrackedElement {\n @property({ type: String }) mediaBaseHost = 'https://archive.org';\n @property({ type: String }) baseHost = '';\n @property({ type: Boolean }) hideSearch = false;\n @property({ type: Object }) config: IATopNavConfig = defaultTopNavConfig;\n @property({ type: String }) openMenu = '';\n @property({ type: String }) screenName = '';\n @property({ type: String })\n secondIdentitySlotMode: IATopNavSecondIdentitySlotMode = '';\n @property({ type: String }) selectedMenuOption = '';\n @property({ type: Boolean }) signedOutMenuOpen = false;\n @property({ type: Boolean }) userMenuOpen = false;\n @property({ type: Boolean }) mediaMenuAnimate = false;\n @property({ type: String }) username = '';\n @property({ type: String }) userProfileImagePath = '';\n @property({ type: Object }) currentTab:\n | { mediatype: string; moveTo: string }\n | undefined;\n signedOutMenuToggled: unknown;\n\n static get styles() {\n return primaryNavCSS;\n }\n\n toggleMediaMenu(e: Event) {\n this.trackClick(e);\n this.dispatchEvent(\n new CustomEvent('menuToggled', {\n detail: {\n menuName: 'media',\n },\n }),\n );\n }\n\n toggleSearchMenu(e: Event) {\n this.trackClick(e);\n this.dispatchEvent(\n new CustomEvent('menuToggled', {\n detail: {\n menuName: 'search',\n },\n }),\n );\n }\n\n toggleUserMenu(e: Event) {\n this.trackClick(e);\n this.dispatchEvent(\n new CustomEvent('menuToggled', {\n detail: {\n menuName: 'user',\n },\n }),\n );\n }\n\n updated(props: PropertyValues) {\n if (props.has('currentTab')) {\n // early return\n if (!this.currentTab || Object.keys(this.currentTab).length === 0)\n return nothing;\n\n const isUserMenuTab =\n this.currentTab && this.currentTab.mediatype === 'usermenu';\n if (isUserMenuTab) {\n const mediaButtons = Array.from(\n this.shadowRoot\n ?.querySelector('media-menu')\n ?.shadowRoot?.querySelectorAll('media-button') ?? [],\n );\n const lastMediaButton = mediaButtons.filter((element) => {\n return element.shadowRoot\n ?.querySelector('a')\n ?.classList.contains('images');\n });\n\n let nextElement;\n if (this.username) {\n nextElement = this.shadowRoot?.querySelector('a.upload');\n } else {\n nextElement = this.shadowRoot\n ?.querySelector('login-button')\n ?.shadowRoot?.querySelector('span a');\n }\n\n const menuItemElement =\n lastMediaButton[0]?.shadowRoot?.querySelector('a.menu-item');\n\n const focusElement =\n this.currentTab.moveTo === 'next' ? nextElement : menuItemElement;\n\n if (focusElement) {\n (focusElement as HTMLElement).focus();\n }\n } else if (this.currentTab.moveTo === 'next') {\n if (this.shadowRoot?.querySelector('.user-menu')) {\n (this.shadowRoot?.querySelector('.user-menu') as HTMLElement).focus();\n } else {\n (\n this.shadowRoot\n ?.querySelector('login-button')\n ?.shadowRoot?.querySelectorAll('span a')[0] as HTMLElement\n )?.focus();\n }\n }\n }\n }\n\n get userIcon() {\n const userMenuClass = this.openMenu === 'user' ? 'active' : '';\n const userMenuToolTip =\n this.openMenu === 'user' ? 'Close user menu' : 'Expand user menu';\n\n return html`\n <button\n class=\"user-menu ${userMenuClass}\"\n title=\"${userMenuToolTip}\"\n @click=\"${this.toggleUserMenu}\"\n data-event-click-tracking=\"${this.config?.eventCategory}|NavUserMenu\"\n >\n <img\n src=\"${this.mediaBaseHost}${this.userProfileImagePath}\"\n alt=\"Profile picture for ${this.screenName}\"\n />\n <span class=\"screen-name\" dir=\"auto\">${this.screenName}</span>\n </button>\n `;\n }\n\n get loginIcon() {\n return html`\n <login-button\n .baseHost=${this.baseHost}\n .config=${this.config}\n .dropdownOpen=${this.signedOutMenuOpen}\n .openMenu=${this.openMenu}\n @signedOutMenuToggled=${this.signedOutMenuToggled}\n ></login-button>\n `;\n }\n\n get searchMenuOpen() {\n return this.openMenu === 'search';\n }\n\n get allowSecondaryIcon() {\n return this.secondIdentitySlotMode === 'allow';\n }\n\n /**\n * The search slot container, rendered between media-menu and\n * right-side-section so it sits left of the Upload button on desktop.\n */\n get searchSlotContainer() {\n if (this.hideSearch) return nothing;\n return html`\n <div class=\"custom-search-container ${this.searchMenuOpen ? 'open' : ''}\">\n <slot name=\"custom-search\"></slot>\n </div>\n `;\n }\n\n get searchMenu() {\n if (this.hideSearch) return nothing;\n\n return html`\n <button\n class=\"search-trigger\"\n @click=\"${this.toggleSearchMenu}\"\n data-event-click-tracking=\"${this.config?.eventCategory}|NavSearchOpen\"\n >\n ${icons.search}\n </button>\n `;\n }\n\n get mobileDonateHeart() {\n return html`\n <a\n class=\"mobile-donate-link\"\n .href=${formatUrl(\n '/donate/?origin=iawww-mbhrt' as string & Location,\n this.baseHost,\n )}\n >\n ${icons.donateUnpadded}\n <span class=\"sr-only\">\"Donate to the archive\"</span>\n </a>\n `;\n }\n\n get uploadButtonTemplate() {\n return html` <a\n .href=\"${formatUrl('/upload' as string & Location, this.baseHost)}\"\n class=\"upload\"\n @focus=${this.toggleMediaMenu}\n >\n ${icons.upload}\n <span>Upload</span>\n </a>`;\n }\n\n get userStateTemplate() {\n return html`<div class=\"user-info\">\n ${this.username ? this.userIcon : this.loginIcon}\n </div>`;\n }\n\n get secondLogoSlot() {\n return this.allowSecondaryIcon\n ? html`\n <slot name=\"opt-sec-logo\"></slot>\n <slot name=\"opt-sec-logo-mobile\"></slot>\n `\n : nothing;\n }\n\n get secondLogoClass() {\n return this.allowSecondaryIcon ? 'second-logo' : '';\n }\n\n render() {\n // const mediaMenuTabIndex = this.openMenu === 'media' ? '' : '-1';\n return html`\n <nav class=${this.hideSearch ? 'hide-search' : ''}>\n <button\n class=\"hamburger\"\n @click=\"${this.toggleMediaMenu}\"\n data-event-click-tracking=\"${this.config?.eventCategory}|NavHamburger\"\n title=\"Open main menu\"\n >\n <icon-hamburger ?active=${this.openMenu === 'media'}></icon-hamburger>\n </button>\n\n <div class=${`branding ${this.secondLogoClass}`}>\n <a\n .href=${formatUrl('/' as string & Location, this.baseHost)}\n @click=${this.trackClick}\n data-event-click-tracking=\"${this.config?.eventCategory}|NavHome\"\n title=\"Go home\"\n class=\"link-home\"\n >${icons.iaLogo}${logoWordmarkStacked}</a\n >\n ${this.secondLogoSlot}\n </div>\n <media-menu\n .baseHost=${this.baseHost}\n .config=${this.config}\n ?mediaMenuAnimate=${this.mediaMenuAnimate}\n .selectedMenuOption=${this.selectedMenuOption}\n .openMenu=${this.openMenu}\n .currentTab=${this.currentTab}\n ></media-menu>\n ${this.searchSlotContainer}\n <div class=\"right-side-section\">\n ${this.mobileDonateHeart} ${this.userStateTemplate}\n ${this.uploadButtonTemplate} ${this.searchMenu}\n </div>\n </nav>\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"primary-nav.js","sourceRoot":"","sources":["../../src/primary-nav.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, PropertyValues } from 'lit';\nimport TrackedElement from './tracked-element';\nimport icons from './assets/img/icons';\nimport './assets/img/hamburger';\nimport './login-button';\nimport './media-menu';\nimport logoWordmarkStacked from './assets/img/wordmark-stacked';\nimport primaryNavCSS from './styles/primary-nav';\nimport formatUrl from './lib/format-url';\nimport { customElement, property } from 'lit/decorators.js';\nimport { IATopNavConfig, IATopNavSecondIdentitySlotMode } from './models';\nimport { defaultTopNavConfig } from './data/menus';\n\n@customElement('primary-nav')\nexport class PrimaryNav extends TrackedElement {\n @property({ type: String }) mediaBaseHost = 'https://archive.org';\n @property({ type: String }) baseHost = '';\n @property({ type: Boolean }) hideSearch = false;\n @property({ type: Object }) config: IATopNavConfig = defaultTopNavConfig;\n @property({ type: String }) openMenu = '';\n @property({ type: String }) screenName = '';\n @property({ type: String })\n secondIdentitySlotMode: IATopNavSecondIdentitySlotMode = '';\n @property({ type: String }) selectedMenuOption = '';\n @property({ type: Boolean }) signedOutMenuOpen = false;\n @property({ type: Boolean }) userMenuOpen = false;\n @property({ type: Boolean }) mediaMenuAnimate = false;\n @property({ type: String }) username = '';\n @property({ type: String }) userProfileImagePath = '';\n @property({ type: Object }) currentTab:\n | { mediatype: string; moveTo: string }\n | undefined;\n signedOutMenuToggled: unknown;\n\n static get styles() {\n return primaryNavCSS;\n }\n\n toggleMediaMenu(e: Event) {\n this.trackClick(e);\n this.dispatchEvent(\n new CustomEvent('menuToggled', {\n detail: {\n menuName: 'media',\n },\n }),\n );\n }\n\n toggleSearchMenu(e: Event) {\n this.trackClick(e);\n this.dispatchEvent(\n new CustomEvent('menuToggled', {\n detail: {\n menuName: 'search',\n },\n }),\n );\n }\n\n toggleUserMenu(e: Event) {\n this.trackClick(e);\n this.dispatchEvent(\n new CustomEvent('menuToggled', {\n detail: {\n menuName: 'user',\n },\n }),\n );\n }\n\n updated(props: PropertyValues) {\n if (props.has('currentTab')) {\n // early return\n if (!this.currentTab || Object.keys(this.currentTab).length === 0)\n return nothing;\n\n const isUserMenuTab =\n this.currentTab && this.currentTab.mediatype === 'usermenu';\n if (isUserMenuTab) {\n const mediaButtons = Array.from(\n this.shadowRoot\n ?.querySelector('media-menu')\n ?.shadowRoot?.querySelectorAll('media-button') ?? [],\n );\n const lastMediaButton = mediaButtons.filter((element) => {\n return element.shadowRoot\n ?.querySelector('a')\n ?.classList.contains('images');\n });\n\n let nextElement;\n if (this.username) {\n nextElement = this.shadowRoot?.querySelector('a.upload');\n } else {\n nextElement = this.shadowRoot\n ?.querySelector('login-button')\n ?.shadowRoot?.querySelector('span a');\n }\n\n const menuItemElement =\n lastMediaButton[0]?.shadowRoot?.querySelector('a.menu-item');\n\n const focusElement =\n this.currentTab.moveTo === 'next' ? nextElement : menuItemElement;\n\n if (focusElement) {\n (focusElement as HTMLElement).focus();\n }\n } else if (this.currentTab.moveTo === 'next') {\n if (this.shadowRoot?.querySelector('.user-menu')) {\n (this.shadowRoot?.querySelector('.user-menu') as HTMLElement).focus();\n } else {\n (\n this.shadowRoot\n ?.querySelector('login-button')\n ?.shadowRoot?.querySelectorAll('span a')[0] as HTMLElement\n )?.focus();\n }\n }\n }\n }\n\n get userIcon() {\n const userMenuClass = this.openMenu === 'user' ? 'active' : '';\n const userMenuToolTip =\n this.openMenu === 'user' ? 'Close user menu' : 'Expand user menu';\n\n return html`\n <button\n class=\"user-menu ${userMenuClass}\"\n title=\"${userMenuToolTip}\"\n @click=\"${this.toggleUserMenu}\"\n data-event-click-tracking=\"${this.config?.eventCategory}|NavUserMenu\"\n >\n <img\n src=\"${this.mediaBaseHost}${this.userProfileImagePath}\"\n alt=\"Profile picture for ${this.screenName}\"\n />\n <span class=\"screen-name\" dir=\"auto\">${this.screenName}</span>\n </button>\n `;\n }\n\n get loginIcon() {\n return html`\n <login-button\n .baseHost=${this.baseHost}\n .config=${this.config}\n .dropdownOpen=${this.signedOutMenuOpen}\n .openMenu=${this.openMenu}\n @signedOutMenuToggled=${this.signedOutMenuToggled}\n ></login-button>\n `;\n }\n\n get searchMenuOpen() {\n return this.openMenu === 'search';\n }\n\n get allowSecondaryIcon() {\n return this.secondIdentitySlotMode === 'allow';\n }\n\n /**\n * The search slot container, rendered between media-menu and\n * right-side-section so it sits left of the Upload button on desktop.\n */\n get searchSlotContainer() {\n if (this.hideSearch) return nothing;\n return html`\n <div class=\"search-container ${this.searchMenuOpen ? 'open' : ''}\">\n <slot name=\"search\"></slot>\n </div>\n `;\n }\n\n get searchMenu() {\n if (this.hideSearch) return nothing;\n\n return html`\n <button\n class=\"search-trigger\"\n @click=\"${this.toggleSearchMenu}\"\n data-event-click-tracking=\"${this.config?.eventCategory}|NavSearchOpen\"\n >\n ${icons.search}\n </button>\n `;\n }\n\n get mobileDonateHeart() {\n return html`\n <a\n class=\"mobile-donate-link\"\n .href=${formatUrl(\n '/donate/?origin=iawww-mbhrt' as string & Location,\n this.baseHost,\n )}\n >\n ${icons.donateUnpadded}\n <span class=\"sr-only\">\"Donate to the archive\"</span>\n </a>\n `;\n }\n\n get uploadButtonTemplate() {\n return html` <a\n .href=\"${formatUrl('/upload' as string & Location, this.baseHost)}\"\n class=\"upload\"\n @focus=${this.toggleMediaMenu}\n >\n ${icons.upload}\n <span>Upload</span>\n </a>`;\n }\n\n get userStateTemplate() {\n return html`<div class=\"user-info\">\n ${this.username ? this.userIcon : this.loginIcon}\n </div>`;\n }\n\n get secondLogoSlot() {\n return this.allowSecondaryIcon\n ? html`\n <slot name=\"opt-sec-logo\"></slot>\n <slot name=\"opt-sec-logo-mobile\"></slot>\n `\n : nothing;\n }\n\n get secondLogoClass() {\n return this.allowSecondaryIcon ? 'second-logo' : '';\n }\n\n render() {\n // const mediaMenuTabIndex = this.openMenu === 'media' ? '' : '-1';\n return html`\n <nav class=${this.hideSearch ? 'hide-search' : ''}>\n <button\n class=\"hamburger\"\n @click=\"${this.toggleMediaMenu}\"\n data-event-click-tracking=\"${this.config?.eventCategory}|NavHamburger\"\n title=\"Open main menu\"\n >\n <icon-hamburger ?active=${this.openMenu === 'media'}></icon-hamburger>\n </button>\n\n <div class=${`branding ${this.secondLogoClass}`}>\n <a\n .href=${formatUrl('/' as string & Location, this.baseHost)}\n @click=${this.trackClick}\n data-event-click-tracking=\"${this.config?.eventCategory}|NavHome\"\n title=\"Go home\"\n class=\"link-home\"\n >${icons.iaLogo}${logoWordmarkStacked}</a\n >\n ${this.secondLogoSlot}\n </div>\n <media-menu\n .baseHost=${this.baseHost}\n .config=${this.config}\n ?mediaMenuAnimate=${this.mediaMenuAnimate}\n .selectedMenuOption=${this.selectedMenuOption}\n .openMenu=${this.openMenu}\n .currentTab=${this.currentTab}\n ></media-menu>\n ${this.searchSlotContainer}\n <div class=\"right-side-section\">\n ${this.mobileDonateHeart} ${this.userStateTemplate}\n ${this.uploadButtonTemplate} ${this.searchMenu}\n </div>\n </nav>\n `;\n }\n}\n"]}
|
|
@@ -127,11 +127,11 @@ export default css `
|
|
|
127
127
|
z-index: 3;
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
.
|
|
130
|
+
.search-container {
|
|
131
131
|
display: none;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
.
|
|
134
|
+
.search-container.open {
|
|
135
135
|
display: flex;
|
|
136
136
|
position: absolute;
|
|
137
137
|
top: 0;
|
|
@@ -146,11 +146,11 @@ export default css `
|
|
|
146
146
|
animation: fade-in 0.2s forwards;
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
-
.
|
|
149
|
+
.search-container ::slotted(*) {
|
|
150
150
|
display: block;
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
-
.
|
|
153
|
+
.search-container slot {
|
|
154
154
|
width: 100%;
|
|
155
155
|
}
|
|
156
156
|
|
|
@@ -328,8 +328,8 @@ export default css `
|
|
|
328
328
|
margin-left: 1rem;
|
|
329
329
|
}
|
|
330
330
|
|
|
331
|
-
.
|
|
332
|
-
.
|
|
331
|
+
.search-container,
|
|
332
|
+
.search-container.open {
|
|
333
333
|
display: flex;
|
|
334
334
|
position: static;
|
|
335
335
|
top: auto;
|
|
@@ -340,11 +340,13 @@ export default css `
|
|
|
340
340
|
padding: 0 0 0 1rem;
|
|
341
341
|
background: transparent;
|
|
342
342
|
border-radius: 0;
|
|
343
|
-
animation: none;
|
|
344
343
|
z-index: auto;
|
|
344
|
+
opacity: 0;
|
|
345
|
+
animation: fade-in 0.1s ease forwards;
|
|
346
|
+
animation-delay: 0.2s;
|
|
345
347
|
}
|
|
346
348
|
|
|
347
|
-
.
|
|
349
|
+
.search-container slot {
|
|
348
350
|
width: auto;
|
|
349
351
|
}
|
|
350
352
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primary-nav.js","sourceRoot":"","sources":["../../../src/styles/primary-nav.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,eAAe,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"primary-nav.js","sourceRoot":"","sources":["../../../src/styles/primary-nav.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8WjB,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport default css`\n button:focus,\n input:focus {\n outline: none;\n }\n\n nav {\n position: relative;\n display: flex;\n height: 4rem;\n grid-template-areas: 'hamburger empty heart search user';\n -ms-grid-columns: 4rem minmax(1rem, 100%) 4rem 4rem 4rem;\n grid-template-columns: 4rem auto 4rem 4rem 4rem;\n -ms-grid-rows: 100%;\n grid-template-rows: 100%;\n background: var(--primaryNavBg);\n border-bottom: 1px solid var(--primaryNavBottomBorder);\n }\n\n nav.hide-search {\n grid-template-areas: 'hamburger empty heart user';\n -ms-grid-columns: 4rem minmax(1rem, 100%) 4rem 4rem;\n grid-template-columns: 4rem auto 4rem 4rem;\n }\n\n .right-side-section {\n display: flex;\n margin-left: auto;\n user-select: none;\n }\n button {\n background: none;\n color: inherit;\n border: none;\n font: inherit;\n cursor: pointer;\n }\n\n .branding {\n position: static;\n float: left;\n margin: 0 !important;\n padding: 0 5px 0 10px;\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n transform: translate(0, 0);\n }\n\n slot,\n .branding {\n display: flex;\n justify-content: left;\n align-items: center;\n }\n\n media-menu {\n flex: 1;\n justify-self: stretch;\n }\n\n .ia-logo {\n height: 3rem;\n width: 2.7rem;\n display: inline-block;\n }\n .ia-wordmark {\n height: 3rem;\n width: 9.5rem;\n }\n .ia-logo,\n .ia-wordmark {\n margin-right: 5px;\n }\n\n .hamburger {\n -ms-grid-row: 1;\n -ms-grid-column: 1;\n grid-area: hamburger;\n padding: 0;\n }\n .hamburger svg {\n height: 4rem;\n width: 4rem;\n fill: var(--activeColor);\n }\n\n .mobile-donate-link {\n display: inline-block;\n }\n .mobile-donate-link svg {\n height: 4rem;\n width: 4rem;\n }\n .mobile-donate-link .fill-color {\n fill: rgb(255, 0, 0);\n }\n\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n border: 0;\n overflow: hidden;\n white-space: nowrap;\n clip: rect(1px, 1px, 1px, 1px);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n user-select: none;\n }\n\n .search-trigger {\n padding: 0;\n }\n .search-trigger svg {\n height: 4rem;\n width: 4rem;\n }\n .search-trigger .fill-color {\n fill: var(--iconFill);\n }\n\n .search-activated {\n position: relative;\n z-index: 3;\n }\n\n .search-container {\n display: none;\n }\n\n .search-container.open {\n display: flex;\n position: absolute;\n top: 0;\n right: 4rem;\n bottom: 0;\n left: 4rem;\n z-index: 3;\n padding: 0.5rem;\n border-radius: 1rem 1rem 0 0;\n background: var(--primaryNavBg);\n align-items: center;\n animation: fade-in 0.2s forwards;\n }\n\n .search-container ::slotted(*) {\n display: block;\n }\n\n .search-container slot {\n width: 100%;\n }\n\n @keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n\n .upload {\n display: none;\n }\n\n .upload span {\n display: none;\n }\n\n .upload svg {\n height: 3rem;\n width: 3rem;\n }\n\n .screen-name {\n display: none;\n font-size: 1.3rem;\n vertical-align: middle;\n text-transform: uppercase;\n }\n\n .user-menu {\n color: var(--lightTextColor);\n padding: 0.5rem;\n height: 100%;\n }\n\n button.user-menu:hover,\n button.user-menu:focus {\n color: var(--linkHoverColor);\n outline: none;\n }\n\n .user-menu.active {\n border-radius: 1rem 1rem 0 0;\n background: var(--activeButtonBg);\n }\n\n .user-menu img {\n display: block;\n width: 3rem;\n height: 3rem;\n }\n\n .link-home {\n text-decoration: none;\n display: inline-flex;\n }\n a.link-home:focus,\n a.link-home:focus-visible {\n outline-offset: 1px;\n }\n\n @media only screen and (min-width: 890px) and (max-device-width: 905px) {\n .branding.second-logo {\n padding-right: 0;\n }\n }\n\n @media (min-width: 906px) {\n .branding.second-logo {\n padding-right: 20px;\n }\n }\n\n @media (max-width: 889px) {\n slot[name='opt-sec-logo'] {\n display: none;\n }\n\n .right-side-section {\n display: initial;\n }\n .right-side-section .user-info {\n float: right;\n }\n }\n\n @media (min-width: 890px) {\n :host {\n --userIconWidth: 3.2rem;\n --userIconHeight: 3.2rem;\n }\n\n nav {\n display: flex;\n z-index: 4;\n height: 5rem;\n padding-right: 1.5rem;\n }\n\n slot[name='opt-sec-logo-mobile'] {\n display: none;\n }\n\n .ia-logo,\n .ia-wordmark {\n margin-right: 10px;\n }\n\n .hamburger,\n .search-trigger,\n .mobile-donate-link {\n display: none;\n }\n\n .user-info {\n display: block;\n float: right;\n vertical-align: middle;\n height: 100%;\n }\n\n .user-info .user-menu img {\n height: 3rem;\n width: 3rem;\n margin-right: 0.5rem;\n }\n\n .user-menu {\n padding: 1rem 0.5rem;\n }\n .user-menu.active {\n background: transparent;\n }\n\n .user-menu img {\n display: inline-block;\n vertical-align: middle;\n margin-right: 0.5rem;\n }\n\n .upload {\n display: block;\n padding: 1rem 0.5rem;\n float: right;\n font-size: 1.4rem;\n text-transform: uppercase;\n text-decoration: none;\n color: var(--lightTextColor);\n }\n .upload:active,\n .upload:focus,\n .upload:hover {\n color: var(--linkHoverColor);\n }\n .upload:focus-visible {\n outline: none;\n }\n\n .upload svg {\n vertical-align: middle;\n fill: var(--iconFill);\n }\n\n .upload:hover svg,\n .upload:focus svg,\n .upload:active svg {\n fill: var(--linkHoverColor);\n }\n\n nav-search {\n float: right;\n margin-left: 1rem;\n }\n\n .search-container,\n .search-container.open {\n display: flex;\n position: static;\n top: auto;\n right: auto;\n bottom: auto;\n left: auto;\n align-items: center;\n padding: 0 0 0 1rem;\n background: transparent;\n border-radius: 0;\n z-index: auto;\n opacity: 0;\n animation: fade-in 0.1s ease forwards;\n animation-delay: 0.2s;\n }\n\n .search-container slot {\n width: auto;\n }\n }\n\n @media (min-width: 990px) {\n .screen-name {\n display: inline-block;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n max-width: 165px;\n }\n\n .upload span {\n display: inline-block;\n vertical-align: middle;\n }\n }\n`;\n"]}
|
|
@@ -152,12 +152,12 @@ describe('<ia-topnav>', () => {
|
|
|
152
152
|
});
|
|
153
153
|
});
|
|
154
154
|
describe('search slot', () => {
|
|
155
|
-
it('forwards
|
|
155
|
+
it('forwards search slot to primary-nav', async () => {
|
|
156
156
|
var _a;
|
|
157
157
|
const el = await fixture(html `<ia-topnav></ia-topnav>`);
|
|
158
158
|
await el.updateComplete;
|
|
159
159
|
const primaryNav = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('primary-nav');
|
|
160
|
-
const slot = primaryNav === null || primaryNav === void 0 ? void 0 : primaryNav.querySelector('slot[name="
|
|
160
|
+
const slot = primaryNav === null || primaryNav === void 0 ? void 0 : primaryNav.querySelector('slot[name="search"]');
|
|
161
161
|
expect(slot).to.exist;
|
|
162
162
|
});
|
|
163
163
|
it('does not render search-menu', async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ia-topnav.test.js","sourceRoot":"","sources":["../../test/ia-topnav.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n html,\n fixture,\n expect,\n oneEvent,\n fixtureCleanup,\n elementUpdated,\n} from '@open-wc/testing';\n\nimport '../src/ia-topnav';\nimport { IATopNav } from '../src/ia-topnav';\nimport { SignedOutDropdown } from '../src/signed-out-dropdown';\nimport UserMenu from '../src/user-menu';\n\nconst verifyClosed = (instance: IATopNav) => {\n expect(instance.mediaSliderOpen).to.be.false;\n expect(instance.selectedMenuOption).to.equal('');\n};\n\nconst verifyOpened = (instance: IATopNav, mediatype: string) => {\n expect(instance.mediaSliderOpen).to.be.true;\n expect(instance.selectedMenuOption).to.equal(mediatype);\n};\n\nafterEach(() => {\n fixtureCleanup();\n});\n\ndescribe('<ia-topnav>', () => {\n it('dispatches an analyticsClick event when trackClick event fired', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const clickEvent = new MouseEvent('click');\n\n setTimeout(() =>\n el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.hamburger')\n ?.dispatchEvent(clickEvent),\n );\n const response = await oneEvent(el, 'trackClick');\n\n expect(response).to.exist;\n });\n\n it('closes all menus when close-layer clicked', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.openMenu = 'media';\n el.selectedMenuOption = 'texts';\n el.mediaSliderOpen = true;\n await el.updateComplete;\n el.closeMenus();\n await el.updateComplete;\n\n expect(el.mediaSliderOpen).to.be.false;\n expect(el.openMenu).to.equal('');\n expect(el.selectedMenuOption).to.equal('');\n });\n\n it('sets media slider to closed', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.mediaSliderOpen = true;\n el.selectedMenuOption = 'foo';\n el.closeMediaSlider();\n\n verifyClosed(el);\n });\n\n it('toggles media slider visibility and starts animation', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const mediatype = 'foo';\n\n el.selectedMenuOption = mediatype;\n el.openMediaSlider();\n\n verifyOpened(el, mediatype);\n });\n\n it('closes media slider if selected menu type is the open menu type', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const mediatype = 'foo';\n\n el.selectedMenuOption = mediatype;\n\n const event = new CustomEvent('mediaTypeSelected', {\n detail: {\n mediatype,\n },\n });\n\n el.mediaTypeSelected(event);\n\n verifyClosed(el);\n });\n\n it('opens media slider menu and starts animation', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const mediatype = 'foo';\n\n const event = new CustomEvent('mediaTypeSelected', {\n detail: {\n mediatype,\n },\n });\n\n el.mediaTypeSelected(event);\n\n verifyOpened(el, mediatype);\n });\n\n it('closes slider when menu closed', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.openMenu = 'media';\n el.selectedMenuOption = 'foo';\n el.mediaSliderOpen = true;\n await el.updateComplete;\n\n const event = new CustomEvent('menuToggled', {\n detail: {\n menuName: '',\n },\n });\n\n el.menuToggled(event);\n await el.updateComplete;\n\n expect(el.selectedMenuOption).to.equal('');\n });\n\n it('toggles user menu tabindex when dropdown open', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav username=\"shaneriley\" ?localLinks=${false}></ia-topnav>`,\n );\n\n el.openMenu = 'user';\n await el.updateComplete;\n\n expect(\n el.shadowRoot?.querySelector('user-menu')?.getAttribute('tabindex'),\n ).to.equal('');\n });\n\n it('toggles signed out menu tabindex when dropdown open', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.openMenu = 'login';\n await el.updateComplete;\n\n expect(\n el.shadowRoot\n ?.querySelector('signed-out-dropdown')\n ?.getAttribute('tabindex'),\n ).to.equal('');\n });\n\n it('toggles search menu when search toggle button clicked', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n (\n el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.search-trigger') as HTMLButtonElement\n ).click();\n await el.updateComplete;\n\n expect(el.openMenu).to.equal('search');\n });\n\n it('toggles user menu when search user avatar clicked', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav\n username=\"shaneriley\"\n screenName=\"shaneriley\"\n ?localLinks=${false}\n ></ia-topnav>`,\n );\n\n (\n el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.user-menu') as HTMLButtonElement\n ).click();\n await el.updateComplete;\n\n expect(el.openMenu).to.equal('user');\n });\n\n it('uses localLinks for archive.org logo link', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav ?localLinks=${false}></ia-topnav>`,\n );\n const logoLink = el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.link-home');\n expect(logoLink?.getAttribute('href')).to.match(/\\/\\/archive\\.org/);\n });\n\n describe('sets localLinks properly', async () => {\n it('uses localLinks to archive.org links on common child components', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav ?localLinks=${false}></ia-topnav>`,\n );\n const componentSelectors = [\n 'primary-nav',\n 'media-slider',\n 'desktop-subnav',\n ];\n componentSelectors.forEach((selector) => {\n const component = el.shadowRoot?.querySelector(selector) as unknown as {\n baseHost: string;\n };\n expect(component?.baseHost).to.equal('https://archive.org');\n });\n });\n\n it('uses localLinks to archive.org links on the signed out dropdown', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav ?localLinks=${false}></ia-topnav>`,\n );\n const signedOutDropdown = el.shadowRoot?.querySelector(\n 'signed-out-dropdown',\n ) as SignedOutDropdown;\n expect(signedOutDropdown?.baseHost).to.equal('https://archive.org');\n });\n\n it('uses localLinks to archive.org links on the user dropdown', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav username=\"foopey\" ?localLinks=${false}></ia-topnav>`,\n );\n const signedOutDropdown = el.shadowRoot?.querySelector(\n 'user-menu',\n ) as UserMenu;\n expect(signedOutDropdown.baseHost).to.equal('https://archive.org');\n });\n });\n\n describe('search slot', () => {\n it('forwards custom-search slot to primary-nav', async () => {\n const el = await fixture<IATopNav>(html`<ia-topnav></ia-topnav>`);\n await el.updateComplete;\n\n const primaryNav = el.shadowRoot?.querySelector('primary-nav');\n const slot = primaryNav?.querySelector('slot[name=\"custom-search\"]');\n expect(slot).to.exist;\n });\n\n it('does not render search-menu', async () => {\n const el = await fixture<IATopNav>(html`<ia-topnav></ia-topnav>`);\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('search-menu')).to.not.exist;\n });\n });\n\n describe('slot pass throughs', () => {\n describe('slot for <primary-nav>', () => {\n it('opens a slot with `secondIdentitySlotMode`', async () => {\n const el = await fixture<IATopNav>(\n html`<ia-topnav\n ?localLinks=${false}\n username=\"boop\"\n screenName=\"somesuperlongscreenname\"\n secondIdentitySlotMode=\"allow\"\n ></ia-topnav>`,\n );\n\n const slot = el.shadowRoot\n ?.querySelector('primary-nav')\n ?.querySelector('slot[name=\"opt-sec-logo\"]');\n expect(slot).to.exist;\n\n el.secondIdentitySlotMode = '';\n await elementUpdated(el);\n const noSlot = el.shadowRoot\n ?.querySelector('primary-nav')\n ?.querySelector('slot[name=\"opt-sec-logo\"]');\n expect(noSlot).to.not.exist;\n });\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"ia-topnav.test.js","sourceRoot":"","sources":["../../test/ia-topnav.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n html,\n fixture,\n expect,\n oneEvent,\n fixtureCleanup,\n elementUpdated,\n} from '@open-wc/testing';\n\nimport '../src/ia-topnav';\nimport { IATopNav } from '../src/ia-topnav';\nimport { SignedOutDropdown } from '../src/signed-out-dropdown';\nimport UserMenu from '../src/user-menu';\n\nconst verifyClosed = (instance: IATopNav) => {\n expect(instance.mediaSliderOpen).to.be.false;\n expect(instance.selectedMenuOption).to.equal('');\n};\n\nconst verifyOpened = (instance: IATopNav, mediatype: string) => {\n expect(instance.mediaSliderOpen).to.be.true;\n expect(instance.selectedMenuOption).to.equal(mediatype);\n};\n\nafterEach(() => {\n fixtureCleanup();\n});\n\ndescribe('<ia-topnav>', () => {\n it('dispatches an analyticsClick event when trackClick event fired', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const clickEvent = new MouseEvent('click');\n\n setTimeout(() =>\n el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.hamburger')\n ?.dispatchEvent(clickEvent),\n );\n const response = await oneEvent(el, 'trackClick');\n\n expect(response).to.exist;\n });\n\n it('closes all menus when close-layer clicked', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.openMenu = 'media';\n el.selectedMenuOption = 'texts';\n el.mediaSliderOpen = true;\n await el.updateComplete;\n el.closeMenus();\n await el.updateComplete;\n\n expect(el.mediaSliderOpen).to.be.false;\n expect(el.openMenu).to.equal('');\n expect(el.selectedMenuOption).to.equal('');\n });\n\n it('sets media slider to closed', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.mediaSliderOpen = true;\n el.selectedMenuOption = 'foo';\n el.closeMediaSlider();\n\n verifyClosed(el);\n });\n\n it('toggles media slider visibility and starts animation', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const mediatype = 'foo';\n\n el.selectedMenuOption = mediatype;\n el.openMediaSlider();\n\n verifyOpened(el, mediatype);\n });\n\n it('closes media slider if selected menu type is the open menu type', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const mediatype = 'foo';\n\n el.selectedMenuOption = mediatype;\n\n const event = new CustomEvent('mediaTypeSelected', {\n detail: {\n mediatype,\n },\n });\n\n el.mediaTypeSelected(event);\n\n verifyClosed(el);\n });\n\n it('opens media slider menu and starts animation', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n const mediatype = 'foo';\n\n const event = new CustomEvent('mediaTypeSelected', {\n detail: {\n mediatype,\n },\n });\n\n el.mediaTypeSelected(event);\n\n verifyOpened(el, mediatype);\n });\n\n it('closes slider when menu closed', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.openMenu = 'media';\n el.selectedMenuOption = 'foo';\n el.mediaSliderOpen = true;\n await el.updateComplete;\n\n const event = new CustomEvent('menuToggled', {\n detail: {\n menuName: '',\n },\n });\n\n el.menuToggled(event);\n await el.updateComplete;\n\n expect(el.selectedMenuOption).to.equal('');\n });\n\n it('toggles user menu tabindex when dropdown open', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav username=\"shaneriley\" ?localLinks=${false}></ia-topnav>`,\n );\n\n el.openMenu = 'user';\n await el.updateComplete;\n\n expect(\n el.shadowRoot?.querySelector('user-menu')?.getAttribute('tabindex'),\n ).to.equal('');\n });\n\n it('toggles signed out menu tabindex when dropdown open', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n\n el.openMenu = 'login';\n await el.updateComplete;\n\n expect(\n el.shadowRoot\n ?.querySelector('signed-out-dropdown')\n ?.getAttribute('tabindex'),\n ).to.equal('');\n });\n\n it('toggles search menu when search toggle button clicked', async () => {\n const el = await fixture<IATopNav>(html` <ia-topnav></ia-topnav>`);\n (\n el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.search-trigger') as HTMLButtonElement\n ).click();\n await el.updateComplete;\n\n expect(el.openMenu).to.equal('search');\n });\n\n it('toggles user menu when search user avatar clicked', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav\n username=\"shaneriley\"\n screenName=\"shaneriley\"\n ?localLinks=${false}\n ></ia-topnav>`,\n );\n\n (\n el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.user-menu') as HTMLButtonElement\n ).click();\n await el.updateComplete;\n\n expect(el.openMenu).to.equal('user');\n });\n\n it('uses localLinks for archive.org logo link', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav ?localLinks=${false}></ia-topnav>`,\n );\n const logoLink = el.shadowRoot\n ?.querySelector('primary-nav')\n ?.shadowRoot?.querySelector('.link-home');\n expect(logoLink?.getAttribute('href')).to.match(/\\/\\/archive\\.org/);\n });\n\n describe('sets localLinks properly', async () => {\n it('uses localLinks to archive.org links on common child components', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav ?localLinks=${false}></ia-topnav>`,\n );\n const componentSelectors = [\n 'primary-nav',\n 'media-slider',\n 'desktop-subnav',\n ];\n componentSelectors.forEach((selector) => {\n const component = el.shadowRoot?.querySelector(selector) as unknown as {\n baseHost: string;\n };\n expect(component?.baseHost).to.equal('https://archive.org');\n });\n });\n\n it('uses localLinks to archive.org links on the signed out dropdown', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav ?localLinks=${false}></ia-topnav>`,\n );\n const signedOutDropdown = el.shadowRoot?.querySelector(\n 'signed-out-dropdown',\n ) as SignedOutDropdown;\n expect(signedOutDropdown?.baseHost).to.equal('https://archive.org');\n });\n\n it('uses localLinks to archive.org links on the user dropdown', async () => {\n const el = await fixture<IATopNav>(\n html` <ia-topnav username=\"foopey\" ?localLinks=${false}></ia-topnav>`,\n );\n const signedOutDropdown = el.shadowRoot?.querySelector(\n 'user-menu',\n ) as UserMenu;\n expect(signedOutDropdown.baseHost).to.equal('https://archive.org');\n });\n });\n\n describe('search slot', () => {\n it('forwards search slot to primary-nav', async () => {\n const el = await fixture<IATopNav>(html`<ia-topnav></ia-topnav>`);\n await el.updateComplete;\n\n const primaryNav = el.shadowRoot?.querySelector('primary-nav');\n const slot = primaryNav?.querySelector('slot[name=\"search\"]');\n expect(slot).to.exist;\n });\n\n it('does not render search-menu', async () => {\n const el = await fixture<IATopNav>(html`<ia-topnav></ia-topnav>`);\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('search-menu')).to.not.exist;\n });\n });\n\n describe('slot pass throughs', () => {\n describe('slot for <primary-nav>', () => {\n it('opens a slot with `secondIdentitySlotMode`', async () => {\n const el = await fixture<IATopNav>(\n html`<ia-topnav\n ?localLinks=${false}\n username=\"boop\"\n screenName=\"somesuperlongscreenname\"\n secondIdentitySlotMode=\"allow\"\n ></ia-topnav>`,\n );\n\n const slot = el.shadowRoot\n ?.querySelector('primary-nav')\n ?.querySelector('slot[name=\"opt-sec-logo\"]');\n expect(slot).to.exist;\n\n el.secondIdentitySlotMode = '';\n await elementUpdated(el);\n const noSlot = el.shadowRoot\n ?.querySelector('primary-nav')\n ?.querySelector('slot[name=\"opt-sec-logo\"]');\n expect(noSlot).to.not.exist;\n });\n });\n });\n});\n"]}
|
|
@@ -29,18 +29,17 @@ describe('<primary-nav>', () => {
|
|
|
29
29
|
hideSearch: true,
|
|
30
30
|
}));
|
|
31
31
|
expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.search-trigger')).to.equal(null);
|
|
32
|
-
expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.
|
|
33
|
-
.exist;
|
|
32
|
+
expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.search-container')).to.not.exist;
|
|
34
33
|
});
|
|
35
|
-
it('renders
|
|
34
|
+
it('renders search slot container', async () => {
|
|
36
35
|
var _a, _b;
|
|
37
36
|
const el = await fixture(component({
|
|
38
37
|
baseHost: 'archive.org',
|
|
39
38
|
username: 'testuser',
|
|
40
39
|
screenName: 'testuser',
|
|
41
40
|
}));
|
|
42
|
-
expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.
|
|
43
|
-
const slot = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('slot[name="
|
|
41
|
+
expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.search-container')).to.exist;
|
|
42
|
+
const slot = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('slot[name="search"]');
|
|
44
43
|
expect(slot).to.exist;
|
|
45
44
|
});
|
|
46
45
|
it('renders search trigger button for mobile toggle', async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primary-nav.test.js","sourceRoot":"","sources":["../../test/primary-nav.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,OAAO,EACP,MAAM,EACN,cAAc,EACd,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,oBAAoB,CAAC;AAI5B,MAAM,SAAS,GAAG,CAAC,EACjB,QAAQ,GAAG,aAAa,EACxB,QAAQ,GAAG,EAAE,EACb,UAAU,GAAG,EAAE,EACf,UAAU,GAAG,KAAK,EAClB,MAAM,GAAG,EAAE,EACX,sBAAsB,GAAG,OAAO,GAQjC,EAAE,EAAE,CACH,IAAI,CAAA;gBACU,QAAQ;gBACR,QAAQ;kBACN,UAAU;kBACV,UAAU;cACd,MAAM;8BACU,sBAAsB;kBAClC,CAAC;AAEnB,SAAS,CAAC,GAAG,EAAE;IACb,cAAc,EAAE,CAAC;AACnB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;;QAC/D,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,SAAS,CAAC;YACR,QAAQ,EAAE,aAAa;YACvB,QAAQ,EAAE,EAAE;SACb,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;;QAChF,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,SAAS,CAAC;YACR,QAAQ,EAAE,aAAa;YACvB,QAAQ,EAAE,YAAY;YACtB,UAAU,EAAE,YAAY;YACxB,UAAU,EAAE,IAAI;SACjB,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvE,MAAM,CAAC,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"primary-nav.test.js","sourceRoot":"","sources":["../../test/primary-nav.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n html,\n fixture,\n expect,\n fixtureCleanup,\n elementUpdated,\n} from '@open-wc/testing';\n\nimport '../src/primary-nav';\nimport { IATopNavConfig, IATopNavSecondIdentitySlotMode } from '../src/models';\nimport { PrimaryNav } from '../src/primary-nav';\n\nconst component = ({\n baseHost = 'archive.org',\n username = '',\n screenName = '',\n hideSearch = false,\n config = {},\n secondIdentitySlotMode = 'allow',\n}: {\n baseHost?: string;\n username?: string;\n screenName?: string;\n hideSearch?: boolean;\n config?: IATopNavConfig;\n secondIdentitySlotMode?: IATopNavSecondIdentitySlotMode;\n}) =>\n html` <primary-nav\n .baseHost=${baseHost}\n .username=${username}\n .screenName=${screenName}\n ?hideSearch=${hideSearch}\n .config=${config}\n .secondIdentitySlotMode=${secondIdentitySlotMode}\n ></primary-nav>`;\n\nafterEach(() => {\n fixtureCleanup();\n});\n\ndescribe('<primary-nav>', () => {\n it('renders the login link when no username present', async () => {\n const el = await fixture<PrimaryNav>(\n component({\n baseHost: 'archive.org',\n username: '',\n }),\n );\n\n expect(el.shadowRoot?.querySelector('login-button')).to.not.be.undefined;\n });\n\n it('does not render search trigger or search slot if hideSearch true', async () => {\n const el = await fixture<PrimaryNav>(\n component({\n baseHost: 'archive.org',\n username: 'shaneriley',\n screenName: 'shaneriley',\n hideSearch: true,\n }),\n );\n\n expect(el.shadowRoot?.querySelector('.search-trigger')).to.equal(null);\n expect(el.shadowRoot?.querySelector('.search-container')).to.not.exist;\n });\n\n it('renders search slot container', async () => {\n const el = await fixture<PrimaryNav>(\n component({\n baseHost: 'archive.org',\n username: 'testuser',\n screenName: 'testuser',\n }),\n );\n\n expect(el.shadowRoot?.querySelector('.search-container')).to.exist;\n\n const slot = el.shadowRoot?.querySelector<HTMLSlotElement>(\n 'slot[name=\"search\"]',\n );\n expect(slot).to.exist;\n });\n\n it('renders search trigger button for mobile toggle', async () => {\n const el = await fixture<PrimaryNav>(\n component({\n baseHost: 'archive.org',\n username: 'testuser',\n screenName: 'testuser',\n }),\n );\n\n expect(el.shadowRoot?.querySelector('.search-trigger')).to.exist;\n });\n\n it('does not render nav-search', async () => {\n const el = await fixture<PrimaryNav>(\n component({\n baseHost: 'archive.org',\n username: 'testuser',\n screenName: 'testuser',\n }),\n );\n\n expect(el.shadowRoot?.querySelector('nav-search')).to.not.exist;\n });\n\n it('opens a slot with `secondIdentitySlotMode`', async () => {\n const el = await fixture<PrimaryNav>(\n component({\n baseHost: 'archive.org',\n username: 'boop',\n screenName: 'somesuperlongscreenname',\n secondIdentitySlotMode: 'allow',\n }),\n );\n\n const brandingBlock = el.shadowRoot?.querySelector('div.branding');\n expect(brandingBlock?.getAttribute('class')).to.contain(\n 'branding second-logo',\n );\n\n const slot = brandingBlock?.querySelector('slot');\n expect(slot).to.exist;\n expect(slot?.getAttribute('name')).to.equal('opt-sec-logo');\n\n el.secondIdentitySlotMode = '';\n await elementUpdated(el);\n const noSlotBrandingBlock = el.shadowRoot?.querySelector('div.branding');\n expect(noSlotBrandingBlock?.getAttribute('class')).to.contain('branding');\n\n const noSlot = noSlotBrandingBlock?.querySelector('slot');\n expect(noSlot).to.not.exist;\n });\n});\n"]}
|
package/package.json
CHANGED
package/src/ia-topnav.ts
CHANGED
package/src/primary-nav.ts
CHANGED
|
@@ -169,8 +169,8 @@ export class PrimaryNav extends TrackedElement {
|
|
|
169
169
|
get searchSlotContainer() {
|
|
170
170
|
if (this.hideSearch) return nothing;
|
|
171
171
|
return html`
|
|
172
|
-
<div class="
|
|
173
|
-
<slot name="
|
|
172
|
+
<div class="search-container ${this.searchMenuOpen ? 'open' : ''}">
|
|
173
|
+
<slot name="search"></slot>
|
|
174
174
|
</div>
|
|
175
175
|
`;
|
|
176
176
|
}
|
|
@@ -128,11 +128,11 @@ export default css`
|
|
|
128
128
|
z-index: 3;
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
.
|
|
131
|
+
.search-container {
|
|
132
132
|
display: none;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
.
|
|
135
|
+
.search-container.open {
|
|
136
136
|
display: flex;
|
|
137
137
|
position: absolute;
|
|
138
138
|
top: 0;
|
|
@@ -147,11 +147,11 @@ export default css`
|
|
|
147
147
|
animation: fade-in 0.2s forwards;
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
.
|
|
150
|
+
.search-container ::slotted(*) {
|
|
151
151
|
display: block;
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
-
.
|
|
154
|
+
.search-container slot {
|
|
155
155
|
width: 100%;
|
|
156
156
|
}
|
|
157
157
|
|
|
@@ -329,8 +329,8 @@ export default css`
|
|
|
329
329
|
margin-left: 1rem;
|
|
330
330
|
}
|
|
331
331
|
|
|
332
|
-
.
|
|
333
|
-
.
|
|
332
|
+
.search-container,
|
|
333
|
+
.search-container.open {
|
|
334
334
|
display: flex;
|
|
335
335
|
position: static;
|
|
336
336
|
top: auto;
|
|
@@ -341,11 +341,13 @@ export default css`
|
|
|
341
341
|
padding: 0 0 0 1rem;
|
|
342
342
|
background: transparent;
|
|
343
343
|
border-radius: 0;
|
|
344
|
-
animation: none;
|
|
345
344
|
z-index: auto;
|
|
345
|
+
opacity: 0;
|
|
346
|
+
animation: fade-in 0.1s ease forwards;
|
|
347
|
+
animation-delay: 0.2s;
|
|
346
348
|
}
|
|
347
349
|
|
|
348
|
-
.
|
|
350
|
+
.search-container slot {
|
|
349
351
|
width: auto;
|
|
350
352
|
}
|
|
351
353
|
}
|
package/test/ia-topnav.test.ts
CHANGED
|
@@ -236,12 +236,12 @@ describe('<ia-topnav>', () => {
|
|
|
236
236
|
});
|
|
237
237
|
|
|
238
238
|
describe('search slot', () => {
|
|
239
|
-
it('forwards
|
|
239
|
+
it('forwards search slot to primary-nav', async () => {
|
|
240
240
|
const el = await fixture<IATopNav>(html`<ia-topnav></ia-topnav>`);
|
|
241
241
|
await el.updateComplete;
|
|
242
242
|
|
|
243
243
|
const primaryNav = el.shadowRoot?.querySelector('primary-nav');
|
|
244
|
-
const slot = primaryNav?.querySelector('slot[name="
|
|
244
|
+
const slot = primaryNav?.querySelector('slot[name="search"]');
|
|
245
245
|
expect(slot).to.exist;
|
|
246
246
|
});
|
|
247
247
|
|
package/test/primary-nav.test.ts
CHANGED
|
@@ -61,11 +61,10 @@ describe('<primary-nav>', () => {
|
|
|
61
61
|
);
|
|
62
62
|
|
|
63
63
|
expect(el.shadowRoot?.querySelector('.search-trigger')).to.equal(null);
|
|
64
|
-
expect(el.shadowRoot?.querySelector('.
|
|
65
|
-
.exist;
|
|
64
|
+
expect(el.shadowRoot?.querySelector('.search-container')).to.not.exist;
|
|
66
65
|
});
|
|
67
66
|
|
|
68
|
-
it('renders
|
|
67
|
+
it('renders search slot container', async () => {
|
|
69
68
|
const el = await fixture<PrimaryNav>(
|
|
70
69
|
component({
|
|
71
70
|
baseHost: 'archive.org',
|
|
@@ -74,10 +73,10 @@ describe('<primary-nav>', () => {
|
|
|
74
73
|
}),
|
|
75
74
|
);
|
|
76
75
|
|
|
77
|
-
expect(el.shadowRoot?.querySelector('.
|
|
76
|
+
expect(el.shadowRoot?.querySelector('.search-container')).to.exist;
|
|
78
77
|
|
|
79
78
|
const slot = el.shadowRoot?.querySelector<HTMLSlotElement>(
|
|
80
|
-
'slot[name="
|
|
79
|
+
'slot[name="search"]',
|
|
81
80
|
);
|
|
82
81
|
expect(slot).to.exist;
|
|
83
82
|
});
|