import { html, LitElement } from "lit"; import { customElement, property } from "lit/decorators.js"; import { Ref, createRef, ref } from 'lit/directives/ref.js'; import { createClient } from "webdav"; @customElement("create-addressbook-form") export class CreateAddressbookForm extends LitElement { constructor() { super() } protected override createRenderRoot() { return this } client = createClient("/carddav") @property() user: String = '' @property() id: String = '' @property() displayname: String = '' @property() description: String = '' dialog: Ref = createRef() form: Ref = createRef() override render() { return html`

Create addressbook




` } async submit(e: SubmitEvent) { console.log(this.displayname) e.preventDefault() if (!this.id) { alert("Empty id") return } if (!this.displayname) { alert("Empty displayname") return } // TODO: Escape user input: There's not really a security risk here but would be nicer await this.client.createDirectory(`/principal/${this.user}/${this.id}`, { data: ` ${this.displayname} ${this.description ? `${this.description}` : ''} ` }) window.location.reload() return null } } declare global { interface HTMLElementTagNameMap { 'create-addressbook-form': CreateAddressbookForm } }