bootstrap3-datetimepicker-rails 4.17.37 → 4.17.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/bootstrap3-datetimepicker-rails/version.rb +1 -1
- data/vendor/assets/javascripts/bootstrap-datetimepicker.js +169 -98
- data/vendor/assets/javascripts/bootstrap-datetimepicker.min.js +208 -3
- data/vendor/assets/stylesheets/bootstrap-datetimepicker.css +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: b7bd5974363567b84a46199fd24ccb886d938929
         | 
| 4 | 
            +
              data.tar.gz: 82c7245312d23e70d735c3fd8f01aa02097c079e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: adf62f81a588865e15b1f4b4ea0dcd2d6b9e993c5d8b1e382f909e13605955dd3bd38bd8c86666d2a993816dc47d3e8c9d5a490f0d1a5f327ad23ff1821b257c
         | 
| 7 | 
            +
              data.tar.gz: 09a95690b5e3144fd94749503c8eae402707a10a45a33700510a08c56d8da51c95fe48677c01eaa6a2e357164f9701795ed6561f3b014907fc801374a0f7bc84
         | 
    
        data/README.md
    CHANGED
    
    | @@ -14,7 +14,7 @@ actively maintained and works with [Bootstrap3](http://getbootstrap.com). | |
| 14 14 | 
             
            Add these lines to your application's Gemfile:
         | 
| 15 15 | 
             
            ```ruby
         | 
| 16 16 | 
             
            gem 'momentjs-rails', '>= 2.9.0'
         | 
| 17 | 
            -
            gem 'bootstrap3-datetimepicker-rails', '~> 4.17. | 
| 17 | 
            +
            gem 'bootstrap3-datetimepicker-rails', '~> 4.17.42'
         | 
| 18 18 | 
             
            ```
         | 
| 19 19 |  | 
| 20 20 | 
             
            And then execute:
         | 
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            /*! version : 4.17. | 
| 1 | 
            +
            /*! version : 4.17.42
         | 
| 2 2 | 
             
             =========================================================
         | 
| 3 3 | 
             
             bootstrap-datetimejs
         | 
| 4 4 | 
             
             https://github.com/Eonasdan/bootstrap-datetimepicker
         | 
| @@ -39,7 +39,7 @@ | |
| 39 39 | 
             
                    // AMD is used - Register as an anonymous module.
         | 
| 40 40 | 
             
                    define(['jquery', 'moment'], factory);
         | 
| 41 41 | 
             
                } else if (typeof exports === 'object') {
         | 
| 42 | 
            -
                    factory(require('jquery'), require('moment'));
         | 
| 42 | 
            +
                    module.exports = factory(require('jquery'), require('moment'));
         | 
| 43 43 | 
             
                } else {
         | 
| 44 44 | 
             
                    // Neither AMD nor CommonJS used. Use global variables.
         | 
| 45 45 | 
             
                    if (typeof jQuery === 'undefined') {
         | 
| @@ -132,40 +132,30 @@ | |
| 132 132 | 
             
                         * Private functions
         | 
| 133 133 | 
             
                         *
         | 
| 134 134 | 
             
                         ********************************************************************************/
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                        hasTimeZone = function () {
         | 
| 137 | 
            +
                            return moment.tz !== undefined && options.timeZone !== undefined && options.timeZone !== null && options.timeZone !== '';
         | 
| 138 | 
            +
                        },
         | 
| 139 | 
            +
             | 
| 135 140 | 
             
                        getMoment = function (d) {
         | 
| 136 | 
            -
                            var  | 
| 137 | 
            -
                                returnMoment,
         | 
| 138 | 
            -
                                currentZoneOffset,
         | 
| 139 | 
            -
                                incomingZoneOffset,
         | 
| 140 | 
            -
                                timeZoneIndicator,
         | 
| 141 | 
            -
                                dateWithTimeZoneInfo;
         | 
| 141 | 
            +
                            var returnMoment;
         | 
| 142 142 |  | 
| 143 | 
            -
                            if (moment.tz !== undefined && options.timeZone !== undefined && options.timeZone !== null && options.timeZone !== '') {
         | 
| 144 | 
            -
                                tzEnabled = true;
         | 
| 145 | 
            -
                            }
         | 
| 146 143 | 
             
                            if (d === undefined || d === null) {
         | 
| 147 | 
            -
                                 | 
| 148 | 
            -
             | 
| 149 | 
            -
                                 | 
| 150 | 
            -
             | 
| 151 | 
            -
                                }
         | 
| 144 | 
            +
                                returnMoment = moment(); //TODO should this use format? and locale?
         | 
| 145 | 
            +
                            } else if (hasTimeZone()) { // There is a string to parse and a default time zone
         | 
| 146 | 
            +
                                // parse with the tz function which takes a default time zone if it is not in the format string
         | 
| 147 | 
            +
                                returnMoment = moment.tz(d, parseFormats, options.useStrict, options.timeZone);
         | 
| 152 148 | 
             
                            } else {
         | 
| 153 | 
            -
                                 | 
| 154 | 
            -
                                    currentZoneOffset = moment().tz(options.timeZone).utcOffset();
         | 
| 155 | 
            -
                                    incomingZoneOffset = moment(d, parseFormats, options.useStrict).utcOffset();
         | 
| 156 | 
            -
                                    if (incomingZoneOffset !== currentZoneOffset) {
         | 
| 157 | 
            -
                                        timeZoneIndicator = moment().tz(options.timeZone).format('Z');
         | 
| 158 | 
            -
                                        dateWithTimeZoneInfo = moment(d, parseFormats, options.useStrict).format('YYYY-MM-DD[T]HH:mm:ss') + timeZoneIndicator;
         | 
| 159 | 
            -
                                        returnMoment = moment(dateWithTimeZoneInfo, parseFormats, options.useStrict).tz(options.timeZone);
         | 
| 160 | 
            -
                                    } else {
         | 
| 161 | 
            -
                                        returnMoment = moment(d, parseFormats, options.useStrict).tz(options.timeZone);
         | 
| 162 | 
            -
                                    }
         | 
| 163 | 
            -
                                } else {
         | 
| 164 | 
            -
                                    returnMoment = moment(d, parseFormats, options.useStrict);
         | 
| 165 | 
            -
                                }
         | 
| 149 | 
            +
                                returnMoment = moment(d, parseFormats, options.useStrict);
         | 
| 166 150 | 
             
                            }
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                            if (hasTimeZone()) {
         | 
| 153 | 
            +
                                returnMoment.tz(options.timeZone);
         | 
| 154 | 
            +
                            }
         | 
| 155 | 
            +
             | 
| 167 156 | 
             
                            return returnMoment;
         | 
| 168 157 | 
             
                        },
         | 
| 158 | 
            +
             | 
| 169 159 | 
             
                        isEnabled = function (granularity) {
         | 
| 170 160 | 
             
                            if (typeof granularity !== 'string' || granularity.length > 1) {
         | 
| 171 161 | 
             
                                throw new TypeError('isEnabled expects a single character string parameter');
         | 
| @@ -188,6 +178,7 @@ | |
| 188 178 | 
             
                                    return false;
         | 
| 189 179 | 
             
                            }
         | 
| 190 180 | 
             
                        },
         | 
| 181 | 
            +
             | 
| 191 182 | 
             
                        hasTime = function () {
         | 
| 192 183 | 
             
                            return (isEnabled('h') || isEnabled('m') || isEnabled('s'));
         | 
| 193 184 | 
             
                        },
         | 
| @@ -243,13 +234,11 @@ | |
| 243 234 |  | 
| 244 235 | 
             
                            if (isEnabled('h')) {
         | 
| 245 236 | 
             
                                topRow.append($('<td>')
         | 
| 246 | 
            -
                                    .append($('<a>').attr({href: '#', tabindex: '-1', 'title': options.tooltips.incrementHour}).addClass('btn').attr('data-action', 'incrementHours')
         | 
| 247 | 
            -
                                        .append($('<span>').addClass(options.icons.up))));
         | 
| 237 | 
            +
                                    .append($('<a>').attr({ href: '#', tabindex: '-1', 'title': options.tooltips.incrementHour }).addClass('btn').attr('data-action', 'incrementHours').append($('<span>').addClass(options.icons.up))));
         | 
| 248 238 | 
             
                                middleRow.append($('<td>')
         | 
| 249 | 
            -
                                    .append($('<span>').addClass('timepicker-hour').attr({'data-time-component':'hours', 'title': options.tooltips.pickHour}).attr('data-action', 'showHours')));
         | 
| 239 | 
            +
                                    .append($('<span>').addClass('timepicker-hour').attr({ 'data-time-component': 'hours', 'title': options.tooltips.pickHour }).attr('data-action', 'showHours')));
         | 
| 250 240 | 
             
                                bottomRow.append($('<td>')
         | 
| 251 | 
            -
                                    .append($('<a>').attr({href: '#', tabindex: '-1', 'title': options.tooltips.decrementHour}).addClass('btn').attr('data-action', 'decrementHours')
         | 
| 252 | 
            -
                                        .append($('<span>').addClass(options.icons.down))));
         | 
| 241 | 
            +
                                    .append($('<a>').attr({ href: '#', tabindex: '-1', 'title': options.tooltips.decrementHour }).addClass('btn').attr('data-action', 'decrementHours').append($('<span>').addClass(options.icons.down))));
         | 
| 253 242 | 
             
                            }
         | 
| 254 243 | 
             
                            if (isEnabled('m')) {
         | 
| 255 244 | 
             
                                if (isEnabled('h')) {
         | 
| @@ -258,12 +247,12 @@ | |
| 258 247 | 
             
                                    bottomRow.append($('<td>').addClass('separator'));
         | 
| 259 248 | 
             
                                }
         | 
| 260 249 | 
             
                                topRow.append($('<td>')
         | 
| 261 | 
            -
                                    .append($('<a>').attr({href: '#', tabindex: '-1', 'title': options.tooltips.incrementMinute}).addClass('btn').attr('data-action', 'incrementMinutes')
         | 
| 250 | 
            +
                                    .append($('<a>').attr({ href: '#', tabindex: '-1', 'title': options.tooltips.incrementMinute }).addClass('btn').attr('data-action', 'incrementMinutes')
         | 
| 262 251 | 
             
                                        .append($('<span>').addClass(options.icons.up))));
         | 
| 263 252 | 
             
                                middleRow.append($('<td>')
         | 
| 264 | 
            -
                                    .append($('<span>').addClass('timepicker-minute').attr({'data-time-component': 'minutes', 'title': options.tooltips.pickMinute}).attr('data-action', 'showMinutes')));
         | 
| 253 | 
            +
                                    .append($('<span>').addClass('timepicker-minute').attr({ 'data-time-component': 'minutes', 'title': options.tooltips.pickMinute }).attr('data-action', 'showMinutes')));
         | 
| 265 254 | 
             
                                bottomRow.append($('<td>')
         | 
| 266 | 
            -
                                    .append($('<a>').attr({href: '#', tabindex: '-1', 'title': options.tooltips.decrementMinute}).addClass('btn').attr('data-action', 'decrementMinutes')
         | 
| 255 | 
            +
                                    .append($('<a>').attr({ href: '#', tabindex: '-1', 'title': options.tooltips.decrementMinute }).addClass('btn').attr('data-action', 'decrementMinutes')
         | 
| 267 256 | 
             
                                        .append($('<span>').addClass(options.icons.down))));
         | 
| 268 257 | 
             
                            }
         | 
| 269 258 | 
             
                            if (isEnabled('s')) {
         | 
| @@ -273,19 +262,19 @@ | |
| 273 262 | 
             
                                    bottomRow.append($('<td>').addClass('separator'));
         | 
| 274 263 | 
             
                                }
         | 
| 275 264 | 
             
                                topRow.append($('<td>')
         | 
| 276 | 
            -
                                    .append($('<a>').attr({href: '#', tabindex: '-1', 'title': options.tooltips.incrementSecond}).addClass('btn').attr('data-action', 'incrementSeconds')
         | 
| 265 | 
            +
                                    .append($('<a>').attr({ href: '#', tabindex: '-1', 'title': options.tooltips.incrementSecond }).addClass('btn').attr('data-action', 'incrementSeconds')
         | 
| 277 266 | 
             
                                        .append($('<span>').addClass(options.icons.up))));
         | 
| 278 267 | 
             
                                middleRow.append($('<td>')
         | 
| 279 | 
            -
                                    .append($('<span>').addClass('timepicker-second').attr({'data-time-component': 'seconds', 'title': options.tooltips.pickSecond}).attr('data-action', 'showSeconds')));
         | 
| 268 | 
            +
                                    .append($('<span>').addClass('timepicker-second').attr({ 'data-time-component': 'seconds', 'title': options.tooltips.pickSecond }).attr('data-action', 'showSeconds')));
         | 
| 280 269 | 
             
                                bottomRow.append($('<td>')
         | 
| 281 | 
            -
                                    .append($('<a>').attr({href: '#', tabindex: '-1', 'title': options.tooltips.decrementSecond}).addClass('btn').attr('data-action', 'decrementSeconds')
         | 
| 270 | 
            +
                                    .append($('<a>').attr({ href: '#', tabindex: '-1', 'title': options.tooltips.decrementSecond }).addClass('btn').attr('data-action', 'decrementSeconds')
         | 
| 282 271 | 
             
                                        .append($('<span>').addClass(options.icons.down))));
         | 
| 283 272 | 
             
                            }
         | 
| 284 273 |  | 
| 285 274 | 
             
                            if (!use24Hours) {
         | 
| 286 275 | 
             
                                topRow.append($('<td>').addClass('separator'));
         | 
| 287 276 | 
             
                                middleRow.append($('<td>')
         | 
| 288 | 
            -
                                    .append($('<button>').addClass('btn btn-primary').attr({'data-action': 'togglePeriod', tabindex: '-1', 'title': options.tooltips.togglePeriod})));
         | 
| 277 | 
            +
                                    .append($('<button>').addClass('btn btn-primary').attr({ 'data-action': 'togglePeriod', tabindex: '-1', 'title': options.tooltips.togglePeriod })));
         | 
| 289 278 | 
             
                                bottomRow.append($('<td>').addClass('separator'));
         | 
| 290 279 | 
             
                            }
         | 
| 291 280 |  | 
| @@ -319,16 +308,16 @@ | |
| 319 308 | 
             
                        getToolbar = function () {
         | 
| 320 309 | 
             
                            var row = [];
         | 
| 321 310 | 
             
                            if (options.showTodayButton) {
         | 
| 322 | 
            -
                                row.push($('<td>').append($('<a>').attr({'data-action':'today', 'title': options.tooltips.today}).append($('<span>').addClass(options.icons.today))));
         | 
| 311 | 
            +
                                row.push($('<td>').append($('<a>').attr({ 'data-action': 'today', 'title': options.tooltips.today }).append($('<span>').addClass(options.icons.today))));
         | 
| 323 312 | 
             
                            }
         | 
| 324 313 | 
             
                            if (!options.sideBySide && hasDate() && hasTime()) {
         | 
| 325 | 
            -
                                row.push($('<td>').append($('<a>').attr({'data-action':'togglePicker', 'title': options.tooltips.selectTime}).append($('<span>').addClass(options.icons.time))));
         | 
| 314 | 
            +
                                row.push($('<td>').append($('<a>').attr({ 'data-action': 'togglePicker', 'title': options.tooltips.selectTime }).append($('<span>').addClass(options.icons.time))));
         | 
| 326 315 | 
             
                            }
         | 
| 327 316 | 
             
                            if (options.showClear) {
         | 
| 328 | 
            -
                                row.push($('<td>').append($('<a>').attr({'data-action':'clear', 'title': options.tooltips.clear}).append($('<span>').addClass(options.icons.clear))));
         | 
| 317 | 
            +
                                row.push($('<td>').append($('<a>').attr({ 'data-action': 'clear', 'title': options.tooltips.clear }).append($('<span>').addClass(options.icons.clear))));
         | 
| 329 318 | 
             
                            }
         | 
| 330 319 | 
             
                            if (options.showClose) {
         | 
| 331 | 
            -
                                row.push($('<td>').append($('<a>').attr({'data-action':'close', 'title': options.tooltips.close}).append($('<span>').addClass(options.icons.close))));
         | 
| 320 | 
            +
                                row.push($('<td>').append($('<a>').attr({ 'data-action': 'close', 'title': options.tooltips.close }).append($('<span>').addClass(options.icons.close))));
         | 
| 332 321 | 
             
                            }
         | 
| 333 322 | 
             
                            return $('<table>').addClass('table-condensed').append($('<tbody>').append($('<tr>').append(row)));
         | 
| 334 323 | 
             
                        },
         | 
| @@ -472,7 +461,7 @@ | |
| 472 461 |  | 
| 473 462 | 
             
                            widget.css({
         | 
| 474 463 | 
             
                                top: vertical === 'top' ? 'auto' : position.top + element.outerHeight(),
         | 
| 475 | 
            -
                                bottom: vertical === 'top' ?  | 
| 464 | 
            +
                                bottom: vertical === 'top' ? parent.outerHeight() - (parent === element ? 0 : position.top) : 'auto',
         | 
| 476 465 | 
             
                                left: horizontal === 'left' ? (parent === element ? 0 : position.left) : 'auto',
         | 
| 477 466 | 
             
                                right: horizontal === 'left' ? 'auto' : parent.outerWidth() - element.outerWidth() - (parent === element ? 0 : position.left)
         | 
| 478 467 | 
             
                            });
         | 
