aboutsummaryrefslogtreecommitdiff
path: root/static/server_connect.js
diff options
context:
space:
mode:
Diffstat (limited to 'static/server_connect.js')
-rw-r--r--static/server_connect.js84
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) {