|
|
|
@ -47,11 +47,14 @@ export class Header extends HTMLElement { |
|
|
|
this.language = navigator.language |
|
|
|
this.editing = false |
|
|
|
this.attachShadow({mode: 'open'}) |
|
|
|
this.appBar = document.createElement('div') |
|
|
|
this.appBar.classList.add('app-bar') |
|
|
|
this.shadowRoot.appendChild(this.appBar) |
|
|
|
this.addButton(this.icons.menu, 'nav', () => { |
|
|
|
this.menu.pages = this.getPages() |
|
|
|
this.menuPanel.classList.add('open') |
|
|
|
this.overlay.classList.add('open') |
|
|
|
}) |
|
|
|
}).classList.add('left-end') |
|
|
|
this.addButton(this.icons.add, 'add', () => { |
|
|
|
this.addPage() |
|
|
|
}) |
|
|
|
@ -61,12 +64,16 @@ export class Header extends HTMLElement { |
|
|
|
'click-edit', {bubbles: true} |
|
|
|
)) |
|
|
|
}) |
|
|
|
this.addButton(this.icons.dot, 'page', () => { |
|
|
|
this.pageMenuPanel.classList.add('open') |
|
|
|
this.overlay.classList.add('open') |
|
|
|
}) |
|
|
|
this.addMenu() |
|
|
|
this.pageButton = this.addButton( |
|
|
|
this.icons.dot, |
|
|
|
'page', |
|
|
|
() => { |
|
|
|
this.pageMenu.open(this.pageButton) |
|
|
|
} |
|
|
|
) |
|
|
|
this.pageButton.classList.add('right-end') |
|
|
|
this.addPageMenu() |
|
|
|
this.addMenu() |
|
|
|
this.dialogWrap = document.createElement('div') |
|
|
|
this.shadowRoot.appendChild(this.dialogWrap) |
|
|
|
} |
|
|
|
@ -77,9 +84,17 @@ export class Header extends HTMLElement { |
|
|
|
:host { |
|
|
|
background: #111; |
|
|
|
color: #ddd; |
|
|
|
display: grid; |
|
|
|
grid-template-columns: min-content min-content 1fr min-content min-content; |
|
|
|
padding: 0 4px; |
|
|
|
display: flex; |
|
|
|
flex-direction: column; |
|
|
|
align-items: stretch; |
|
|
|
} |
|
|
|
div.app-bar { |
|
|
|
display: flex; |
|
|
|
flex-direction: row; |
|
|
|
padding: 0; |
|
|
|
} |
|
|
|
div.divider { |
|
|
|
flex-grow: 1; |
|
|
|
} |
|
|
|
button { |
|
|
|
border: none; |
|
|
|
@ -88,6 +103,12 @@ export class Header extends HTMLElement { |
|
|
|
font-size: 30px; |
|
|
|
padding: 0 8px; |
|
|
|
} |
|
|
|
button.left-end { |
|
|
|
padding-right: 12px; |
|
|
|
} |
|
|
|
button.right-end { |
|
|
|
padding-right: 12px; |
|
|
|
} |
|
|
|
div.menu { |
|
|
|
position: fixed; |
|
|
|
top: 0; |
|
|
|
@ -117,37 +138,10 @@ export class Header extends HTMLElement { |
|
|
|
left: 0; |
|
|
|
opacity: 15%; |
|
|
|
} |
|
|
|
button.page { |
|
|
|
position: relative; |
|
|
|
} |
|
|
|
div.page-menu { |
|
|
|
position: fixed; |
|
|
|
top: 34px; |
|
|
|
right: 0; |
|
|
|
display: flex; |
|
|
|
align-items: flex-end; |
|
|
|
margin-right: 0; |
|
|
|
display: none; |
|
|
|
} |
|
|
|
div.page-menu.open { |
|
|
|
display: block; |
|
|
|
} |
|
|
|
svg { |
|
|
|
width: 20px; |
|
|
|
height: 20px; |
|
|
|
} |
|
|
|
div.dialog-panel { |
|
|
|
position: fixed; |
|
|
|
top: 34px; |
|
|
|
left: 0; |
|
|
|
right: 0; |
|
|
|
bottom: 0; |
|
|
|
display: flex; |
|
|
|
align-items: flex-end; |
|
|
|
} |
|
|
|
div.page-menu.open { |
|
|
|
display: block; |
|
|
|
} |
|
|
|
m-dialog::part(footer) { |
|
|
|
padding-top: 15px; |
|
|
|
} |
|
|
|
@ -163,7 +157,7 @@ export class Header extends HTMLElement { |
|
|
|
const b = document.createElement('button') |
|
|
|
b.innerHTML = html |
|
|
|
b.classList.add(cls) |
|
|
|
this.shadowRoot.appendChild(b) |
|
|
|
this.appBar.appendChild(b) |
|
|
|
if (onClick) { |
|
|
|
b.addEventListener('click', onClick) |
|
|
|
} |
|
|
|
@ -173,7 +167,7 @@ export class Header extends HTMLElement { |
|
|
|
addDivider() { |
|
|
|
const d = document.createElement('div') |
|
|
|
d.classList.add('divider') |
|
|
|
this.shadowRoot.appendChild(d) |
|
|
|
this.appBar.appendChild(d) |
|
|
|
} |
|
|
|
|
|
|
|
addMenu() { |
|
|
|
@ -194,7 +188,9 @@ export class Header extends HTMLElement { |
|
|
|
} |
|
|
|
|
|
|
|
addPageMenu() { |
|
|
|
this.pageMenu = document.createElement('m-page-menu') |
|
|
|
this.pageMenu = document.createElement( |
|
|
|
'm-menu-dropdown' |
|
|
|
) |
|
|
|
this.pageMenu.add(this.text.download, () => { |
|
|
|
const text = localStorage.getItem(this.path) |
|
|
|
const sp = this.path.split('/') |
|
|
|
@ -212,7 +208,9 @@ export class Header extends HTMLElement { |
|
|
|
this.shadowRoot.removeChild(el) |
|
|
|
}) |
|
|
|
this.pageMenu.add(this.text.rename, () => { |
|
|
|
const dialog = document.createElement('m-dialog') |
|
|
|
const dialog = document.createElement( |
|
|
|
'm-dialog' |
|
|
|
) |
|
|
|
this.dialogWrap.replaceChildren(dialog) |
|
|
|
const input = document.createElement('input') |
|
|
|
input.value = this.path |
|
|
|
@ -241,7 +239,7 @@ export class Header extends HTMLElement { |
|
|
|
) |
|
|
|
localStorage.removeItem(this.path) |
|
|
|
dialog.close() |
|
|
|
location.hash = newPath |
|
|
|
vlocation.hash = newPath |
|
|
|
}) |
|
|
|
bGroup.addCancel(this.text.cancel, () => { |
|
|
|
dialog.close() |
|
|
|
@ -250,7 +248,9 @@ export class Header extends HTMLElement { |
|
|
|
dialog.open() |
|
|
|
}) |
|
|
|
this.pageMenu.add(this.text.delete, () => { |
|
|
|
const dialog = document.createElement('m-dialog') |
|
|
|
const dialog = document.createElement( |
|
|
|
'm-dialog' |
|
|
|
) |
|
|
|
this.dialogWrap.replaceChildren(dialog) |
|
|
|
const p = document.createElement('p') |
|
|
|
p.innerText = this.text.confirmDelete( |
|
|
|
@ -263,7 +263,7 @@ export class Header extends HTMLElement { |
|
|
|
) |
|
|
|
bGroup.addPrimary(this.text.delete, () => { |
|
|
|
localStorage.removeItem(this.path) |
|
|
|
location.hash = '/' |
|
|
|
vlocation.hash = '/' |
|
|
|
dialog.close() |
|
|
|
}) |
|
|
|
bGroup.addCancel(this.text.cancel, () => { |
|
|
|
@ -272,21 +272,13 @@ export class Header extends HTMLElement { |
|
|
|
dialog.footerEl.appendChild(bGroup) |
|
|
|
dialog.open() |
|
|
|
}) |
|
|
|
this.pageMenu.addEventListener('close-menu', () => { |
|
|
|
this.close() |
|
|
|
}) |
|
|
|
|
|
|
|
this.pageMenuPanel = document.createElement('div') |
|
|
|
this.pageMenuPanel.appendChild(this.pageMenu) |
|
|
|
this.pageMenuPanel.classList.add('page-menu') |
|
|
|
this.shadowRoot.appendChild(this.pageMenuPanel) |
|
|
|
this.shadowRoot.appendChild(this.pageMenu) |
|
|
|
} |
|
|
|
|
|
|
|
close() { |
|
|
|
this.overlay.classList.add('closing') |
|
|
|
this.overlay.classList.remove('open') |
|
|
|
this.menuPanel.classList.remove('open') |
|
|
|
this.pageMenuPanel.classList.remove('open') |
|
|
|
setTimeout(() => { |
|
|
|
this.overlay.classList.remove('closing') |
|
|
|
}, 250) |
|
|
|
@ -323,7 +315,7 @@ export class Header extends HTMLElement { |
|
|
|
) |
|
|
|
bGroup.addPrimary(this.text.createPage, () => { |
|
|
|
const newPath = this.encodePath(input.value) |
|
|
|
location.hash = newPath |
|
|
|
vlocation.hash = newPath |
|
|
|
dialog.close() |
|
|
|
}) |
|
|
|
bGroup.addCancel(this.text.cancel, () => { |
|
|
|
|