| @@ -654,9 +643,12 @@ | |
| 654 643 | 
             
                        updateDecades = function () {
         | 
| 655 644 | 
             
                            var decadesView = widget.find('.datepicker-decades'),
         | 
| 656 645 | 
             
                                decadesViewHeader = decadesView.find('th'),
         | 
| 657 | 
            -
                                startDecade = moment({y: viewDate.year() - (viewDate.year() % 100) - 1}),
         | 
| 646 | 
            +
                                startDecade = moment({ y: viewDate.year() - (viewDate.year() % 100) - 1 }),
         | 
| 658 647 | 
             
                                endDecade = startDecade.clone().add(100, 'y'),
         | 
| 659 648 | 
             
                                startedAt = startDecade.clone(),
         | 
| 649 | 
            +
                                minDateDecade = false,
         | 
| 650 | 
            +
                                maxDateDecade = false,
         | 
| 651 | 
            +
                                endDecadeYear,
         | 
| 660 652 | 
             
                                html = '';
         | 
| 661 653 |  | 
| 662 654 | 
             
                            decadesViewHeader.eq(0).find('span').attr('title', options.tooltips.prevCentury);
         | 
| @@ -664,19 +656,22 @@ | |
| 664 656 |  | 
| 665 657 | 
             
                            decadesView.find('.disabled').removeClass('disabled');
         | 
| 666 658 |  | 
| 667 | 
            -
                            if (startDecade.isSame(moment({y: 1900})) || (options.minDate && options.minDate.isAfter(startDecade, 'y'))) {
         | 
| 659 | 
            +
                            if (startDecade.isSame(moment({ y: 1900 })) || (options.minDate && options.minDate.isAfter(startDecade, 'y'))) {
         | 
| 668 660 | 
             
                                decadesViewHeader.eq(0).addClass('disabled');
         | 
| 669 661 | 
             
                            }
         | 
| 670 662 |  | 
| 671 663 | 
             
                            decadesViewHeader.eq(1).text(startDecade.year() + '-' + endDecade.year());
         | 
| 672 664 |  | 
| 673 | 
            -
                            if (startDecade.isSame(moment({y: 2000})) || (options.maxDate && options.maxDate.isBefore(endDecade, 'y'))) {
         | 
| 665 | 
            +
                            if (startDecade.isSame(moment({ y: 2000 })) || (options.maxDate && options.maxDate.isBefore(endDecade, 'y'))) {
         | 
| 674 666 | 
             
                                decadesViewHeader.eq(2).addClass('disabled');
         | 
| 675 667 | 
             
                            }
         | 
| 676 668 |  | 
| 677 669 | 
             
                            while (!startDecade.isAfter(endDecade, 'y')) {
         | 
| 678 | 
            -
                                 | 
| 679 | 
            -
             | 
| 670 | 
            +
                                endDecadeYear = startDecade.year() + 12;
         | 
| 671 | 
            +
                                minDateDecade = options.minDate && options.minDate.isAfter(startDecade, 'y') && options.minDate.year() <= endDecadeYear;
         | 
| 672 | 
            +
                                maxDateDecade = options.maxDate && options.maxDate.isAfter(startDecade, 'y') && options.maxDate.year() <= endDecadeYear;
         | 
| 673 | 
            +
                                html += '<span data-action="selectDecade" class="decade' + (date.isAfter(startDecade) && date.year() <= endDecadeYear ? ' active' : '') +
         | 
| 674 | 
            +
                                    (!isValid(startDecade, 'y') && !minDateDecade && !maxDateDecade ? ' disabled' : '') + '" data-selection="' + (startDecade.year() + 6) + '">' + (startDecade.year() + 1) + ' - ' + (startDecade.year() + 12) + '</span>';
         | 
| 680 675 | 
             
                                startDecade.add(12, 'y');
         | 
| 681 676 | 
             
                            }
         | 
| 682 677 | 
             
                            html += '<span></span><span></span><span></span>'; //push the dangling block over, at least this way it's even
         | 
| @@ -861,13 +856,17 @@ | |
| 861 856 |  | 
| 862 857 | 
             
                            targetMoment = targetMoment.clone().locale(options.locale);
         | 
| 863 858 |  | 
| 859 | 
            +
                            if (hasTimeZone()) {
         | 
| 860 | 
            +
                                targetMoment.tz(options.timeZone);
         | 
| 861 | 
            +
                            }
         | 
| 862 | 
            +
             | 
| 864 863 | 
             
                            if (options.stepping !== 1) {
         | 
| 865 | 
            -
                                targetMoment.minutes((Math.round(targetMoment.minutes() / options.stepping) * options.stepping) | 
| 864 | 
            +
                                targetMoment.minutes((Math.round(targetMoment.minutes() / options.stepping) * options.stepping)).seconds(0);
         | 
| 866 865 | 
             
                            }
         | 
| 867 866 |  | 
| 868 867 | 
             
                            if (isValid(targetMoment)) {
         | 
| 869 868 | 
             
                                date = targetMoment;
         | 
| 870 | 
            -
                                viewDate = date.clone();
         | 
| 869 | 
            +
                                //viewDate = date.clone(); // TODO this doesn't work right on first use
         | 
| 871 870 | 
             
                                input.val(date.format(actualFormat));
         | 
| 872 871 | 
             
                                element.data('date', date.format(actualFormat));
         | 
| 873 872 | 
             
                                unset = false;
         | 
| @@ -880,16 +879,25 @@ | |
| 880 879 | 
             
                            } else {
         | 
| 881 880 | 
             
                                if (!options.keepInvalid) {
         | 
| 882 881 | 
             
                                    input.val(unset ? '' : date.format(actualFormat));
         | 
| 882 | 
            +
                                } else {
         | 
| 883 | 
            +
                                    notifyEvent({
         | 
| 884 | 
            +
                                        type: 'dp.change',
         | 
| 885 | 
            +
                                        date: targetMoment,
         | 
| 886 | 
            +
                                        oldDate: oldDate
         | 
| 887 | 
            +
                                    });
         | 
| 883 888 | 
             
                                }
         | 
| 884 889 | 
             
                                notifyEvent({
         | 
| 885 890 | 
             
                                    type: 'dp.error',
         | 
| 886 | 
            -
                                    date: targetMoment
         | 
| 891 | 
            +
                                    date: targetMoment,
         | 
| 892 | 
            +
                                    oldDate: oldDate
         | 
| 887 893 | 
             
                                });
         | 
| 888 894 | 
             
                            }
         | 
| 889 895 | 
             
                        },
         | 
| 890 896 |  | 
| 897 | 
            +
                        /**
         | 
| 898 | 
            +
                         * Hides the widget. Possibly will emit dp.hide
         | 
| 899 | 
            +
                         */
         | 
| 891 900 | 
             
                        hide = function () {
         | 
| 892 | 
            -
                            ///<summary>Hides the widget. Possibly will emit dp.hide</summary>
         | 
| 893 901 | 
             
                            var transitioning = false;
         | 
| 894 902 | 
             
                            if (!widget) {
         | 
| 895 903 | 
             
                                return picker;
         | 
| @@ -925,6 +933,9 @@ | |
| 925 933 |  | 
| 926 934 | 
             
                            input.blur();
         | 
| 927 935 |  | 
| 936 | 
            +
                            currentViewMode = 0;
         | 
| 937 | 
            +
                            viewDate = date.clone();
         | 
| 938 | 
            +
             | 
| 928 939 | 
             
                            return picker;
         | 
| 929 940 | 
             
                        },
         | 
| 930 941 |  | 
| @@ -932,6 +943,18 @@ | |
| 932 943 | 
             
                            setValue(null);
         | 
| 933 944 | 
             
                        },
         | 
| 934 945 |  | 
| 946 | 
            +
                        parseInputDate = function (inputDate) {
         | 
| 947 | 
            +
                            if (options.parseInputDate === undefined) {
         | 
| 948 | 
            +
                                if (!moment.isMoment(inputDate)) {
         | 
| 949 | 
            +
                                    inputDate = getMoment(inputDate);
         | 
| 950 | 
            +
                                }
         | 
| 951 | 
            +
                            } else {
         | 
| 952 | 
            +
                                inputDate = options.parseInputDate(inputDate);
         | 
| 953 | 
            +
                            }
         | 
| 954 | 
            +
                            //inputDate.locale(options.locale);
         | 
| 955 | 
            +
                            return inputDate;
         | 
| 956 | 
            +
                        },
         | 
| 957 | 
            +
             | 
| 935 958 | 
             
                        /********************************************************************************
         | 
| 936 959 | 
             
                         *
         | 
| 937 960 | 
             
                         * Widget UI interaction functions
         | 
| @@ -1161,8 +1184,10 @@ | |
| 1161 1184 | 
             
                            return false;
         | 
| 1162 1185 | 
             
                        },
         | 
| 1163 1186 |  | 
| 1187 | 
            +
                        /**
         | 
| 1188 | 
            +
                         * Shows the widget. Possibly will emit dp.show and dp.change
         | 
| 1189 | 
            +
                         */
         | 
| 1164 1190 | 
             
                        show = function () {
         | 
| 1165 | 
            -
                            ///<summary>Shows the widget. Possibly will emit dp.show and dp.change</summary>
         | 
| 1166 1191 | 
             
                            var currentMoment,
         | 
| 1167 1192 | 
             
                                useCurrentGranularity = {
         | 
| 1168 1193 | 
             
                                    'year': function (m) {
         | 
| @@ -1187,14 +1212,13 @@ | |
| 1187 1212 | 
             
                            }
         | 
| 1188 1213 | 
             
                            if (input.val() !== undefined && input.val().trim().length !== 0) {
         | 
| 1189 1214 | 
             
                                setValue(parseInputDate(input.val().trim()));
         | 
| 1190 | 
            -
                            } else if (options.useCurrent &&  | 
| 1215 | 
            +
                            } else if (unset && options.useCurrent && (options.inline || (input.is('input') && input.val().trim().length === 0))) {
         | 
| 1191 1216 | 
             
                                currentMoment = getMoment();
         | 
| 1192 1217 | 
             
                                if (typeof options.useCurrent === 'string') {
         | 
| 1193 1218 | 
             
                                    currentMoment = useCurrentGranularity[options.useCurrent](currentMoment);
         | 
| 1194 1219 | 
             
                                }
         | 
| 1195 1220 | 
             
                                setValue(currentMoment);
         | 
| 1196 1221 | 
             
                            }
         | 
| 1197 | 
            -
             | 
| 1198 1222 | 
             
                            widget = getTemplate();
         | 
| 1199 1223 |  | 
| 1200 1224 | 
             
                            fillDow();
         | 
| @@ -1214,9 +1238,8 @@ | |
| 1214 1238 | 
             
                            if (component && component.hasClass('btn')) {
         | 
| 1215 1239 | 
             
                                component.toggleClass('active');
         | 
| 1216 1240 | 
             
                            }
         | 
| 1217 | 
            -
                            widget.show();
         | 
| 1218 1241 | 
             
                            place();
         | 
| 1219 | 
            -
             | 
| 1242 | 
            +
                            widget.show();
         | 
| 1220 1243 | 
             
                            if (options.focusOnShow && !input.is(':focus')) {
         | 
| 1221 1244 | 
             
                                input.focus();
         | 
| 1222 1245 | 
             
                            }
         | 
| @@ -1227,25 +1250,13 @@ | |
| 1227 1250 | 
             
                            return picker;
         | 
| 1228 1251 | 
             
                        },
         | 
| 1229 1252 |  | 
| 1253 | 
            +
                        /**
         | 
| 1254 | 
            +
                         * Shows or hides the widget
         | 
| 1255 | 
            +
                         */
         | 
| 1230 1256 | 
             
                        toggle = function () {
         | 
| 1231 | 
            -
                            /// <summary>Shows or hides the widget</summary>
         | 
| 1232 1257 | 
             
                            return (widget ? hide() : show());
         | 
| 1233 1258 | 
             
                        },
         | 
| 1234 1259 |  | 
| 1235 | 
            -
                        parseInputDate = function (inputDate) {
         | 
| 1236 | 
            -
                            if (options.parseInputDate === undefined) {
         | 
| 1237 | 
            -
                                if (moment.isMoment(inputDate) || inputDate instanceof Date) {
         | 
| 1238 | 
            -
                                    inputDate = moment(inputDate);
         | 
| 1239 | 
            -
                                } else {
         | 
| 1240 | 
            -
                                    inputDate = getMoment(inputDate);
         | 
| 1241 | 
            -
                                }
         | 
| 1242 | 
            -
                            } else {
         | 
| 1243 | 
            -
                                inputDate = options.parseInputDate(inputDate);
         | 
| 1244 | 
            -
                            }
         | 
| 1245 | 
            -
                            inputDate.locale(options.locale);
         | 
| 1246 | 
            -
                            return inputDate;
         | 
| 1247 | 
            -
                        },
         | 
| 1248 | 
            -
             | 
| 1249 1260 | 
             
                        keydown = function (e) {
         | 
| 1250 1261 | 
             
                            var handler = null,
         | 
| 1251 1262 | 
             
                                index,
         | 
| @@ -1513,7 +1524,7 @@ | |
| 1513 1524 | 
             
                        }
         | 
| 1514 1525 |  | 
| 1515 1526 | 
             
                        if ((typeof newFormat !== 'string') && ((typeof newFormat !== 'boolean') || (newFormat !== false))) {
         | 
| 1516 | 
            -
                            throw new TypeError('format() expects a  | 
| 1527 | 
            +
                            throw new TypeError('format() expects a string or boolean:false parameter ' + newFormat);
         | 
| 1517 1528 | 
             
                        }
         | 
| 1518 1529 |  | 
| 1519 1530 | 
             
                        options.format = newFormat;
         | 
| @@ -1528,6 +1539,10 @@ | |
| 1528 1539 | 
             
                            return options.timeZone;
         | 
| 1529 1540 | 
             
                        }
         | 
| 1530 1541 |  | 
| 1542 | 
            +
                        if (typeof newZone !== 'string') {
         | 
| 1543 | 
            +
                            throw new TypeError('newZone() expects a string parameter');
         | 
| 1544 | 
            +
                        }
         | 
| 1545 | 
            +
             | 
| 1531 1546 | 
             
                        options.timeZone = newZone;
         | 
| 1532 1547 |  | 
| 1533 1548 | 
             
                        return picker;
         | 
| @@ -1645,8 +1660,8 @@ | |
| 1645 1660 | 
             
                            var tries = 0;
         | 
| 1646 1661 | 
             
                            while (!isValid(date, 'd')) {
         | 
| 1647 1662 | 
             
                                date.add(1, 'd');
         | 
| 1648 | 
            -
                                if (tries ===  | 
| 1649 | 
            -
                                    throw 'Tried  | 
| 1663 | 
            +
                                if (tries === 31) {
         | 
| 1664 | 
            +
                                    throw 'Tried 31 times to find a valid date';
         | 
| 1650 1665 | 
             
                                }
         | 
| 1651 1666 | 
             
                                tries++;
         | 
| 1652 1667 | 
             
                            }
         | 
| @@ -1748,6 +1763,8 @@ | |
| 1748 1763 | 
             
                        if (typeof defaultDate === 'string') {
         | 
| 1749 1764 | 
             
                            if (defaultDate === 'now' || defaultDate === 'moment') {
         | 
| 1750 1765 | 
             
                                defaultDate = getMoment();
         | 
| 1766 | 
            +
                            } else {
         | 
| 1767 | 
            +
                                defaultDate = getMoment(defaultDate);
         | 
| 1751 1768 | 
             
                            }
         | 
| 1752 1769 | 
             
                        }
         | 
| 1753 1770 |  | 
| @@ -2084,6 +2101,10 @@ | |
| 2084 2101 | 
             
                    };
         | 
| 2085 2102 |  | 
| 2086 2103 | 
             
                    picker.keyBinds = function (keyBinds) {
         | 
| 2104 | 
            +
                        if (arguments.length === 0) {
         | 
| 2105 | 
            +
                            return options.keyBinds;
         | 
| 2106 | 
            +
                        }
         | 
| 2107 | 
            +
             | 
| 2087 2108 | 
             
                        options.keyBinds = keyBinds;
         | 
| 2088 2109 | 
             
                        return picker;
         | 
| 2089 2110 | 
             
                    };
         | 
| @@ -2269,16 +2290,12 @@ | |
| 2269 2290 | 
             
                        update();
         | 
| 2270 2291 | 
             
                        return picker;
         | 
| 2271 2292 | 
             
                    };
         | 
| 2272 | 
            -
             | 
| 2293 | 
            +
                    /**
         | 
| 2294 | 
            +
                     * Returns the component's model current viewDate, a moment object or null if not set. Passing a null value unsets the components model current moment. Parsing of the newDate parameter is made using moment library with the options.format and options.useStrict components configuration.
         | 
| 2295 | 
            +
                     * @param {Takes string, viewDate, moment, null parameter.} newDate
         | 
| 2296 | 
            +
                     * @returns {viewDate.clone()}
         | 
| 2297 | 
            +
                     */
         | 
| 2273 2298 | 
             
                    picker.viewDate = function (newDate) {
         | 
| 2274 | 
            -
                        ///<signature helpKeyword="$.fn.datetimepicker.viewDate">
         | 
| 2275 | 
            -
                        ///<summary>Returns the component's model current viewDate, a moment object or null if not set.</summary>
         | 
| 2276 | 
            -
                        ///<returns type="Moment">viewDate.clone()</returns>
         | 
| 2277 | 
            -
                        ///</signature>
         | 
| 2278 | 
            -
                        ///<signature>
         | 
| 2279 | 
            -
                        ///<summary>Sets the components model current moment to it. Passing a null value unsets the components model current moment. Parsing of the newDate parameter is made using moment library with the options.format and options.useStrict components configuration.</summary>
         | 
| 2280 | 
            -
                        ///<param name="newDate" locid="$.fn.datetimepicker.date_p:newDate">Takes string, viewDate, moment, null parameter.</param>
         | 
| 2281 | 
            -
                        ///</signature>
         | 
| 2282 2299 | 
             
                        if (arguments.length === 0) {
         | 
| 2283 2300 | 
             
                            return viewDate.clone();
         | 
| 2284 2301 | 
             
                        }
         | 
| @@ -2302,7 +2319,7 @@ | |
| 2302 2319 | 
             
                        input = element;
         | 
| 2303 2320 | 
             
                    } else {
         | 
| 2304 2321 | 
             
                        input = element.find(options.datepickerInput);
         | 
| 2305 | 
            -
                        if (input. | 
| 2322 | 
            +
                        if (input.length === 0) {
         | 
| 2306 2323 | 
             
                            input = element.find('input');
         | 
| 2307 2324 | 
             
                        } else if (!input.is('input')) {
         | 
| 2308 2325 | 
             
                            throw new Error('CSS class "' + options.datepickerInput + '" cannot be applied to non input element');
         | 
| @@ -2311,7 +2328,7 @@ | |
| 2311 2328 |  | 
| 2312 2329 | 
             
                    if (element.hasClass('input-group')) {
         | 
| 2313 2330 | 
             
                        // in case there is more then one 'input-group-addon' Issue #48
         | 
| 2314 | 
            -
                        if (element.find('.datepickerbutton'). | 
| 2331 | 
            +
                        if (element.find('.datepickerbutton').length === 0) {
         | 
| 2315 2332 | 
             
                            component = element.find('.input-group-addon');
         | 
| 2316 2333 | 
             
                        } else {
         | 
| 2317 2334 | 
             
                            component = element.find('.datepickerbutton');
         | 
| @@ -2355,19 +2372,67 @@ | |
| 2355 2372 | 
             
                 *
         | 
| 2356 2373 | 
             
                 ********************************************************************************/
         | 
| 2357 2374 |  | 
| 2375 | 
            +
                /**
         | 
| 2376 | 
            +
                * See (http://jquery.com/).
         | 
| 2377 | 
            +
                * @name jQuery
         | 
| 2378 | 
            +
                * @class
         | 
| 2379 | 
            +
                * See the jQuery Library  (http://jquery.com/) for full details.  This just
         | 
| 2380 | 
            +
                * documents the function and classes that are added to jQuery by this plug-in.
         | 
| 2381 | 
            +
                */
         | 
| 2382 | 
            +
                /**
         | 
| 2383 | 
            +
                 * See (http://jquery.com/)
         | 
| 2384 | 
            +
                 * @name fn
         | 
| 2385 | 
            +
                 * @class
         | 
| 2386 | 
            +
                 * See the jQuery Library  (http://jquery.com/) for full details.  This just
         | 
| 2387 | 
            +
                 * documents the function and classes that are added to jQuery by this plug-in.
         | 
| 2388 | 
            +
                 * @memberOf jQuery
         | 
| 2389 | 
            +
                 */
         | 
| 2390 | 
            +
                /**
         | 
| 2391 | 
            +
                 * Show comments
         | 
| 2392 | 
            +
                 * @class datetimepicker
         | 
| 2393 | 
            +
                 * @memberOf jQuery.fn
         | 
| 2394 | 
            +
                 */
         | 
| 2358 2395 | 
             
                $.fn.datetimepicker = function (options) {
         | 
| 2359 | 
            -
                     | 
| 2360 | 
            -
             | 
| 2361 | 
            -
             | 
| 2362 | 
            -
             | 
| 2363 | 
            -
             | 
| 2364 | 
            -
             | 
| 2365 | 
            -
             | 
| 2366 | 
            -
                     | 
| 2396 | 
            +
                    options = options || {};
         | 
| 2397 | 
            +
             | 
| 2398 | 
            +
                    var args = Array.prototype.slice.call(arguments, 1),
         | 
| 2399 | 
            +
                        isInstance = true,
         | 
| 2400 | 
            +
                        thisMethods = ['destroy', 'hide', 'show', 'toggle'],
         | 
| 2401 | 
            +
                        returnValue;
         | 
| 2402 | 
            +
             | 
| 2403 | 
            +
                    if (typeof options === 'object') {
         | 
| 2404 | 
            +
                        return this.each(function () {
         | 
| 2405 | 
            +
                            var $this = $(this);
         | 
| 2406 | 
            +
                            if (!$this.data('DateTimePicker')) {
         | 
| 2407 | 
            +
                                // create a private copy of the defaults object
         | 
| 2408 | 
            +
                                options = $.extend(true, {}, $.fn.datetimepicker.defaults, options);
         | 
| 2409 | 
            +
                                $this.data('DateTimePicker', dateTimePicker($this, options));
         | 
| 2410 | 
            +
                            }
         | 
| 2411 | 
            +
                        });
         | 
| 2412 | 
            +
                    } else if (typeof options === 'string') {
         | 
| 2413 | 
            +
                        this.each(function () {
         | 
| 2414 | 
            +
                            var $this = $(this),
         | 
| 2415 | 
            +
                                instance = $this.data('DateTimePicker');
         | 
| 2416 | 
            +
                            if (!instance) {
         | 
| 2417 | 
            +
                                throw new Error('bootstrap-datetimepicker("' + options + '") method was called on an element that is not using DateTimePicker');
         | 
| 2418 | 
            +
                            }
         | 
| 2419 | 
            +
             | 
| 2420 | 
            +
                            returnValue = instance[options].apply(instance, args);
         | 
| 2421 | 
            +
                            isInstance = returnValue === instance;
         | 
| 2422 | 
            +
                        });
         | 
| 2423 | 
            +
             | 
| 2424 | 
            +
                        if (isInstance || $.inArray(options, thisMethods) > -1) {
         | 
| 2425 | 
            +
                            return this;
         | 
| 2426 | 
            +
                        }
         | 
| 2427 | 
            +
             | 
| 2428 | 
            +
                        return returnValue;
         | 
| 2429 | 
            +
                    }
         | 
| 2430 | 
            +
             | 
| 2431 | 
            +
                    throw new TypeError('Invalid arguments for DateTimePicker: ' + options);
         | 
| 2367 2432 | 
             
                };
         | 
| 2368 2433 |  | 
| 2369 2434 | 
             
                $.fn.datetimepicker.defaults = {
         | 
| 2370 | 
            -
                    timeZone: ' | 
| 2435 | 
            +
                    timeZone: '',
         | 
| 2371 2436 | 
             
                    format: false,
         | 
| 2372 2437 | 
             
                    dayViewHeaderFormat: 'MMMM YYYY',
         | 
| 2373 2438 | 
             
                    extraFormats: false,
         | 
| @@ -2531,6 +2596,9 @@ | |
| 2531 2596 | 
             
                        //    if(toggle.length > 0) toggle.click();
         | 
| 2532 2597 | 
             
                        //},
         | 
| 2533 2598 | 
             
                        'control space': function (widget) {
         | 
| 2599 | 
            +
                            if (!widget) {
         | 
| 2600 | 
            +
                                return;
         | 
| 2601 | 
            +
                            }
         | 
| 2534 2602 | 
             
                            if (widget.find('.timepicker').is(':visible')) {
         | 
| 2535 2603 | 
             
                                widget.find('.btn[data-action="togglePeriod"]').click();
         | 
| 2536 2604 | 
             
                            }
         | 
| @@ -2549,4 +2617,7 @@ | |
| 2549 2617 | 
             
                    enabledHours: false,
         | 
| 2550 2618 | 
             
                    viewDate: false
         | 
| 2551 2619 | 
             
                };
         | 
| 2620 | 
            +
                if (typeof module !== 'undefined') {
         | 
| 2621 | 
            +
                    module.exports = $.fn.datetimepicker;
         | 
| 2622 | 
            +
                }
         | 
| 2552 2623 | 
             
            }));
         | 
| @@ -1,9 +1,214 @@ | |
| 1 | 
            -
            /*! version : 4.17. | 
| 1 | 
            +
            /*! version : 4.17.42
         | 
| 2 2 | 
             
             =========================================================
         | 
| 3 3 | 
             
             bootstrap-datetimejs
         | 
| 4 4 | 
             
             https://github.com/Eonasdan/bootstrap-datetimepicker
         | 
| 5 5 | 
             
             Copyright (c) 2015 Jonathan Peterson
         | 
| 6 6 | 
             
             =========================================================
         | 
| 7 7 | 
             
             */
         | 
| 8 | 
            -
            !function(a){"use strict";if("function"==typeof define&&define.amd)define(["jquery","moment"],a);else if("object"==typeof exports)a(require("jquery"),require("moment"));else{if("undefined"==typeof jQuery)throw"bootstrap-datetimepicker requires jQuery to be loaded first";if("undefined"==typeof moment)throw"bootstrap-datetimepicker requires Moment.js to be loaded first";a(jQuery,moment)}}(function(a,b){"use strict";if(!b)throw new Error("bootstrap-datetimepicker requires Moment.js to be loaded first");var c=function(c,d){var e,f,g,h,i,j,k,l={},m=!0,n=!1,o=!1,p=0,q=[{clsName:"days",navFnc:"M",navStep:1},{clsName:"months",navFnc:"y",navStep:1},{clsName:"years",navFnc:"y",navStep:10},{clsName:"decades",navFnc:"y",navStep:100}],r=["days","months","years","decades"],s=["top","bottom","auto"],t=["left","right","auto"],u=["default","top","bottom"],v={up:38,38:"up",down:40,40:"down",left:37,37:"left",right:39,39:"right",tab:9,9:"tab",escape:27,27:"escape",enter:13,13:"enter",pageUp:33,33:"pageUp",pageDown:34,34:"pageDown",shift:16,16:"shift",control:17,17:"control",space:32,32:"space",t:84,84:"t","delete":46,46:"delete"},w={},x=function(a){var c,e,f,g,h,i=!1;return void 0!==b.tz&&void 0!==d.timeZone&&null!==d.timeZone&&""!==d.timeZone&&(i=!0),void 0===a||null===a?c=i?b().tz(d.timeZone).startOf("d"):b().startOf("d"):i?(e=b().tz(d.timeZone).utcOffset(),f=b(a,j,d.useStrict).utcOffset(),f!==e?(g=b().tz(d.timeZone).format("Z"),h=b(a,j,d.useStrict).format("YYYY-MM-DD[T]HH:mm:ss")+g,c=b(h,j,d.useStrict).tz(d.timeZone)):c=b(a,j,d.useStrict).tz(d.timeZone)):c=b(a,j,d.useStrict),c},y=function(a){if("string"!=typeof a||a.length>1)throw new TypeError("isEnabled expects a single character string parameter");switch(a){case"y":return-1!==i.indexOf("Y");case"M":return-1!==i.indexOf("M");case"d":return-1!==i.toLowerCase().indexOf("d");case"h":case"H":return-1!==i.toLowerCase().indexOf("h");case"m":return-1!==i.indexOf("m");case"s":return-1!==i.indexOf("s");default:return!1}},z=function(){return y("h")||y("m")||y("s")},A=function(){return y("y")||y("M")||y("d")},B=function(){var b=a("<thead>").append(a("<tr>").append(a("<th>").addClass("prev").attr("data-action","previous").append(a("<span>").addClass(d.icons.previous))).append(a("<th>").addClass("picker-switch").attr("data-action","pickerSwitch").attr("colspan",d.calendarWeeks?"6":"5")).append(a("<th>").addClass("next").attr("data-action","next").append(a("<span>").addClass(d.icons.next)))),c=a("<tbody>").append(a("<tr>").append(a("<td>").attr("colspan",d.calendarWeeks?"8":"7")));return[a("<div>").addClass("datepicker-days").append(a("<table>").addClass("table-condensed").append(b).append(a("<tbody>"))),a("<div>").addClass("datepicker-months").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone())),a("<div>").addClass("datepicker-years").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone())),a("<div>").addClass("datepicker-decades").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone()))]},C=function(){var b=a("<tr>"),c=a("<tr>"),e=a("<tr>");return y("h")&&(b.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.incrementHour}).addClass("btn").attr("data-action","incrementHours").append(a("<span>").addClass(d.icons.up)))),c.append(a("<td>").append(a("<span>").addClass("timepicker-hour").attr({"data-time-component":"hours",title:d.tooltips.pickHour}).attr("data-action","showHours"))),e.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.decrementHour}).addClass("btn").attr("data-action","decrementHours").append(a("<span>").addClass(d.icons.down))))),y("m")&&(y("h")&&(b.append(a("<td>").addClass("separator")),c.append(a("<td>").addClass("separator").html(":")),e.append(a("<td>").addClass("separator"))),b.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.incrementMinute}).addClass("btn").attr("data-action","incrementMinutes").append(a("<span>").addClass(d.icons.up)))),c.append(a("<td>").append(a("<span>").addClass("timepicker-minute").attr({"data-time-component":"minutes",title:d.tooltips.pickMinute}).attr("data-action","showMinutes"))),e.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.decrementMinute}).addClass("btn").attr("data-action","decrementMinutes").append(a("<span>").addClass(d.icons.down))))),y("s")&&(y("m")&&(b.append(a("<td>").addClass("separator")),c.append(a("<td>").addClass("separator").html(":")),e.append(a("<td>").addClass("separator"))),b.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.incrementSecond}).addClass("btn").attr("data-action","incrementSeconds").append(a("<span>").addClass(d.icons.up)))),c.append(a("<td>").append(a("<span>").addClass("timepicker-second").attr({"data-time-component":"seconds",title:d.tooltips.pickSecond}).attr("data-action","showSeconds"))),e.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.decrementSecond}).addClass("btn").attr("data-action","decrementSeconds").append(a("<span>").addClass(d.icons.down))))),h||(b.append(a("<td>").addClass("separator")),c.append(a("<td>").append(a("<button>").addClass("btn btn-primary").attr({"data-action":"togglePeriod",tabindex:"-1",title:d.tooltips.togglePeriod}))),e.append(a("<td>").addClass("separator"))),a("<div>").addClass("timepicker-picker").append(a("<table>").addClass("table-condensed").append([b,c,e]))},D=function(){var b=a("<div>").addClass("timepicker-hours").append(a("<table>").addClass("table-condensed")),c=a("<div>").addClass("timepicker-minutes").append(a("<table>").addClass("table-condensed")),d=a("<div>").addClass("timepicker-seconds").append(a("<table>").addClass("table-condensed")),e=[C()];return y("h")&&e.push(b),y("m")&&e.push(c),y("s")&&e.push(d),e},E=function(){var b=[];return d.showTodayButton&&b.push(a("<td>").append(a("<a>").attr({"data-action":"today",title:d.tooltips.today}).append(a("<span>").addClass(d.icons.today)))),!d.sideBySide&&A()&&z()&&b.push(a("<td>").append(a("<a>").attr({"data-action":"togglePicker",title:d.tooltips.selectTime}).append(a("<span>").addClass(d.icons.time)))),d.showClear&&b.push(a("<td>").append(a("<a>").attr({"data-action":"clear",title:d.tooltips.clear}).append(a("<span>").addClass(d.icons.clear)))),d.showClose&&b.push(a("<td>").append(a("<a>").attr({"data-action":"close",title:d.tooltips.close}).append(a("<span>").addClass(d.icons.close)))),a("<table>").addClass("table-condensed").append(a("<tbody>").append(a("<tr>").append(b)))},F=function(){var b=a("<div>").addClass("bootstrap-datetimepicker-widget dropdown-menu"),c=a("<div>").addClass("datepicker").append(B()),e=a("<div>").addClass("timepicker").append(D()),f=a("<ul>").addClass("list-unstyled"),g=a("<li>").addClass("picker-switch"+(d.collapse?" accordion-toggle":"")).append(E());return d.inline&&b.removeClass("dropdown-menu"),h&&b.addClass("usetwentyfour"),y("s")&&!h&&b.addClass("wider"),d.sideBySide&&A()&&z()?(b.addClass("timepicker-sbs"),"top"===d.toolbarPlacement&&b.append(g),b.append(a("<div>").addClass("row").append(c.addClass("col-md-6")).append(e.addClass("col-md-6"))),"bottom"===d.toolbarPlacement&&b.append(g),b):("top"===d.toolbarPlacement&&f.append(g),A()&&f.append(a("<li>").addClass(d.collapse&&z()?"collapse in":"").append(c)),"default"===d.toolbarPlacement&&f.append(g),z()&&f.append(a("<li>").addClass(d.collapse&&A()?"collapse":"").append(e)),"bottom"===d.toolbarPlacement&&f.append(g),b.append(f))},G=function(){var b,e={};return b=c.is("input")||d.inline?c.data():c.find("input").data(),b.dateOptions&&b.dateOptions instanceof Object&&(e=a.extend(!0,e,b.dateOptions)),a.each(d,function(a){var c="date"+a.charAt(0).toUpperCase()+a.slice(1);void 0!==b[c]&&(e[a]=b[c])}),e},H=function(){var b,e=(n||c).position(),f=(n||c).offset(),g=d.widgetPositioning.vertical,h=d.widgetPositioning.horizontal;if(d.widgetParent)b=d.widgetParent.append(o);else if(c.is("input"))b=c.after(o).parent();else{if(d.inline)return void(b=c.append(o));b=c,c.children().first().after(o)}if("auto"===g&&(g=f.top+1.5*o.height()>=a(window).height()+a(window).scrollTop()&&o.height()+c.outerHeight()<f.top?"top":"bottom"),"auto"===h&&(h=b.width()<f.left+o.outerWidth()/2&&f.left+o.outerWidth()>a(window).width()?"right":"left"),"top"===g?o.addClass("top").removeClass("bottom"):o.addClass("bottom").removeClass("top"),"right"===h?o.addClass("pull-right"):o.removeClass("pull-right"),"relative"!==b.css("position")&&(b=b.parents().filter(function(){return"relative"===a(this).css("position")}).first()),0===b.length)throw new Error("datetimepicker component should be placed within a relative positioned container");o.css({top:"top"===g?"auto":e.top+c.outerHeight(),bottom:"top"===g?e.top+c.outerHeight():"auto",left:"left"===h?b===c?0:e.left:"auto",right:"left"===h?"auto":b.outerWidth()-c.outerWidth()-(b===c?0:e.left)})},I=function(a){"dp.change"===a.type&&(a.date&&a.date.isSame(a.oldDate)||!a.date&&!a.oldDate)||c.trigger(a)},J=function(a){"y"===a&&(a="YYYY"),I({type:"dp.update",change:a,viewDate:f.clone()})},K=function(a){o&&(a&&(k=Math.max(p,Math.min(3,k+a))),o.find(".datepicker > div").hide().filter(".datepicker-"+q[k].clsName).show())},L=function(){var b=a("<tr>"),c=f.clone().startOf("w").startOf("d");for(d.calendarWeeks===!0&&b.append(a("<th>").addClass("cw").text("#"));c.isBefore(f.clone().endOf("w"));)b.append(a("<th>").addClass("dow").text(c.format("dd"))),c.add(1,"d");o.find(".datepicker-days thead").append(b)},M=function(a){return d.disabledDates[a.format("YYYY-MM-DD")]===!0},N=function(a){return d.enabledDates[a.format("YYYY-MM-DD")]===!0},O=function(a){return d.disabledHours[a.format("H")]===!0},P=function(a){return d.enabledHours[a.format("H")]===!0},Q=function(b,c){if(!b.isValid())return!1;if(d.disabledDates&&"d"===c&&M(b))return!1;if(d.enabledDates&&"d"===c&&!N(b))return!1;if(d.minDate&&b.isBefore(d.minDate,c))return!1;if(d.maxDate&&b.isAfter(d.maxDate,c))return!1;if(d.daysOfWeekDisabled&&"d"===c&&-1!==d.daysOfWeekDisabled.indexOf(b.day()))return!1;if(d.disabledHours&&("h"===c||"m"===c||"s"===c)&&O(b))return!1;if(d.enabledHours&&("h"===c||"m"===c||"s"===c)&&!P(b))return!1;if(d.disabledTimeIntervals&&("h"===c||"m"===c||"s"===c)){var e=!1;if(a.each(d.disabledTimeIntervals,function(){return b.isBetween(this[0],this[1])?(e=!0,!1):void 0}),e)return!1}return!0},R=function(){for(var b=[],c=f.clone().startOf("y").startOf("d");c.isSame(f,"y");)b.push(a("<span>").attr("data-action","selectMonth").addClass("month").text(c.format("MMM"))),c.add(1,"M");o.find(".datepicker-months td").empty().append(b)},S=function(){var b=o.find(".datepicker-months"),c=b.find("th"),g=b.find("tbody").find("span");c.eq(0).find("span").attr("title",d.tooltips.prevYear),c.eq(1).attr("title",d.tooltips.selectYear),c.eq(2).find("span").attr("title",d.tooltips.nextYear),b.find(".disabled").removeClass("disabled"),Q(f.clone().subtract(1,"y"),"y")||c.eq(0).addClass("disabled"),c.eq(1).text(f.year()),Q(f.clone().add(1,"y"),"y")||c.eq(2).addClass("disabled"),g.removeClass("active"),e.isSame(f,"y")&&!m&&g.eq(e.month()).addClass("active"),g.each(function(b){Q(f.clone().month(b),"M")||a(this).addClass("disabled")})},T=function(){var a=o.find(".datepicker-years"),b=a.find("th"),c=f.clone().subtract(5,"y"),g=f.clone().add(6,"y"),h="";for(b.eq(0).find("span").attr("title",d.tooltips.prevDecade),b.eq(1).attr("title",d.tooltips.selectDecade),b.eq(2).find("span").attr("title",d.tooltips.nextDecade),a.find(".disabled").removeClass("disabled"),d.minDate&&d.minDate.isAfter(c,"y")&&b.eq(0).addClass("disabled"),b.eq(1).text(c.year()+"-"+g.year()),d.maxDate&&d.maxDate.isBefore(g,"y")&&b.eq(2).addClass("disabled");!c.isAfter(g,"y");)h+='<span data-action="selectYear" class="year'+(c.isSame(e,"y")&&!m?" active":"")+(Q(c,"y")?"":" disabled")+'">'+c.year()+"</span>",c.add(1,"y");a.find("td").html(h)},U=function(){var a=o.find(".datepicker-decades"),c=a.find("th"),g=b({y:f.year()-f.year()%100-1}),h=g.clone().add(100,"y"),i=g.clone(),j="";for(c.eq(0).find("span").attr("title",d.tooltips.prevCentury),c.eq(2).find("span").attr("title",d.tooltips.nextCentury),a.find(".disabled").removeClass("disabled"),(g.isSame(b({y:1900}))||d.minDate&&d.minDate.isAfter(g,"y"))&&c.eq(0).addClass("disabled"),c.eq(1).text(g.year()+"-"+h.year()),(g.isSame(b({y:2e3}))||d.maxDate&&d.maxDate.isBefore(h,"y"))&&c.eq(2).addClass("disabled");!g.isAfter(h,"y");)j+='<span data-action="selectDecade" class="decade'+(g.isSame(e,"y")?" active":"")+(Q(g,"y")?"":" disabled")+'" data-selection="'+(g.year()+6)+'">'+(g.year()+1)+" - "+(g.year()+12)+"</span>",g.add(12,"y");j+="<span></span><span></span><span></span>",a.find("td").html(j),c.eq(1).text(i.year()+1+"-"+g.year())},V=function(){var b,c,g,h,i=o.find(".datepicker-days"),j=i.find("th"),k=[];if(A()){for(j.eq(0).find("span").attr("title",d.tooltips.prevMonth),j.eq(1).attr("title",d.tooltips.selectMonth),j.eq(2).find("span").attr("title",d.tooltips.nextMonth),i.find(".disabled").removeClass("disabled"),j.eq(1).text(f.format(d.dayViewHeaderFormat)),Q(f.clone().subtract(1,"M"),"M")||j.eq(0).addClass("disabled"),Q(f.clone().add(1,"M"),"M")||j.eq(2).addClass("disabled"),b=f.clone().startOf("M").startOf("w").startOf("d"),h=0;42>h;h++)0===b.weekday()&&(c=a("<tr>"),d.calendarWeeks&&c.append('<td class="cw">'+b.week()+"</td>"),k.push(c)),g="",b.isBefore(f,"M")&&(g+=" old"),b.isAfter(f,"M")&&(g+=" new"),b.isSame(e,"d")&&!m&&(g+=" active"),Q(b,"d")||(g+=" disabled"),b.isSame(x(),"d")&&(g+=" today"),(0===b.day()||6===b.day())&&(g+=" weekend"),c.append('<td data-action="selectDay" data-day="'+b.format("L")+'" class="day'+g+'">'+b.date()+"</td>"),b.add(1,"d");i.find("tbody").empty().append(k),S(),T(),U()}},W=function(){var b=o.find(".timepicker-hours table"),c=f.clone().startOf("d"),d=[],e=a("<tr>");for(f.hour()>11&&!h&&c.hour(12);c.isSame(f,"d")&&(h||f.hour()<12&&c.hour()<12||f.hour()>11);)c.hour()%4===0&&(e=a("<tr>"),d.push(e)),e.append('<td data-action="selectHour" class="hour'+(Q(c,"h")?"":" disabled")+'">'+c.format(h?"HH":"hh")+"</td>"),c.add(1,"h");b.empty().append(d)},X=function(){for(var b=o.find(".timepicker-minutes table"),c=f.clone().startOf("h"),e=[],g=a("<tr>"),h=1===d.stepping?5:d.stepping;f.isSame(c,"h");)c.minute()%(4*h)===0&&(g=a("<tr>"),e.push(g)),g.append('<td data-action="selectMinute" class="minute'+(Q(c,"m")?"":" disabled")+'">'+c.format("mm")+"</td>"),c.add(h,"m");b.empty().append(e)},Y=function(){for(var b=o.find(".timepicker-seconds table"),c=f.clone().startOf("m"),d=[],e=a("<tr>");f.isSame(c,"m");)c.second()%20===0&&(e=a("<tr>"),d.push(e)),e.append('<td data-action="selectSecond" class="second'+(Q(c,"s")?"":" disabled")+'">'+c.format("ss")+"</td>"),c.add(5,"s");b.empty().append(d)},Z=function(){var a,b,c=o.find(".timepicker span[data-time-component]");h||(a=o.find(".timepicker [data-action=togglePeriod]"),b=e.clone().add(e.hours()>=12?-12:12,"h"),a.text(e.format("A")),Q(b,"h")?a.removeClass("disabled"):a.addClass("disabled")),c.filter("[data-time-component=hours]").text(e.format(h?"HH":"hh")),c.filter("[data-time-component=minutes]").text(e.format("mm")),c.filter("[data-time-component=seconds]").text(e.format("ss")),W(),X(),Y()},$=function(){o&&(V(),Z())},_=function(a){var b=m?null:e;return a?(a=a.clone().locale(d.locale),1!==d.stepping&&a.minutes(Math.round(a.minutes()/d.stepping)*d.stepping%60).seconds(0),void(Q(a)?(e=a,f=e.clone(),g.val(e.format(i)),c.data("date",e.format(i)),m=!1,$(),I({type:"dp.change",date:e.clone(),oldDate:b})):(d.keepInvalid||g.val(m?"":e.format(i)),I({type:"dp.error",date:a})))):(m=!0,g.val(""),c.data("date",""),I({type:"dp.change",date:!1,oldDate:b}),void $())},aa=function(){var b=!1;return o?(o.find(".collapse").each(function(){var c=a(this).data("collapse");return c&&c.transitioning?(b=!0,!1):!0}),b?l:(n&&n.hasClass("btn")&&n.toggleClass("active"),o.hide(),a(window).off("resize",H),o.off("click","[data-action]"),o.off("mousedown",!1),o.remove(),o=!1,I({type:"dp.hide",date:e.clone()}),g.blur(),l)):l},ba=function(){_(null)},ca={next:function(){var a=q[k].navFnc;f.add(q[k].navStep,a),V(),J(a)},previous:function(){var a=q[k].navFnc;f.subtract(q[k].navStep,a),V(),J(a)},pickerSwitch:function(){K(1)},selectMonth:function(b){var c=a(b.target).closest("tbody").find("span").index(a(b.target));f.month(c),k===p?(_(e.clone().year(f.year()).month(f.month())),d.inline||aa()):(K(-1),V()),J("M")},selectYear:function(b){var c=parseInt(a(b.target).text(),10)||0;f.year(c),k===p?(_(e.clone().year(f.year())),d.inline||aa()):(K(-1),V()),J("YYYY")},selectDecade:function(b){var c=parseInt(a(b.target).data("selection"),10)||0;f.year(c),k===p?(_(e.clone().year(f.year())),d.inline||aa()):(K(-1),V()),J("YYYY")},selectDay:function(b){var c=f.clone();a(b.target).is(".old")&&c.subtract(1,"M"),a(b.target).is(".new")&&c.add(1,"M"),_(c.date(parseInt(a(b.target).text(),10))),z()||d.keepOpen||d.inline||aa()},incrementHours:function(){var a=e.clone().add(1,"h");Q(a,"h")&&_(a)},incrementMinutes:function(){var a=e.clone().add(d.stepping,"m");Q(a,"m")&&_(a)},incrementSeconds:function(){var a=e.clone().add(1,"s");Q(a,"s")&&_(a)},decrementHours:function(){var a=e.clone().subtract(1,"h");Q(a,"h")&&_(a)},decrementMinutes:function(){var a=e.clone().subtract(d.stepping,"m");Q(a,"m")&&_(a)},decrementSeconds:function(){var a=e.clone().subtract(1,"s");Q(a,"s")&&_(a)},togglePeriod:function(){_(e.clone().add(e.hours()>=12?-12:12,"h"))},togglePicker:function(b){var c,e=a(b.target),f=e.closest("ul"),g=f.find(".in"),h=f.find(".collapse:not(.in)");if(g&&g.length){if(c=g.data("collapse"),c&&c.transitioning)return;g.collapse?(g.collapse("hide"),h.collapse("show")):(g.removeClass("in"),h.addClass("in")),e.is("span")?e.toggleClass(d.icons.time+" "+d.icons.date):e.find("span").toggleClass(d.icons.time+" "+d.icons.date)}},showPicker:function(){o.find(".timepicker > div:not(.timepicker-picker)").hide(),o.find(".timepicker .timepicker-picker").show()},showHours:function(){o.find(".timepicker .timepicker-picker").hide(),o.find(".timepicker .timepicker-hours").show()},showMinutes:function(){o.find(".timepicker .timepicker-picker").hide(),o.find(".timepicker .timepicker-minutes").show()},showSeconds:function(){o.find(".timepicker .timepicker-picker").hide(),o.find(".timepicker .timepicker-seconds").show()},selectHour:function(b){var c=parseInt(a(b.target).text(),10);h||(e.hours()>=12?12!==c&&(c+=12):12===c&&(c=0)),_(e.clone().hours(c)),ca.showPicker.call(l)},selectMinute:function(b){_(e.clone().minutes(parseInt(a(b.target).text(),10))),ca.showPicker.call(l)},selectSecond:function(b){_(e.clone().seconds(parseInt(a(b.target).text(),10))),ca.showPicker.call(l)},clear:ba,today:function(){var a=x();Q(a,"d")&&_(a)},close:aa},da=function(b){return a(b.currentTarget).is(".disabled")?!1:(ca[a(b.currentTarget).data("action")].apply(l,arguments),!1)},ea=function(){var b,c={year:function(a){return a.month(0).date(1).hours(0).seconds(0).minutes(0)},month:function(a){return a.date(1).hours(0).seconds(0).minutes(0)},day:function(a){return a.hours(0).seconds(0).minutes(0)},hour:function(a){return a.seconds(0).minutes(0)},minute:function(a){return a.seconds(0)}};return g.prop("disabled")||!d.ignoreReadonly&&g.prop("readonly")||o?l:(void 0!==g.val()&&0!==g.val().trim().length?_(ga(g.val().trim())):d.useCurrent&&m&&(g.is("input")&&0===g.val().trim().length||d.inline)&&(b=x(),"string"==typeof d.useCurrent&&(b=c[d.useCurrent](b)),_(b)),o=F(),L(),R(),o.find(".timepicker-hours").hide(),o.find(".timepicker-minutes").hide(),o.find(".timepicker-seconds").hide(),$(),K(),a(window).on("resize",H),o.on("click","[data-action]",da),o.on("mousedown",!1),n&&n.hasClass("btn")&&n.toggleClass("active"),o.show(),H(),d.focusOnShow&&!g.is(":focus")&&g.focus(),I({type:"dp.show"}),l)},fa=function(){return o?aa():ea()},ga=function(a){return a=void 0===d.parseInputDate?b.isMoment(a)||a instanceof Date?b(a):x(a):d.parseInputDate(a),a.locale(d.locale),a},ha=function(a){var b,c,e,f,g=null,h=[],i={},j=a.which,k="p";w[j]=k;for(b in w)w.hasOwnProperty(b)&&w[b]===k&&(h.push(b),parseInt(b,10)!==j&&(i[b]=!0));for(b in d.keyBinds)if(d.keyBinds.hasOwnProperty(b)&&"function"==typeof d.keyBinds[b]&&(e=b.split(" "),e.length===h.length&&v[j]===e[e.length-1])){for(f=!0,c=e.length-2;c>=0;c--)if(!(v[e[c]]in i)){f=!1;break}if(f){g=d.keyBinds[b];break}}g&&(g.call(l,o),a.stopPropagation(),a.preventDefault())},ia=function(a){w[a.which]="r",a.stopPropagation(),a.preventDefault()},ja=function(b){var c=a(b.target).val().trim(),d=c?ga(c):null;return _(d),b.stopImmediatePropagation(),!1},ka=function(){g.on({change:ja,blur:d.debug?"":aa,keydown:ha,keyup:ia,focus:d.allowInputToggle?ea:""}),c.is("input")?g.on({focus:ea}):n&&(n.on("click",fa),n.on("mousedown",!1))},la=function(){g.off({change:ja,blur:blur,keydown:ha,keyup:ia,focus:d.allowInputToggle?aa:""}),c.is("input")?g.off({focus:ea}):n&&(n.off("click",fa),n.off("mousedown",!1))},ma=function(b){var c={};return a.each(b,function(){var a=ga(this);a.isValid()&&(c[a.format("YYYY-MM-DD")]=!0)}),Object.keys(c).length?c:!1},na=function(b){var c={};return a.each(b,function(){c[this]=!0}),Object.keys(c).length?c:!1},oa=function(){var a=d.format||"L LT";i=a.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(a){var b=e.localeData().longDateFormat(a)||a;return b.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(a){return e.localeData().longDateFormat(a)||a})}),j=d.extraFormats?d.extraFormats.slice():[],j.indexOf(a)<0&&j.indexOf(i)<0&&j.push(i),h=i.toLowerCase().indexOf("a")<1&&i.replace(/\[.*?\]/g,"").indexOf("h")<1,y("y")&&(p=2),y("M")&&(p=1),y("d")&&(p=0),k=Math.max(p,k),m||_(e)};if(l.destroy=function(){aa(),la(),c.removeData("DateTimePicker"),c.removeData("date")},l.toggle=fa,l.show=ea,l.hide=aa,l.disable=function(){return aa(),n&&n.hasClass("btn")&&n.addClass("disabled"),g.prop("disabled",!0),l},l.enable=function(){return n&&n.hasClass("btn")&&n.removeClass("disabled"),g.prop("disabled",!1),l},l.ignoreReadonly=function(a){if(0===arguments.length)return d.ignoreReadonly;if("boolean"!=typeof a)throw new TypeError("ignoreReadonly () expects a boolean parameter");return d.ignoreReadonly=a,l},l.options=function(b){if(0===arguments.length)return a.extend(!0,{},d);if(!(b instanceof Object))throw new TypeError("options() options parameter should be an object");return a.extend(!0,d,b),a.each(d,function(a,b){if(void 0===l[a])throw new TypeError("option "+a+" is not recognized!");l[a](b)}),l},l.date=function(a){if(0===arguments.length)return m?null:e.clone();if(!(null===a||"string"==typeof a||b.isMoment(a)||a instanceof Date))throw new TypeError("date() parameter must be one of [null, string, moment or Date]");return _(null===a?null:ga(a)),l},l.format=function(a){if(0===arguments.length)return d.format;if("string"!=typeof a&&("boolean"!=typeof a||a!==!1))throw new TypeError("format() expects a sting or boolean:false parameter "+a);return d.format=a,i&&oa(),l},l.timeZone=function(a){return 0===arguments.length?d.timeZone:(d.timeZone=a,l)},l.dayViewHeaderFormat=function(a){if(0===arguments.length)return d.dayViewHeaderFormat;if("string"!=typeof a)throw new TypeError("dayViewHeaderFormat() expects a string parameter");return d.dayViewHeaderFormat=a,l},l.extraFormats=function(a){if(0===arguments.length)return d.extraFormats;if(a!==!1&&!(a instanceof Array))throw new TypeError("extraFormats() expects an array or false parameter");return d.extraFormats=a,j&&oa(),l},l.disabledDates=function(b){if(0===arguments.length)return d.disabledDates?a.extend({},d.disabledDates):d.disabledDates;if(!b)return d.disabledDates=!1,$(),l;if(!(b instanceof Array))throw new TypeError("disabledDates() expects an array parameter");return d.disabledDates=ma(b),d.enabledDates=!1,$(),l},l.enabledDates=function(b){if(0===arguments.length)return d.enabledDates?a.extend({},d.enabledDates):d.enabledDates;if(!b)return d.enabledDates=!1,$(),l;if(!(b instanceof Array))throw new TypeError("enabledDates() expects an array parameter");return d.enabledDates=ma(b),d.disabledDates=!1,$(),l},l.daysOfWeekDisabled=function(a){if(0===arguments.length)return d.daysOfWeekDisabled.splice(0);if("boolean"==typeof a&&!a)return d.daysOfWeekDisabled=!1,$(),l;if(!(a instanceof Array))throw new TypeError("daysOfWeekDisabled() expects an array parameter");if(d.daysOfWeekDisabled=a.reduce(function(a,b){return b=parseInt(b,10),b>6||0>b||isNaN(b)?a:(-1===a.indexOf(b)&&a.push(b),a)},[]).sort(),d.useCurrent&&!d.keepInvalid){for(var b=0;!Q(e,"d");){if(e.add(1,"d"),7===b)throw"Tried 7 times to find a valid date";b++}_(e)}return $(),l},l.maxDate=function(a){if(0===arguments.length)return d.maxDate?d.maxDate.clone():d.maxDate;if("boolean"==typeof a&&a===!1)return d.maxDate=!1,$(),l;"string"==typeof a&&("now"===a||"moment"===a)&&(a=x());var b=ga(a);if(!b.isValid())throw new TypeError("maxDate() Could not parse date parameter: "+a);if(d.minDate&&b.isBefore(d.minDate))throw new TypeError("maxDate() date parameter is before options.minDate: "+b.format(i));return d.maxDate=b,d.useCurrent&&!d.keepInvalid&&e.isAfter(a)&&_(d.maxDate),f.isAfter(b)&&(f=b.clone().subtract(d.stepping,"m")),$(),l},l.minDate=function(a){if(0===arguments.length)return d.minDate?d.minDate.clone():d.minDate;if("boolean"==typeof a&&a===!1)return d.minDate=!1,$(),l;"string"==typeof a&&("now"===a||"moment"===a)&&(a=x());var b=ga(a);if(!b.isValid())throw new TypeError("minDate() Could not parse date parameter: "+a);if(d.maxDate&&b.isAfter(d.maxDate))throw new TypeError("minDate() date parameter is after options.maxDate: "+b.format(i));return d.minDate=b,d.useCurrent&&!d.keepInvalid&&e.isBefore(a)&&_(d.minDate),f.isBefore(b)&&(f=b.clone().add(d.stepping,"m")),$(),l},l.defaultDate=function(a){if(0===arguments.length)return d.defaultDate?d.defaultDate.clone():d.defaultDate;if(!a)return d.defaultDate=!1,l;"string"==typeof a&&("now"===a||"moment"===a)&&(a=x());var b=ga(a);if(!b.isValid())throw new TypeError("defaultDate() Could not parse date parameter: "+a);if(!Q(b))throw new TypeError("defaultDate() date passed is invalid according to component setup validations");return d.defaultDate=b,(d.defaultDate&&d.inline||""===g.val().trim())&&_(d.defaultDate),l},l.locale=function(a){if(0===arguments.length)return d.locale;if(!b.localeData(a))throw new TypeError("locale() locale "+a+" is not loaded from moment locales!");return d.locale=a,e.locale(d.locale),f.locale(d.locale),i&&oa(),o&&(aa(),ea()),l},l.stepping=function(a){return 0===arguments.length?d.stepping:(a=parseInt(a,10),(isNaN(a)||1>a)&&(a=1),d.stepping=a,l)},l.useCurrent=function(a){var b=["year","month","day","hour","minute"];if(0===arguments.length)return d.useCurrent;if("boolean"!=typeof a&&"string"!=typeof a)throw new TypeError("useCurrent() expects a boolean or string parameter");if("string"==typeof a&&-1===b.indexOf(a.toLowerCase()))throw new TypeError("useCurrent() expects a string parameter of "+b.join(", "));return d.useCurrent=a,l},l.collapse=function(a){if(0===arguments.length)return d.collapse;if("boolean"!=typeof a)throw new TypeError("collapse() expects a boolean parameter");return d.collapse===a?l:(d.collapse=a,o&&(aa(),ea()),l)},l.icons=function(b){if(0===arguments.length)return a.extend({},d.icons);if(!(b instanceof Object))throw new TypeError("icons() expects parameter to be an Object");return a.extend(d.icons,b),o&&(aa(),ea()),l},l.tooltips=function(b){if(0===arguments.length)return a.extend({},d.tooltips);if(!(b instanceof Object))throw new TypeError("tooltips() expects parameter to be an Object");return a.extend(d.tooltips,b),o&&(aa(),ea()),l},l.useStrict=function(a){if(0===arguments.length)return d.useStrict;if("boolean"!=typeof a)throw new TypeError("useStrict() expects a boolean parameter");return d.useStrict=a,l},l.sideBySide=function(a){if(0===arguments.length)return d.sideBySide;if("boolean"!=typeof a)throw new TypeError("sideBySide() expects a boolean parameter");return d.sideBySide=a,o&&(aa(),ea()),l},l.viewMode=function(a){if(0===arguments.length)return d.viewMode;if("string"!=typeof a)throw new TypeError("viewMode() expects a string parameter");if(-1===r.indexOf(a))throw new TypeError("viewMode() parameter must be one of ("+r.join(", ")+") value");return d.viewMode=a,k=Math.max(r.indexOf(a),p),K(),l},l.toolbarPlacement=function(a){if(0===arguments.length)return d.toolbarPlacement;if("string"!=typeof a)throw new TypeError("toolbarPlacement() expects a string parameter");if(-1===u.indexOf(a))throw new TypeError("toolbarPlacement() parameter must be one of ("+u.join(", ")+") value");return d.toolbarPlacement=a,o&&(aa(),ea()),l},l.widgetPositioning=function(b){if(0===arguments.length)return a.extend({},d.widgetPositioning);if("[object Object]"!=={}.toString.call(b))throw new TypeError("widgetPositioning() expects an object variable");if(b.horizontal){if("string"!=typeof b.horizontal)throw new TypeError("widgetPositioning() horizontal variable must be a string");if(b.horizontal=b.horizontal.toLowerCase(),-1===t.indexOf(b.horizontal))throw new TypeError("widgetPositioning() expects horizontal parameter to be one of ("+t.join(", ")+")");d.widgetPositioning.horizontal=b.horizontal}if(b.vertical){if("string"!=typeof b.vertical)throw new TypeError("widgetPositioning() vertical variable must be a string");if(b.vertical=b.vertical.toLowerCase(),-1===s.indexOf(b.vertical))throw new TypeError("widgetPositioning() expects vertical parameter to be one of ("+s.join(", ")+")");d.widgetPositioning.vertical=b.vertical}return $(),l},l.calendarWeeks=function(a){if(0===arguments.length)return d.calendarWeeks;if("boolean"!=typeof a)throw new TypeError("calendarWeeks() expects parameter to be a boolean value");return d.calendarWeeks=a,$(),l},l.showTodayButton=function(a){if(0===arguments.length)return d.showTodayButton;if("boolean"!=typeof a)throw new TypeError("showTodayButton() expects a boolean parameter");return d.showTodayButton=a,o&&(aa(),ea()),l},l.showClear=function(a){if(0===arguments.length)return d.showClear;if("boolean"!=typeof a)throw new TypeError("showClear() expects a boolean parameter");return d.showClear=a,o&&(aa(),ea()),l},l.widgetParent=function(b){if(0===arguments.length)return d.widgetParent;if("string"==typeof b&&(b=a(b)),null!==b&&"string"!=typeof b&&!(b instanceof a))throw new TypeError("widgetParent() expects a string or a jQuery object parameter");return d.widgetParent=b,o&&(aa(),ea()),l},l.keepOpen=function(a){if(0===arguments.length)return d.keepOpen;if("boolean"!=typeof a)throw new TypeError("keepOpen() expects a boolean parameter");return d.keepOpen=a,l},l.focusOnShow=function(a){if(0===arguments.length)return d.focusOnShow;if("boolean"!=typeof a)throw new TypeError("focusOnShow() expects a boolean parameter");return d.focusOnShow=a,l},l.inline=function(a){if(0===arguments.length)return d.inline;if("boolean"!=typeof a)throw new TypeError("inline() expects a boolean parameter");return d.inline=a,l},l.clear=function(){return ba(),l},l.keyBinds=function(a){return d.keyBinds=a,l},l.getMoment=function(a){return x(a)},l.debug=function(a){if("boolean"!=typeof a)throw new TypeError("debug() expects a boolean parameter");return d.debug=a,l},l.allowInputToggle=function(a){if(0===arguments.length)return d.allowInputToggle;if("boolean"!=typeof a)throw new TypeError("allowInputToggle() expects a boolean parameter");return d.allowInputToggle=a,l},l.showClose=function(a){if(0===arguments.length)return d.showClose;if("boolean"!=typeof a)throw new TypeError("showClose() expects a boolean parameter");return d.showClose=a,l},l.keepInvalid=function(a){if(0===arguments.length)return d.keepInvalid;if("boolean"!=typeof a)throw new TypeError("keepInvalid() expects a boolean parameter");return d.keepInvalid=a,l},l.datepickerInput=function(a){if(0===arguments.length)return d.datepickerInput;if("string"!=typeof a)throw new TypeError("datepickerInput() expects a string parameter");return d.datepickerInput=a,l},l.parseInputDate=function(a){if(0===arguments.length)return d.parseInputDate;
         | 
| 9 | 
            -
             | 
| 8 | 
            +
            /*
         | 
| 9 | 
            +
             The MIT License (MIT)
         | 
| 10 | 
            +
             | 
| 11 | 
            +
             Copyright (c) 2015 Jonathan Peterson
         | 
| 12 | 
            +
             | 
| 13 | 
            +
             Permission is hereby granted, free of charge, to any person obtaining a copy
         | 
| 14 | 
            +
             of this software and associated documentation files (the "Software"), to deal
         | 
| 15 | 
            +
             in the Software without restriction, including without limitation the rights
         | 
| 16 | 
            +
             to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
         | 
| 17 | 
            +
             copies of the Software, and to permit persons to whom the Software is
         | 
| 18 | 
            +
             furnished to do so, subject to the following conditions:
         | 
| 19 | 
            +
             | 
| 20 | 
            +
             The above copyright notice and this permission notice shall be included in
         | 
| 21 | 
            +
             all copies or substantial portions of the Software.
         | 
| 22 | 
            +
             | 
| 23 | 
            +
             THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
         | 
| 24 | 
            +
             IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
         | 
| 25 | 
            +
             FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
         | 
| 26 | 
            +
             AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
         | 
| 27 | 
            +
             LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
         | 
| 28 | 
            +
             OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
         | 
| 29 | 
            +
             THE SOFTWARE.
         | 
| 30 | 
            +
             */
         | 
| 31 | 
            +
            /*global define:false */
         | 
| 32 | 
            +
            /*global exports:false */
         | 
| 33 | 
            +
            /*global require:false */
         | 
| 34 | 
            +
            /*global jQuery:false */
         | 
| 35 | 
            +
            /*global moment:false */
         | 
| 36 | 
            +
            !function(a){"use strict";if("function"==typeof define&&define.amd)
         | 
| 37 | 
            +
            // AMD is used - Register as an anonymous module.
         | 
| 38 | 
            +
            define(["jquery","moment"],a);else if("object"==typeof exports)a(require("jquery"),require("moment"));else{
         | 
| 39 | 
            +
            // Neither AMD nor CommonJS used. Use global variables.
         | 
| 40 | 
            +
            if("undefined"==typeof jQuery)throw"bootstrap-datetimepicker requires jQuery to be loaded first";if("undefined"==typeof moment)throw"bootstrap-datetimepicker requires Moment.js to be loaded first";a(jQuery,moment)}}(function(a,b){"use strict";if(!b)throw new Error("bootstrap-datetimepicker requires Moment.js to be loaded first");var c=function(c,d){var e,f,g,h,i,j,k,l={},m=!0,n=!1,o=!1,p=0,q=[{clsName:"days",navFnc:"M",navStep:1},{clsName:"months",navFnc:"y",navStep:1},{clsName:"years",navFnc:"y",navStep:10},{clsName:"decades",navFnc:"y",navStep:100}],r=["days","months","years","decades"],s=["top","bottom","auto"],t=["left","right","auto"],u=["default","top","bottom"],v={up:38,38:"up",down:40,40:"down",left:37,37:"left",right:39,39:"right",tab:9,9:"tab",escape:27,27:"escape",enter:13,13:"enter",pageUp:33,33:"pageUp",pageDown:34,34:"pageDown",shift:16,16:"shift",control:17,17:"control",space:32,32:"space",t:84,84:"t","delete":46,46:"delete"},w={},/********************************************************************************
         | 
| 41 | 
            +
                         *
         | 
| 42 | 
            +
                         * Private functions
         | 
| 43 | 
            +
                         *
         | 
| 44 | 
            +
                         ********************************************************************************/
         | 
| 45 | 
            +
            x=function(){return void 0!==b.tz&&void 0!==d.timeZone&&null!==d.timeZone&&""!==d.timeZone},y=function(a){var c;return c=void 0===a||null===a?b():x()?b.tz(a,j,d.useStrict,d.timeZone):b(a,j,d.useStrict),x()&&c.tz(d.timeZone),c},z=function(a){if("string"!=typeof a||a.length>1)throw new TypeError("isEnabled expects a single character string parameter");switch(a){case"y":return-1!==i.indexOf("Y");case"M":return-1!==i.indexOf("M");case"d":return-1!==i.toLowerCase().indexOf("d");case"h":case"H":return-1!==i.toLowerCase().indexOf("h");case"m":return-1!==i.indexOf("m");case"s":return-1!==i.indexOf("s");default:return!1}},A=function(){return z("h")||z("m")||z("s")},B=function(){return z("y")||z("M")||z("d")},C=function(){var b=a("<thead>").append(a("<tr>").append(a("<th>").addClass("prev").attr("data-action","previous").append(a("<span>").addClass(d.icons.previous))).append(a("<th>").addClass("picker-switch").attr("data-action","pickerSwitch").attr("colspan",d.calendarWeeks?"6":"5")).append(a("<th>").addClass("next").attr("data-action","next").append(a("<span>").addClass(d.icons.next)))),c=a("<tbody>").append(a("<tr>").append(a("<td>").attr("colspan",d.calendarWeeks?"8":"7")));return[a("<div>").addClass("datepicker-days").append(a("<table>").addClass("table-condensed").append(b).append(a("<tbody>"))),a("<div>").addClass("datepicker-months").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone())),a("<div>").addClass("datepicker-years").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone())),a("<div>").addClass("datepicker-decades").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone()))]},D=function(){var b=a("<tr>"),c=a("<tr>"),e=a("<tr>");return z("h")&&(b.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.incrementHour}).addClass("btn").attr("data-action","incrementHours").append(a("<span>").addClass(d.icons.up)))),c.append(a("<td>").append(a("<span>").addClass("timepicker-hour").attr({"data-time-component":"hours",title:d.tooltips.pickHour}).attr("data-action","showHours"))),e.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.decrementHour}).addClass("btn").attr("data-action","decrementHours").append(a("<span>").addClass(d.icons.down))))),z("m")&&(z("h")&&(b.append(a("<td>").addClass("separator")),c.append(a("<td>").addClass("separator").html(":")),e.append(a("<td>").addClass("separator"))),b.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.incrementMinute}).addClass("btn").attr("data-action","incrementMinutes").append(a("<span>").addClass(d.icons.up)))),c.append(a("<td>").append(a("<span>").addClass("timepicker-minute").attr({"data-time-component":"minutes",title:d.tooltips.pickMinute}).attr("data-action","showMinutes"))),e.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.decrementMinute}).addClass("btn").attr("data-action","decrementMinutes").append(a("<span>").addClass(d.icons.down))))),z("s")&&(z("m")&&(b.append(a("<td>").addClass("separator")),c.append(a("<td>").addClass("separator").html(":")),e.append(a("<td>").addClass("separator"))),b.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.incrementSecond}).addClass("btn").attr("data-action","incrementSeconds").append(a("<span>").addClass(d.icons.up)))),c.append(a("<td>").append(a("<span>").addClass("timepicker-second").attr({"data-time-component":"seconds",title:d.tooltips.pickSecond}).attr("data-action","showSeconds"))),e.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.decrementSecond}).addClass("btn").attr("data-action","decrementSeconds").append(a("<span>").addClass(d.icons.down))))),h||(b.append(a("<td>").addClass("separator")),c.append(a("<td>").append(a("<button>").addClass("btn btn-primary").attr({"data-action":"togglePeriod",tabindex:"-1",title:d.tooltips.togglePeriod}))),e.append(a("<td>").addClass("separator"))),a("<div>").addClass("timepicker-picker").append(a("<table>").addClass("table-condensed").append([b,c,e]))},E=function(){var b=a("<div>").addClass("timepicker-hours").append(a("<table>").addClass("table-condensed")),c=a("<div>").addClass("timepicker-minutes").append(a("<table>").addClass("table-condensed")),d=a("<div>").addClass("timepicker-seconds").append(a("<table>").addClass("table-condensed")),e=[D()];return z("h")&&e.push(b),z("m")&&e.push(c),z("s")&&e.push(d),e},F=function(){var b=[];return d.showTodayButton&&b.push(a("<td>").append(a("<a>").attr({"data-action":"today",title:d.tooltips.today}).append(a("<span>").addClass(d.icons.today)))),!d.sideBySide&&B()&&A()&&b.push(a("<td>").append(a("<a>").attr({"data-action":"togglePicker",title:d.tooltips.selectTime}).append(a("<span>").addClass(d.icons.time)))),d.showClear&&b.push(a("<td>").append(a("<a>").attr({"data-action":"clear",title:d.tooltips.clear}).append(a("<span>").addClass(d.icons.clear)))),d.showClose&&b.push(a("<td>").append(a("<a>").attr({"data-action":"close",title:d.tooltips.close}).append(a("<span>").addClass(d.icons.close)))),a("<table>").addClass("table-condensed").append(a("<tbody>").append(a("<tr>").append(b)))},G=function(){var b=a("<div>").addClass("bootstrap-datetimepicker-widget dropdown-menu"),c=a("<div>").addClass("datepicker").append(C()),e=a("<div>").addClass("timepicker").append(E()),f=a("<ul>").addClass("list-unstyled"),g=a("<li>").addClass("picker-switch"+(d.collapse?" accordion-toggle":"")).append(F());return d.inline&&b.removeClass("dropdown-menu"),h&&b.addClass("usetwentyfour"),z("s")&&!h&&b.addClass("wider"),d.sideBySide&&B()&&A()?(b.addClass("timepicker-sbs"),"top"===d.toolbarPlacement&&b.append(g),b.append(a("<div>").addClass("row").append(c.addClass("col-md-6")).append(e.addClass("col-md-6"))),"bottom"===d.toolbarPlacement&&b.append(g),b):("top"===d.toolbarPlacement&&f.append(g),B()&&f.append(a("<li>").addClass(d.collapse&&A()?"collapse in":"").append(c)),"default"===d.toolbarPlacement&&f.append(g),A()&&f.append(a("<li>").addClass(d.collapse&&B()?"collapse":"").append(e)),"bottom"===d.toolbarPlacement&&f.append(g),b.append(f))},H=function(){var b,e={};return b=c.is("input")||d.inline?c.data():c.find("input").data(),b.dateOptions&&b.dateOptions instanceof Object&&(e=a.extend(!0,e,b.dateOptions)),a.each(d,function(a){var c="date"+a.charAt(0).toUpperCase()+a.slice(1);void 0!==b[c]&&(e[a]=b[c])}),e},I=function(){var b,e=(n||c).position(),f=(n||c).offset(),g=d.widgetPositioning.vertical,h=d.widgetPositioning.horizontal;if(d.widgetParent)b=d.widgetParent.append(o);else if(c.is("input"))b=c.after(o).parent();else{if(d.inline)return void(b=c.append(o));b=c,c.children().first().after(o)}if(
         | 
| 46 | 
            +
            // Top and bottom logic
         | 
| 47 | 
            +
            "auto"===g&&(g=f.top+1.5*o.height()>=a(window).height()+a(window).scrollTop()&&o.height()+c.outerHeight()<f.top?"top":"bottom"),
         | 
| 48 | 
            +
            // Left and right logic
         | 
| 49 | 
            +
            "auto"===h&&(h=b.width()<f.left+o.outerWidth()/2&&f.left+o.outerWidth()>a(window).width()?"right":"left"),"top"===g?o.addClass("top").removeClass("bottom"):o.addClass("bottom").removeClass("top"),"right"===h?o.addClass("pull-right"):o.removeClass("pull-right"),
         | 
| 50 | 
            +
            // find the first parent element that has a relative css positioning
         | 
| 51 | 
            +
            "relative"!==b.css("position")&&(b=b.parents().filter(function(){return"relative"===a(this).css("position")}).first()),0===b.length)throw new Error("datetimepicker component should be placed within a relative positioned container");o.css({top:"top"===g?"auto":e.top+c.outerHeight(),bottom:"top"===g?b.outerHeight()-(b===c?0:e.top):"auto",left:"left"===h?b===c?0:e.left:"auto",right:"left"===h?"auto":b.outerWidth()-c.outerWidth()-(b===c?0:e.left)})},J=function(a){"dp.change"===a.type&&(a.date&&a.date.isSame(a.oldDate)||!a.date&&!a.oldDate)||c.trigger(a)},K=function(a){"y"===a&&(a="YYYY"),J({type:"dp.update",change:a,viewDate:f.clone()})},L=function(a){o&&(a&&(k=Math.max(p,Math.min(3,k+a))),o.find(".datepicker > div").hide().filter(".datepicker-"+q[k].clsName).show())},M=function(){var b=a("<tr>"),c=f.clone().startOf("w").startOf("d");for(d.calendarWeeks===!0&&b.append(a("<th>").addClass("cw").text("#"));c.isBefore(f.clone().endOf("w"));)b.append(a("<th>").addClass("dow").text(c.format("dd"))),c.add(1,"d");o.find(".datepicker-days thead").append(b)},N=function(a){return d.disabledDates[a.format("YYYY-MM-DD")]===!0},O=function(a){return d.enabledDates[a.format("YYYY-MM-DD")]===!0},P=function(a){return d.disabledHours[a.format("H")]===!0},Q=function(a){return d.enabledHours[a.format("H")]===!0},R=function(b,c){if(!b.isValid())return!1;if(d.disabledDates&&"d"===c&&N(b))return!1;if(d.enabledDates&&"d"===c&&!O(b))return!1;if(d.minDate&&b.isBefore(d.minDate,c))return!1;if(d.maxDate&&b.isAfter(d.maxDate,c))return!1;if(d.daysOfWeekDisabled&&"d"===c&&-1!==d.daysOfWeekDisabled.indexOf(b.day()))return!1;if(d.disabledHours&&("h"===c||"m"===c||"s"===c)&&P(b))return!1;if(d.enabledHours&&("h"===c||"m"===c||"s"===c)&&!Q(b))return!1;if(d.disabledTimeIntervals&&("h"===c||"m"===c||"s"===c)){var e=!1;if(a.each(d.disabledTimeIntervals,function(){return b.isBetween(this[0],this[1])?(e=!0,!1):void 0}),e)return!1}return!0},S=function(){for(var b=[],c=f.clone().startOf("y").startOf("d");c.isSame(f,"y");)b.push(a("<span>").attr("data-action","selectMonth").addClass("month").text(c.format("MMM"))),c.add(1,"M");o.find(".datepicker-months td").empty().append(b)},T=function(){var b=o.find(".datepicker-months"),c=b.find("th"),g=b.find("tbody").find("span");c.eq(0).find("span").attr("title",d.tooltips.prevYear),c.eq(1).attr("title",d.tooltips.selectYear),c.eq(2).find("span").attr("title",d.tooltips.nextYear),b.find(".disabled").removeClass("disabled"),R(f.clone().subtract(1,"y"),"y")||c.eq(0).addClass("disabled"),c.eq(1).text(f.year()),R(f.clone().add(1,"y"),"y")||c.eq(2).addClass("disabled"),g.removeClass("active"),e.isSame(f,"y")&&!m&&g.eq(e.month()).addClass("active"),g.each(function(b){R(f.clone().month(b),"M")||a(this).addClass("disabled")})},U=function(){var a=o.find(".datepicker-years"),b=a.find("th"),c=f.clone().subtract(5,"y"),g=f.clone().add(6,"y"),h="";for(b.eq(0).find("span").attr("title",d.tooltips.prevDecade),b.eq(1).attr("title",d.tooltips.selectDecade),b.eq(2).find("span").attr("title",d.tooltips.nextDecade),a.find(".disabled").removeClass("disabled"),d.minDate&&d.minDate.isAfter(c,"y")&&b.eq(0).addClass("disabled"),b.eq(1).text(c.year()+"-"+g.year()),d.maxDate&&d.maxDate.isBefore(g,"y")&&b.eq(2).addClass("disabled");!c.isAfter(g,"y");)h+='<span data-action="selectYear" class="year'+(c.isSame(e,"y")&&!m?" active":"")+(R(c,"y")?"":" disabled")+'">'+c.year()+"</span>",c.add(1,"y");a.find("td").html(h)},V=function(){var a,c=o.find(".datepicker-decades"),g=c.find("th"),h=b({y:f.year()-f.year()%100-1}),i=h.clone().add(100,"y"),j=h.clone(),k=!1,l=!1,m="";for(g.eq(0).find("span").attr("title",d.tooltips.prevCentury),g.eq(2).find("span").attr("title",d.tooltips.nextCentury),c.find(".disabled").removeClass("disabled"),(h.isSame(b({y:1900}))||d.minDate&&d.minDate.isAfter(h,"y"))&&g.eq(0).addClass("disabled"),g.eq(1).text(h.year()+"-"+i.year()),(h.isSame(b({y:2e3}))||d.maxDate&&d.maxDate.isBefore(i,"y"))&&g.eq(2).addClass("disabled");!h.isAfter(i,"y");)a=h.year()+12,k=d.minDate&&d.minDate.isAfter(h,"y")&&d.minDate.year()<=a,l=d.maxDate&&d.maxDate.isAfter(h,"y")&&d.maxDate.year()<=a,m+='<span data-action="selectDecade" class="decade'+(e.isAfter(h)&&e.year()<=a?" active":"")+(R(h,"y")||k||l?"":" disabled")+'" data-selection="'+(h.year()+6)+'">'+(h.year()+1)+" - "+(h.year()+12)+"</span>",h.add(12,"y");m+="<span></span><span></span><span></span>",c.find("td").html(m),g.eq(1).text(j.year()+1+"-"+h.year())},W=function(){var b,c,g,h,i=o.find(".datepicker-days"),j=i.find("th"),k=[];if(B()){for(j.eq(0).find("span").attr("title",d.tooltips.prevMonth),j.eq(1).attr("title",d.tooltips.selectMonth),j.eq(2).find("span").attr("title",d.tooltips.nextMonth),i.find(".disabled").removeClass("disabled"),j.eq(1).text(f.format(d.dayViewHeaderFormat)),R(f.clone().subtract(1,"M"),"M")||j.eq(0).addClass("disabled"),R(f.clone().add(1,"M"),"M")||j.eq(2).addClass("disabled"),b=f.clone().startOf("M").startOf("w").startOf("d"),h=0;42>h;h++)//always display 42 days (should show 6 weeks)
         | 
| 52 | 
            +
            0===b.weekday()&&(c=a("<tr>"),d.calendarWeeks&&c.append('<td class="cw">'+b.week()+"</td>"),k.push(c)),g="",b.isBefore(f,"M")&&(g+=" old"),b.isAfter(f,"M")&&(g+=" new"),b.isSame(e,"d")&&!m&&(g+=" active"),R(b,"d")||(g+=" disabled"),b.isSame(y(),"d")&&(g+=" today"),0!==b.day()&&6!==b.day()||(g+=" weekend"),c.append('<td data-action="selectDay" data-day="'+b.format("L")+'" class="day'+g+'">'+b.date()+"</td>"),b.add(1,"d");i.find("tbody").empty().append(k),T(),U(),V()}},X=function(){var b=o.find(".timepicker-hours table"),c=f.clone().startOf("d"),d=[],e=a("<tr>");for(f.hour()>11&&!h&&c.hour(12);c.isSame(f,"d")&&(h||f.hour()<12&&c.hour()<12||f.hour()>11);)c.hour()%4===0&&(e=a("<tr>"),d.push(e)),e.append('<td data-action="selectHour" class="hour'+(R(c,"h")?"":" disabled")+'">'+c.format(h?"HH":"hh")+"</td>"),c.add(1,"h");b.empty().append(d)},Y=function(){for(var b=o.find(".timepicker-minutes table"),c=f.clone().startOf("h"),e=[],g=a("<tr>"),h=1===d.stepping?5:d.stepping;f.isSame(c,"h");)c.minute()%(4*h)===0&&(g=a("<tr>"),e.push(g)),g.append('<td data-action="selectMinute" class="minute'+(R(c,"m")?"":" disabled")+'">'+c.format("mm")+"</td>"),c.add(h,"m");b.empty().append(e)},Z=function(){for(var b=o.find(".timepicker-seconds table"),c=f.clone().startOf("m"),d=[],e=a("<tr>");f.isSame(c,"m");)c.second()%20===0&&(e=a("<tr>"),d.push(e)),e.append('<td data-action="selectSecond" class="second'+(R(c,"s")?"":" disabled")+'">'+c.format("ss")+"</td>"),c.add(5,"s");b.empty().append(d)},$=function(){var a,b,c=o.find(".timepicker span[data-time-component]");h||(a=o.find(".timepicker [data-action=togglePeriod]"),b=e.clone().add(e.hours()>=12?-12:12,"h"),a.text(e.format("A")),R(b,"h")?a.removeClass("disabled"):a.addClass("disabled")),c.filter("[data-time-component=hours]").text(e.format(h?"HH":"hh")),c.filter("[data-time-component=minutes]").text(e.format("mm")),c.filter("[data-time-component=seconds]").text(e.format("ss")),X(),Y(),Z()},_=function(){o&&(W(),$())},aa=function(a){var b=m?null:e;
         | 
| 53 | 
            +
            // case of calling setValue(null or false)
         | 
| 54 | 
            +
            // case of calling setValue(null or false)
         | 
| 55 | 
            +
            //viewDate = date.clone(); // TODO this doesn't work right on first use
         | 
| 56 | 
            +
            return a?(a=a.clone().locale(d.locale),x()&&a.tz(d.timeZone),1!==d.stepping&&a.minutes(Math.round(a.minutes()/d.stepping)*d.stepping).seconds(0),void(R(a)?(e=a,g.val(e.format(i)),c.data("date",e.format(i)),m=!1,_(),J({type:"dp.change",date:e.clone(),oldDate:b})):(d.keepInvalid?J({type:"dp.change",date:a,oldDate:b}):g.val(m?"":e.format(i)),J({type:"dp.error",date:a,oldDate:b})))):(m=!0,g.val(""),c.data("date",""),J({type:"dp.change",date:!1,oldDate:b}),void _())},/**
         | 
| 57 | 
            +
                         * Hides the widget. Possibly will emit dp.hide
         | 
| 58 | 
            +
                         */
         | 
