annotate web/EditChoice.ts @ 2376:4556eebe5d73

topdir reorgs; let pdm have its src/ dir; separate vite area from light9/
author drewp@bigasterisk.com
date Sun, 12 May 2024 19:02:10 -0700
parents light9/web/EditChoice.ts@2aeceb6f03aa
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2086
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
1 // see light9/editchoice.py for gtk version
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
2 import debug from "debug";
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
3 import { css, html, LitElement } from "lit";
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
4 import { customElement, property } from "lit/decorators.js";
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
5 import { NamedNode } from "n3";
2232
94d0e596ca39 fix import
drewp@bigasterisk.com
parents: 2104
diff changeset
6 import { $V, Vector } from "sylvester";
2104
6a9f9af9d3b8 EditChoice sends new choice in event
drewp@bigasterisk.com
parents: 2086
diff changeset
7 export { ResourceDisplay } from "../web/ResourceDisplay";
2086
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
8 const log = debug("editchoice");
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
9 const RDFS = "http://www.w3.org/2000/01/rdf-schema#";
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
10
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
11 function setupDrop(
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
12 senseElem: HTMLElement,
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
13 highlightElem: HTMLElement,
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
14 coordinateOriginElem: HTMLElement | null,
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
15 onDrop: (uri: NamedNode, pos: Vector | null) => void
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
16 ) {
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
17 const highlight = () => highlightElem.classList.add("dragging");
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
18 const unhighlight = () => highlightElem.classList.remove("dragging");
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
19
2331
b09ff4b0094c faders in pages now
drewp@bigasterisk.com
parents: 2326
diff changeset
20 senseElem.addEventListener("drag", (event: DragEvent) => { });
2086
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
21
2331
b09ff4b0094c faders in pages now
drewp@bigasterisk.com
parents: 2326
diff changeset
22 senseElem.addEventListener("dragstart", (event: DragEvent) => { });
2086
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
23
2331
b09ff4b0094c faders in pages now
drewp@bigasterisk.com
parents: 2326
diff changeset
24 senseElem.addEventListener("dragend", (event: DragEvent) => { });
2086
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
25
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
26 senseElem.addEventListener("dragover", (event: DragEvent) => {
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
27 event.preventDefault();
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
28 event.dataTransfer!.dropEffect = "copy";
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
29 highlight();
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
30 });
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
31
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
32 senseElem.addEventListener("dragenter", (event: DragEvent) => {
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
33 highlight();
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
34 });
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
35
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
36 senseElem.addEventListener("dragleave", (event: DragEvent) => {
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
37 unhighlight();
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
38 });
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
39
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
40 senseElem.addEventListener("drop", (event: DragEvent) => {
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
41 event.preventDefault();
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
42 const uri = new NamedNode(event.dataTransfer!.getData("text/uri-list"));
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
43
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
44 let pos: Vector | null = null;
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
45 if (coordinateOriginElem != null) {
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
46 const root = coordinateOriginElem.getBoundingClientRect();
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
47 pos = $V([event.pageX - root.left, event.pageY - root.top]);
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
48 }
1378
64239c6651de start edit-choice polymer version
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
49
2086
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
50 try {
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
51 onDrop(uri, pos);
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
52 } catch (e) {
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
53 log(e);
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
54 }
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
55 unhighlight();
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
56 });
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
57 }
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
58
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
59 // Picks a URI based on the caller setting the property OR
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
60 // the user drag-and-dropping a text/uri-list resource (probably
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
61 // an <resource-display> or <a href> tag)
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
62 @customElement("edit-choice")
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
63 export class EditChoice extends LitElement {
2294
4031e511bca9 resource-display uri can no longer be a string
drewp@bigasterisk.com
parents: 2232
diff changeset
64 @property() uri?: NamedNode
2326
e9caffe926df attribute 'nounlink' to save space
drewp@bigasterisk.com
parents: 2294
diff changeset
65 @property({ type: Boolean }) nounlink = false;
2332
2aeceb6f03aa edit-choice defaults to no 'rename' button
drewp@bigasterisk.com
parents: 2331
diff changeset
66 @property({ type: Boolean }) rename = false;
2086
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
67 static styles = [
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
68 css`
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
69 :host {
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
70 display: inline-block;
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
71 background: #141448;
2332
2aeceb6f03aa edit-choice defaults to no 'rename' button
drewp@bigasterisk.com
parents: 2331
diff changeset
72 /* min-width: 10em; */
2086
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
73 padding: 3px 8px;
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
74 }
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
75 .dragging {
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
76 background: rgba(126, 52, 245, 0.0784313725490196);
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
77 box-shadow: 0 0 20px #ffff00;
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
78 }
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
79 a {
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
80 color: #8e8eff;
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
81 padding: 3px;
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
82 display: inline-block;
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
83 font-size: 145%;
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
84 }
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
85 `,
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
86 ];
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
87 render() {
2326
e9caffe926df attribute 'nounlink' to save space
drewp@bigasterisk.com
parents: 2294
diff changeset
88 const unlink = html`
e9caffe926df attribute 'nounlink' to save space
drewp@bigasterisk.com
parents: 2294
diff changeset
89 <button @click=${this.unlink}>Unlink</button>
e9caffe926df attribute 'nounlink' to save space
drewp@bigasterisk.com
parents: 2294
diff changeset
90 `
2086
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
91 return html`
2332
2aeceb6f03aa edit-choice defaults to no 'rename' button
drewp@bigasterisk.com
parents: 2331
diff changeset
92 <resource-display .uri=${this.uri} ?rename=${this.rename}></resource-display>
2326
e9caffe926df attribute 'nounlink' to save space
drewp@bigasterisk.com
parents: 2294
diff changeset
93 ${this.nounlink ? html`` : unlink}
2086
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
94 `;
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
95 }
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
96
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
97 constructor() {
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
98 super();
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
99 setupDrop(this, this, null, this._setUri.bind(this));
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
100 }
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
101
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
102 // updated(changedProperties: PropertyValues) {
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
103 // log('cp' ,changedProperties)
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
104 // if (changedProperties.has("box")) {
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
105 // log('setupdrop', this.box)
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
106 // setupDrop(this.box, this.box, null, this._setUri.bind(this));
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
107 // }
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
108 // }
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
109
2294
4031e511bca9 resource-display uri can no longer be a string
drewp@bigasterisk.com
parents: 2232
diff changeset
110 _setUri(u?: NamedNode) {
2086
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
111 this.uri = u;
2331
b09ff4b0094c faders in pages now
drewp@bigasterisk.com
parents: 2326
diff changeset
112 this.dispatchEvent(new CustomEvent("edited", { detail: { newValue: u } }));
2086
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
113 }
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
114
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
115 unlink() {
2294
4031e511bca9 resource-display uri can no longer be a string
drewp@bigasterisk.com
parents: 2232
diff changeset
116 return this._setUri(undefined);
2086
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
117 }
fe807af851c8 partial port of editchoice
drewp@bigasterisk.com
parents: 1731
diff changeset
118 }