aboutsummaryrefslogtreecommitdiff
path: root/static/input_list.js
diff options
context:
space:
mode:
Diffstat (limited to 'static/input_list.js')
-rw-r--r--static/input_list.js110
1 files changed, 0 insertions, 110 deletions
diff --git a/static/input_list.js b/static/input_list.js
deleted file mode 100644
index a7a446f3..00000000
--- a/static/input_list.js
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- ∀ children('.input-list') => 'unit' ∈ classList(child)
-
- <div class="input-list">
- <div class="unit"><input/></div>
- <div class="unit final"><input/></div>
- </div>
-
-*/
-
-
-/* private */
-function transferListeners(old_unit, new_unit) {
- for (let [o, n] of zip([old_unit, ...old_unit.querySelectorAll("*")],
- [new_unit, ...new_unit.querySelectorAll("*")])) {
- for (const key in o.listeners) {
- if (! o.listeners.hasOwnProperty(key)) continue;
- for (let proc of o.listeners[key]) {
- n.addEventListener(key, proc);
- }
- }
- }
-}
-
-
-/* private */
-function advance_final(input_list) {
- let old_unit = input_list.unit;
- let new_unit = old_unit.cloneNode(true);
- new_unit.classList.add('final');
- transferListeners(old_unit, new_unit);
- input_list.appendChild(new_unit);
-}
-
-
-/* private */
-function update_inline_list () {
-
- /* can target self */
- let unit = this.closest('.unit');
-
- let lst = this.closest('.input-list');
-
- if (unit.classList.contains("final")) {
- if (this.value !== '') {
- unit.classList.remove('final');
- advance_final(lst);
- }
- } else {
- /* TODO all significant fields empty, instead of just current */
- if (this.value === '') {
- let sibling = unit.previousElementSibling || unit.nextElementSibling;
- unit.remove();
- if (sibling.tagName !== 'input')
- sibling = sibling.querySelector('input');
- sibling.focus();
- }
- }
-}
-
-/* run this from window.onload (or similar) */
-function init_input_list() {
-
- for (let lst of document.getElementsByClassName('input-list')) {
-
- for (let el of lst.getElementsByTagName('input')) {
- el.addEventListener('input', update_inline_list);
- }
-
- let oldUnit = lst.querySelector('.final.unit')
- let unit = oldUnit.cloneNode(true);
-
- transferListeners(oldUnit, unit);
-
- lst.unit = unit;
-
- if (lst.dataset.bindby) {
- lst.get_value = lst.dataset.bindby;
- } else if (lst.dataset.joinby) {
- lst.get_value = get_get_value(lst.dataset.joinby);
- } else {
- lst.get_value = get_get_value();
- }
-
- /* Propagate add event listener downwards */
- lst._addEventListener = lst.addEventListener;
- lst.addEventListener = function(type, proc) {
- switch (type) {
- case 'input':
- for (let el of lst.getElementsByTagName('input')) {
- el.addEventListener('input', proc);
- }
- default:
- lst._addEventListener(type, proc);
- }
- };
- }
-}
-
-/* -------------------------------------------------- */
-
-/* different function forms since we want to capture one self */
-const get_get_value = (join=',') => function () {
- return [...this.querySelectorAll('input')]
- .map(x => x.value)
- .filter(x => x != '');
- // .join(join);
-}
-
-/* -------------------------------------------------- */