| 59 | 
            +
            ba=function(){var b=!1;
         | 
| 60 | 
            +
            // Ignore event if in the middle of a picker transition
         | 
| 61 | 
            +
            return o?(o.find(".collapse").each(function(){var c=a(this).data("collapse");return c&&c.transitioning?(b=!0,!1):!0}),b?l:(n&&n.hasClass("btn")&&n.toggleClass("active"),o.hide(),a(window).off("resize",I),o.off("click","[data-action]"),o.off("mousedown",!1),o.remove(),o=!1,J({type:"dp.hide",date:e.clone()}),g.blur(),k=0,f=e.clone(),l)):l},ca=function(){aa(null)},da=function(a){
         | 
| 62 | 
            +
            //inputDate.locale(options.locale);
         | 
| 63 | 
            +
            return void 0===d.parseInputDate?b.isMoment(a)||(a=y(a)):a=d.parseInputDate(a),a},/********************************************************************************
         | 
| 64 | 
            +
                         *
         | 
| 65 | 
            +
                         * Widget UI interaction functions
         | 
| 66 | 
            +
                         *
         | 
| 67 | 
            +
                         ********************************************************************************/
         | 
| 68 | 
            +
            ea={next:function(){var a=q[k].navFnc;f.add(q[k].navStep,a),W(),K(a)},previous:function(){var a=q[k].navFnc;f.subtract(q[k].navStep,a),W(),K(a)},pickerSwitch:function(){L(1)},selectMonth:function(b){var c=a(b.target).closest("tbody").find("span").index(a(b.target));f.month(c),k===p?(aa(e.clone().year(f.year()).month(f.month())),d.inline||ba()):(L(-1),W()),K("M")},selectYear:function(b){var c=parseInt(a(b.target).text(),10)||0;f.year(c),k===p?(aa(e.clone().year(f.year())),d.inline||ba()):(L(-1),W()),K("YYYY")},selectDecade:function(b){var c=parseInt(a(b.target).data("selection"),10)||0;f.year(c),k===p?(aa(e.clone().year(f.year())),d.inline||ba()):(L(-1),W()),K("YYYY")},selectDay:function(b){var c=f.clone();a(b.target).is(".old")&&c.subtract(1,"M"),a(b.target).is(".new")&&c.add(1,"M"),aa(c.date(parseInt(a(b.target).text(),10))),A()||d.keepOpen||d.inline||ba()},incrementHours:function(){var a=e.clone().add(1,"h");R(a,"h")&&aa(a)},incrementMinutes:function(){var a=e.clone().add(d.stepping,"m");R(a,"m")&&aa(a)},incrementSeconds:function(){var a=e.clone().add(1,"s");R(a,"s")&&aa(a)},decrementHours:function(){var a=e.clone().subtract(1,"h");R(a,"h")&&aa(a)},decrementMinutes:function(){var a=e.clone().subtract(d.stepping,"m");R(a,"m")&&aa(a)},decrementSeconds:function(){var a=e.clone().subtract(1,"s");R(a,"s")&&aa(a)},togglePeriod:function(){aa(e.clone().add(e.hours()>=12?-12:12,"h"))},togglePicker:function(b){var c,e=a(b.target),f=e.closest("ul"),g=f.find(".in"),h=f.find(".collapse:not(.in)");if(g&&g.length){if(c=g.data("collapse"),c&&c.transitioning)return;g.collapse?(// if collapse plugin is available through bootstrap.js then use it
         | 
| 69 | 
            +
            g.collapse("hide"),h.collapse("show")):(// otherwise just toggle in class on the two views
         | 
| 70 | 
            +
            g.removeClass("in"),h.addClass("in")),e.is("span")?e.toggleClass(d.icons.time+" "+d.icons.date):e.find("span").toggleClass(d.icons.time+" "+d.icons.date)}},showPicker:function(){o.find(".timepicker > div:not(.timepicker-picker)").hide(),o.find(".timepicker .timepicker-picker").show()},showHours:function(){o.find(".timepicker .timepicker-picker").hide(),o.find(".timepicker .timepicker-hours").show()},showMinutes:function(){o.find(".timepicker .timepicker-picker").hide(),o.find(".timepicker .timepicker-minutes").show()},showSeconds:function(){o.find(".timepicker .timepicker-picker").hide(),o.find(".timepicker .timepicker-seconds").show()},selectHour:function(b){var c=parseInt(a(b.target).text(),10);h||(e.hours()>=12?12!==c&&(c+=12):12===c&&(c=0)),aa(e.clone().hours(c)),ea.showPicker.call(l)},selectMinute:function(b){aa(e.clone().minutes(parseInt(a(b.target).text(),10))),ea.showPicker.call(l)},selectSecond:function(b){aa(e.clone().seconds(parseInt(a(b.target).text(),10))),ea.showPicker.call(l)},clear:ca,today:function(){var a=y();R(a,"d")&&aa(a)},close:ba},fa=function(b){return a(b.currentTarget).is(".disabled")?!1:(ea[a(b.currentTarget).data("action")].apply(l,arguments),!1)},/**
         | 
| 71 | 
            +
                         * Shows the widget. Possibly will emit dp.show and dp.change
         | 
| 72 | 
            +
                         */
         | 
