$(function () { 'use strict'; var $modal = $('#working-plan-exceptions-modal'); var $date = $('#working-plan-exceptions-date'); var $start = $('#working-plan-exceptions-start'); var $end = $('#working-plan-exceptions-end'); var $breaks = $('#working-plan-exceptions-breaks'); var $save = $('#working-plan-exceptions-save'); var deferred = null; var enableSubmit = false; var enableCancel = false; function resetModal() { $date.val(''); $start.val(''); $end.val(''); $breaks.find('tbody').empty(); $('.working-plan-exceptions-add-break').prop('disabled', false); } function validate() { $modal.find('.is-invalid').removeClass('is-invalid'); var date = $date.datepicker('getDate'); if (!date) { $date.addClass('is-invalid'); } var start = $start.timepicker('getDate'); if (!start) { $start.addClass('is-invalid'); } var end = $end.timepicker('getDate'); if (!end) { $end.addClass('is-invalid'); } return !$modal.find('.is-invalid').length; } function onModalHidden() { resetModal(); } function getBreaks() { var breaks = []; $breaks.find('tbody tr').each(function (index, tr) { var $tr = $(tr); if ($tr.find('input:text').length) { return true; } var start = $tr.find('.working-plan-exceptions-break-start').text(); var end = $tr.find('.working-plan-exceptions-break-end').text(); breaks.push({ start: Date.parse(start).toString('HH:mm'), end: Date.parse(end).toString('HH:mm') }); }); // Sort breaks increasingly by hour within day breaks.sort(function (break1, break2) { // We can do a direct string comparison since we have time based on 24 hours clock. return (break1.start).localeCompare(break2.start); }); return breaks; } function onSaveClick() { if (!deferred) { return; } if (!validate()) { return; } var date = $date.datepicker('getDate').toString('yyyy-MM-dd'); var workingPlanException = { start: $start.datetimepicker('getDate').toString('HH:mm'), end: $end.datetimepicker('getDate').toString('HH:mm'), breaks: getBreaks() }; deferred.resolve(date, workingPlanException); $modal.modal('hide'); resetModal(); } function editableTimeCell($target) { $target.editable(function (value) { // Do not return the value because the user needs to press the "Save" button. return value; }, { event: 'edit', height: '30px', submit: $('