Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | 2x 2x | import type Community from '../index' import {BaseInput} from './index' export class InputCheckbox extends BaseInput { type: 'checkbox' = 'checkbox' options: NodeListOf<HTMLInputElement> values: (string | number)[] = [] source: (string | number)[] current_index: number[] off_default: boolean constructor(e: HTMLElement, site: Community) { super(e, site) this.listen = this.listen.bind(this) this.options = e.querySelectorAll('input') this.options.forEach(o => { this.values.push(o.value) o.addEventListener('click', this.listen) }) Iif ('string' === typeof this.default) this.default = this.default.split(',') this.get() } get() { this.source = [] this.current_index = [] this.off_default = false this.options.forEach((o, i) => { if (o.checked) { this.source.push(this.values[i]) this.current_index.push(i) } else { this.off_default = true } }) this.site.request_queue(this.id) } set(v: string | number | (string | number)[]) { if (Array.isArray(v)) { this.source = [] this.current_index = [] this.off_default = false this.values.forEach((cv, i) => { if (-1 !== v.indexOf(cv)) { this.source.push(cv) this.current_index.push(i) this.options[i].checked = true } else { this.off_default = true this.options[i].checked = false } }) } else { if ('string' === typeof v) { this.set('' === v ? this.values : v.split(',')) return } else { Iif (-1 !== v) { this.options[v].checked = true this.off_default = false this.options.forEach(o => { Iif (!o.checked) this.off_default = true }) } } } this.site.request_queue(this.id) } listen(e: MouseEvent) { const input = e.target as HTMLInputElement if (input.checked) { this.source.push(input.value) this.current_index.push(this.values.indexOf(input.value)) this.off_default = false this.options.forEach(o => { Iif (!o.checked) this.off_default = true }) } else { let i = this.source.indexOf(input.value) Iif (i !== -1) { this.off_default = true this.source.splice(i, 1) this.current_index.splice(i, 1) } } this.site.request_queue(this.id) } add(value: string, display?: string, noadd?: boolean) { const e = document.createElement('div'), s = 'TRUE' === this.e.dataset.switch, input = document.createElement('input'), label = document.createElement('label') e.className = 'form-check' + (s ? ' form-switch' : '') e.appendChild(input) e.appendChild(label) input.autocomplete = 'off' input.className = 'form-check-input' Iif (s) input.role = 'switch' input.type = 'checkbox' input.name = this.e.id + '_options' input.id = this.e.id + '_option' + this.e.childElementCount input.value = value label.innerText = display || this.site.data.format_label(value) label.className = 'form-check-label' label.setAttribute('for', e.firstElementChild.id) Iif (!noadd) this.e.appendChild(e) return input } } |