| 73 | 
            +
            ga=function(){var b,c={year:function(a){return a.month(0).date(1).hours(0).seconds(0).minutes(0)},month:function(a){return a.date(1).hours(0).seconds(0).minutes(0)},day:function(a){return a.hours(0).seconds(0).minutes(0)},hour:function(a){return a.seconds(0).minutes(0)},minute:function(a){return a.seconds(0)}};// this handles clicks on the widget
         | 
| 74 | 
            +
            return g.prop("disabled")||!d.ignoreReadonly&&g.prop("readonly")||o?l:(void 0!==g.val()&&0!==g.val().trim().length?aa(da(g.val().trim())):m&&d.useCurrent&&(d.inline||g.is("input")&&0===g.val().trim().length)&&(b=y(),"string"==typeof d.useCurrent&&(b=c[d.useCurrent](b)),aa(b)),o=G(),M(),S(),o.find(".timepicker-hours").hide(),o.find(".timepicker-minutes").hide(),o.find(".timepicker-seconds").hide(),_(),L(),a(window).on("resize",I),o.on("click","[data-action]",fa),o.on("mousedown",!1),n&&n.hasClass("btn")&&n.toggleClass("active"),I(),o.show(),d.focusOnShow&&!g.is(":focus")&&g.focus(),J({type:"dp.show"}),l)},/**
         | 
| 75 | 
            +
                         * Shows or hides the widget
         | 
| 76 | 
            +
                         */
         | 
