import { Component, OnDestroy, Input, effect, } from '@angular/core'; import { DomSanitizer, SafeUrl, } from '@angular/platform-browser'; import { LocaleService, SettingsService, decodeEntities, MediaQueryService, MediaQuerySettingType, MediaQuerySetting, } from '../../modules/web'; import { NotifyService, ThemeService } from '../../modules/material'; import { Layout } from '../cory-layout'; import { MatIconModule } from '@angular/material/icon'; import { ThemeButton } from '../../modules/material/component/cory-mat-theme/cory-mat-theme-button'; import { MatTooltipModule } from '@angular/material/tooltip'; import { MatButtonModule } from '@angular/material/button'; import { MatToolbarModule } from '@angular/material/toolbar'; class Tooltip { GitHub: string = ''; Npm: string = ''; Translation: string = ''; Theme: string = ''; Developer: string = ''; JetBrains: string = ''; } @Component({ selector: 'cory-layout-footer', templateUrl: 'cory-layout-footer.html', imports: [ MatToolbarModule, MatButtonModule, MatTooltipModule, ThemeButton, MatIconModule, ], }) export class Footer implements OnDestroy { @Input() parent: Layout; unsubscribeMediaQuery: Function; npmSvg: SafeUrl; jetbrainsSvg: SafeUrl; settings: any; i18n: any; linkJetBrains: string = 'https://www.jetbrains.com/?from=patrikx3'; decodeEntities: Function = decodeEntities; tooltip: Tooltip = new Tooltip(); currentWidthAlias: string; currentYear = new Date().getFullYear(); constructor( private notify: NotifyService, private theme: ThemeService, protected locale: LocaleService, protected settingsAll: SettingsService, private mediaQuery: MediaQueryService, private domSanitizer: DomSanitizer, ) { this.settings = settingsAll.data.pages; effect(() => { this.locale.state(); this.i18n = this.locale.data; this.setTooltip(); }); this.unsubscribeMediaQuery = this.mediaQuery.register([ { name: 'pages-small', min: 0, max: 599, type: MediaQuerySettingType.Width, }, { name: 'pages-medium', min: 600, max: 840, type: MediaQuerySettingType.Width, }, { name: 'pages-large', min: 841, max: Infinity, type: MediaQuerySettingType.Width, }, ]); effect(() => { const settings = this.mediaQuery.state(); settings.forEach((setting) => this.setTooltip(setting.name)); }); } private setTooltip(alias?: string) { if (alias !== undefined) this.currentWidthAlias = alias; if (!this.i18n?.pages?.title) return; switch (this.currentWidthAlias) { case 'pages-small': this.tooltip.GitHub = 'GitHub'; this.tooltip.Npm = 'NPM'; this.tooltip.Developer = decodeEntities(this.i18n.pages.title.developer + ' ' + this.currentYear); this.tooltip.JetBrains = decodeEntities(this.i18n.pages.title.sponsor.jetbrains); break; case 'pages-medium': this.tooltip.GitHub = ''; this.tooltip.Npm = ''; this.tooltip.Developer = decodeEntities(this.i18n.pages.title.developer + ' ' + this.currentYear); this.tooltip.JetBrains = decodeEntities(this.i18n.pages.title.sponsor.jetbrains); break; case 'pages-large': default: this.tooltip.GitHub = ''; this.tooltip.Npm = ''; this.tooltip.Developer = ''; this.tooltip.JetBrains = ''; break; } } public get linkDeveloper() { return `https://patrikx3.com/${this.locale.current}`; } public get linkNpm() { return `https://www.npmjs.com/package/${this.parent.packageJson.name}`; } public get linkGithub() { return `https://github.com/patrikx3/${this.parent.currentRepo}`; } ngOnDestroy(): void { this.unsubscribeMediaQuery(); } }