@uiowa/uiowa-header
Version:
An Angular library for uiowa website header, including an IOWA branding bar and a website nav bar.
1 lines • 28 kB
Source Map (JSON)
{"version":3,"file":"uiowa-uiowa-header.mjs","sources":["../../../../projects/uiowa/uiowa-header/src/lib/click-outside.ts","../../../../projects/uiowa/uiowa-header/src/lib/login.service.ts","../../../../projects/uiowa/uiowa-header/src/lib/models.ts","../../../../projects/uiowa/uiowa-header/src/lib/uiowa-footer/uiowa-footer.ts","../../../../projects/uiowa/uiowa-header/src/lib/uiowa-footer/uiowa-footer.html","../../../../projects/uiowa/uiowa-header/src/lib/nav.service.ts","../../../../projects/uiowa/uiowa-header/src/lib/uiowa-header/username-dropdown/username-dropdown.ts","../../../../projects/uiowa/uiowa-header/src/lib/uiowa-header/username-dropdown/username-dropdown.html","../../../../projects/uiowa/uiowa-header/src/lib/uiowa-header/uiowa-header.ts","../../../../projects/uiowa/uiowa-header/src/lib/uiowa-header/uiowa-header.html","../../../../projects/uiowa/uiowa-header/src/lib/uiowa-nav/uiowa-nav.ts","../../../../projects/uiowa/uiowa-header/src/lib/uiowa-nav/uiowa-nav.html","../../../../projects/uiowa/uiowa-header/src/public-api.ts","../../../../projects/uiowa/uiowa-header/src/uiowa-uiowa-header.ts"],"sourcesContent":["import { Directive, ElementRef, inject, output } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[clickOutside]',\r\n host: {\r\n '(document:click)': 'onClick($event)',\r\n },\r\n})\r\nexport class ClickOutside {\r\n clickOutside = output<MouseEvent>();\r\n private _elf = inject(ElementRef);\r\n\r\n onClick(event: MouseEvent): void {\r\n const target = event.target;\r\n if (target) {\r\n const clickedInside = this._elf.nativeElement.contains(target);\r\n if (!clickedInside) {\r\n this.clickOutside.emit(event);\r\n }\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LoginService {\r\n returnUri = '';\r\n constructor() {}\r\n\r\n login(): void {\r\n let url = `account/login?returnUri=${encodeURIComponent(this.returnUri)}`;\r\n if ((document as any).documentMode) {\r\n const base = document.getElementsByTagName('base')[0].href;\r\n url = base + url;\r\n }\r\n try {\r\n window.location.replace(url);\r\n } catch {\r\n window.location.href = url;\r\n }\r\n }\r\n\r\n logout(): void {\r\n let url = `account/logout`;\r\n if ((document as any).documentMode) {\r\n const base = document.getElementsByTagName('base')[0].href;\r\n url = base + url;\r\n }\r\n try {\r\n window.location.replace(url);\r\n } catch {\r\n window.location.href = url;\r\n }\r\n }\r\n}\r\n","export class HeaderUser {\r\n public userName: string = '';\r\n public originalUserName?: string;\r\n}\r\nexport class InternalRoute {\r\n constructor(public text: string, public route?: string, public subMenus?: InternalRoute[]) {}\r\n}\r\nexport class ExternalLink {\r\n constructor(\r\n public text: string,\r\n public url: string,\r\n public target: '_blank' | '_self' | '_parent' | '_top' = '_blank'\r\n ) {}\r\n}\r\nexport class BannerLinks {\r\n constructor(public link1: ExternalLink, public link2?: ExternalLink) {}\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'footer[uiowa-footer]',\r\n imports: [],\r\n templateUrl: './uiowa-footer.html',\r\n styleUrl: './uiowa-footer.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UiowaFooter {\r\n year = new Date().getFullYear();\r\n emailLinkText = input<string>('Business Services IT');\r\n emailAddress = input<string>('changhui-xu@uiowa.edu');\r\n emailSubject = input<string>('Questions about the uiowa-header');\r\n emailHref = computed<string>(\r\n () => `mailto:${this.emailAddress()}?subject=${this.emailSubject().replace(' ', '%20')}`\r\n );\r\n}\r\n","<div class=\"copyright\">\r\n <div class=\"content me-2\">\r\n <span class=\"me-2\">Copyright © {{ year }}</span>\r\n <a href=\"https://uiowa.edu\" title=\"University of Iowa\" target=\"_blank\"> University of Iowa </a>\r\n </div>\r\n <div class=\"spacer\"></div>\r\n <div class=\"content\">\r\n <svg\r\n aria-hidden=\"true\"\r\n role=\"icon\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 512 512\"\r\n style=\"height: 0.8rem; width: 1rem; margin-top: 2px\"\r\n >\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49-16.841 13.247-50.201 45.072-73.413 44.701-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112h416zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646 21.857 17.205 60.134 55.186 103.062 54.955 42.717.231 80.509-37.199 103.053-54.947 49.528-38.783 82.032-64.401 104.947-82.653V400H48z\"\r\n ></path>\r\n </svg>\r\n <span style=\"margin: 0 0.25rem\">E-mail any questions to</span>\r\n <a href=\"{{ emailHref() }}\">{{ emailLinkText() }}</a>\r\n </div>\r\n</div>\r\n","import { Injectable, signal } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NavService {\r\n private _showNavBar = signal(false);\r\n readonly showNavBar = this._showNavBar.asReadonly();\r\n\r\n trigger = () => this._showNavBar.update((b) => !b);\r\n hide = () => this._showNavBar.set(false);\r\n}\r\n","import { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\r\nimport { ClickOutside } from '../../click-outside';\r\nimport { LoginService } from '../../login.service';\r\nimport { HeaderUser } from '../../models';\r\n\r\n@Component({\r\n selector: 'uiowa-username-dropdown',\r\n imports: [ClickOutside],\r\n templateUrl: './username-dropdown.html',\r\n styleUrl: './username-dropdown.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UsernameDropdown {\r\n user = input<HeaderUser>();\r\n stopImpersonation = output();\r\n showMenu = false;\r\n loginService = inject(LoginService);\r\n\r\n logout() {\r\n this.loginService.logout();\r\n }\r\n\r\n login() {\r\n this.loginService.login();\r\n }\r\n}\r\n","@if(user()?.userName; as userName){\r\n<button\r\n aria-label=\"Click to show menu\"\r\n class=\"iowa-user-button has-dropdown\"\r\n id=\"username-dropdown\"\r\n (click)=\"showMenu = !showMenu\"\r\n (clickOutside)=\"showMenu = false\"\r\n [attr.aria-expanded]=\"showMenu\"\r\n>\r\n <svg\r\n aria-hidden=\"true\"\r\n role=\"icon\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 448 512\"\r\n style=\"height: 0.8rem; width: 1rem; vertical-align: baseline\"\r\n >\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"\r\n ></path>\r\n </svg>\r\n <span class=\"iowa-user-name ml-1\">\r\n {{ userName }}\r\n @if(user()?.originalUserName; as originalUserName){\r\n <span class=\"iowa-original-username\"> ({{ originalUserName }}) </span>\r\n }\r\n </span>\r\n</button>\r\n<div\r\n aria-labelledby=\"username-dropdown\"\r\n role=\"menuitem\"\r\n class=\"iowa-username-dropdown iowa-user-dropdown-menu-right\"\r\n [class.show]=\"showMenu\"\r\n>\r\n @if(user()?.originalUserName){\r\n <button\r\n type=\"button\"\r\n class=\"iowa-username-dropdown-button\"\r\n (click)=\"stopImpersonation.emit(); showMenu = false\"\r\n >\r\n <svg\r\n aria-hidden=\"true\"\r\n role=\"icon\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 512 512\"\r\n style=\"height: 1rem; width: 1rem\"\r\n >\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z\"\r\n ></path>\r\n </svg>\r\n <span class=\"ml-1\">Stop Impersonation</span>\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n }\r\n <button type=\"button\" class=\"iowa-username-dropdown-button\" (click)=\"logout()\">\r\n <svg\r\n aria-hidden=\"true\"\r\n role=\"icon\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 512 512\"\r\n style=\"height: 1rem; width: 1rem\"\r\n >\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z\"\r\n ></path>\r\n </svg>\r\n <span class=\"ml-1\">Logout</span>\r\n </button>\r\n</div>\r\n}@else {\r\n<button\r\n aria-label=\"Click to login\"\r\n class=\"iowa-user-button\"\r\n id=\"username-dropdown\"\r\n (click)=\"login()\"\r\n>\r\n <svg\r\n aria-hidden=\"true\"\r\n role=\"icon\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 448 512\"\r\n style=\"height: 0.8rem; width: 1rem; vertical-align: baseline\"\r\n >\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"\r\n ></path>\r\n </svg>\r\n <span class=\"ml-1\">Login</span>\r\n</button>\r\n}\r\n","import { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\r\nimport { LoginService } from '../login.service';\r\nimport { BannerLinks, HeaderUser } from '../models';\r\nimport { NavService } from '../nav.service';\r\nimport { UsernameDropdown } from './username-dropdown/username-dropdown';\r\n\r\n@Component({\r\n selector: 'header[uiowa-header]',\r\n imports: [UsernameDropdown],\r\n templateUrl: './uiowa-header.html',\r\n styleUrls: ['./uiowa-header.css', './logo.css', './site-name.css', './banner-links.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UiowaHeader {\r\n siteName = input<string>('Awesome Site Name', { alias: 'appName' });\r\n bannerLinks = input<BannerLinks>();\r\n user = input<HeaderUser>();\r\n showWarning = input<boolean>(false);\r\n warningMessage = input<string>('WARNING: TEST SYSTEM');\r\n\r\n stopImpersonation = output();\r\n\r\n navService = inject(NavService);\r\n loginService = inject(LoginService);\r\n\r\n logout() {\r\n this.loginService.logout();\r\n }\r\n\r\n login() {\r\n this.loginService.login();\r\n }\r\n}\r\n","<div class=\"iowa-bar\">\r\n <div class=\"iowa-bar__container\">\r\n <div class=\"logo logo--tab\">\r\n <a target=\"_blank\" rel=\"noopener\" href=\"https://uiowa.edu\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"logo-icon\"\r\n aria-labelledby=\"logo-header\"\r\n role=\"img\"\r\n viewBox=\"0 0 311.6 90.2\"\r\n >\r\n <path class=\"st0\" d=\"M40 18.8h-7.3v52.4H40v19H0v-19h7.3V18.8H0V0h40V18.8z\" />\r\n <path\r\n class=\"st0\"\r\n d=\"M93.8 90.2h-29c-10.5 0-17.4-6.9-17.4-18.2V18.2C47.4 7 54.4 0 64.8 0h29c10.5 0 17.4 7 17.4 18.2V72C111.2 83.2 104.2 90.2 93.8 90.2zM85.6 71.2V18.8H73v52.4H85.6z\"\r\n />\r\n <path\r\n class=\"st0\"\r\n d=\"M122.6 18.8h-6.4V0h38v18.9H147l6.5 43.4L167 0h19.2l14.4 62.3 5.2-43.4h-6.6V0h37.5v18.9h-6.2l-11.3 71.4h-30.6l-11.8-53.2 -12.1 53.1h-29.4L122.6 18.8z\"\r\n />\r\n <path\r\n class=\"st0\"\r\n d=\"M230.1 71.2h6.9L250.7 0h41l13.5 71.2h6.4v19H281l-2.9-22h-15.2l-2.7 22h-30L230.1 71.2 230.1 71.2zM276.5 51.7l-5.8-36.4 -6 36.4H276.5z\"\r\n />\r\n <title id=\"logo-header\">University of Iowa</title>\r\n </svg>\r\n </a>\r\n </div>\r\n <div class=\"site-name-bar\">\r\n <button\r\n class=\"iowa-navbar-toggler\"\r\n type=\"button\"\r\n (click)=\"navService.trigger()\"\r\n aria-controls=\"navbar-primary\"\r\n [attr.aria-expanded]=\"navService.showNavBar()\"\r\n >\r\n <svg\r\n role=\"img\"\r\n aria-labelledby=\"navbar-toggler\"\r\n focusable=\"false\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 448 512\"\r\n >\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"\r\n ></path>\r\n <title id=\"navbar-toggler\">Toggle navigation</title>\r\n </svg>\r\n </button>\r\n <h1 class=\"site-name\">\r\n <a routerLink=\"\">{{ siteName() }}</a>\r\n </h1>\r\n </div>\r\n <div class=\"iowa-username-bar\">\r\n @if(showWarning()){\r\n <div class=\"test-warning\">{{ warningMessage() }}</div>\r\n } @if(bannerLinks(); as bannerLinks){\r\n <div class=\"iowa-banner-links\">\r\n @if(bannerLinks.link1){\r\n <a [href]=\"bannerLinks.link1.url\" [target]=\"bannerLinks.link1.target\">\r\n {{ bannerLinks.link1.text }}\r\n </a>\r\n } @if(bannerLinks.link2){\r\n <a [href]=\"bannerLinks.link2.url\" [target]=\"bannerLinks.link2.target\">\r\n {{ bannerLinks.link2.text }}\r\n </a>\r\n }\r\n </div>\r\n }\r\n <uiowa-username-dropdown [user]=\"user()\" (stopImpersonation)=\"stopImpersonation.emit()\" />\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, inject, input, OnInit } from '@angular/core';\r\nimport { RouterLink, RouterLinkActive } from '@angular/router';\r\nimport { ClickOutside } from '../click-outside';\r\nimport { ExternalLink, InternalRoute } from '../models';\r\nimport { NavService } from '../nav.service';\r\n\r\n@Component({\r\n selector: 'nav[uiowa-nav]',\r\n imports: [RouterLink, RouterLinkActive, ClickOutside],\r\n templateUrl: './uiowa-nav.html',\r\n styleUrls: [\r\n './uiowa-nav.css',\r\n './menu-item.css',\r\n './internal-routes.css',\r\n './external-links.css',\r\n ],\r\n host: {\r\n id: 'primary-navbar',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UiowaNav implements OnInit {\r\n externalLinks = input<ExternalLink[]>();\r\n internalRoutes = input<InternalRoute[]>();\r\n showMenuDropdown: boolean[] = [];\r\n\r\n navService = inject(NavService);\r\n\r\n ngOnInit(): void {\r\n this.showMenuDropdown = this.internalRoutes()?.map((_) => false) ?? [];\r\n }\r\n\r\n toggleMenuCollapse(i: number) {\r\n this.showMenuDropdown[i] = !this.showMenuDropdown[i];\r\n this.showMenuDropdown.forEach((x, index) => {\r\n if (x && index !== i) {\r\n this.showMenuDropdown[index] = false;\r\n }\r\n });\r\n }\r\n\r\n collapseMenu(i: number) {\r\n this.showMenuDropdown[i] = false;\r\n }\r\n}\r\n","<div class=\"iowa-nav-bar\" [class.show]=\"navService.showNavBar()\">\r\n <div class=\"iowa-main-menu\">\r\n <ul class=\"iowa-internal-routes\">\r\n @for(item of internalRoutes();track $index; let i=$index){\r\n <li\r\n class=\"menu-item\"\r\n routerLinkActive=\"is-active\"\r\n [routerLinkActiveOptions]=\"{ exact: !item.route }\"\r\n >\r\n @if(item.subMenus){\r\n <div class=\"iowa-submenu-dropdown\">\r\n @if(item.route){\r\n <a\r\n [attr.id]=\"'menuDropdown_' + i\"\r\n [routerLink]=\"item.route\"\r\n (click)=\"toggleMenuCollapse(i)\"\r\n (clickOutside)=\"collapseMenu(i)\"\r\n [attr.aria-expanded]=\"showMenuDropdown[i]\"\r\n >\r\n {{ item.text }}\r\n <span\r\n aria-hidden=\"true\"\r\n class=\"iowa-dropdown-item-arrow\"\r\n [class.up]=\"showMenuDropdown[i]\"\r\n [class.down]=\"!showMenuDropdown[i]\"\r\n ></span>\r\n </a>\r\n } @else {\r\n <a\r\n [attr.id]=\"'menuDropdown_' + i\"\r\n href=\"javascript:void(0)\"\r\n (click)=\"toggleMenuCollapse(i)\"\r\n (clickOutside)=\"collapseMenu(i)\"\r\n [attr.aria-expanded]=\"showMenuDropdown[i]\"\r\n >\r\n {{ item.text }}\r\n <span\r\n aria-hidden=\"true\"\r\n class=\"iowa-dropdown-item-arrow\"\r\n [class.up]=\"showMenuDropdown[i]\"\r\n [class.down]=\"!showMenuDropdown[i]\"\r\n ></span>\r\n </a>\r\n }\r\n\r\n <div\r\n class=\"iowa-submenu-dropdown-content\"\r\n [attr.aria-labelledby]=\"'menuDropdown_' + i\"\r\n [class.show]=\"showMenuDropdown[i]\"\r\n >\r\n @for( subitem of item.subMenus; track $index){ @if(subitem.route){\r\n <a\r\n class=\"iowa-submenu-dropdown-item\"\r\n [routerLink]=\"subitem.route\"\r\n (click)=\"showMenuDropdown[i] = false; navService.hide()\"\r\n >\r\n {{ subitem.text }}\r\n </a>\r\n } }\r\n </div>\r\n </div>\r\n } @else {\r\n <a [routerLink]=\"item.route\" (click)=\"navService.hide()\">\r\n {{ item.text }}\r\n </a>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n <div class=\"iowa-external-links\">\r\n @for(item of externalLinks(); track $index; let isLast = $last){\r\n <a [href]=\"item.url\" [target]=\"item.target\">{{ item.text }}</a>\r\n @if(!isLast){<span class=\"iowa-external-link-spacer\"></span>} }\r\n </div>\r\n </div>\r\n</div>\r\n","/*\r\n * Public API Surface of uiowa-header\r\n */\r\n\r\nexport { ClickOutside } from './lib/click-outside';\r\nexport { LoginService } from './lib/login.service';\r\nexport { BannerLinks, ExternalLink, HeaderUser, InternalRoute } from './lib/models';\r\nexport { UiowaFooter } from './lib/uiowa-footer/uiowa-footer';\r\nexport { UiowaHeader } from './lib/uiowa-header/uiowa-header';\r\nexport { UiowaNav } from './lib/uiowa-nav/uiowa-nav';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}