From 4a4c3e42151da7a83bd863d31d8ad5f8f4d07396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Sat, 21 Nov 2020 00:13:20 +0100 Subject: Further work on breakout and rrule. --- static/binders.js | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 static/binders.js (limited to 'static/binders.js') diff --git a/static/binders.js b/static/binders.js new file mode 100644 index 00000000..d030084d --- /dev/null +++ b/static/binders.js @@ -0,0 +1,96 @@ + +/* vcalendar element */ + +function bind_recur(el, e) { + /* todo bind default slots of rrule */ + + let p = get_property(el, 'rrule', new rrule); + let rrule = el.rrule; + + for (let rr of e.querySelectorAll('.bind-rr')) { + rrule.addListener(rr.dataset.name, v => { + /* TODO Different depending on tag type */ + /* TODO scoope of rr? */ + if (! v) { + rr.value = ''; + } else { + rr.vaule = v; + } + }); + } + + p.push([e, function (s, v) { + /* v is an rrule object */ + for (let f of v.fields) { + let input_field = s.querySelector(`[name=${f}]`); + switch (input_field.tagName) { + case 'input': + input_field.value = v; + break; + case 'select': + /* TODO */ + break; + default: + if (input_field.classList.contains('date-time')) { + let date = input_field.querySelector('input[type=date]'); + let time = input_field.querySelector('input[type=time]'); + } else if (e.classList.contains('input-list')) { + } else { + throw Error(); + } + } + } + }]); + + +} + +function bind_edit(el, e) { + let p = get_property(el, e.dataset.property); + e.addEventListener('input', function () { + el.properties[e.dataset.property] = this.value; + }); + let f; + switch (e.tagName) { + case 'input': + switch (e.type) { + case 'time': f = (s, v) => s.value = v.format("~H:~M"); break; + case 'date': f = (s, v) => s.value = v.format("~Y-~m-~d"); break; + // TODO remaining types cases + default: f = (s, v) => s.value = v; + } + p.push([e, f]) + break; + case 'textarea': + f = (s, v) => s.innerHTML = v; + p.push([e, f]) + break; + default: + alert("How did you get here??? " + e.tagName) + break; + } + +} + +function bind_view(el, e) { + let f = (s, v) => s.innerHTML = v.format(s.dataset && s.dataset.fmt); + get_property(el, e.dataset.property).push([e, f]); +} + + +function bind_wholeday(el, e) { + // let wholeday = popup.querySelector("input[name='wholeday']"); + let popup = popup_from_event(el); + wholeday.addEventListener('click', function (event) { + for (let f of popup.querySelectorAll("input[type='time']")) { + f.disabled = wholeday.checked; + } + + for (let f of ['dtstart', 'dtend']) { + let d = el.properties[f]; + if (! d) continue; /* dtend optional */ + d.isWholeDay = wholeday.checked; + el.properties[f] = d; + } + }); +} -- cgit v1.2.3