BookStackApp/BookStack

View on GitHub
resources/js/components/custom-checkbox.js

Summary

Maintainability
A
0 mins
Test Coverage
import {Component} from './component';

export class CustomCheckbox extends Component {

    setup() {
        this.container = this.$el;
        this.checkbox = this.container.querySelector('input[type=checkbox]');
        this.display = this.container.querySelector('[role="checkbox"]');

        this.checkbox.addEventListener('change', this.stateChange.bind(this));
        this.container.addEventListener('keydown', this.onKeyDown.bind(this));
    }

    onKeyDown(event) {
        const isEnterOrSpace = event.key === ' ' || event.key === 'Enter';
        if (isEnterOrSpace) {
            event.preventDefault();
            this.toggle();
        }
    }

    toggle() {
        this.checkbox.checked = !this.checkbox.checked;
        this.checkbox.dispatchEvent(new Event('change'));
        this.stateChange();
    }

    stateChange() {
        const checked = this.checkbox.checked ? 'true' : 'false';
        this.display.setAttribute('aria-checked', checked);
    }

}