|
|
|
|
@ -1,4 +1,17 @@
|
|
|
|
|
export class NavMenu extends HTMLElement {
|
|
|
|
|
textByLang = {
|
|
|
|
|
en: {
|
|
|
|
|
pages: 'Pages',
|
|
|
|
|
localStorage: 'Local storage',
|
|
|
|
|
full: 'full',
|
|
|
|
|
},
|
|
|
|
|
es: {
|
|
|
|
|
pages: 'Páginas',
|
|
|
|
|
localStorage: 'Almacenamiento local',
|
|
|
|
|
full: 'lleno',
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
constructor() {
|
|
|
|
|
super()
|
|
|
|
|
this.attachShadow({mode: 'open'})
|
|
|
|
|
@ -14,6 +27,7 @@ export class NavMenu extends HTMLElement {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
color: #000;
|
|
|
|
|
height: 100dvh;
|
|
|
|
|
max-height: 100dvh;
|
|
|
|
|
}
|
|
|
|
|
h1 {
|
|
|
|
|
@ -32,15 +46,22 @@ export class NavMenu extends HTMLElement {
|
|
|
|
|
display: block;
|
|
|
|
|
margin: 8px 10px;
|
|
|
|
|
}
|
|
|
|
|
.footer {
|
|
|
|
|
padding: 3px 5px;
|
|
|
|
|
}
|
|
|
|
|
`
|
|
|
|
|
this.shadowRoot.append(style)
|
|
|
|
|
this.header = document.createElement('h1')
|
|
|
|
|
this.header.innerText = this.pagesText
|
|
|
|
|
this.header.innerText = this.text.pages
|
|
|
|
|
this.shadowRoot.append(this.header)
|
|
|
|
|
this.pageList = document.createElement('div')
|
|
|
|
|
this.pageList.classList.add('page-list')
|
|
|
|
|
this.shadowRoot.append(this.pageList)
|
|
|
|
|
this.renderPageList()
|
|
|
|
|
this.footer = document.createElement('div')
|
|
|
|
|
this.footer.classList.add('footer')
|
|
|
|
|
this.shadowRoot.append(this.footer)
|
|
|
|
|
this.renderFooter()
|
|
|
|
|
this.shadowRoot.addEventListener('click', e => {
|
|
|
|
|
if (e.target.classList.contains('page')) {
|
|
|
|
|
if (this.handleLinks) {
|
|
|
|
|
@ -63,16 +84,15 @@ export class NavMenu extends HTMLElement {
|
|
|
|
|
|
|
|
|
|
set language(language) {
|
|
|
|
|
this._language = language
|
|
|
|
|
this.text = this.textByLang[
|
|
|
|
|
this.langEs ? 'es' : 'en'
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
get langEs() {
|
|
|
|
|
return /^es\b/.test(this.language)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
get pagesText() {
|
|
|
|
|
return this.langEs ? 'Páginas' : 'Pages'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
set pages(pages) {
|
|
|
|
|
this._pages = pages
|
|
|
|
|
if (this.pageList) {
|
|
|
|
|
@ -94,4 +114,35 @@ export class NavMenu extends HTMLElement {
|
|
|
|
|
})
|
|
|
|
|
this.pageList.replaceChildren(...els)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
set storageUse(n) {
|
|
|
|
|
this._storageUse = n
|
|
|
|
|
if (this.footer) {
|
|
|
|
|
this.renderFooter()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
get storageUse() {
|
|
|
|
|
return this._storageUse
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
renderFooter() {
|
|
|
|
|
if (this.storageUse !== undefined) {
|
|
|
|
|
const fmt = new Intl.NumberFormat(
|
|
|
|
|
this.language,
|
|
|
|
|
{
|
|
|
|
|
style: 'percent',
|
|
|
|
|
minimumFractionDigits: 2,
|
|
|
|
|
maximumFractionDigits: 2,
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
this.footer.innerText = (
|
|
|
|
|
this.text.localStorage + ' ' +
|
|
|
|
|
fmt.format(
|
|
|
|
|
this.storageUse
|
|
|
|
|
).replaceAll(/\s+/g, '') + ' ' +
|
|
|
|
|
this.text.full
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|