4 changed files with 121 additions and 4 deletions
@ -0,0 +1,66 @@ |
|||||
|
export class PageMenu extends HTMLElement { |
||||
|
icons = {} |
||||
|
|
||||
|
textEn = { |
||||
|
download: 'Download', |
||||
|
} |
||||
|
|
||||
|
textEs = { |
||||
|
download: 'Descargar', |
||||
|
} |
||||
|
|
||||
|
constructor() { |
||||
|
super() |
||||
|
this.attachShadow({mode: 'open'}) |
||||
|
this.language = navigator.language |
||||
|
} |
||||
|
|
||||
|
connectedCallback() { |
||||
|
const style = document.createElement('style') |
||||
|
style.textContent = ` |
||||
|
:host { |
||||
|
background: #222; |
||||
|
color: #ddd; |
||||
|
padding: 3px; |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
align-items: stretch; |
||||
|
min-width: 180px; |
||||
|
} |
||||
|
button { |
||||
|
background: #222; |
||||
|
font-size: 120%; |
||||
|
border: none; |
||||
|
color: inherit; |
||||
|
padding: 4px 10px; |
||||
|
text-align: left; |
||||
|
} |
||||
|
` |
||||
|
this.shadowRoot.append(style) |
||||
|
} |
||||
|
|
||||
|
add(name, handler) { |
||||
|
const btn = document.createElement('button') |
||||
|
btn.innerText = this.text[name] |
||||
|
this.shadowRoot.appendChild(btn) |
||||
|
btn.addEventListener('click', () => { |
||||
|
this.dispatchEvent(new CustomEvent( |
||||
|
'close', {bubbles: true} |
||||
|
)) |
||||
|
handler() |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
get language() { |
||||
|
return this._language |
||||
|
} |
||||
|
|
||||
|
set language(language) { |
||||
|
this._language = language |
||||
|
this.text = this.langEs ? this.textEs : this.textEn |
||||
|
} |
||||
|
|
||||
|
get langEs() { |
||||
|
return /^es\b/.test(this.language) |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue