From c6c65f9e8273a5bc1b2ac1155d66003d2b98591c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Mon, 4 Oct 2021 17:40:59 +0200 Subject: {.js => .ts} on relavant files. --- static/server_connect.ts | 108 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 static/server_connect.ts (limited to 'static/server_connect.ts') diff --git a/static/server_connect.ts b/static/server_connect.ts new file mode 100644 index 00000000..ef5de5a9 --- /dev/null +++ b/static/server_connect.ts @@ -0,0 +1,108 @@ + +async function remove_event (element) { + let uid = element.querySelector("icalendar uid text").textContent; + + let data = new URLSearchParams(); + data.append('uid', uid); + + let response = await fetch ( '/remove', { + method: 'POST', + body: data + }); + + console.log(response); + toggle_popup("popup" + element.id); + + if (response.status < 200 || response.status >= 300) { + let body = await response.text(); + alert(`HTTP error ${response.status}\n${body}`) + } else { + element.remove(); + } +} + +function event_to_jcal (event) { + /* encapsulate event in a shim calendar, to ensure that + we always send correct stuff */ + return ['vcalendar', + [ + /* + 'prodid' and 'version' are technically both required (RFC 5545, + 3.6 Calendar Components). + */ + ], + [ + /* vtimezone goes here */ + event.properties.to_jcal() + ] + ]; +} + +async function create_event (event) { + + // let xml = event.getElementsByTagName("icalendar")[0].outerHTML + let calendar = event.properties.calendar.value; + + console.log('calendar=', calendar/*, xml*/); + + let data = new URLSearchParams(); + data.append("cal", calendar); + // data.append("data", xml); + + console.log(event); + + let jcal = event_to_jcal(event); + + + + let doc = jcal_to_xcal(jcal); + console.log(doc); + let str = doc.documentElement.outerHTML; + console.log(str); + data.append("data", str); + + // console.log(event.properties); + + // return; + + let response = await fetch ( '/insert', { + method: 'POST', + body: data + }); + + console.log(response); + if (response.status < 200 || response.status >= 300) { + let body = await response.text(); + alert(`HTTP error ${response.status}\n${body}`) + return; + } + + let body = await response.text(); + + /* server is assumed to return an XML document on the form + + **xcal property** ... + + parse that, and update our own vevent with the data. + */ + + let parser = new DOMParser(); + let return_properties = parser + .parseFromString(body, 'text/xml') + .children[0]; + + let child; + while ((child = return_properties.firstChild)) { + let target = event.querySelector( + "vevent properties " + child.tagName); + if (target) { + target.replaceWith(child); + } else { + event.querySelector("vevent properties") + .appendChild(child); + } + } + + event.classList.remove("generated"); + toggle_popup("popup" + event.id); +} -- cgit v1.2.3 From 8ec2f441d40ab89b40cc3158f65c914eff497cee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Mon, 4 Oct 2021 23:18:24 +0200 Subject: Major typescript work. --- static/server_connect.ts | 89 +++++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 42 deletions(-) (limited to 'static/server_connect.ts') diff --git a/static/server_connect.ts b/static/server_connect.ts index ef5de5a9..a6599500 100644 --- a/static/server_connect.ts +++ b/static/server_connect.ts @@ -1,17 +1,22 @@ -async function remove_event (element) { - let uid = element.querySelector("icalendar uid text").textContent; +/* +async function remove_event(element: Element): void { + let uidElement = element.querySelector("icalendar uid text") + if (uidElement === null) { + throw "Element lacks uid, giving up" + } + let uid: uid = uidElement.textContent!; let data = new URLSearchParams(); data.append('uid', uid); - let response = await fetch ( '/remove', { + let response = await fetch('/remove', { method: 'POST', body: data }); console.log(response); - toggle_popup("popup" + element.id); + toggle_popup(popup_from_event(element)); if (response.status < 200 || response.status >= 300) { let body = await response.text(); @@ -20,28 +25,29 @@ async function remove_event (element) { element.remove(); } } - -function event_to_jcal (event) { - /* encapsulate event in a shim calendar, to ensure that - we always send correct stuff */ - return ['vcalendar', - [ - /* - 'prodid' and 'version' are technically both required (RFC 5545, - 3.6 Calendar Components). - */ - ], - [ - /* vtimezone goes here */ - event.properties.to_jcal() - ] - ]; -} - -async function create_event (event) { +*/ + +// function event_to_jcal(event) { +// /* encapsulate event in a shim calendar, to ensure that +// we always send correct stuff */ +// return ['vcalendar', +// [ +// /* +// 'prodid' and 'version' are technically both required (RFC 5545, +// 3.6 Calendar Components). +// */ +// ], +// [ +// /* vtimezone goes here */ +// event.properties.to_jcal() +// ] +// ]; +// } + +async function create_event(event: VEvent) { // let xml = event.getElementsByTagName("icalendar")[0].outerHTML - let calendar = event.properties.calendar.value; + let calendar = event.getProperty('x-hnh-calendar-name'); console.log('calendar=', calendar/*, xml*/); @@ -51,11 +57,9 @@ async function create_event (event) { console.log(event); - let jcal = event_to_jcal(event); + let jcal = event.to_jcal(); - - - let doc = jcal_to_xcal(jcal); + let doc: Document = jcal_to_xcal(jcal); console.log(doc); let str = doc.documentElement.outerHTML; console.log(str); @@ -65,7 +69,7 @@ async function create_event (event) { // return; - let response = await fetch ( '/insert', { + let response = await fetch('/insert', { method: 'POST', body: data }); @@ -91,18 +95,19 @@ async function create_event (event) { .parseFromString(body, 'text/xml') .children[0]; - let child; - while ((child = return_properties.firstChild)) { - let target = event.querySelector( - "vevent properties " + child.tagName); - if (target) { - target.replaceWith(child); - } else { - event.querySelector("vevent properties") - .appendChild(child); - } - } + // let child; + // while ((child = return_properties.firstChild)) { + // let target = event.querySelector( + // "vevent properties " + child.tagName); + // if (target) { + // target.replaceWith(child); + // } else { + // event.querySelector("vevent properties") + // .appendChild(child); + // } + // } + + // event.classList.remove("generated"); + // toggle_popup(popup_from); - event.classList.remove("generated"); - toggle_popup("popup" + event.id); } -- cgit v1.2.3 From 2d0ec2b162e3e2851fef7f280aab21c9f00cd171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Sun, 31 Oct 2021 20:48:23 +0100 Subject: Everything but lib. --- static/server_connect.ts | 2 ++ 1 file changed, 2 insertions(+) (limited to 'static/server_connect.ts') diff --git a/static/server_connect.ts b/static/server_connect.ts index a6599500..96f6e872 100644 --- a/static/server_connect.ts +++ b/static/server_connect.ts @@ -1,3 +1,5 @@ +import { jcal_to_xcal } from './jcal' +import { VEvent } from './vevent' /* async function remove_event(element: Element): void { -- cgit v1.2.3 From c60a60422f69e29628b6c946a15be271e90015aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Wed, 10 Nov 2021 00:47:10 +0100 Subject: Basic event modification works again. --- static/server_connect.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'static/server_connect.ts') diff --git a/static/server_connect.ts b/static/server_connect.ts index 96f6e872..594e46de 100644 --- a/static/server_connect.ts +++ b/static/server_connect.ts @@ -1,3 +1,5 @@ +export { create_event } + import { jcal_to_xcal } from './jcal' import { VEvent } from './vevent' @@ -49,7 +51,11 @@ async function remove_event(element: Element): void { async function create_event(event: VEvent) { // let xml = event.getElementsByTagName("icalendar")[0].outerHTML - let calendar = event.getProperty('x-hnh-calendar-name'); + let calendar = event._calendar; + if (!calendar) { + console.error("Can't create event without calendar") + return; + } console.log('calendar=', calendar/*, xml*/); @@ -57,20 +63,19 @@ async function create_event(event: VEvent) { data.append("cal", calendar); // data.append("data", xml); - console.log(event); + // console.log(event); let jcal = event.to_jcal(); + // console.log(jcal); let doc: Document = jcal_to_xcal(jcal); - console.log(doc); + // console.log(doc); let str = doc.documentElement.outerHTML; console.log(str); data.append("data", str); // console.log(event.properties); - // return; - let response = await fetch('/insert', { method: 'POST', body: data -- cgit v1.2.3 From ecdb4b7eeb42dc859cfd6aa31634b423b72c50bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Mon, 15 Nov 2021 00:47:13 +0100 Subject: Rework some drawing and how calendar is accessed. --- static/server_connect.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'static/server_connect.ts') diff --git a/static/server_connect.ts b/static/server_connect.ts index 594e46de..e02258ce 100644 --- a/static/server_connect.ts +++ b/static/server_connect.ts @@ -51,7 +51,7 @@ async function remove_event(element: Element): void { async function create_event(event: VEvent) { // let xml = event.getElementsByTagName("icalendar")[0].outerHTML - let calendar = event._calendar; + let calendar = event.calendar; if (!calendar) { console.error("Can't create event without calendar") return; -- cgit v1.2.3 From e5d682702f6954ebab946ca0eb67ab22f465f6ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Thu, 18 Nov 2021 21:40:19 +0100 Subject: Add setProperties, add type info to setProperty. --- static/server_connect.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'static/server_connect.ts') diff --git a/static/server_connect.ts b/static/server_connect.ts index e02258ce..1d01e07e 100644 --- a/static/server_connect.ts +++ b/static/server_connect.ts @@ -1,15 +1,16 @@ -export { create_event } +export { create_event, remove_event } import { jcal_to_xcal } from './jcal' import { VEvent } from './vevent' +import { uid } from './types' +import { vcal_objects } from './globals' -/* -async function remove_event(element: Element): void { - let uidElement = element.querySelector("icalendar uid text") - if (uidElement === null) { - throw "Element lacks uid, giving up" +async function remove_event(uid: uid) { + let element = vcal_objects.get(uid); + if (!element) { + console.error(`No VEvent with that uid = '${uid}', giving up`) + return; } - let uid: uid = uidElement.textContent!; let data = new URLSearchParams(); data.append('uid', uid); -- cgit v1.2.3 From e5219a712560fde7c843652f088de995a6de68ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Thu, 18 Nov 2021 21:41:20 +0100 Subject: Restore remove event functionality. --- static/server_connect.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'static/server_connect.ts') diff --git a/static/server_connect.ts b/static/server_connect.ts index 1d01e07e..66410324 100644 --- a/static/server_connect.ts +++ b/static/server_connect.ts @@ -21,16 +21,21 @@ async function remove_event(uid: uid) { }); console.log(response); - toggle_popup(popup_from_event(element)); + // toggle_popup(popup_from_event(element)); if (response.status < 200 || response.status >= 300) { let body = await response.text(); alert(`HTTP error ${response.status}\n${body}`) } else { - element.remove(); + /* Remove all HTML components which belong to this vevent */ + for (let component of element.registered) { + component.remove(); + } + /* remove the vevent from our global store, + hopefully also freeing it for garbace collection */ + vcal_objects.delete(uid); } } -*/ // function event_to_jcal(event) { // /* encapsulate event in a shim calendar, to ensure that -- cgit v1.2.3 From 5211cea181bbdf9c5296f09806c3735197bc2042 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Fri, 10 Dec 2021 00:13:15 +0100 Subject: Close popup on event creation. --- static/server_connect.ts | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'static/server_connect.ts') diff --git a/static/server_connect.ts b/static/server_connect.ts index 66410324..61eb4f30 100644 --- a/static/server_connect.ts +++ b/static/server_connect.ts @@ -94,7 +94,9 @@ async function create_event(event: VEvent) { return; } - let body = await response.text(); + /* response from here on is good */ + + // let body = await response.text(); /* server is assumed to return an XML document on the form @@ -103,10 +105,10 @@ async function create_event(event: VEvent) { parse that, and update our own vevent with the data. */ - let parser = new DOMParser(); - let return_properties = parser - .parseFromString(body, 'text/xml') - .children[0]; + // let parser = new DOMParser(); + // let return_properties = parser + // .parseFromString(body, 'text/xml') + // .children[0]; // let child; // while ((child = return_properties.firstChild)) { @@ -120,7 +122,11 @@ async function create_event(event: VEvent) { // } // } - // event.classList.remove("generated"); - // toggle_popup(popup_from); - + for (let r of event.registered) { + r.classList.remove('generated'); + if (r.tagName.toLowerCase() === 'popup-element') { + console.log(r); + r.removeAttribute('visible'); + } + } } -- cgit v1.2.3