| 77 | 
            +
            ha=function(){return o?ba():ga()},ia=function(a){var b,c,e,f,g=null,h=[],i={},j=a.which,k="p";w[j]=k;for(b in w)w.hasOwnProperty(b)&&w[b]===k&&(h.push(b),parseInt(b,10)!==j&&(i[b]=!0));for(b in d.keyBinds)if(d.keyBinds.hasOwnProperty(b)&&"function"==typeof d.keyBinds[b]&&(e=b.split(" "),e.length===h.length&&v[j]===e[e.length-1])){for(f=!0,c=e.length-2;c>=0;c--)if(!(v[e[c]]in i)){f=!1;break}if(f){g=d.keyBinds[b];break}}g&&(g.call(l,o),a.stopPropagation(),a.preventDefault())},ja=function(a){w[a.which]="r",a.stopPropagation(),a.preventDefault()},ka=function(b){var c=a(b.target).val().trim(),d=c?da(c):null;return aa(d),b.stopImmediatePropagation(),!1},la=function(){g.on({change:ka,blur:d.debug?"":ba,keydown:ia,keyup:ja,focus:d.allowInputToggle?ga:""}),c.is("input")?g.on({focus:ga}):n&&(n.on("click",ha),n.on("mousedown",!1))},ma=function(){g.off({change:ka,blur:blur,keydown:ia,keyup:ja,focus:d.allowInputToggle?ba:""}),c.is("input")?g.off({focus:ga}):n&&(n.off("click",ha),n.off("mousedown",!1))},na=function(b){
         | 
| 78 | 
            +
            // Store given enabledDates and disabledDates as keys.
         | 
| 79 | 
            +
            // This way we can check their existence in O(1) time instead of looping through whole array.
         | 
| 80 | 
            +
            // (for example: options.enabledDates['2014-02-27'] === true)
         | 
| 81 | 
            +
            var c={};return a.each(b,function(){var a=da(this);a.isValid()&&(c[a.format("YYYY-MM-DD")]=!0)}),Object.keys(c).length?c:!1},oa=function(b){
         | 
| 82 | 
            +
            // Store given enabledHours and disabledHours as keys.
         | 
| 83 | 
            +
            // This way we can check their existence in O(1) time instead of looping through whole array.
         | 
| 84 | 
            +
            // (for example: options.enabledHours['2014-02-27'] === true)
         | 
| 85 | 
            +
            var c={};return a.each(b,function(){c[this]=!0}),Object.keys(c).length?c:!1},pa=function(){var a=d.format||"L LT";i=a.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(a){var b=e.localeData().longDateFormat(a)||a;return b.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(a){//temp fix for #740
         | 
| 86 | 
            +
            return e.localeData().longDateFormat(a)||a})}),j=d.extraFormats?d.extraFormats.slice():[],j.indexOf(a)<0&&j.indexOf(i)<0&&j.push(i),h=i.toLowerCase().indexOf("a")<1&&i.replace(/\[.*?\]/g,"").indexOf("h")<1,z("y")&&(p=2),z("M")&&(p=1),z("d")&&(p=0),k=Math.max(p,k),m||aa(e)};
         | 
