Skip to content
utils.js 2.44 KiB
Newer Older
Bengfort's avatar
Bengfort committed
(function() {
Bengfort's avatar
Bengfort committed
    window.$$ = {
        on: function(el, eventName, selector, fn) {
            el.addEventListener(eventName, function(event) {
                var target = event.target.closest(selector);
                if (target) {
                    fn.call(target, event);
                }
            });
        },
Bengfort's avatar
Bengfort committed
        trigger: function(el, eventName) {
            var event = document.createEvent('HTMLEvents');
            event.initEvent(eventName, true, false);
            el.dispatchEvent(event);
        },
Bengfort's avatar
Bengfort committed
    };

Bengfort's avatar
Bengfort committed
    var preventDoubleClick = false;
Bengfort's avatar
Bengfort committed
    $$.on(document, 'submit', 'form', function(event) {
Bengfort's avatar
Bengfort committed
        if (preventDoubleClick) {
            event.preventDefault();
        } else {
            preventDoubleClick = true;
            setTimeout(function() {
                preventDoubleClick = false;
            }, 1000);
        }
    });

Bengfort's avatar
Bengfort committed
    $$.on(document, 'change', '[data-js="confirm-delete"]', function() {
Bengfort's avatar
Bengfort committed
        this.form.querySelector('[type="submit"],button:not([type])').disabled = !this.checked;
Bengfort's avatar
Bengfort committed
    document.querySelectorAll('[type="date"]').forEach(function(e) {
        if (e.type !== 'date') {
            $(e).datepicker({
                format: 'yyyy-mm-dd',
                language: document.documentElement.lang,
                autoclose: true,
                calendarWeeks: true,
Bengfort's avatar
Bengfort committed
                daysOfWeekHighlighted: '0,6',
                todayHighlight: true,
            });
        }
Bengfort's avatar
Bengfort committed
    $$.on(document, 'click', '[data-multi-reset]', function() {
Bengfort's avatar
Bengfort committed
        var targetSelector = this.dataset.multiReset;
        var target = document.querySelector(targetSelector);
Bengfort's avatar
Bengfort committed
        target.querySelectorAll('option').forEach(function(element) {
            element.selected = false;
Bengfort's avatar
Bengfort committed
    $$.on(document, 'click', '[data-clipboard]', function() {
Bengfort's avatar
Bengfort committed
        var targetSelector = this.dataset.clipboard;
        var target = document.querySelector(targetSelector);
Bengfort's avatar
Bengfort committed
        if (navigator.clipboard) {
Bengfort's avatar
Bengfort committed
            navigator.clipboard.writeText(target.value);
Bengfort's avatar
Bengfort committed
        } else {
Bengfort's avatar
Bengfort committed
            target.focus();
            target.setSelectionRange(0, 1000);
Bengfort's avatar
Bengfort committed
            document.execCommand('copy');
        }
    });
Bengfort's avatar
Bengfort committed

Bengfort's avatar
Bengfort committed
    $$.on(document, 'click', '[data-js="popup"]', function(event) {
Bengfort's avatar
Bengfort committed
        event.preventDefault();
        // copied from django
        var config = 'height=500,width=800,resizable=yes,scrollbars=yes';
Bengfort's avatar
Bengfort committed
        var win = window.open(this.href, null, config);
Bengfort's avatar
Bengfort committed
        win.focus();
    });
Bengfort's avatar
Bengfort committed
})();