summaryrefslogtreecommitdiff
path: root/resources/assets/js/forms.js
blob: f158190789756b71bb96da37b5d7f119d60064e7 (plain)
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/**
 * Sets all checkboxes to the wanted state
 *
 * @param {string} id Id of the element containing all the checkboxes
 * @param {boolean} checked True if the checkboxes should be checked
 */
global.checkAll = (id, checked) => {
    $('#' + id + ' input[type="checkbox"]').each(function () {
        this.checked = checked;
    });
};

/**
 * Sets the checkboxes according to the given type
 *
 * @param {string} id The elements ID
 * @param {list} shifts_list A list of numbers
 */
global.checkOwnTypes = (id, shiftsList) => {
    $('#' + id + ' input[type="checkbox"]').each(function () {
        this.checked = $.inArray(parseInt(this.value), shiftsList) != -1;
    });
};

/**
 * @param {moment} date
 */
global.formatDay = (date) => {
    return date.format('YYYY-MM-DD');
};

/**
 * @param {moment} date
 */
global.formatTime = (date) => {
    return date.format('HH:mm');
};

/**
 * @param {moment} from
 * @param {moment} to
 */
global.setInput = (from, to) => {
    var fromDay = $('#start_day'), fromTime = $('#start_time'), toDay = $('#end_day'), toTime = $('#end_time');

    fromDay.val(formatDay(from));
    fromTime.val(formatTime(from));

    toDay.val(formatDay(to));
    toTime.val(formatTime(to));
};

global.setDay = (days) => {
    days = days || 0;

    var from = moment();
    from.hours(0).minutes(0).seconds(0);

    from.add(days, 'd');

    var to = from.clone();
    to.hours(23).minutes(59);

    setInput(from, to);
};

global.setHours = (hours) => {
    hours = hours || 1;

    var from = moment();
    var to = from.clone();

    to.add(hours, 'h');
    if (to < from) {
        setInput(to, from);
        return;
    }

    setInput(from, to);
};

$(function () {
    /**
     * Disable every submit button after clicking (to prevent double-clicking)
     */
    $('form').submit(function (ev) {
        $('input[type="submit"]').prop('readonly', true).addClass('disabled');
        return true;
    });

    $('.dropdown-menu').css('max-height', function () {
        return ($(window).height() - 50) + 'px';
    }).css('overflow-y', 'scroll');
});

/*
 * Add a datepicker to all date input fields.
 */
$(function () {
    $('.input-group.date').each(function () {
        var elem = $(this);
        var opts = {
            minDate: '',
            maxDate: '',
            locale: 'en',
            format: 'YYYY-MM-DD',
            widgetPositioning: {horizontal: 'auto', vertical: 'bottom'}
        };
        $.extend(opts, elem.data());
        if (opts.minDate.length === 0) {
            delete opts.minDate;
        }
        if (opts.maxDate.length === 0) {
            delete opts.maxDate;
        }
        elem.children('input').attr('type', 'text');
        elem.children().on('click', function (ev) {
            ev.stopImmediatePropagation();
            if (elem.data('DateTimePicker') === undefined) {
                elem.datetimepicker(opts);
                elem.data('DateTimePicker').show();
            } else {
                elem.data('DateTimePicker').toggle();
            }
        });
    });
});