| 87 | 
            +
            // initializing element and component attributes
         | 
| 88 | 
            +
            if(/********************************************************************************
         | 
| 89 | 
            +
                     *
         | 
| 90 | 
            +
                     * Public API functions
         | 
| 91 | 
            +
                     * =====================
         | 
| 92 | 
            +
                     *
         | 
| 93 | 
            +
                     * Important: Do not expose direct references to private objects or the options
         | 
| 94 | 
            +
                     * object to the outer world. Always return a clone when returning values or make
         | 
| 95 | 
            +
                     * a clone when setting a private variable.
         | 
| 96 | 
            +
                     *
         | 
| 97 | 
            +
                     ********************************************************************************/
         | 
| 98 | 
            +
            l.destroy=function(){
         | 
| 99 | 
            +
            ///<summary>Destroys the widget and removes all attached event listeners</summary>
         | 
| 100 | 
            +
            ba(),ma(),c.removeData("DateTimePicker"),c.removeData("date")},l.toggle=ha,l.show=ga,l.hide=ba,l.disable=function(){
         | 
| 101 | 
            +
            ///<summary>Disables the input element, the component is attached to, by adding a disabled="true" attribute to it.
         | 
| 102 | 
            +
            ///If the widget was visible before that call it is hidden. Possibly emits dp.hide</summary>
         | 
| 103 | 
            +
            return ba(),n&&n.hasClass("btn")&&n.addClass("disabled"),g.prop("disabled",!0),l},l.enable=function(){
         | 
| 104 | 
            +
            ///<summary>Enables the input element, the component is attached to, by removing disabled attribute from it.</summary>
         | 
| 105 | 
            +
            return n&&n.hasClass("btn")&&n.removeClass("disabled"),g.prop("disabled",!1),l},l.ignoreReadonly=function(a){if(0===arguments.length)return d.ignoreReadonly;if("boolean"!=typeof a)throw new TypeError("ignoreReadonly () expects a boolean parameter");return d.ignoreReadonly=a,l},l.options=function(b){if(0===arguments.length)return a.extend(!0,{},d);if(!(b instanceof Object))throw new TypeError("options() options parameter should be an object");return a.extend(!0,d,b),a.each(d,function(a,b){if(void 0===l[a])throw new TypeError("option "+a+" is not recognized!");l[a](b)}),l},l.date=function(a){
         | 
| 106 | 
            +
            ///<signature helpKeyword="$.fn.datetimepicker.date">
         | 
| 107 | 
            +
            ///<summary>Returns the component's model current date, a moment object or null if not set.</summary>
         | 
| 108 | 
            +
            ///<returns type="Moment">date.clone()</returns>
         | 
| 109 | 
            +
            ///</signature>
         | 
| 110 | 
            +
            ///<signature>
         | 
| 111 | 
            +
            ///<summary>Sets the components model current moment to it. Passing a null value unsets the components model current moment. Parsing of the newDate parameter is made using moment library with the options.format and options.useStrict components configuration.</summary>
         | 
| 112 | 
            +
            ///<param name="newDate" locid="$.fn.datetimepicker.date_p:newDate">Takes string, Date, moment, null parameter.</param>
         | 
| 113 | 
            +
            ///</signature>
         | 
| 114 | 
            +
            if(0===arguments.length)return m?null:e.clone();if(!(null===a||"string"==typeof a||b.isMoment(a)||a instanceof Date))throw new TypeError("date() parameter must be one of [null, string, moment or Date]");return aa(null===a?null:da(a)),l},l.format=function(a){
         | 
| 115 | 
            +
            ///<summary>test su</summary>
         | 
| 116 | 
            +
            ///<param name="newFormat">info about para</param>
         | 
| 117 | 
            +
            ///<returns type="string|boolean">returns foo</returns>
         | 
| 118 | 
            +
            if(0===arguments.length)return d.format;if("string"!=typeof a&&("boolean"!=typeof a||a!==!1))throw new TypeError("format() expects a string or boolean:false parameter "+a);return d.format=a,i&&pa(),l},l.timeZone=function(a){if(0===arguments.length)return d.timeZone;if("string"!=typeof a)throw new TypeError("newZone() expects a string parameter");return d.timeZone=a,l},l.dayViewHeaderFormat=function(a){if(0===arguments.length)return d.dayViewHeaderFormat;if("string"!=typeof a)throw new TypeError("dayViewHeaderFormat() expects a string parameter");return d.dayViewHeaderFormat=a,l},l.extraFormats=function(a){if(0===arguments.length)return d.extraFormats;if(a!==!1&&!(a instanceof Array))throw new TypeError("extraFormats() expects an array or false parameter");return d.extraFormats=a,j&&pa(),l},l.disabledDates=function(b){
         | 
| 119 | 
            +
            ///<signature helpKeyword="$.fn.datetimepicker.disabledDates">
         | 
| 120 | 
            +
            ///<summary>Returns an array with the currently set disabled dates on the component.</summary>
         | 
| 121 | 
            +
            ///<returns type="array">options.disabledDates</returns>
         | 
| 122 | 
            +
            ///</signature>
         | 
| 123 | 
            +
            ///<signature>
         | 
| 124 | 
            +
            ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of
         | 
| 125 | 
            +
            ///options.enabledDates if such exist.</summary>
         | 
| 126 | 
            +
            ///<param name="dates" locid="$.fn.datetimepicker.disabledDates_p:dates">Takes an [ string or Date or moment ] of values and allows the user to select only from those days.</param>
         | 
| 127 | 
            +
            ///</signature>
         | 
| 128 | 
            +
            if(0===arguments.length)return d.disabledDates?a.extend({},d.disabledDates):d.disabledDates;if(!b)return d.disabledDates=!1,_(),l;if(!(b instanceof Array))throw new TypeError("disabledDates() expects an array parameter");return d.disabledDates=na(b),d.enabledDates=!1,_(),l},l.enabledDates=function(b){
         | 
| 129 | 
            +
            ///<signature helpKeyword="$.fn.datetimepicker.enabledDates">
         | 
| 130 | 
            +
            ///<summary>Returns an array with the currently set enabled dates on the component.</summary>
         | 
| 131 | 
            +
            ///<returns type="array">options.enabledDates</returns>
         | 
| 132 | 
            +
            ///</signature>
         | 
| 133 | 
            +
            ///<signature>
         | 
| 134 | 
            +
            ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of options.disabledDates if such exist.</summary>
         | 
| 135 | 
            +
            ///<param name="dates" locid="$.fn.datetimepicker.enabledDates_p:dates">Takes an [ string or Date or moment ] of values and allows the user to select only from those days.</param>
         | 
| 136 | 
            +
            ///</signature>
         | 
| 137 | 
            +
            if(0===arguments.length)return d.enabledDates?a.extend({},d.enabledDates):d.enabledDates;if(!b)return d.enabledDates=!1,_(),l;if(!(b instanceof Array))throw new TypeError("enabledDates() expects an array parameter");return d.enabledDates=na(b),d.disabledDates=!1,_(),l},l.daysOfWeekDisabled=function(a){if(0===arguments.length)return d.daysOfWeekDisabled.splice(0);if("boolean"==typeof a&&!a)return d.daysOfWeekDisabled=!1,_(),l;if(!(a instanceof Array))throw new TypeError("daysOfWeekDisabled() expects an array parameter");if(d.daysOfWeekDisabled=a.reduce(function(a,b){return b=parseInt(b,10),b>6||0>b||isNaN(b)?a:(-1===a.indexOf(b)&&a.push(b),a)},[]).sort(),d.useCurrent&&!d.keepInvalid){for(var b=0;!R(e,"d");){if(e.add(1,"d"),7===b)throw"Tried 7 times to find a valid date";b++}aa(e)}return _(),l},l.maxDate=function(a){if(0===arguments.length)return d.maxDate?d.maxDate.clone():d.maxDate;if("boolean"==typeof a&&a===!1)return d.maxDate=!1,_(),l;"string"==typeof a&&("now"!==a&&"moment"!==a||(a=y()));var b=da(a);if(!b.isValid())throw new TypeError("maxDate() Could not parse date parameter: "+a);if(d.minDate&&b.isBefore(d.minDate))throw new TypeError("maxDate() date parameter is before options.minDate: "+b.format(i));return d.maxDate=b,d.useCurrent&&!d.keepInvalid&&e.isAfter(a)&&aa(d.maxDate),f.isAfter(b)&&(f=b.clone().subtract(d.stepping,"m")),_(),l},l.minDate=function(a){if(0===arguments.length)return d.minDate?d.minDate.clone():d.minDate;if("boolean"==typeof a&&a===!1)return d.minDate=!1,_(),l;"string"==typeof a&&("now"!==a&&"moment"!==a||(a=y()));var b=da(a);if(!b.isValid())throw new TypeError("minDate() Could not parse date parameter: "+a);if(d.maxDate&&b.isAfter(d.maxDate))throw new TypeError("minDate() date parameter is after options.maxDate: "+b.format(i));return d.minDate=b,d.useCurrent&&!d.keepInvalid&&e.isBefore(a)&&aa(d.minDate),f.isBefore(b)&&(f=b.clone().add(d.stepping,"m")),_(),l},l.defaultDate=function(a){
         | 
| 138 | 
            +
            ///<signature helpKeyword="$.fn.datetimepicker.defaultDate">
         | 
| 139 | 
            +
            ///<summary>Returns a moment with the options.defaultDate option configuration or false if not set</summary>
         | 
| 140 | 
            +
            ///<returns type="Moment">date.clone()</returns>
         | 
| 141 | 
            +
            ///</signature>
         | 
| 142 | 
            +
            ///<signature>
         | 
| 143 | 
            +
            ///<summary>Will set the picker's inital date. If a boolean:false value is passed the options.defaultDate parameter is cleared.</summary>
         | 
| 144 | 
            +
            ///<param name="defaultDate" locid="$.fn.datetimepicker.defaultDate_p:defaultDate">Takes a string, Date, moment, boolean:false</param>
         | 
| 145 | 
            +
            ///</signature>
         | 
| 146 | 
            +
            if(0===arguments.length)return d.defaultDate?d.defaultDate.clone():d.defaultDate;if(!a)return d.defaultDate=!1,l;"string"==typeof a&&(a="now"===a||"moment"===a?y():y(a));var b=da(a);if(!b.isValid())throw new TypeError("defaultDate() Could not parse date parameter: "+a);if(!R(b))throw new TypeError("defaultDate() date passed is invalid according to component setup validations");return d.defaultDate=b,(d.defaultDate&&d.inline||""===g.val().trim())&&aa(d.defaultDate),l},l.locale=function(a){if(0===arguments.length)return d.locale;if(!b.localeData(a))throw new TypeError("locale() locale "+a+" is not loaded from moment locales!");return d.locale=a,e.locale(d.locale),f.locale(d.locale),i&&pa(),o&&(ba(),ga()),l},l.stepping=function(a){return 0===arguments.length?d.stepping:(a=parseInt(a,10),(isNaN(a)||1>a)&&(a=1),d.stepping=a,l)},l.useCurrent=function(a){var b=["year","month","day","hour","minute"];if(0===arguments.length)return d.useCurrent;if("boolean"!=typeof a&&"string"!=typeof a)throw new TypeError("useCurrent() expects a boolean or string parameter");if("string"==typeof a&&-1===b.indexOf(a.toLowerCase()))throw new TypeError("useCurrent() expects a string parameter of "+b.join(", "));return d.useCurrent=a,l},l.collapse=function(a){if(0===arguments.length)return d.collapse;if("boolean"!=typeof a)throw new TypeError("collapse() expects a boolean parameter");return d.collapse===a?l:(d.collapse=a,o&&(ba(),ga()),l)},l.icons=function(b){if(0===arguments.length)return a.extend({},d.icons);if(!(b instanceof Object))throw new TypeError("icons() expects parameter to be an Object");return a.extend(d.icons,b),o&&(ba(),ga()),l},l.tooltips=function(b){if(0===arguments.length)return a.extend({},d.tooltips);if(!(b instanceof Object))throw new TypeError("tooltips() expects parameter to be an Object");return a.extend(d.tooltips,b),o&&(ba(),ga()),l},l.useStrict=function(a){if(0===arguments.length)return d.useStrict;if("boolean"!=typeof a)throw new TypeError("useStrict() expects a boolean parameter");return d.useStrict=a,l},l.sideBySide=function(a){if(0===arguments.length)return d.sideBySide;if("boolean"!=typeof a)throw new TypeError("sideBySide() expects a boolean parameter");return d.sideBySide=a,o&&(ba(),ga()),l},l.viewMode=function(a){if(0===arguments.length)return d.viewMode;if("string"!=typeof a)throw new TypeError("viewMode() expects a string parameter");if(-1===r.indexOf(a))throw new TypeError("viewMode() parameter must be one of ("+r.join(", ")+") value");return d.viewMode=a,k=Math.max(r.indexOf(a),p),L(),l},l.toolbarPlacement=function(a){if(0===arguments.length)return d.toolbarPlacement;if("string"!=typeof a)throw new TypeError("toolbarPlacement() expects a string parameter");if(-1===u.indexOf(a))throw new TypeError("toolbarPlacement() parameter must be one of ("+u.join(", ")+") value");return d.toolbarPlacement=a,o&&(ba(),ga()),l},l.widgetPositioning=function(b){if(0===arguments.length)return a.extend({},d.widgetPositioning);if("[object Object]"!=={}.toString.call(b))throw new TypeError("widgetPositioning() expects an object variable");if(b.horizontal){if("string"!=typeof b.horizontal)throw new TypeError("widgetPositioning() horizontal variable must be a string");if(b.horizontal=b.horizontal.toLowerCase(),-1===t.indexOf(b.horizontal))throw new TypeError("widgetPositioning() expects horizontal parameter to be one of ("+t.join(", ")+")");d.widgetPositioning.horizontal=b.horizontal}if(b.vertical){if("string"!=typeof b.vertical)throw new TypeError("widgetPositioning() vertical variable must be a string");if(b.vertical=b.vertical.toLowerCase(),-1===s.indexOf(b.vertical))throw new TypeError("widgetPositioning() expects vertical parameter to be one of ("+s.join(", ")+")");d.widgetPositioning.vertical=b.vertical}return _(),l},l.calendarWeeks=function(a){if(0===arguments.length)return d.calendarWeeks;if("boolean"!=typeof a)throw new TypeError("calendarWeeks() expects parameter to be a boolean value");return d.calendarWeeks=a,_(),l},l.showTodayButton=function(a){if(0===arguments.length)return d.showTodayButton;if("boolean"!=typeof a)throw new TypeError("showTodayButton() expects a boolean parameter");return d.showTodayButton=a,o&&(ba(),ga()),l},l.showClear=function(a){if(0===arguments.length)return d.showClear;if("boolean"!=typeof a)throw new TypeError("showClear() expects a boolean parameter");return d.showClear=a,o&&(ba(),ga()),l},l.widgetParent=function(b){if(0===arguments.length)return d.widgetParent;if("string"==typeof b&&(b=a(b)),null!==b&&"string"!=typeof b&&!(b instanceof a))throw new TypeError("widgetParent() expects a string or a jQuery object parameter");return d.widgetParent=b,o&&(ba(),ga()),l},l.keepOpen=function(a){if(0===arguments.length)return d.keepOpen;if("boolean"!=typeof a)throw new TypeError("keepOpen() expects a boolean parameter");return d.keepOpen=a,l},l.focusOnShow=function(a){if(0===arguments.length)return d.focusOnShow;if("boolean"!=typeof a)throw new TypeError("focusOnShow() expects a boolean parameter");return d.focusOnShow=a,l},l.inline=function(a){if(0===arguments.length)return d.inline;if("boolean"!=typeof a)throw new TypeError("inline() expects a boolean parameter");return d.inline=a,l},l.clear=function(){return ca(),l},l.keyBinds=function(a){return 0===arguments.length?d.keyBinds:(d.keyBinds=a,l)},l.getMoment=function(a){return y(a)},l.debug=function(a){if("boolean"!=typeof a)throw new TypeError("debug() expects a boolean parameter");return d.debug=a,l},l.allowInputToggle=function(a){if(0===arguments.length)return d.allowInputToggle;if("boolean"!=typeof a)throw new TypeError("allowInputToggle() expects a boolean parameter");return d.allowInputToggle=a,l},l.showClose=function(a){if(0===arguments.length)return d.showClose;if("boolean"!=typeof a)throw new TypeError("showClose() expects a boolean parameter");return d.showClose=a,l},l.keepInvalid=function(a){if(0===arguments.length)return d.keepInvalid;if("boolean"!=typeof a)throw new TypeError("keepInvalid() expects a boolean parameter");return d.keepInvalid=a,l},l.datepickerInput=function(a){if(0===arguments.length)return d.datepickerInput;if("string"!=typeof a)throw new TypeError("datepickerInput() expects a string parameter");return d.datepickerInput=a,l},l.parseInputDate=function(a){if(0===arguments.length)return d.parseInputDate;if("function"!=typeof a)throw new TypeError("parseInputDate() sholud be as function");return d.parseInputDate=a,l},l.disabledTimeIntervals=function(b){
         | 
| 147 | 
            +
            ///<signature helpKeyword="$.fn.datetimepicker.disabledTimeIntervals">
         | 
| 148 | 
            +
            ///<summary>Returns an array with the currently set disabled dates on the component.</summary>
         | 
| 149 | 
            +
            ///<returns type="array">options.disabledTimeIntervals</returns>
         | 
| 150 | 
            +
            ///</signature>
         | 
| 151 | 
            +
            ///<signature>
         | 
| 152 | 
            +
            ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of
         | 
| 153 | 
            +
            ///options.enabledDates if such exist.</summary>
         | 
| 154 | 
            +
            ///<param name="dates" locid="$.fn.datetimepicker.disabledTimeIntervals_p:dates">Takes an [ string or Date or moment ] of values and allows the user to select only from those days.</param>
         | 
| 155 | 
            +
            ///</signature>
         | 
| 156 | 
            +
            if(0===arguments.length)return d.disabledTimeIntervals?a.extend({},d.disabledTimeIntervals):d.disabledTimeIntervals;if(!b)return d.disabledTimeIntervals=!1,_(),l;if(!(b instanceof Array))throw new TypeError("disabledTimeIntervals() expects an array parameter");return d.disabledTimeIntervals=b,_(),l},l.disabledHours=function(b){
         | 
| 157 | 
            +
            ///<signature helpKeyword="$.fn.datetimepicker.disabledHours">
         | 
| 158 | 
            +
            ///<summary>Returns an array with the currently set disabled hours on the component.</summary>
         | 
| 159 | 
            +
            ///<returns type="array">options.disabledHours</returns>
         | 
| 160 | 
            +
            ///</signature>
         | 
| 161 | 
            +
            ///<signature>
         | 
| 162 | 
            +
            ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of
         | 
| 163 | 
            +
            ///options.enabledHours if such exist.</summary>
         | 
| 164 | 
            +
            ///<param name="hours" locid="$.fn.datetimepicker.disabledHours_p:hours">Takes an [ int ] of values and disallows the user to select only from those hours.</param>
         | 
| 165 | 
            +
            ///</signature>
         | 
| 166 | 
            +
            if(0===arguments.length)return d.disabledHours?a.extend({},d.disabledHours):d.disabledHours;if(!b)return d.disabledHours=!1,_(),l;if(!(b instanceof Array))throw new TypeError("disabledHours() expects an array parameter");if(d.disabledHours=oa(b),d.enabledHours=!1,d.useCurrent&&!d.keepInvalid){for(var c=0;!R(e,"h");){if(e.add(1,"h"),24===c)throw"Tried 24 times to find a valid date";c++}aa(e)}return _(),l},l.enabledHours=function(b){
         | 
| 167 | 
            +
            ///<signature helpKeyword="$.fn.datetimepicker.enabledHours">
         | 
| 168 | 
            +
            ///<summary>Returns an array with the currently set enabled hours on the component.</summary>
         | 
| 169 | 
            +
            ///<returns type="array">options.enabledHours</returns>
         | 
| 170 | 
            +
            ///</signature>
         | 
| 171 | 
            +
            ///<signature>
         | 
| 172 | 
            +
            ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of options.disabledHours if such exist.</summary>
         | 
| 173 | 
            +
            ///<param name="hours" locid="$.fn.datetimepicker.enabledHours_p:hours">Takes an [ int ] of values and allows the user to select only from those hours.</param>
         | 
| 174 | 
            +
            ///</signature>
         | 
| 175 | 
            +
            if(0===arguments.length)return d.enabledHours?a.extend({},d.enabledHours):d.enabledHours;if(!b)return d.enabledHours=!1,_(),l;if(!(b instanceof Array))throw new TypeError("enabledHours() expects an array parameter");if(d.enabledHours=oa(b),d.disabledHours=!1,d.useCurrent&&!d.keepInvalid){for(var c=0;!R(e,"h");){if(e.add(1,"h"),24===c)throw"Tried 24 times to find a valid date";c++}aa(e)}return _(),l},/**
         | 
| 176 | 
            +
                     * Returns the component's model current viewDate, a moment object or null if not set. Passing a null value unsets the components model current moment. Parsing of the newDate parameter is made using moment library with the options.format and options.useStrict components configuration.
         | 
| 177 | 
            +
                     * @param {Takes string, viewDate, moment, null parameter.} newDate
         | 
| 178 | 
            +
                     * @returns {viewDate.clone()}
         | 
| 179 | 
            +
                     */
         | 
| 180 | 
            +
            l.viewDate=function(a){if(0===arguments.length)return f.clone();if(!a)return f=e.clone(),l;if(!("string"==typeof a||b.isMoment(a)||a instanceof Date))throw new TypeError("viewDate() parameter must be one of [string, moment or Date]");return f=da(a),K(),l},c.is("input"))g=c;else if(g=c.find(d.datepickerInput),0===g.length)g=c.find("input");else if(!g.is("input"))throw new Error('CSS class "'+d.datepickerInput+'" cannot be applied to non input element');if(c.hasClass("input-group")&&(
         | 
| 181 | 
            +
            // in case there is more then one 'input-group-addon' Issue #48
         | 
| 182 | 
            +
            n=0===c.find(".datepickerbutton").length?c.find(".input-group-addon"):c.find(".datepickerbutton")),!d.inline&&!g.is("input"))throw new Error("Could not initialize DateTimePicker without an input element");
         | 
