UNPKG

2.4 kBJavaScriptView Raw
1
2export const DynamicInput = {
3
4 tagName: 'dynamicinput',
5
6 getInputs(dynamicinput) {
7 return dynamicinput.childNodes;
8 },
9
10 getAllDynamicInputs(node = document) {
11 return node.getElementsByTagName(this.tagName);
12 },
13
14 init(dynamicinput) {
15 const emptyInput = this.create(dynamicinput);
16 dynamicinput.appendChild(emptyInput);
17 this.addEvents(dynamicinput);
18 },
19
20 initAll() {
21 const dynamicInputs = this.getAllDynamicInputs();
22 [].forEach.call(dynamicInputs, dynamicInput => {
23 this.init(dynamicInput);
24 });
25 },
26
27 addEvents(dynamicinput) {
28 const inputs = this.getInputs(dynamicinput);
29 [].forEach.call(inputs, input => {
30 this.addEvent(input, dynamicinput);
31 });
32 },
33
34 addEvent(input, dynamicinput) {
35 input.addEventListener('input', () => {
36 if (input === dynamicinput.lastChild) {
37 if (input.value.length > 0) {
38 this.addInput(dynamicinput);
39 } else {
40
41 }
42 } else {
43 if (input.value.length === 0) {
44 this.removeInput(dynamicinput, input);
45 }
46 }
47 });
48 },
49
50 addInput(dynamicinput) {
51 const input = this.create(dynamicinput);
52 dynamicinput.appendChild(input);
53 this.addEvent(input, dynamicinput);
54 },
55
56 removeInput(dynamicinput, input = null) {
57 if (input === null) {
58 input = dynamicinput.lastChild;
59 }
60 dynamicinput.removeChild(input);
61 },
62
63 create(dynamicinput) {
64 const attributes = Object.keys(dynamicinput.dataset);
65 const input = document.createElement('input');
66 [].forEach.call(attributes, attribute => {
67 input.setAttribute(attribute, dynamicinput.dataset[attribute]);
68 });
69 return input;
70 },
71
72 clear(dynamicinput) {
73 const inputs = this.getInputs(dynamicinput);
74 for (let k = 0; k < inputs.length; k++) {
75 if (k === 0) {
76 inputs[k].value = '';
77 } else {
78 this.removeInput(dynamicinput, inputs[k]);
79 }
80 }
81 }
82
83};
84
85document.addEventListener('DOMContentLoaded', () => {
86 DynamicInput.initAll();
87});