webmail: add button to create a mailbox below another one

before this, you could use the button at the top of the list of mailboxes to
create a submailbox somewhere, and you would have to specify the full path of
the new mailbox name. now you can just open up your Lists/.../ mailbox, and
create a mailbox below that hierarchy.
This commit is contained in:
Mechiel Lukkien 2025-01-30 11:55:57 +01:00
parent ad26fd265d
commit ef77f58e08
No known key found for this signature in database
2 changed files with 37 additions and 0 deletions

View File

@ -5499,6 +5499,17 @@ const newMailboxView = (xmb, mailboxlistView, otherMailbox) => {
remove(); remove();
const mailboxIDs = [mbv.mailbox.ID, ...mailboxlistView.mailboxes().filter(mb => mb.Name.startsWith(mbv.mailbox.Name + '/')).map(mb => mb.ID)]; const mailboxIDs = [mbv.mailbox.ID, ...mailboxlistView.mailboxes().filter(mb => mb.Name.startsWith(mbv.mailbox.Name + '/')).map(mb => mb.ID)];
await withStatus('Marking mailboxes as read', client.MailboxesMarkRead(mailboxIDs)); await withStatus('Marking mailboxes as read', client.MailboxesMarkRead(mailboxIDs));
})), dom.div(dom.clickbutton('Create mailbox', attr.title('Create new mailbox within this mailbox.'), function click(e) {
let fieldset;
let name;
const ref = e.target;
const removeCreate = popover(ref, {}, dom.form(async function submit(e) {
e.preventDefault();
await withStatus('Creating mailbox', client.MailboxCreate(mbv.mailbox.Name + '/' + name.value), fieldset);
removeCreate();
}, fieldset = dom.fieldset(dom.label('Name ', name = dom.input(attr.required('yes'))), ' ', dom.submitbutton('Create'))));
remove();
name.focus();
})), dom.div(dom.clickbutton('Move to trash', attr.title('Move mailbox, its messages and its mailboxes to the trash.'), async function click() { })), dom.div(dom.clickbutton('Move to trash', attr.title('Move mailbox, its messages and its mailboxes to the trash.'), async function click() {
if (!trashmb) { if (!trashmb) {
window.alert('No mailbox configured for trash yet.'); window.alert('No mailbox configured for trash yet.');

View File

@ -5156,6 +5156,32 @@ const newMailboxView = (xmb: api.Mailbox, mailboxlistView: MailboxlistView, othe
await withStatus('Marking mailboxes as read', client.MailboxesMarkRead(mailboxIDs)) await withStatus('Marking mailboxes as read', client.MailboxesMarkRead(mailboxIDs))
}), }),
), ),
dom.div(
dom.clickbutton('Create mailbox', attr.title('Create new mailbox within this mailbox.'), function click(e: MouseEvent) {
let fieldset: HTMLFieldSetElement
let name: HTMLInputElement
const ref = e.target! as HTMLElement
const removeCreate = popover(ref, {},
dom.form(
async function submit(e: SubmitEvent) {
e.preventDefault()
await withStatus('Creating mailbox', client.MailboxCreate(mbv.mailbox.Name + '/' + name.value), fieldset)
removeCreate()
},
fieldset=dom.fieldset(
dom.label(
'Name ',
name=dom.input(attr.required('yes')),
),
' ',
dom.submitbutton('Create'),
),
),
)
remove()
name.focus()
}),
),
dom.div( dom.div(
dom.clickbutton('Move to trash', attr.title('Move mailbox, its messages and its mailboxes to the trash.'), async function click() { dom.clickbutton('Move to trash', attr.title('Move mailbox, its messages and its mailboxes to the trash.'), async function click() {
if (!trashmb) { if (!trashmb) {