| 183 | 
            +
            // Set defaults for date here now instead of in var declaration
         | 
| 184 | 
            +
            return e=y(),f=e.clone(),a.extend(!0,d,H()),l.options(d),pa(),la(),g.prop("disabled")&&l.disable(),g.is("input")&&0!==g.val().trim().length?aa(da(g.val().trim())):d.defaultDate&&void 0===g.attr("placeholder")&&aa(d.defaultDate),d.inline&&ga(),l};/********************************************************************************
         | 
| 185 | 
            +
                 *
         | 
| 186 | 
            +
                 * jQuery plugin constructor and defaults object
         | 
| 187 | 
            +
                 *
         | 
| 188 | 
            +
                 ********************************************************************************/
         | 
| 189 | 
            +
            /**
         | 
| 190 | 
            +
                * See (http://jquery.com/).
         | 
| 191 | 
            +
                * @name jQuery
         | 
| 192 | 
            +
                * @class
         | 
| 193 | 
            +
                * See the jQuery Library  (http://jquery.com/) for full details.  This just
         | 
| 194 | 
            +
                * documents the function and classes that are added to jQuery by this plug-in.
         | 
| 195 | 
            +
                */
         | 
| 196 | 
            +
            /**
         | 
| 197 | 
            +
                 * See (http://jquery.com/)
         | 
| 198 | 
            +
                 * @name fn
         | 
| 199 | 
            +
                 * @class
         | 
| 200 | 
            +
                 * See the jQuery Library  (http://jquery.com/) for full details.  This just
         | 
| 201 | 
            +
                 * documents the function and classes that are added to jQuery by this plug-in.
         | 
| 202 | 
            +
                 * @memberOf jQuery
         | 
| 203 | 
            +
                 */
         | 
