blob: 7aad8e42b0bb4ec4f5ac91632edf382c22bd5de6 [file] [log] [blame]
/**
* @module named-edit-sk
* @description <h2><code>named-edit-sk</code></h2>
*
* Pop-up dialog for editing a single named edit.
*
* @evt named-edit-complete - Sent when the user presses OK.
* The event detail will be the desired state of the named
* fiddle.
*
* <pre>
* {
* "name": "foo",
* "hash": "123",
* "new_name": "bar"
* }
* </pre>
*
*/
import { define } from 'elements-sk/define'
import dialogPolyfill from 'dialog-polyfill'
import { html, render } from 'lit-html'
import { $$ } from 'common-sk/modules/dom'
import 'elements-sk/styles/buttons'
const template = (ele) => html`
<dialog>
<h2>Edit Named Fiddle</h2>
<label>Name <input type=text id=name value=${ele._state.name} size=50></label>
<label>Hash <input type=text id=hash value=${ele._state.hash} size=40></label>
<div class=dialog-buttons>
<button @click=${ele.hide}>Cancel</button>
<button id=ok @click=${ele._ok}>OK</button>
</div>
</dialog>
`;
define('named-edit-sk', class extends HTMLElement {
constructor() {
super();
this._state = {
name: '',
hash: '',
};
}
/** @prop state {object} A serialized Named struct. */
get state() { return this._state }
set state(val) {
this._state = Object.assign({}, val);
this._render();
this._dialog = this.firstElementChild;
dialogPolyfill.registerDialog(this._dialog);
}
_ok() {
if (this._state.name !== $$('#name', this).value) {
this._state.new_name = $$('#name', this).value;
}
this._state.hash = $$('#hash', this).value;
this.hide();
this.dispatchEvent(new CustomEvent('named-edit-complete', { detail: this._state, bubbles: true }));
}
/** Show the dialog. */
show() {
this._dialog.showModal();
}
/** Hide the dialog. */
hide() {
this._dialog.close();
}
connectedCallback() {
this._render();
}
_render() {
render(template(this), this, {eventContext: this});
}
});