4 changed files with 201 additions and 135 deletions
@ -0,0 +1,185 @@ |
|||||
|
export class PageActions { |
||||
|
textEn = { |
||||
|
download: 'Download', |
||||
|
rename: 'Move/Rename', |
||||
|
duplicate: 'Duplicate', |
||||
|
delete_: 'Delete', |
||||
|
confirmDelete: f => ( |
||||
|
`Are you sure you want to delete ${f}?` |
||||
|
), |
||||
|
cancel: 'Cancel', |
||||
|
alreadyExists: 'There is already a page with that name.', |
||||
|
} |
||||
|
|
||||
|
textEs = { |
||||
|
download: 'Descargar', |
||||
|
rename: 'Mover/Renombrar', |
||||
|
duplicate: 'Duplicar', |
||||
|
delete_: 'Borrar', |
||||
|
confirmDelete: f => ( |
||||
|
`¿Desea borrar ${f}?` |
||||
|
), |
||||
|
cancel: 'Cancelar', |
||||
|
alreadyExists: 'Ya existe una página con ese nombre.', |
||||
|
} |
||||
|
|
||||
|
constructor() { |
||||
|
this.language = navigator.language |
||||
|
this.menuActions = [ |
||||
|
{ |
||||
|
text: this.text.download, |
||||
|
click: this.download.bind(this), |
||||
|
}, |
||||
|
{ |
||||
|
text: this.text.rename, |
||||
|
click: this.rename.bind(this), |
||||
|
}, |
||||
|
{ |
||||
|
text: this.text.duplicate, |
||||
|
click: this.duplicate.bind(this), |
||||
|
}, |
||||
|
{ |
||||
|
text: this.text.delete_, |
||||
|
click: this.delete_.bind(this), |
||||
|
}, |
||||
|
] |
||||
|
} |
||||
|
|
||||
|
download() { |
||||
|
const text = localStorage.getItem(this.path) |
||||
|
const sp = this.path.split('/') |
||||
|
const filename = sp[sp.length - 1] |
||||
|
const el = document.createElement('a') |
||||
|
el.setAttribute( |
||||
|
'href', |
||||
|
'data:text/plain;charset=utf-8,' + |
||||
|
encodeURIComponent(text) |
||||
|
) |
||||
|
el.setAttribute('download', filename) |
||||
|
el.style.display = 'none' |
||||
|
this.shadowRoot.appendChild(el) |
||||
|
el.click() |
||||
|
this.shadowRoot.removeChild(el) |
||||
|
} |
||||
|
|
||||
|
rename() { |
||||
|
const dialog = document.createElement( |
||||
|
'm-dialog' |
||||
|
) |
||||
|
this.dialogWrap.replaceChildren(dialog) |
||||
|
const input = document.createElement('input') |
||||
|
input.value = this.path |
||||
|
input.style.minWidth = '300px' |
||||
|
dialog.bodyEl.appendChild(input) |
||||
|
let errorEl |
||||
|
const bGroup = document.createElement( |
||||
|
'm-forms-button-group' |
||||
|
) |
||||
|
bGroup.addPrimary(this.text.rename, () => { |
||||
|
const newPath = input.value |
||||
|
const v = localStorage.getItem(newPath) |
||||
|
if (v !== null || newPath === this.path) { |
||||
|
if (!errorEl) { |
||||
|
errorEl = document.createElement('p') |
||||
|
errorEl.style.color = 'red' |
||||
|
const errText = this.text.alreadyExists |
||||
|
errorEl.innerText = errText |
||||
|
dialog.bodyEl.appendChild(errorEl) |
||||
|
} |
||||
|
return |
||||
|
} |
||||
|
localStorage.setItem( |
||||
|
newPath, |
||||
|
localStorage.getItem(this.path) |
||||
|
) |
||||
|
localStorage.removeItem(this.path) |
||||
|
dialog.close() |
||||
|
location.hash = newPath |
||||
|
}) |
||||
|
bGroup.addCancel(this.text.cancel, () => { |
||||
|
dialog.close() |
||||
|
}) |
||||
|
dialog.footerEl.appendChild(bGroup) |
||||
|
dialog.open() |
||||
|
} |
||||
|
|
||||
|
duplicate() { |
||||
|
const dialog = document.createElement( |
||||
|
'm-dialog' |
||||
|
) |
||||
|
this.dialogWrap.replaceChildren(dialog) |
||||
|
const input = document.createElement('input') |
||||
|
input.value = this.path |
||||
|
input.style.minWidth = '300px' |
||||
|
dialog.bodyEl.appendChild(input) |
||||
|
let errorEl |
||||
|
const bGroup = document.createElement( |
||||
|
'm-forms-button-group' |
||||
|
) |
||||
|
const btnText = this.text.duplicate |
||||
|
bGroup.addPrimary(btnText, () => { |
||||
|
const newPath = input.value |
||||
|
const v = localStorage.getItem(newPath) |
||||
|
if (v !== null || newPath === this.path) { |
||||
|
if (!errorEl) { |
||||
|
errorEl = document.createElement('p') |
||||
|
errorEl.style.color = 'red' |
||||
|
const errText = this.text.alreadyExists |
||||
|
errorEl.innerText = errText |
||||
|
dialog.bodyEl.appendChild(errorEl) |
||||
|
} |
||||
|
return |
||||
|
} |
||||
|
localStorage.setItem( |
||||
|
newPath, |
||||
|
localStorage.getItem(this.path) |
||||
|
) |
||||
|
dialog.close() |
||||
|
location.hash = newPath |
||||
|
}) |
||||
|
bGroup.addCancel(this.text.cancel, () => { |
||||
|
dialog.close() |
||||
|
}) |
||||
|
dialog.footerEl.appendChild(bGroup) |
||||
|
dialog.open() |
||||
|
} |
||||
|
|
||||
|
delete_() { |
||||
|
const dialog = document.createElement( |
||||
|
'm-dialog' |
||||
|
) |
||||
|
this.dialogWrap.replaceChildren(dialog) |
||||
|
const p = document.createElement('p') |
||||
|
p.innerText = this.text.confirmDelete( |
||||
|
JSON.stringify(this.path) |
||||
|
) |
||||
|
dialog.bodyEl.appendChild(p) |
||||
|
|
||||
|
const bGroup = document.createElement( |
||||
|
'm-forms-button-group' |
||||
|
) |
||||
|
bGroup.addPrimary(this.text.delete_, () => { |
||||
|
localStorage.removeItem(this.path) |
||||
|
location.hash = '/' |
||||
|
dialog.close() |
||||
|
}) |
||||
|
bGroup.addCancel(this.text.cancel, () => { |
||||
|
dialog.close() |
||||
|
}) |
||||
|
dialog.footerEl.appendChild(bGroup) |
||||
|
dialog.open() |
||||
|
} |
||||
|
|
||||
|
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