| 204 | 
            +
            /**
         | 
| 205 | 
            +
                 * Show comments
         | 
| 206 | 
            +
                 * @class datetimepicker
         | 
| 207 | 
            +
                 * @memberOf jQuery.fn
         | 
| 208 | 
            +
                 */
         | 
| 209 | 
            +
            a.fn.datetimepicker=function(b){b=b||{};var d,e=Array.prototype.slice.call(arguments,1),f=!0,g=["destroy","hide","show","toggle"];if("object"==typeof b)return this.each(function(){var d=a(this);d.data("DateTimePicker")||(b=a.extend(!0,{},a.fn.datetimepicker.defaults,b),d.data("DateTimePicker",c(d,b)))});if("string"==typeof b)return this.each(function(){var c=a(this),g=c.data("DateTimePicker");if(!g)throw new Error('bootstrap-datetimepicker("'+b+'") method was called on an element that is not using DateTimePicker');d=g[b].apply(g,e),f=d===g}),f||a.inArray(b,g)>-1?this:d;throw new TypeError("Invalid arguments for DateTimePicker: "+b)},a.fn.datetimepicker.defaults={timeZone:"",format:!1,dayViewHeaderFormat:"MMMM YYYY",extraFormats:!1,stepping:1,minDate:!1,maxDate:!1,useCurrent:!0,collapse:!0,locale:b.locale(),defaultDate:!1,disabledDates:!1,enabledDates:!1,icons:{time:"glyphicon glyphicon-time",date:"glyphicon glyphicon-calendar",up:"glyphicon glyphicon-chevron-up",down:"glyphicon glyphicon-chevron-down",previous:"glyphicon glyphicon-chevron-left",next:"glyphicon glyphicon-chevron-right",today:"glyphicon glyphicon-screenshot",clear:"glyphicon glyphicon-trash",close:"glyphicon glyphicon-remove"},tooltips:{today:"Go to today",clear:"Clear selection",close:"Close the picker",selectMonth:"Select Month",prevMonth:"Previous Month",nextMonth:"Next Month",selectYear:"Select Year",prevYear:"Previous Year",nextYear:"Next Year",selectDecade:"Select Decade",prevDecade:"Previous Decade",nextDecade:"Next Decade",prevCentury:"Previous Century",nextCentury:"Next Century",pickHour:"Pick Hour",incrementHour:"Increment Hour",decrementHour:"Decrement Hour",pickMinute:"Pick Minute",incrementMinute:"Increment Minute",decrementMinute:"Decrement Minute",pickSecond:"Pick Second",incrementSecond:"Increment Second",decrementSecond:"Decrement Second",togglePeriod:"Toggle Period",selectTime:"Select Time"},useStrict:!1,sideBySide:!1,daysOfWeekDisabled:!1,calendarWeeks:!1,viewMode:"days",toolbarPlacement:"default",showTodayButton:!1,showClear:!1,showClose:!1,widgetPositioning:{horizontal:"auto",vertical:"auto"},widgetParent:null,ignoreReadonly:!1,keepOpen:!1,focusOnShow:!0,inline:!1,keepInvalid:!1,datepickerInput:".datepickerinput",keyBinds:{up:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().subtract(7,"d")):this.date(b.clone().add(this.stepping(),"m"))}},down:function(a){if(!a)return void this.show();var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().add(7,"d")):this.date(b.clone().subtract(this.stepping(),"m"))},"control up":function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().subtract(1,"y")):this.date(b.clone().add(1,"h"))}},"control down":function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().add(1,"y")):this.date(b.clone().subtract(1,"h"))}},left:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().subtract(1,"d"))}},right:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().add(1,"d"))}},pageUp:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().subtract(1,"M"))}},pageDown:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().add(1,"M"))}},enter:function(){this.hide()},escape:function(){this.hide()},
         | 
| 210 | 
            +
            //tab: function (widget) { //this break the flow of the form. disabling for now
         | 
| 211 | 
            +
            //    var toggle = widget.find('.picker-switch a[data-action="togglePicker"]');
         | 
| 212 | 
            +
            //    if(toggle.length > 0) toggle.click();
         | 
| 213 | 
            +
            //},
         | 
| 214 | 
            +
            "control space":function(a){a.find(".timepicker").is(":visible")&&a.find('.btn[data-action="togglePeriod"]').click()},t:function(){this.date(this.getMoment())},"delete":function(){this.clear()}},debug:!1,allowInputToggle:!1,disabledTimeIntervals:!1,disabledHours:!1,enabledHours:!1,viewDate:!1},"undefined"!=typeof module&&(module.exports=a.fn.datetimepicker)});
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: bootstrap3-datetimepicker-rails
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 4.17. | 
| 4 | 
            +
              version: 4.17.42
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Trevor Strieber
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2016-09-07 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         |