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