diff options
author | Hugo Hörnquist <hugo@lysator.liu.se> | 2020-11-20 23:01:32 +0100 |
---|---|---|
committer | Hugo Hörnquist <hugo@lysator.liu.se> | 2020-11-20 23:01:32 +0100 |
commit | 1b5ff103f589140473068fd83340b0cc443fb420 (patch) | |
tree | c90b3e2ae018df1f51ff87a755718581ca0254b1 /static/server_connect.js | |
parent | Start looking into generalized input-list. (diff) | |
download | calp-1b5ff103f589140473068fd83340b0cc443fb420.tar.gz calp-1b5ff103f589140473068fd83340b0cc443fb420.tar.xz |
Work on templetazing js.
Diffstat (limited to '')
-rw-r--r-- | static/server_connect.js | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/static/server_connect.js b/static/server_connect.js new file mode 100644 index 00000000..e789d72c --- /dev/null +++ b/static/server_connect.js @@ -0,0 +1,75 @@ + +async function remove_event (element) { + let uid = element.querySelector("icalendar uid text").innerHTML; + + 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(); + } +} + +async function create_event (event) { + + let xml = event.getElementsByTagName("icalendar")[0].outerHTML + let calendar = event.properties.calendar; + + console.log(calendar, xml); + + let data = new URLSearchParams(); + data.append("cal", calendar); + data.append("data", xml); + + 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 + <properties> + **xcal property** ... + </properties> + parse that, and update our own vevent with the data. + */ + + let parser = new DOMParser(); + let properties = parser + .parseFromString(body, 'text/xml') + .children[0]; + + let child; + while ((child = 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); +} |