sachinganesh 2 år sedan
förälder
incheckning
c2f6fbdb94

+ 0
- 0
dist/Js/components/authloader/passwordinput.js Visa fil


+ 256
- 0
dist/Js/components/select/selectcomponent.js Visa fil

@@ -0,0 +1,256 @@
1
+
2
+class SearchableMulti extends HTMLElement {
3
+    static get observedAttributes() {
4
+      return ['placeholder'];
5
+    }
6
+  
7
+    constructor() {
8
+      super();
9
+      this._values = [];
10
+      this._placeholder = 'Search...';
11
+    }
12
+  
13
+    connectedCallback() {
14
+      if(!this._rendered) {
15
+        this._rendered = true;
16
+        this.attachShadow({ mode: 'open' });
17
+        this.shadowRoot.appendChild(this._template());
18
+        this._refresh();
19
+      }
20
+  
21
+      this._nonSelected.addEventListener('click', this);
22
+      this._selected.addEventListener('click', this);
23
+      this._search.addEventListener('keyup', this);
24
+    }
25
+  
26
+    disconnectedCallback() {
27
+      this._nonSelected.removeEventListener('click', this);
28
+      this._selected.removeEventListener('click', this);
29
+      this._search.removeEventListener('keyup', this);
30
+    }
31
+  
32
+    attributeChangedCallback(name, oldVal, newVal) {
33
+      if(name === 'placeholder') {
34
+        this.placeholder = newVal;
35
+      }
36
+    }
37
+  
38
+    get value() {
39
+      return this._values;
40
+    }
41
+  
42
+    get placeholder() {
43
+      return this._placeholder;
44
+    }
45
+  
46
+    set placeholder(val) {
47
+      this._placeholder = val;
48
+      if(this._rendered) {
49
+        this.shadowRoot.querySelector('input').placeholder = val;
50
+      }
51
+    }
52
+  
53
+    handleEvent(ev) {
54
+      var el = ev.target;
55
+      switch(ev.type) {
56
+        case 'click':
57
+          if(el.className === 'item') {
58
+            if(el.parentNode.className === 'non-selected-wrapper') {
59
+              this._nonSelectedClick(el);
60
+            } else {
61
+              this._selectedClick(el);
62
+            }
63
+          }
64
+          break;
65
+        case 'keyup':
66
+          if(ev.keyCode === 32 || ev.keyCode === 13) {
67
+            if(el.className === 'item') {
68
+              if(el.parentNode.className === 'non-selected-wrapper') {
69
+                this._nonSelectedClick(el);
70
+              } else {
71
+                this._selectedClick(el);
72
+              }
73
+              ev.preventDefault();
74
+            }
75
+          } else {
76
+            this._onSearch();
77
+          }
78
+          break;
79
+      }
80
+    }
81
+  
82
+    _nonSelectedClick(el) {
83
+      // Not already selected
84
+      if(!el._selected) {
85
+        this._setSelected(el);
86
+        this.dispatchEvent(new Event('change'));
87
+      }
88
+    }
89
+  
90
+    _setSelected(el) {
91
+      el._option.selected = true;
92
+      var clone = el._selected = el.cloneNode(true);
93
+      clone._nonSelected = el;
94
+      this._selected.appendChild(clone);
95
+      this._values.push(el.dataset.value);
96
+    }
97
+  
98
+    _selectedClick(el) {
99
+      var nonSelected = el._nonSelected;
100
+      var option = nonSelected._option;
101
+      nonSelected._selected = undefined;
102
+      el.parentNode.removeChild(el);
103
+  
104
+      // Deselect the option
105
+      option.selected = false;
106
+  
107
+      // Remove from values
108
+      var idx = this._values.indexOf(el.dataset.value);
109
+      if(idx !== -1) {
110
+        this._values.splice(idx, 1);
111
+        this.dispatchEvent(new Event('change'));
112
+      }
113
+    }
114
+  
115
+    _onSearch() {
116
+      var term = this._search.value.toLowerCase();
117
+  
118
+      function includes(str) {
119
+        return str.toLowerCase().indexOf(term) !== -1;
120
+      }
121
+  
122
+      var nonSelected, d;
123
+      for(var i = 0, len = this._nonSelected.children.length; i < len; i++) {
124
+        nonSelected = this._nonSelected.children[i];
125
+  
126
+        if(term && !includes(nonSelected.dataset.value) &&
127
+          !includes(nonSelected.textContent)) {
128
+          d = 'none';
129
+        } else {
130
+          d = '';
131
+        }
132
+        nonSelected.style.display = d;
133
+        if(nonSelected._selected) {
134
+          nonSelected._selected.style.display = d;
135
+        }
136
+      }
137
+    }
138
+  
139
+    _template() {
140
+      var doc = this.ownerDocument;
141
+      var wrapper = doc.createElement('div');
142
+      wrapper.className = 'wrapper';
143
+  
144
+      var style = doc.createElement('style');
145
+      style.textContent = this._styles();
146
+  
147
+      var input = this._search = doc.createElement('input');
148
+      input.type = 'text';
149
+      input.className = 'search-input';
150
+      input.placeholder = this.placeholder;
151
+  
152
+      var nonSelected = this._nonSelected = doc.createElement('div');
153
+      nonSelected.className = 'non-selected-wrapper';
154
+  
155
+      var selected = this._selected = doc.createElement('div');
156
+      selected.className = 'selected-wrapper';
157
+  
158
+      wrapper.appendChild(style);
159
+      wrapper.appendChild(input);
160
+      wrapper.appendChild(nonSelected);
161
+      wrapper.appendChild(selected);
162
+      return wrapper;
163
+    }
164
+  
165
+    _styles() {
166
+      return `
167
+        :host {
168
+          display: block;
169
+        }
170
+  
171
+        .wrapper {
172
+            border: 1px solid #ccc;
173
+            border-radius: 3px;
174
+            overflow: hidden;
175
+            width: 100%;
176
+        }
177
+  
178
+        .non-selected-wrapper,
179
+        .selected-wrapper {
180
+            box-sizing: border-box;
181
+            display: inline-block;
182
+            height: 200px;
183
+            overflow-y: scroll;;
184
+            padding: 10px;
185
+            vertical-align: top;
186
+            width: 50%;
187
+        }
188
+  
189
+        .non-selected-wrapper {
190
+            background: #fafafa;
191
+            border-right: 1px solid #ccc;
192
+        }
193
+  
194
+        .selected-wrapper {
195
+            background: #fff;
196
+        }
197
+  
198
+        .item {
199
+            cursor: pointer;
200
+            display: block;
201
+            padding: 5px 10px;
202
+        }
203
+  
204
+        .item:hover {
205
+            background: #ececec;
206
+            border-radius: 2px;
207
+        }
208
+  
209
+        .search-input {
210
+            border: 0;
211
+            border-bottom: 1px solid #ccc;
212
+            border-radius: 0;
213
+            display: block;
214
+            font-size: 1em;
215
+            margin: 0;
216
+            outline: 0;
217
+            padding: 10px 20px;
218
+            width: 100%;
219
+        }
220
+  
221
+        .non-selected-wrapper .item.selected {
222
+            opacity: 0.5;
223
+        }
224
+  
225
+        .non-selected-wrapper .row.selected:hover {
226
+            background: inherit;
227
+            cursor: inherit;
228
+        }
229
+      `;
230
+    }
231
+  
232
+    _refresh() {
233
+      this._selected.innerHTML = this._nonSelected.innerHTML = '';
234
+  
235
+      var term = this._search.value;
236
+      var options = [].slice.call(this.querySelectorAll('option'));
237
+      var doc = this.ownerDocument;
238
+  
239
+      options.forEach(function(option){
240
+        var row = doc.createElement('a');
241
+        row.setAttribute('tabindex', "0");
242
+        row.setAttribute('role', 'button');
243
+        row.textContent = option.textContent;
244
+        row.dataset.value = option.value;
245
+        row.className = 'item';
246
+        row._option = option;
247
+        this._nonSelected.appendChild(row);
248
+  
249
+        if(option.selected) {
250
+          this._setSelected(row);
251
+        }
252
+      }.bind(this));
253
+    }
254
+  }
255
+  
256
+  customElements.define('searchable-multi', SearchableMulti);

Laddar…
Avbryt
Spara