diff options
Diffstat (limited to '')
-rw-r--r-- | static/server_connect.js | 84 |
1 files changed, 79 insertions, 5 deletions
diff --git a/static/server_connect.js b/static/server_connect.js index e789d72c..9794d87e 100644 --- a/static/server_connect.js +++ b/static/server_connect.js @@ -21,16 +21,90 @@ async function remove_event (element) { } } +function event_to_jcal (event) { + let properties = []; + + for (let prop of event.properties.ical_properties) { + let v = event.properties[prop]; + if (v !== undefined) { + + let type = 'text'; + let value; + + if (v instanceof Array) { + } else if (v instanceof Date) { + if (v.isWholeDay) { + type = 'date'; + value = v.format("~Y-~m-~d"); + } else { + type = 'date-time'; + /* TODO TZ */ + value = v.format("~Y-~m-~dT~H:~M:~S"); + } + } else if (v === true || v === false) { + type = 'boolean'; + value = v; + } else if (typeof(v) == 'number') { + /* TODO float or integer */ + type = 'integer'; + value = v; + } else if (v instanceof RRule) { + type = 'recur'; + value = v.asJcal(); + } + /* TODO period */ + else { + /* text types */ + value = v; + } + + properties.push([prop, {}, type, value]); + } + } + + return ['vevent', properties, [/* alarms go here */]] +} + async function create_event (event) { - let xml = event.getElementsByTagName("icalendar")[0].outerHTML + // let xml = event.getElementsByTagName("icalendar")[0].outerHTML let calendar = event.properties.calendar; - console.log(calendar, xml); + console.log(calendar/*, xml*/); let data = new URLSearchParams(); data.append("cal", calendar); - data.append("data", xml); + // data.append("data", xml); + + console.log(event); + + + + let jcal = + ['vcalendar', + [ + /* + 'prodid' and 'version' are technically both required (RFC 5545, + 3.6 Calendar Components). + */ + ], + [ + /* vtimezone goes here */ + event_to_jcal(event), + ] + ]; + + console.log(jcal); + + let doc = jcal_to_xcal(jcal); + console.log(doc); + let str = doc.childNodes[0].outerHTML; + console.log(str); + data.append("data", str); + + // console.log(event.properties); + + // return; let response = await fetch ( '/insert', { method: 'POST', @@ -54,12 +128,12 @@ async function create_event (event) { */ let parser = new DOMParser(); - let properties = parser + let return_properties = parser .parseFromString(body, 'text/xml') .children[0]; let child; - while ((child = properties.firstChild)) { + while ((child = return_properties.firstChild)) { let target = event.querySelector( "vevent properties " + child.tagName); if (target) { |