[TASK] Load bootstrap datetimepicker via bower 85/38285/2
authorBenjamin Mack <benni@typo3.org>
Thu, 26 Mar 2015 22:56:03 +0000 (23:56 +0100)
committerWouter Wolters <typo3@wouterwolters.nl>
Thu, 26 Mar 2015 23:14:32 +0000 (00:14 +0100)
The Bootstrap DateTimePicker library previously located in
"typo3/contrib/twbs" is now fetched via bower and copied
to the public JavaScript folder via Grunt.

The LESS inclusion path is modified as well.

Resolves: #66076
Releases: master
Change-Id: Iea302310f59d729c4c16012bc572e9471e2c433e
Reviewed-on: http://review.typo3.org/38285
Reviewed-by: Jan Helke <typo3@helke.de>
Tested-by: Jan Helke <typo3@helke.de>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
Build/Gruntfile.js
Build/bower.json
typo3/contrib/twbs/README.txt [deleted file]
typo3/contrib/twbs/bootstrap-datetimepicker.js [deleted file]
typo3/contrib/twbs/bootstrap-datetimepicker.less [deleted file]
typo3/contrib/twbs/bootstrap-datetimepicker.min.css [deleted file]
typo3/contrib/twbs/bootstrap-datetimepicker.min.js [deleted file]
typo3/sysext/core/Classes/Page/PageRenderer.php
typo3/sysext/core/Resources/Public/JavaScript/Contrib/bootstrap-datetimepicker.js [new file with mode: 0644]
typo3/sysext/t3skin/Resources/Private/Styles/t3skin.less

index 803335f..3d24149 100644 (file)
@@ -49,6 +49,7 @@ module.exports = function(grunt) {
                                        '<%= paths.core %>Public/JavaScript/Contrib/jquery.dataTables.js': '/datatables/media/js/jquery.dataTables.min.js',
                                        '<%= paths.core %>Public/JavaScript/Contrib/requirejs/': '/requirejs/require.js',
                                        '<%= paths.core %>Public/JavaScript/Contrib/moment/': '/moment/moment.js',
+                                       '<%= paths.core %>Public/JavaScript/Contrib/bootstrap-datetimepicker.js': '/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js',
                                        /**
                                         * copy needed parts of jquery-ui
                                         */
index fad230f..f1aabde 100644 (file)
@@ -29,6 +29,7 @@
   "dependencies": {
     "requirejs": "2.1.15",
     "jquery-ui": "1.11.2",
+    "eonasdan-bootstrap-datetimepicker": "3.1.3",
     "moment": "2.8.3",
     "nprogress": "0.1.6",
     "datatables": "1.10.5"
diff --git a/typo3/contrib/twbs/README.txt b/typo3/contrib/twbs/README.txt
deleted file mode 100644 (file)
index 68648e0..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-The component "Bootstrap DateTimePicker" was downloaded from
-
-http://eonasdan.github.io/bootstrap-datetimepicker/
-
-and is licensed under MIT.
-
-It is used by the TYPO3 Backend as DateTime Widget in
-EXT:Scheduler and FormEngine, using .less and the minified
-bootstrap js file as un-named AMD module.
-
-Please note that this is a 3rd party library. If you e.g. need
-the styles, feel free to use the CSS file directly. However,
-be aware that these files might be moved during the CMS 7
-development to be fetched via Composer and be put in a different
-directory.
\ No newline at end of file
diff --git a/typo3/contrib/twbs/bootstrap-datetimepicker.js b/typo3/contrib/twbs/bootstrap-datetimepicker.js
deleted file mode 100644 (file)
index 44abcc1..0000000
+++ /dev/null
@@ -1,1384 +0,0 @@
-/*
-//! version : 3.1.3
-=========================================================
-bootstrap-datetimepicker.js
-https://github.com/Eonasdan/bootstrap-datetimepicker
-=========================================================
-The MIT License (MIT)
-
-Copyright (c) 2014 Jonathan Peterson
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-;(function (root, factory) {
-    'use strict';
-    if (typeof define === 'function' && define.amd) {
-        // AMD is used - Register as an anonymous module.
-        define(['jquery', 'moment'], factory);
-    } else if (typeof exports === 'object') {
-        factory(require('jquery'), require('moment'));
-    }
-    else {
-        // Neither AMD or CommonJS used. Use global variables.
-        if (!jQuery) {
-            throw new Error('bootstrap-datetimepicker requires jQuery to be loaded first');
-        }
-        if (!moment) {
-            throw new Error('bootstrap-datetimepicker requires moment.js to be loaded first');
-        }
-        factory(root.jQuery, moment);
-    }
-}(this, function ($, moment) {
-    'use strict';
-    if (typeof moment === 'undefined') {
-        throw new Error('momentjs is required');
-    }
-
-    var dpgId = 0,
-
-    DateTimePicker = function (element, options) {
-        var defaults = $.fn.datetimepicker.defaults,
-
-            icons = {
-                time: 'glyphicon glyphicon-time',
-                date: 'glyphicon glyphicon-calendar',
-                up: 'glyphicon glyphicon-chevron-up',
-                down: 'glyphicon glyphicon-chevron-down'
-            },
-
-            picker = this,
-            errored = false,
-            dDate,
-
-        init = function () {
-            var icon = false, localeData, rInterval;
-            picker.options = $.extend({}, defaults, options);
-            picker.options.icons = $.extend({}, icons, picker.options.icons);
-
-            picker.element = $(element);
-
-            dataToOptions();
-
-            if (!(picker.options.pickTime || picker.options.pickDate)) {
-                throw new Error('Must choose at least one picker');
-            }
-
-            picker.id = dpgId++;
-            moment.locale(picker.options.language);
-            picker.date = moment();
-            picker.unset = false;
-            picker.isInput = picker.element.is('input');
-            picker.component = false;
-
-            if (picker.element.hasClass('input-group')) {
-                if (picker.element.find('.datepickerbutton').size() === 0) {//in case there is more then one 'input-group-addon' Issue #48
-                    picker.component = picker.element.find('[class^="input-group-"]');
-                }
-                else {
-                    picker.component = picker.element.find('.datepickerbutton');
-                }
-            }
-            picker.format = picker.options.format;
-
-            localeData = moment().localeData();
-
-            if (!picker.format) {
-                picker.format = (picker.options.pickDate ? localeData.longDateFormat('L') : '');
-                if (picker.options.pickDate && picker.options.pickTime) {
-                    picker.format += ' ';
-                }
-                picker.format += (picker.options.pickTime ? localeData.longDateFormat('LT') : '');
-                if (picker.options.useSeconds) {
-                    if (localeData.longDateFormat('LT').indexOf(' A') !== -1) {
-                        picker.format = picker.format.split(' A')[0] + ':ss A';
-                    }
-                    else {
-                        picker.format += ':ss';
-                    }
-                }
-            }
-            picker.use24hours = (picker.format.toLowerCase().indexOf('a') < 0 && picker.format.indexOf('h') < 0);
-
-            if (picker.component) {
-                icon = picker.component.find('span');
-            }
-
-            if (picker.options.pickTime) {
-                if (icon) {
-                    icon.addClass(picker.options.icons.time);
-                }
-            }
-            if (picker.options.pickDate) {
-                if (icon) {
-                    icon.removeClass(picker.options.icons.time);
-                    icon.addClass(picker.options.icons.date);
-                }
-            }
-
-            picker.options.widgetParent =
-                typeof picker.options.widgetParent === 'string' && picker.options.widgetParent ||
-                picker.element.parents().filter(function () {
-                    return 'scroll' === $(this).css('overflow-y');
-                }).get(0) ||
-                'body';
-
-            picker.widget = $(getTemplate()).appendTo(picker.options.widgetParent);
-
-            picker.minViewMode = picker.options.minViewMode || 0;
-            if (typeof picker.minViewMode === 'string') {
-                switch (picker.minViewMode) {
-                    case 'months':
-                        picker.minViewMode = 1;
-                        break;
-                    case 'years':
-                        picker.minViewMode = 2;
-                        break;
-                    default:
-                        picker.minViewMode = 0;
-                        break;
-                }
-            }
-            picker.viewMode = picker.options.viewMode || 0;
-            if (typeof picker.viewMode === 'string') {
-                switch (picker.viewMode) {
-                    case 'months':
-                        picker.viewMode = 1;
-                        break;
-                    case 'years':
-                        picker.viewMode = 2;
-                        break;
-                    default:
-                        picker.viewMode = 0;
-                        break;
-                }
-            }
-
-            picker.viewMode = Math.max(picker.viewMode, picker.minViewMode);
-
-            picker.options.disabledDates = indexGivenDates(picker.options.disabledDates);
-            picker.options.enabledDates = indexGivenDates(picker.options.enabledDates);
-
-            picker.startViewMode = picker.viewMode;
-            picker.setMinDate(picker.options.minDate);
-            picker.setMaxDate(picker.options.maxDate);
-            fillDow();
-            fillMonths();
-            fillHours();
-            fillMinutes();
-            fillSeconds();
-            update();
-            showMode();
-            if (!getPickerInput().prop('disabled')) {
-                attachDatePickerEvents();
-            }
-            if (picker.options.defaultDate !== '' && getPickerInput().val() === '') {
-                picker.setValue(picker.options.defaultDate);
-            }
-            if (picker.options.minuteStepping !== 1) {
-                rInterval = picker.options.minuteStepping;
-                picker.date.minutes((Math.round(picker.date.minutes() / rInterval) * rInterval) % 60).seconds(0);
-            }
-        },
-
-        getPickerInput = function () {
-            var input;
-
-            if (picker.isInput) {
-                return picker.element;
-            }
-            input = picker.element.find('.datepickerinput');
-            if (input.size() === 0) {
-                input = picker.element.find('input');
-            }
-            else if (!input.is('input')) {
-                throw new Error('CSS class "datepickerinput" cannot be applied to non input element');
-            }
-            return input;
-        },
-
-        dataToOptions = function () {
-            var eData;
-            if (picker.element.is('input')) {
-                eData = picker.element.data();
-            }
-            else {
-                eData = picker.element.find('input').data();
-            }
-            if (eData.dateFormat !== undefined) {
-                picker.options.format = eData.dateFormat;
-            }
-            if (eData.datePickdate !== undefined) {
-                picker.options.pickDate = eData.datePickdate;
-            }
-            if (eData.datePicktime !== undefined) {
-                picker.options.pickTime = eData.datePicktime;
-            }
-            if (eData.dateUseminutes !== undefined) {
-                picker.options.useMinutes = eData.dateUseminutes;
-            }
-            if (eData.dateUseseconds !== undefined) {
-                picker.options.useSeconds = eData.dateUseseconds;
-            }
-            if (eData.dateUsecurrent !== undefined) {
-                picker.options.useCurrent = eData.dateUsecurrent;
-            }
-            if (eData.calendarWeeks !== undefined) {
-                picker.options.calendarWeeks = eData.calendarWeeks;
-            }
-            if (eData.dateMinutestepping !== undefined) {
-                picker.options.minuteStepping = eData.dateMinutestepping;
-            }
-            if (eData.dateMindate !== undefined) {
-                picker.options.minDate = eData.dateMindate;
-            }
-            if (eData.dateMaxdate !== undefined) {
-                picker.options.maxDate = eData.dateMaxdate;
-            }
-            if (eData.dateShowtoday !== undefined) {
-                picker.options.showToday = eData.dateShowtoday;
-            }
-            if (eData.dateCollapse !== undefined) {
-                picker.options.collapse = eData.dateCollapse;
-            }
-            if (eData.dateLanguage !== undefined) {
-                picker.options.language = eData.dateLanguage;
-            }
-            if (eData.dateDefaultdate !== undefined) {
-                picker.options.defaultDate = eData.dateDefaultdate;
-            }
-            if (eData.dateDisableddates !== undefined) {
-                picker.options.disabledDates = eData.dateDisableddates;
-            }
-            if (eData.dateEnableddates !== undefined) {
-                picker.options.enabledDates = eData.dateEnableddates;
-            }
-            if (eData.dateIcons !== undefined) {
-                picker.options.icons = eData.dateIcons;
-            }
-            if (eData.dateUsestrict !== undefined) {
-                picker.options.useStrict = eData.dateUsestrict;
-            }
-            if (eData.dateDirection !== undefined) {
-                picker.options.direction = eData.dateDirection;
-            }
-            if (eData.dateSidebyside !== undefined) {
-                picker.options.sideBySide = eData.dateSidebyside;
-            }
-            if (eData.dateDaysofweekdisabled !== undefined) {
-                picker.options.daysOfWeekDisabled = eData.dateDaysofweekdisabled;
-            }
-        },
-
-        place = function () {
-            var position = 'absolute',
-                offset = picker.component ? picker.component.offset() : picker.element.offset(),
-                $window = $(window),
-                placePosition;
-
-            picker.width = picker.component ? picker.component.outerWidth() : picker.element.outerWidth();
-            offset.top = offset.top + picker.element.outerHeight();
-
-            if (picker.options.direction === 'up') {
-                placePosition = 'top';
-            } else if (picker.options.direction === 'bottom') {
-                placePosition = 'bottom';
-            } else if (picker.options.direction === 'auto') {
-                if (offset.top + picker.widget.height() > $window.height() + $window.scrollTop() && picker.widget.height() + picker.element.outerHeight() < offset.top) {
-                    placePosition = 'top';
-                } else {
-                    placePosition = 'bottom';
-                }
-            }
-            if (placePosition === 'top') {
-                offset.bottom = $window.height() - offset.top + picker.element.outerHeight() + 3;
-                picker.widget.addClass('top').removeClass('bottom');
-            } else {
-                offset.top += 1;
-                picker.widget.addClass('bottom').removeClass('top');
-            }
-
-            if (picker.options.width !== undefined) {
-                picker.widget.width(picker.options.width);
-            }
-
-            if (picker.options.orientation === 'left') {
-                picker.widget.addClass('left-oriented');
-                offset.left = offset.left - picker.widget.width() + 20;
-            }
-
-            if (isInFixed()) {
-                position = 'fixed';
-                offset.top -= $window.scrollTop();
-                offset.left -= $window.scrollLeft();
-            }
-
-            if ($window.width() < offset.left + picker.widget.outerWidth()) {
-                offset.right = $window.width() - offset.left - picker.width;
-                offset.left = 'auto';
-                picker.widget.addClass('pull-right');
-            } else {
-                offset.right = 'auto';
-                picker.widget.removeClass('pull-right');
-            }
-
-            if (placePosition === 'top') {
-                picker.widget.css({
-                    position: position,
-                    bottom: offset.bottom,
-                    top: 'auto',
-                    left: offset.left,
-                    right: offset.right
-                });
-            } else {
-                picker.widget.css({
-                    position: position,
-                    top: offset.top,
-                    bottom: 'auto',
-                    left: offset.left,
-                    right: offset.right
-                });
-            }
-        },
-
-        notifyChange = function (oldDate, eventType) {
-            if (moment(picker.date).isSame(moment(oldDate)) && !errored) {
-                return;
-            }
-            errored = false;
-            picker.element.trigger({
-                type: 'dp.change',
-                date: moment(picker.date),
-                oldDate: moment(oldDate)
-            });
-
-            if (eventType !== 'change') {
-                picker.element.change();
-            }
-        },
-
-        notifyError = function (date) {
-            errored = true;
-            picker.element.trigger({
-                type: 'dp.error',
-                date: moment(date, picker.format, picker.options.useStrict)
-            });
-        },
-
-        update = function (newDate) {
-            moment.locale(picker.options.language);
-            var dateStr = newDate;
-            if (!dateStr) {
-                dateStr = getPickerInput().val();
-                if (dateStr) {
-                    picker.date = moment(dateStr, picker.format, picker.options.useStrict);
-                }
-                if (!picker.date) {
-                    picker.date = moment();
-                }
-            }
-            picker.viewDate = moment(picker.date).startOf('month');
-            fillDate();
-            fillTime();
-        },
-
-        fillDow = function () {
-            moment.locale(picker.options.language);
-            var html = $('<tr>'), weekdaysMin = moment.weekdaysMin(), i;
-            if (picker.options.calendarWeeks === true) {
-                html.append('<th class="cw">#</th>');
-            }
-            if (moment().localeData()._week.dow === 0) { // starts on Sunday
-                for (i = 0; i < 7; i++) {
-                    html.append('<th class="dow">' + weekdaysMin[i] + '</th>');
-                }
-            } else {
-                for (i = 1; i < 8; i++) {
-                    if (i === 7) {
-                        html.append('<th class="dow">' + weekdaysMin[0] + '</th>');
-                    } else {
-                        html.append('<th class="dow">' + weekdaysMin[i] + '</th>');
-                    }
-                }
-            }
-            picker.widget.find('.datepicker-days thead').append(html);
-        },
-
-        fillMonths = function () {
-            moment.locale(picker.options.language);
-            var html = '', i, monthsShort = moment.monthsShort();
-            for (i = 0; i < 12; i++) {
-                html += '<span class="month">' + monthsShort[i] + '</span>';
-            }
-            picker.widget.find('.datepicker-months td').append(html);
-        },
-
-        fillDate = function () {
-            if (!picker.options.pickDate) {
-                return;
-            }
-            moment.locale(picker.options.language);
-            var year = picker.viewDate.year(),
-                month = picker.viewDate.month(),
-                startYear = picker.options.minDate.year(),
-                startMonth = picker.options.minDate.month(),
-                endYear = picker.options.maxDate.year(),
-                endMonth = picker.options.maxDate.month(),
-                currentDate,
-                prevMonth, nextMonth, html = [], row, clsName, i, days, yearCont, currentYear, months = moment.months();
-
-            picker.widget.find('.datepicker-days').find('.disabled').removeClass('disabled');
-            picker.widget.find('.datepicker-months').find('.disabled').removeClass('disabled');
-            picker.widget.find('.datepicker-years').find('.disabled').removeClass('disabled');
-
-            picker.widget.find('.datepicker-days th:eq(1)').text(
-                months[month] + ' ' + year);
-
-            prevMonth = moment(picker.viewDate, picker.format, picker.options.useStrict).subtract(1, 'months');
-            days = prevMonth.daysInMonth();
-            prevMonth.date(days).startOf('week');
-            if ((year === startYear && month <= startMonth) || year < startYear) {
-                picker.widget.find('.datepicker-days th:eq(0)').addClass('disabled');
-            }
-            if ((year === endYear && month >= endMonth) || year > endYear) {
-                picker.widget.find('.datepicker-days th:eq(2)').addClass('disabled');
-            }
-
-            nextMonth = moment(prevMonth).add(42, 'd');
-            while (prevMonth.isBefore(nextMonth)) {
-                if (prevMonth.weekday() === moment().startOf('week').weekday()) {
-                    row = $('<tr>');
-                    html.push(row);
-                    if (picker.options.calendarWeeks === true) {
-                        row.append('<td class="cw">' + prevMonth.week() + '</td>');
-                    }
-                }
-                clsName = '';
-                if (prevMonth.year() < year || (prevMonth.year() === year && prevMonth.month() < month)) {
-                    clsName += ' old';
-                } else if (prevMonth.year() > year || (prevMonth.year() === year && prevMonth.month() > month)) {
-                    clsName += ' new';
-                }
-                if (prevMonth.isSame(moment({y: picker.date.year(), M: picker.date.month(), d: picker.date.date()}))) {
-                    clsName += ' active';
-                }
-                if (isInDisableDates(prevMonth, 'day') || !isInEnableDates(prevMonth)) {
-                    clsName += ' disabled';
-                }
-                if (picker.options.showToday === true) {
-                    if (prevMonth.isSame(moment(), 'day')) {
-                        clsName += ' today';
-                    }
-                }
-                if (picker.options.daysOfWeekDisabled) {
-                    for (i = 0; i < picker.options.daysOfWeekDisabled.length; i++) {
-                        if (prevMonth.day() === picker.options.daysOfWeekDisabled[i]) {
-                            clsName += ' disabled';
-                            break;
-                        }
-                    }
-                }
-                row.append('<td class="day' + clsName + '">' + prevMonth.date() + '</td>');
-
-                currentDate = prevMonth.date();
-                prevMonth.add(1, 'd');
-
-                if (currentDate === prevMonth.date()) {
-                    prevMonth.add(1, 'd');
-                }
-            }
-            picker.widget.find('.datepicker-days tbody').empty().append(html);
-            currentYear = picker.date.year();
-            months = picker.widget.find('.datepicker-months').find('th:eq(1)').text(year).end().find('span').removeClass('active');
-            if (currentYear === year) {
-                months.eq(picker.date.month()).addClass('active');
-            }
-            if (year - 1 < startYear) {
-                picker.widget.find('.datepicker-months th:eq(0)').addClass('disabled');
-            }
-            if (year + 1 > endYear) {
-                picker.widget.find('.datepicker-months th:eq(2)').addClass('disabled');
-            }
-            for (i = 0; i < 12; i++) {
-                if ((year === startYear && startMonth > i) || (year < startYear)) {
-                    $(months[i]).addClass('disabled');
-                } else if ((year === endYear && endMonth < i) || (year > endYear)) {
-                    $(months[i]).addClass('disabled');
-                }
-            }
-
-            html = '';
-            year = parseInt(year / 10, 10) * 10;
-            yearCont = picker.widget.find('.datepicker-years').find(
-                'th:eq(1)').text(year + '-' + (year + 9)).parents('table').find('td');
-            picker.widget.find('.datepicker-years').find('th').removeClass('disabled');
-            if (startYear > year) {
-                picker.widget.find('.datepicker-years').find('th:eq(0)').addClass('disabled');
-            }
-            if (endYear < year + 9) {
-                picker.widget.find('.datepicker-years').find('th:eq(2)').addClass('disabled');
-            }
-            year -= 1;
-            for (i = -1; i < 11; i++) {
-                html += '<span class="year' + (i === -1 || i === 10 ? ' old' : '') + (currentYear === year ? ' active' : '') + ((year < startYear || year > endYear) ? ' disabled' : '') + '">' + year + '</span>';
-                year += 1;
-            }
-            yearCont.html(html);
-        },
-
-        fillHours = function () {
-            moment.locale(picker.options.language);
-            var table = picker.widget.find('.timepicker .timepicker-hours table'), html = '', current, i, j;
-            table.parent().hide();
-            if (picker.use24hours) {
-                current = 0;
-                for (i = 0; i < 6; i += 1) {
-                    html += '<tr>';
-                    for (j = 0; j < 4; j += 1) {
-                        html += '<td class="hour">' + padLeft(current.toString()) + '</td>';
-                        current++;
-                    }
-                    html += '</tr>';
-                }
-            }
-            else {
-                current = 1;
-                for (i = 0; i < 3; i += 1) {
-                    html += '<tr>';
-                    for (j = 0; j < 4; j += 1) {
-                        html += '<td class="hour">' + padLeft(current.toString()) + '</td>';
-                        current++;
-                    }
-                    html += '</tr>';
-                }
-            }
-            table.html(html);
-        },
-
-        fillMinutes = function () {
-            var table = picker.widget.find('.timepicker .timepicker-minutes table'), html = '', current = 0, i, j, step = picker.options.minuteStepping;
-            table.parent().hide();
-            if (step === 1)  {
-                step = 5;
-            }
-            for (i = 0; i < Math.ceil(60 / step / 4) ; i++) {
-                html += '<tr>';
-                for (j = 0; j < 4; j += 1) {
-                    if (current < 60) {
-                        html += '<td class="minute">' + padLeft(current.toString()) + '</td>';
-                        current += step;
-                    } else {
-                        html += '<td></td>';
-                    }
-                }
-                html += '</tr>';
-            }
-            table.html(html);
-        },
-
-        fillSeconds = function () {
-            var table = picker.widget.find('.timepicker .timepicker-seconds table'), html = '', current = 0, i, j;
-            table.parent().hide();
-            for (i = 0; i < 3; i++) {
-                html += '<tr>';
-                for (j = 0; j < 4; j += 1) {
-                    html += '<td class="second">' + padLeft(current.toString()) + '</td>';
-                    current += 5;
-                }
-                html += '</tr>';
-            }
-            table.html(html);
-        },
-
-        fillTime = function () {
-            if (!picker.date) {
-                return;
-            }
-            var timeComponents = picker.widget.find('.timepicker span[data-time-component]'),
-                hour = picker.date.hours(),
-                period = picker.date.format('A');
-            if (!picker.use24hours) {
-                if (hour === 0) {
-                    hour = 12;
-                } else if (hour !== 12) {
-                    hour = hour % 12;
-                }
-                picker.widget.find('.timepicker [data-action=togglePeriod]').text(period);
-            }
-            timeComponents.filter('[data-time-component=hours]').text(padLeft(hour));
-            timeComponents.filter('[data-time-component=minutes]').text(padLeft(picker.date.minutes()));
-            timeComponents.filter('[data-time-component=seconds]').text(padLeft(picker.date.second()));
-        },
-
-        click = function (e) {
-            e.stopPropagation();
-            e.preventDefault();
-            picker.unset = false;
-            var target = $(e.target).closest('span, td, th'), month, year, step, day, oldDate = moment(picker.date);
-            if (target.length === 1) {
-                if (!target.is('.disabled')) {
-                    switch (target[0].nodeName.toLowerCase()) {
-                        case 'th':
-                            switch (target[0].className) {
-                                case 'picker-switch':
-                                    showMode(1);
-                                    break;
-                                case 'prev':
-                                case 'next':
-                                    step = dpGlobal.modes[picker.viewMode].navStep;
-                                    if (target[0].className === 'prev') {
-                                        step = step * -1;
-                                    }
-                                    picker.viewDate.add(step, dpGlobal.modes[picker.viewMode].navFnc);
-                                    fillDate();
-                                    break;
-                            }
-                            break;
-                        case 'span':
-                            if (target.is('.month')) {
-                                month = target.parent().find('span').index(target);
-                                picker.viewDate.month(month);
-                            } else {
-                                year = parseInt(target.text(), 10) || 0;
-                                picker.viewDate.year(year);
-                            }
-                            if (picker.viewMode === picker.minViewMode) {
-                                picker.date = moment({
-                                    y: picker.viewDate.year(),
-                                    M: picker.viewDate.month(),
-                                    d: picker.viewDate.date(),
-                                    h: picker.date.hours(),
-                                    m: picker.date.minutes(),
-                                    s: picker.date.seconds()
-                                });
-                                set();
-                                notifyChange(oldDate, e.type);
-                            }
-                            showMode(-1);
-                            fillDate();
-                            break;
-                        case 'td':
-                            if (target.is('.day')) {
-                                day = parseInt(target.text(), 10) || 1;
-                                month = picker.viewDate.month();
-                                year = picker.viewDate.year();
-                                if (target.is('.old')) {
-                                    if (month === 0) {
-                                        month = 11;
-                                        year -= 1;
-                                    } else {
-                                        month -= 1;
-                                    }
-                                } else if (target.is('.new')) {
-                                    if (month === 11) {
-                                        month = 0;
-                                        year += 1;
-                                    } else {
-                                        month += 1;
-                                    }
-                                }
-                                picker.date = moment({
-                                    y: year,
-                                    M: month,
-                                    d: day,
-                                    h: picker.date.hours(),
-                                    m: picker.date.minutes(),
-                                    s: picker.date.seconds()
-                                }
-                                );
-                                picker.viewDate = moment({
-                                    y: year, M: month, d: Math.min(28, day)
-                                });
-                                fillDate();
-                                set();
-                                notifyChange(oldDate, e.type);
-                            }
-                            break;
-                    }
-                }
-            }
-        },
-
-        actions = {
-            incrementHours: function () {
-                checkDate('add', 'hours', 1);
-            },
-
-            incrementMinutes: function () {
-                checkDate('add', 'minutes', picker.options.minuteStepping);
-            },
-
-            incrementSeconds: function () {
-                checkDate('add', 'seconds', 1);
-            },
-
-            decrementHours: function () {
-                checkDate('subtract', 'hours', 1);
-            },
-
-            decrementMinutes: function () {
-                checkDate('subtract', 'minutes', picker.options.minuteStepping);
-            },
-
-            decrementSeconds: function () {
-                checkDate('subtract', 'seconds', 1);
-            },
-
-            togglePeriod: function () {
-                var hour = picker.date.hours();
-                if (hour >= 12) {
-                    hour -= 12;
-                } else {
-                    hour += 12;
-                }
-                picker.date.hours(hour);
-            },
-
-            showPicker: function () {
-                picker.widget.find('.timepicker > div:not(.timepicker-picker)').hide();
-                picker.widget.find('.timepicker .timepicker-picker').show();
-            },
-
-            showHours: function () {
-                picker.widget.find('.timepicker .timepicker-picker').hide();
-                picker.widget.find('.timepicker .timepicker-hours').show();
-            },
-
-            showMinutes: function () {
-                picker.widget.find('.timepicker .timepicker-picker').hide();
-                picker.widget.find('.timepicker .timepicker-minutes').show();
-            },
-
-            showSeconds: function () {
-                picker.widget.find('.timepicker .timepicker-picker').hide();
-                picker.widget.find('.timepicker .timepicker-seconds').show();
-            },
-
-            selectHour: function (e) {
-                var hour = parseInt($(e.target).text(), 10);
-                if (!picker.use24hours) {
-                    if (picker.date.hours() >= 12) {
-                        if (hour !== 12) {
-                            hour += 12;
-                        }
-                    } else {
-                        if (hour === 12) {
-                            hour = 0;
-                        }
-                    }
-                }
-                picker.date.hours(hour);
-                actions.showPicker.call(picker);
-            },
-
-            selectMinute: function (e) {
-                picker.date.minutes(parseInt($(e.target).text(), 10));
-                actions.showPicker.call(picker);
-            },
-
-            selectSecond: function (e) {
-                picker.date.seconds(parseInt($(e.target).text(), 10));
-                actions.showPicker.call(picker);
-            }
-        },
-
-        doAction = function (e) {
-            var oldDate = moment(picker.date),
-                action = $(e.currentTarget).data('action'),
-                rv = actions[action].apply(picker, arguments);
-            stopEvent(e);
-            if (!picker.date) {
-                picker.date = moment({y: 1970});
-            }
-            set();
-            fillTime();
-            notifyChange(oldDate, e.type);
-            return rv;
-        },
-
-        stopEvent = function (e) {
-            e.stopPropagation();
-            e.preventDefault();
-        },
-
-        keydown = function (e) {
-            if (e.keyCode === 27) { // allow escape to hide picker
-                picker.hide();
-            }
-        },
-
-        change = function (e) {
-            moment.locale(picker.options.language);
-            var input = $(e.target), oldDate = moment(picker.date), newDate = moment(input.val(), picker.format, picker.options.useStrict);
-            if (newDate.isValid() && !isInDisableDates(newDate) && isInEnableDates(newDate)) {
-                update();
-                picker.setValue(newDate);
-                notifyChange(oldDate, e.type);
-                set();
-            }
-            else {
-                picker.viewDate = oldDate;
-                picker.unset = true;
-                notifyChange(oldDate, e.type);
-                notifyError(newDate);
-            }
-        },
-
-        showMode = function (dir) {
-            if (dir) {
-                picker.viewMode = Math.max(picker.minViewMode, Math.min(2, picker.viewMode + dir));
-            }
-            picker.widget.find('.datepicker > div').hide().filter('.datepicker-' + dpGlobal.modes[picker.viewMode].clsName).show();
-        },
-
-        attachDatePickerEvents = function () {
-            var $this, $parent, expanded, closed, collapseData;
-            picker.widget.on('click', '.datepicker *', $.proxy(click, this)); // this handles date picker clicks
-            picker.widget.on('click', '[data-action]', $.proxy(doAction, this)); // this handles time picker clicks
-            picker.widget.on('mousedown', $.proxy(stopEvent, this));
-            picker.element.on('keydown', $.proxy(keydown, this));
-            if (picker.options.pickDate && picker.options.pickTime) {
-                picker.widget.on('click.togglePicker', '.accordion-toggle', function (e) {
-                    e.stopPropagation();
-                    $this = $(this);
-                    $parent = $this.closest('ul');
-                    expanded = $parent.find('.in');
-                    closed = $parent.find('.collapse:not(.in)');
-
-                    if (expanded && expanded.length) {
-                        collapseData = expanded.data('collapse');
-                        if (collapseData && collapseData.transitioning) {
-                            return;
-                        }
-                        expanded.collapse('hide');
-                        closed.collapse('show');
-                        $this.find('span').toggleClass(picker.options.icons.time + ' ' + picker.options.icons.date);
-                        if (picker.component) {
-                            picker.component.find('span').toggleClass(picker.options.icons.time + ' ' + picker.options.icons.date);
-                        }
-                    }
-                });
-            }
-            if (picker.isInput) {
-                picker.element.on({
-                    'click': $.proxy(picker.show, this),
-                    'focus': $.proxy(picker.show, this),
-                    'change': $.proxy(change, this),
-                    'blur': $.proxy(picker.hide, this)
-                });
-            } else {
-                picker.element.on({
-                    'change': $.proxy(change, this)
-                }, 'input');
-                if (picker.component) {
-                    picker.component.on('click', $.proxy(picker.show, this));
-                    picker.component.on('mousedown', $.proxy(stopEvent, this));
-                } else {
-                    picker.element.on('click', $.proxy(picker.show, this));
-                }
-            }
-        },
-
-        attachDatePickerGlobalEvents = function () {
-            $(window).on(
-                'resize.datetimepicker' + picker.id, $.proxy(place, this));
-            if (!picker.isInput) {
-                $(document).on(
-                    'mousedown.datetimepicker' + picker.id, $.proxy(picker.hide, this));
-            }
-        },
-
-        detachDatePickerEvents = function () {
-            picker.widget.off('click', '.datepicker *', picker.click);
-            picker.widget.off('click', '[data-action]');
-            picker.widget.off('mousedown', picker.stopEvent);
-            if (picker.options.pickDate && picker.options.pickTime) {
-                picker.widget.off('click.togglePicker');
-            }
-            if (picker.isInput) {
-                picker.element.off({
-                    'focus': picker.show,
-                    'change': change,
-                    'click': picker.show,
-                    'blur' : picker.hide
-                });
-            } else {
-                picker.element.off({
-                    'change': change
-                }, 'input');
-                if (picker.component) {
-                    picker.component.off('click', picker.show);
-                    picker.component.off('mousedown', picker.stopEvent);
-                } else {
-                    picker.element.off('click', picker.show);
-                }
-            }
-        },
-
-        detachDatePickerGlobalEvents = function () {
-            $(window).off('resize.datetimepicker' + picker.id);
-            if (!picker.isInput) {
-                $(document).off('mousedown.datetimepicker' + picker.id);
-            }
-        },
-
-        isInFixed = function () {
-            if (picker.element) {
-                var parents = picker.element.parents(), inFixed = false, i;
-                for (i = 0; i < parents.length; i++) {
-                    if ($(parents[i]).css('position') === 'fixed') {
-                        inFixed = true;
-                        break;
-                    }
-                }
-                return inFixed;
-            } else {
-                return false;
-            }
-        },
-
-        set = function () {
-            moment.locale(picker.options.language);
-            var formatted = '';
-            if (!picker.unset) {
-                formatted = moment(picker.date).format(picker.format);
-            }
-            getPickerInput().val(formatted);
-            picker.element.data('date', formatted);
-            if (!picker.options.pickTime) {
-                picker.hide();
-            }
-        },
-
-        checkDate = function (direction, unit, amount) {
-            moment.locale(picker.options.language);
-            var newDate;
-            if (direction === 'add') {
-                newDate = moment(picker.date);
-                if (newDate.hours() === 23) {
-                    newDate.add(amount, unit);
-                }
-                newDate.add(amount, unit);
-            }
-            else {
-                newDate = moment(picker.date).subtract(amount, unit);
-            }
-            if (isInDisableDates(moment(newDate.subtract(amount, unit))) || isInDisableDates(newDate)) {
-                notifyError(newDate.format(picker.format));
-                return;
-            }
-
-            if (direction === 'add') {
-                picker.date.add(amount, unit);
-            }
-            else {
-                picker.date.subtract(amount, unit);
-            }
-            picker.unset = false;
-        },
-
-        isInDisableDates = function (date, timeUnit) {
-            moment.locale(picker.options.language);
-            var maxDate = moment(picker.options.maxDate, picker.format, picker.options.useStrict),
-                minDate = moment(picker.options.minDate, picker.format, picker.options.useStrict);
-
-            if (timeUnit) {
-                maxDate = maxDate.endOf(timeUnit);
-                minDate = minDate.startOf(timeUnit);
-            }
-
-            if (date.isAfter(maxDate) || date.isBefore(minDate)) {
-                return true;
-            }
-            if (picker.options.disabledDates === false) {
-                return false;
-            }
-            return picker.options.disabledDates[date.format('YYYY-MM-DD')] === true;
-        },
-        isInEnableDates = function (date) {
-            moment.locale(picker.options.language);
-            if (picker.options.enabledDates === false) {
-                return true;
-            }
-            return picker.options.enabledDates[date.format('YYYY-MM-DD')] === true;
-        },
-
-        indexGivenDates = function (givenDatesArray) {
-            // Store given enabledDates and disabledDates as keys.
-            // This way we can check their existence in O(1) time instead of looping through whole array.
-            // (for example: picker.options.enabledDates['2014-02-27'] === true)
-            var givenDatesIndexed = {}, givenDatesCount = 0, i;
-            for (i = 0; i < givenDatesArray.length; i++) {
-                if (moment.isMoment(givenDatesArray[i]) || givenDatesArray[i] instanceof Date) {
-                    dDate = moment(givenDatesArray[i]);
-                } else {
-                    dDate = moment(givenDatesArray[i], picker.format, picker.options.useStrict);
-                }
-                if (dDate.isValid()) {
-                    givenDatesIndexed[dDate.format('YYYY-MM-DD')] = true;
-                    givenDatesCount++;
-                }
-            }
-            if (givenDatesCount > 0) {
-                return givenDatesIndexed;
-            }
-            return false;
-        },
-
-        padLeft = function (string) {
-            string = string.toString();
-            if (string.length >= 2) {
-                return string;
-            }
-            return '0' + string;
-        },
-
-        getTemplate = function () {
-            var
-                headTemplate =
-                        '<thead>' +
-                            '<tr>' +
-                                '<th class="prev">&lsaquo;</th><th colspan="' + (picker.options.calendarWeeks ? '6' : '5') + '" class="picker-switch"></th><th class="next">&rsaquo;</th>' +
-                            '</tr>' +
-                        '</thead>',
-                contTemplate =
-                        '<tbody><tr><td colspan="' + (picker.options.calendarWeeks ? '8' : '7') + '"></td></tr></tbody>',
-                template = '<div class="datepicker-days">' +
-                    '<table class="table-condensed">' + headTemplate + '<tbody></tbody></table>' +
-                '</div>' +
-                '<div class="datepicker-months">' +
-                    '<table class="table-condensed">' + headTemplate + contTemplate + '</table>' +
-                '</div>' +
-                '<div class="datepicker-years">' +
-                    '<table class="table-condensed">' + headTemplate + contTemplate + '</table>' +
-                '</div>',
-                ret = '';
-            if (picker.options.pickDate && picker.options.pickTime) {
-                ret = '<div class="bootstrap-datetimepicker-widget' + (picker.options.sideBySide ? ' timepicker-sbs' : '') + (picker.use24hours ? ' usetwentyfour' : '') + ' dropdown-menu" style="z-index:9999 !important;">';
-                if (picker.options.sideBySide) {
-                    ret += '<div class="row">' +
-                       '<div class="col-sm-6 datepicker">' + template + '</div>' +
-                       '<div class="col-sm-6 timepicker">' + tpGlobal.getTemplate() + '</div>' +
-                     '</div>';
-                } else {
-                    ret += '<ul class="list-unstyled">' +
-                        '<li' + (picker.options.collapse ? ' class="collapse in"' : '') + '>' +
-                            '<div class="datepicker">' + template + '</div>' +
-                        '</li>' +
-                        '<li class="picker-switch accordion-toggle"><a class="btn" style="width:100%"><span class="' + picker.options.icons.time + '"></span></a></li>' +
-                        '<li' + (picker.options.collapse ? ' class="collapse"' : '') + '>' +
-                            '<div class="timepicker">' + tpGlobal.getTemplate() + '</div>' +
-                        '</li>' +
-                   '</ul>';
-                }
-                ret += '</div>';
-                return ret;
-            }
-            if (picker.options.pickTime) {
-                return (
-                    '<div class="bootstrap-datetimepicker-widget dropdown-menu">' +
-                        '<div class="timepicker">' + tpGlobal.getTemplate() + '</div>' +
-                    '</div>'
-                );
-            }
-            return (
-                '<div class="bootstrap-datetimepicker-widget dropdown-menu">' +
-                    '<div class="datepicker">' + template + '</div>' +
-                '</div>'
-            );
-        },
-
-        dpGlobal = {
-            modes: [
-                {
-                    clsName: 'days',
-                    navFnc: 'month',
-                    navStep: 1
-                },
-                {
-                    clsName: 'months',
-                    navFnc: 'year',
-                    navStep: 1
-                },
-                {
-                    clsName: 'years',
-                    navFnc: 'year',
-                    navStep: 10
-                }
-            ]
-        },
-
-        tpGlobal = {
-            hourTemplate: '<span data-action="showHours"   data-time-component="hours"   class="timepicker-hour"></span>',
-            minuteTemplate: '<span data-action="showMinutes" data-time-component="minutes" class="timepicker-minute"></span>',
-            secondTemplate: '<span data-action="showSeconds"  data-time-component="seconds" class="timepicker-second"></span>'
-        };
-
-        tpGlobal.getTemplate = function () {
-            return (
-                '<div class="timepicker-picker">' +
-                    '<table class="table-condensed">' +
-                        '<tr>' +
-                            '<td><a href="#" class="btn" data-action="incrementHours"><span class="' + picker.options.icons.up + '"></span></a></td>' +
-                            '<td class="separator"></td>' +
-                            '<td>' + (picker.options.useMinutes ? '<a href="#" class="btn" data-action="incrementMinutes"><span class="' + picker.options.icons.up + '"></span></a>' : '') + '</td>' +
-                            (picker.options.useSeconds ?
-                                '<td class="separator"></td><td><a href="#" class="btn" data-action="incrementSeconds"><span class="' + picker.options.icons.up + '"></span></a></td>' : '') +
-                            (picker.use24hours ? '' : '<td class="separator"></td>') +
-                        '</tr>' +
-                        '<tr>' +
-                            '<td>' + tpGlobal.hourTemplate + '</td> ' +
-                            '<td class="separator">:</td>' +
-                            '<td>' + (picker.options.useMinutes ? tpGlobal.minuteTemplate : '<span class="timepicker-minute">00</span>') + '</td> ' +
-                            (picker.options.useSeconds ?
-                                '<td class="separator">:</td><td>' + tpGlobal.secondTemplate + '</td>' : '') +
-                            (picker.use24hours ? '' : '<td class="separator"></td>' +
-                            '<td><button type="button" class="btn btn-primary" data-action="togglePeriod"></button></td>') +
-                        '</tr>' +
-                        '<tr>' +
-                            '<td><a href="#" class="btn" data-action="decrementHours"><span class="' + picker.options.icons.down + '"></span></a></td>' +
-                            '<td class="separator"></td>' +
-                            '<td>' + (picker.options.useMinutes ? '<a href="#" class="btn" data-action="decrementMinutes"><span class="' + picker.options.icons.down + '"></span></a>' : '') + '</td>' +
-                            (picker.options.useSeconds ?
-                                '<td class="separator"></td><td><a href="#" class="btn" data-action="decrementSeconds"><span class="' + picker.options.icons.down + '"></span></a></td>' : '') +
-                            (picker.use24hours ? '' : '<td class="separator"></td>') +
-                        '</tr>' +
-                    '</table>' +
-                '</div>' +
-                '<div class="timepicker-hours" data-action="selectHour">' +
-                    '<table class="table-condensed"></table>' +
-                '</div>' +
-                '<div class="timepicker-minutes" data-action="selectMinute">' +
-                    '<table class="table-condensed"></table>' +
-                '</div>' +
-                (picker.options.useSeconds ?
-                    '<div class="timepicker-seconds" data-action="selectSecond"><table class="table-condensed"></table></div>' : '')
-            );
-        };
-
-        picker.destroy = function () {
-            detachDatePickerEvents();
-            detachDatePickerGlobalEvents();
-            picker.widget.remove();
-            picker.element.removeData('DateTimePicker');
-            if (picker.component) {
-                picker.component.removeData('DateTimePicker');
-            }
-        };
-
-        picker.show = function (e) {
-            if (getPickerInput().prop('disabled')) {
-                return;
-            }
-            if (picker.options.useCurrent) {
-                if (getPickerInput().val() === '') {
-                    if (picker.options.minuteStepping !== 1) {
-                        var mDate = moment(),
-                        rInterval = picker.options.minuteStepping;
-                        mDate.minutes((Math.round(mDate.minutes() / rInterval) * rInterval) % 60).seconds(0);
-                        picker.setValue(mDate.format(picker.format));
-                    } else {
-                        picker.setValue(moment().format(picker.format));
-                    }
-                    notifyChange('', e.type);
-                }
-            }
-            // if this is a click event on the input field and picker is already open don't hide it
-            if (e && e.type === 'click' && picker.isInput && picker.widget.hasClass('picker-open')) {
-                return;
-            }
-            if (picker.widget.hasClass('picker-open')) {
-                picker.widget.hide();
-                picker.widget.removeClass('picker-open');
-            }
-            else {
-                picker.widget.show();
-                picker.widget.addClass('picker-open');
-            }
-            picker.height = picker.component ? picker.component.outerHeight() : picker.element.outerHeight();
-            place();
-            picker.element.trigger({
-                type: 'dp.show',
-                date: moment(picker.date)
-            });
-            attachDatePickerGlobalEvents();
-            if (e) {
-                stopEvent(e);
-            }
-        };
-
-        picker.disable = function () {
-            var input = getPickerInput();
-            if (input.prop('disabled')) {
-                return;
-            }
-            input.prop('disabled', true);
-            detachDatePickerEvents();
-        };
-
-        picker.enable = function () {
-            var input = getPickerInput();
-            if (!input.prop('disabled')) {
-                return;
-            }
-            input.prop('disabled', false);
-            attachDatePickerEvents();
-        };
-
-        picker.hide = function () {
-            // Ignore event if in the middle of a picker transition
-            var collapse = picker.widget.find('.collapse'), i, collapseData;
-            for (i = 0; i < collapse.length; i++) {
-                collapseData = collapse.eq(i).data('collapse');
-                if (collapseData && collapseData.transitioning) {
-                    return;
-                }
-            }
-            picker.widget.hide();
-            picker.widget.removeClass('picker-open');
-            picker.viewMode = picker.startViewMode;
-            showMode();
-            picker.element.trigger({
-                type: 'dp.hide',
-                date: moment(picker.date)
-            });
-            detachDatePickerGlobalEvents();
-        };
-
-        picker.setValue = function (newDate) {
-            moment.locale(picker.options.language);
-            if (!newDate) {
-                picker.unset = true;
-                set();
-            } else {
-                picker.unset = false;
-            }
-            if (!moment.isMoment(newDate)) {
-                newDate = (newDate instanceof Date) ? moment(newDate) : moment(newDate, picker.format, picker.options.useStrict);
-            } else {
-                newDate = newDate.locale(picker.options.language);
-            }
-            if (newDate.isValid()) {
-                picker.date = newDate;
-                set();
-                picker.viewDate = moment({y: picker.date.year(), M: picker.date.month()});
-                fillDate();
-                fillTime();
-            }
-            else {
-                notifyError(newDate);
-            }
-        };
-
-        picker.getDate = function () {
-            if (picker.unset) {
-                return null;
-            }
-            return moment(picker.date);
-        };
-
-        picker.setDate = function (date) {
-            var oldDate = moment(picker.date);
-            if (!date) {
-                picker.setValue(null);
-            } else {
-                picker.setValue(date);
-            }
-            notifyChange(oldDate, 'function');
-        };
-
-        picker.setDisabledDates = function (dates) {
-            picker.options.disabledDates = indexGivenDates(dates);
-            if (picker.viewDate) {
-                update();
-            }
-        };
-
-        picker.setEnabledDates = function (dates) {
-            picker.options.enabledDates = indexGivenDates(dates);
-            if (picker.viewDate) {
-                update();
-            }
-        };
-
-        picker.setMaxDate = function (date) {
-            if (date === undefined) {
-                return;
-            }
-            if (moment.isMoment(date) || date instanceof Date) {
-                picker.options.maxDate = moment(date);
-            } else {
-                picker.options.maxDate = moment(date, picker.format, picker.options.useStrict);
-            }
-            if (picker.viewDate) {
-                update();
-            }
-        };
-
-        picker.setMinDate = function (date) {
-            if (date === undefined) {
-                return;
-            }
-            if (moment.isMoment(date) || date instanceof Date) {
-                picker.options.minDate = moment(date);
-            } else {
-                picker.options.minDate = moment(date, picker.format, picker.options.useStrict);
-            }
-            if (picker.viewDate) {
-                update();
-            }
-        };
-
-        init();
-    };
-
-    $.fn.datetimepicker = function (options) {
-        return this.each(function () {
-            var $this = $(this),
-                data = $this.data('DateTimePicker');
-            if (!data) {
-                $this.data('DateTimePicker', new DateTimePicker(this, options));
-            }
-        });
-    };
-
-    $.fn.datetimepicker.defaults = {
-        format: false,
-        pickDate: true,
-        pickTime: true,
-        useMinutes: true,
-        useSeconds: false,
-        useCurrent: true,
-        calendarWeeks: false,
-        minuteStepping: 1,
-        minDate: moment({y: 1900}),
-        maxDate: moment().add(100, 'y'),
-        showToday: true,
-        collapse: true,
-        language: moment.locale(),
-        defaultDate: '',
-        disabledDates: false,
-        enabledDates: false,
-        icons: {},
-        useStrict: false,
-        direction: 'auto',
-        sideBySide: false,
-        daysOfWeekDisabled: [],
-        widgetParent: false
-    };
-}));
diff --git a/typo3/contrib/twbs/bootstrap-datetimepicker.less b/typo3/contrib/twbs/bootstrap-datetimepicker.less
deleted file mode 100755 (executable)
index 3ed5b8a..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-/*!
- * Datetimepicker for Bootstrap v3
-//! version : 3.1.3
- * https://github.com/Eonasdan/bootstrap-datetimepicker/
- */
-.bootstrap-datetimepicker-widget {
-    top: 0;
-    left: 0;
-    width: 250px;
-    padding: 4px;
-    margin-top: 1px;
-    z-index: 99999 !important;
-    border-radius: @border-radius-base;
-
-    &.timepicker-sbs {
-        width: 600px;
-    }
-
-    &.bottom {
-        &:before {
-            content: '';
-            display: inline-block;
-            border-left: 7px solid transparent;
-            border-right: 7px solid transparent;
-            border-bottom: 7px solid #ccc;
-            border-bottom-color: rgba(0,0,0,.2);
-            position: absolute;
-            top: -7px;
-            left: 7px;
-        }
-
-        &:after {
-            content: '';
-            display: inline-block;
-            border-left: 6px solid transparent;
-            border-right: 6px solid transparent;
-            border-bottom: 6px solid white;
-            position: absolute;
-            top: -6px;
-            left: 8px;
-        }
-    }
-
-    &.top {
-        &:before {
-            content: '';
-            display: inline-block;
-            border-left: 7px solid transparent;
-            border-right: 7px solid transparent;
-            border-top: 7px solid #ccc;
-            border-top-color: rgba(0,0,0,.2);
-            position: absolute;
-            bottom: -7px;
-            left: 6px;
-        }
-
-        &:after {
-            content: '';
-            display: inline-block;
-            border-left: 6px solid transparent;
-            border-right: 6px solid transparent;
-            border-top: 6px solid white;
-            position: absolute;
-            bottom: -6px;
-            left: 7px;
-        }
-    }
-
-    & .dow {
-        width: 14.2857%;
-    }
-
-    &.pull-right {
-        &:before {
-            left: auto;
-            right: 6px;
-        }
-
-        &:after {
-            left: auto;
-            right: 7px;
-        }
-    }
-
-    >ul {
-        list-style-type: none;
-        margin: 0;
-    }
-
-    a[data-action] {
-      padding: 6px 0;
-    }
-
-    a[data-action]:active {
-        box-shadow: none;
-    }
-
-    .timepicker-hour, .timepicker-minute, .timepicker-second {
-        width: 54px;
-        font-weight: bold;
-        font-size: 1.2em;
-        margin: 0;
-    }
-
-    button[data-action] {
-      padding: 6px;
-    }
-
-    table[data-hour-format="12"] .separator {
-        width: 4px;
-        padding: 0;
-        margin: 0;
-    }
-
-    .datepicker > div {
-        display: none;
-    }
-
-    .picker-switch {
-        text-align: center;
-    }
-
-    table {
-        width: 100%;
-        margin: 0;
-    }
-
-    td,
-    th {
-        text-align: center;
-        border-radius: @border-radius-base;
-    }
-
-    td {
-        height: 54px;
-        line-height: 54px;
-        width: 54px;
-
-        &.cw
-        {
-            font-size: 10px;
-            height: 20px;
-            line-height: 20px;
-            color: @gray-light;
-        }
-
-        &.day
-        {
-            height: 20px;
-            line-height: 20px;
-            width: 20px;
-        }
-
-        &.day:hover,
-        &.hour:hover,
-        &.minute:hover,
-        &.second:hover {
-            background: @gray-lighter;
-            cursor: pointer;
-        }
-
-        &.old,
-        &.new {
-            color: @gray-light;
-        }
-
-        &.today {
-            position: relative;
-
-            &:before {
-                content: '';
-                display: inline-block;
-                border-left: 7px solid transparent;
-                border-bottom: 7px solid @btn-primary-bg;
-                border-top-color: rgba(0, 0, 0, 0.2);
-                position: absolute;
-                bottom: 4px;
-                right: 4px;
-            }
-        }
-
-        &.active,
-        &.active:hover {
-            background-color: @btn-primary-bg;
-            color: @btn-primary-color;
-            text-shadow: 0 -1px 0 rgba(0,0,0,.25);
-        }
-
-            &.active.today:before {
-                border-bottom-color: #fff;
-            }
-
-        &.disabled,
-        &.disabled:hover {
-            background: none;
-            color: @gray-light;
-            cursor: not-allowed;
-        }
-
-        span {
-            display: inline-block;
-            width: 54px;
-            height: 54px;
-            line-height: 54px;
-            margin: 2px 1.5px;
-            cursor: pointer;
-            border-radius: @border-radius-base;
-
-            &:hover {
-                background: @gray-lighter;
-            }
-
-            &.active {
-                background-color: @btn-primary-bg;
-                color: @btn-primary-color;
-                text-shadow: 0 -1px 0 rgba(0,0,0,.25);
-            }
-
-            &.old {
-                color: @gray-light;
-            }
-
-            &.disabled,
-            &.disabled:hover {
-                background: none;
-                color: @gray-light;
-                cursor: not-allowed;
-            }
-        }
-    }
-
-    th {
-        height: 20px;
-        line-height: 20px;
-        width: 20px;
-
-        &.picker-switch {
-            width: 145px;
-        }
-
-        &.next,
-        &.prev {
-            font-size: @font-size-base * 1.5;
-        }
-
-        &.disabled,
-        &.disabled:hover {
-            background: none;
-            color: @gray-light;
-            cursor: not-allowed;
-        }
-    }
-
-    thead tr:first-child th {
-        cursor: pointer;
-
-        &:hover {
-            background: @gray-lighter;
-        }
-    }
-}
-
-.input-group {
-    &.date {
-        .input-group-addon span {
-            display: block;
-            cursor: pointer;
-            width: 16px;
-            height: 16px;
-        }
-    }
-}
-
-.bootstrap-datetimepicker-widget.left-oriented {
-    &:before {
-        left: auto;
-        right: 6px;
-    }
-
-    &:after {
-        left: auto;
-        right: 7px;
-    }
-}
-
-.bootstrap-datetimepicker-widget ul.list-unstyled li div.timepicker div.timepicker-picker table.table-condensed tbody > tr > td {
-    padding: 0px !important;
-}
-
-@media screen and (max-width: 767px) {
-    .bootstrap-datetimepicker-widget.timepicker-sbs {
-        width: 283px;
-    }
-}
diff --git a/typo3/contrib/twbs/bootstrap-datetimepicker.min.css b/typo3/contrib/twbs/bootstrap-datetimepicker.min.css
deleted file mode 100755 (executable)
index cf838a3..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- * Datetimepicker for Bootstrap v3
-//! version : 3.1.3
- * https://github.com/Eonasdan/bootstrap-datetimepicker/
- */.bootstrap-datetimepicker-widget{top:0;left:0;width:250px;padding:4px;margin-top:1px;z-index:99999!important;border-radius:4px}.bootstrap-datetimepicker-widget.timepicker-sbs{width:600px}.bootstrap-datetimepicker-widget.bottom:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);position:absolute;top:-7px;left:7px}.bootstrap-datetimepicker-widget.bottom:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:8px}.bootstrap-datetimepicker-widget.top:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.top:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;position:absolute;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget .dow{width:14.2857%}.bootstrap-datetimepicker-widget.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget>ul{list-style-type:none;margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:1.2em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget table[data-hour-format="12"] .separator{width:4px;padding:0;margin:0}.bootstrap-datetimepicker-widget .datepicker>div{display:none}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget td,.bootstrap-datetimepicker-widget th{text-align:center;border-radius:4px}.bootstrap-datetimepicker-widget td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget td.cw{font-size:10px;height:20px;line-height:20px;color:#777}.bootstrap-datetimepicker-widget td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget td.day:hover,.bootstrap-datetimepicker-widget td.hour:hover,.bootstrap-datetimepicker-widget td.minute:hover,.bootstrap-datetimepicker-widget td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget td.old,.bootstrap-datetimepicker-widget td.new{color:#777}.bootstrap-datetimepicker-widget td.today{position:relative}.bootstrap-datetimepicker-widget td.today:before{content:'';display:inline-block;border-left:7px solid transparent;border-bottom:7px solid #428bca;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget td.active,.bootstrap-datetimepicker-widget td.active:hover{background-color:#428bca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget td.disabled,.bootstrap-datetimepicker-widget td.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:4px}.bootstrap-datetimepicker-widget td span:hover{background:#eee}.bootstrap-datetimepicker-widget td span.active{background-color:#428bca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget td span.old{color:#777}.bootstrap-datetimepicker-widget td span.disabled,.bootstrap-datetimepicker-widget td span.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget th.picker-switch{width:145px}.bootstrap-datetimepicker-widget th.next,.bootstrap-datetimepicker-widget th.prev{font-size:21px}.bootstrap-datetimepicker-widget th.disabled,.bootstrap-datetimepicker-widget th.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget thead tr:first-child th:hover{background:#eee}.input-group.date .input-group-addon span{display:block;cursor:pointer;width:16px;height:16px}.bootstrap-datetimepicker-widget.left-oriented:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.left-oriented:after{left:auto;right:7px}.bootstrap-datetimepicker-widget ul.list-unstyled li div.timepicker div.timepicker-picker table.table-condensed tbody>tr>td{padding:0!important}@media screen and (max-width:767px){.bootstrap-datetimepicker-widget.timepicker-sbs{width:283px}}
\ No newline at end of file
diff --git a/typo3/contrib/twbs/bootstrap-datetimepicker.min.js b/typo3/contrib/twbs/bootstrap-datetimepicker.min.js
deleted file mode 100755 (executable)
index cdba4b1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-!function(a,b){"use strict";if("function"==typeof define&&define.amd)define(["jquery","moment"],b);else if("object"==typeof exports)b(require("jquery"),require("moment"));else{if(!jQuery)throw new Error("bootstrap-datetimepicker requires jQuery to be loaded first");if(!moment)throw new Error("bootstrap-datetimepicker requires moment.js to be loaded first");b(a.jQuery,moment)}}(this,function(a,b){"use strict";if("undefined"==typeof b)throw new Error("momentjs is required");var c=0,d=function(d,e){var f,g=a.fn.datetimepicker.defaults,h={time:"glyphicon glyphicon-time",date:"glyphicon glyphicon-calendar",up:"glyphicon glyphicon-chevron-up",down:"glyphicon glyphicon-chevron-down"},i=this,j=!1,k=function(){var f,j,k=!1;if(i.options=a.extend({},g,e),i.options.icons=a.extend({},h,i.options.icons),i.element=a(d),m(),!i.options.pickTime&&!i.options.pickDate)throw new Error("Must choose at least one picker");if(i.id=c++,b.locale(i.options.language),i.date=b(),i.unset=!1,i.isInput=i.element.is("input"),i.component=!1,i.element.hasClass("input-group")&&(i.component=i.element.find(0===i.element.find(".datepickerbutton").size()?'[class^="input-group-"]':".datepickerbutton")),i.format=i.options.format,f=b().localeData(),i.format||(i.format=i.options.pickDate?f.longDateFormat("L"):"",i.options.pickDate&&i.options.pickTime&&(i.format+=" "),i.format+=i.options.pickTime?f.longDateFormat("LT"):"",i.options.useSeconds&&(-1!==f.longDateFormat("LT").indexOf(" A")?i.format=i.format.split(" A")[0]+":ss A":i.format+=":ss")),i.use24hours=i.format.toLowerCase().indexOf("a")<0&&i.format.indexOf("h")<0,i.component&&(k=i.component.find("span")),i.options.pickTime&&k&&k.addClass(i.options.icons.time),i.options.pickDate&&k&&(k.removeClass(i.options.icons.time),k.addClass(i.options.icons.date)),i.options.widgetParent="string"==typeof i.options.widgetParent&&i.options.widgetParent||i.element.parents().filter(function(){return"scroll"===a(this).css("overflow-y")}).get(0)||"body",i.widget=a(Q()).appendTo(i.options.widgetParent),i.minViewMode=i.options.minViewMode||0,"string"==typeof i.minViewMode)switch(i.minViewMode){case"months":i.minViewMode=1;break;case"years":i.minViewMode=2;break;default:i.minViewMode=0}if(i.viewMode=i.options.viewMode||0,"string"==typeof i.viewMode)switch(i.viewMode){case"months":i.viewMode=1;break;case"years":i.viewMode=2;break;default:i.viewMode=0}i.viewMode=Math.max(i.viewMode,i.minViewMode),i.options.disabledDates=O(i.options.disabledDates),i.options.enabledDates=O(i.options.enabledDates),i.startViewMode=i.viewMode,i.setMinDate(i.options.minDate),i.setMaxDate(i.options.maxDate),r(),s(),u(),v(),w(),q(),E(),l().prop("disabled")||F(),""!==i.options.defaultDate&&""===l().val()&&i.setValue(i.options.defaultDate),1!==i.options.minuteStepping&&(j=i.options.minuteStepping,i.date.minutes(Math.round(i.date.minutes()/j)*j%60).seconds(0))},l=function(){var a;if(i.isInput)return i.element;if(a=i.element.find(".datepickerinput"),0===a.size())a=i.element.find("input");else if(!a.is("input"))throw new Error('CSS class "datepickerinput" cannot be applied to non input element');return a},m=function(){var a;a=i.element.is("input")?i.element.data():i.element.find("input").data(),void 0!==a.dateFormat&&(i.options.format=a.dateFormat),void 0!==a.datePickdate&&(i.options.pickDate=a.datePickdate),void 0!==a.datePicktime&&(i.options.pickTime=a.datePicktime),void 0!==a.dateUseminutes&&(i.options.useMinutes=a.dateUseminutes),void 0!==a.dateUseseconds&&(i.options.useSeconds=a.dateUseseconds),void 0!==a.dateUsecurrent&&(i.options.useCurrent=a.dateUsecurrent),void 0!==a.calendarWeeks&&(i.options.calendarWeeks=a.calendarWeeks),void 0!==a.dateMinutestepping&&(i.options.minuteStepping=a.dateMinutestepping),void 0!==a.dateMindate&&(i.options.minDate=a.dateMindate),void 0!==a.dateMaxdate&&(i.options.maxDate=a.dateMaxdate),void 0!==a.dateShowtoday&&(i.options.showToday=a.dateShowtoday),void 0!==a.dateCollapse&&(i.options.collapse=a.dateCollapse),void 0!==a.dateLanguage&&(i.options.language=a.dateLanguage),void 0!==a.dateDefaultdate&&(i.options.defaultDate=a.dateDefaultdate),void 0!==a.dateDisableddates&&(i.options.disabledDates=a.dateDisableddates),void 0!==a.dateEnableddates&&(i.options.enabledDates=a.dateEnableddates),void 0!==a.dateIcons&&(i.options.icons=a.dateIcons),void 0!==a.dateUsestrict&&(i.options.useStrict=a.dateUsestrict),void 0!==a.dateDirection&&(i.options.direction=a.dateDirection),void 0!==a.dateSidebyside&&(i.options.sideBySide=a.dateSidebyside),void 0!==a.dateDaysofweekdisabled&&(i.options.daysOfWeekDisabled=a.dateDaysofweekdisabled)},n=function(){var b,c="absolute",d=i.component?i.component.offset():i.element.offset(),e=a(window);i.width=i.component?i.component.outerWidth():i.element.outerWidth(),d.top=d.top+i.element.outerHeight(),"up"===i.options.direction?b="top":"bottom"===i.options.direction?b="bottom":"auto"===i.options.direction&&(b=d.top+i.widget.height()>e.height()+e.scrollTop()&&i.widget.height()+i.element.outerHeight()<d.top?"top":"bottom"),"top"===b?(d.bottom=e.height()-d.top+i.element.outerHeight()+3,i.widget.addClass("top").removeClass("bottom")):(d.top+=1,i.widget.addClass("bottom").removeClass("top")),void 0!==i.options.width&&i.widget.width(i.options.width),"left"===i.options.orientation&&(i.widget.addClass("left-oriented"),d.left=d.left-i.widget.width()+20),J()&&(c="fixed",d.top-=e.scrollTop(),d.left-=e.scrollLeft()),e.width()<d.left+i.widget.outerWidth()?(d.right=e.width()-d.left-i.width,d.left="auto",i.widget.addClass("pull-right")):(d.right="auto",i.widget.removeClass("pull-right")),i.widget.css("top"===b?{position:c,bottom:d.bottom,top:"auto",left:d.left,right:d.right}:{position:c,top:d.top,bottom:"auto",left:d.left,right:d.right})},o=function(a,c){(!b(i.date).isSame(b(a))||j)&&(j=!1,i.element.trigger({type:"dp.change",date:b(i.date),oldDate:b(a)}),"change"!==c&&i.element.change())},p=function(a){j=!0,i.element.trigger({type:"dp.error",date:b(a,i.format,i.options.useStrict)})},q=function(a){b.locale(i.options.language);var c=a;c||(c=l().val(),c&&(i.date=b(c,i.format,i.options.useStrict)),i.date||(i.date=b())),i.viewDate=b(i.date).startOf("month"),t(),x()},r=function(){b.locale(i.options.language);var c,d=a("<tr>"),e=b.weekdaysMin();if(i.options.calendarWeeks===!0&&d.append('<th class="cw">#</th>'),0===b().localeData()._week.dow)for(c=0;7>c;c++)d.append('<th class="dow">'+e[c]+"</th>");else for(c=1;8>c;c++)d.append(7===c?'<th class="dow">'+e[0]+"</th>":'<th class="dow">'+e[c]+"</th>");i.widget.find(".datepicker-days thead").append(d)},s=function(){b.locale(i.options.language);var a,c="",d=b.monthsShort();for(a=0;12>a;a++)c+='<span class="month">'+d[a]+"</span>";i.widget.find(".datepicker-months td").append(c)},t=function(){if(i.options.pickDate){b.locale(i.options.language);var c,d,e,f,g,h,j,k,l,m=i.viewDate.year(),n=i.viewDate.month(),o=i.options.minDate.year(),p=i.options.minDate.month(),q=i.options.maxDate.year(),r=i.options.maxDate.month(),s=[],t=b.months();for(i.widget.find(".datepicker-days").find(".disabled").removeClass("disabled"),i.widget.find(".datepicker-months").find(".disabled").removeClass("disabled"),i.widget.find(".datepicker-years").find(".disabled").removeClass("disabled"),i.widget.find(".datepicker-days th:eq(1)").text(t[n]+" "+m),d=b(i.viewDate,i.format,i.options.useStrict).subtract(1,"months"),j=d.daysInMonth(),d.date(j).startOf("week"),(m===o&&p>=n||o>m)&&i.widget.find(".datepicker-days th:eq(0)").addClass("disabled"),(m===q&&n>=r||m>q)&&i.widget.find(".datepicker-days th:eq(2)").addClass("disabled"),e=b(d).add(42,"d");d.isBefore(e);){if(d.weekday()===b().startOf("week").weekday()&&(f=a("<tr>"),s.push(f),i.options.calendarWeeks===!0&&f.append('<td class="cw">'+d.week()+"</td>")),g="",d.year()<m||d.year()===m&&d.month()<n?g+=" old":(d.year()>m||d.year()===m&&d.month()>n)&&(g+=" new"),d.isSame(b({y:i.date.year(),M:i.date.month(),d:i.date.date()}))&&(g+=" active"),(M(d,"day")||!N(d))&&(g+=" disabled"),i.options.showToday===!0&&d.isSame(b(),"day")&&(g+=" today"),i.options.daysOfWeekDisabled)for(h=0;h<i.options.daysOfWeekDisabled.length;h++)if(d.day()===i.options.daysOfWeekDisabled[h]){g+=" disabled";break}f.append('<td class="day'+g+'">'+d.date()+"</td>"),c=d.date(),d.add(1,"d"),c===d.date()&&d.add(1,"d")}for(i.widget.find(".datepicker-days tbody").empty().append(s),l=i.date.year(),t=i.widget.find(".datepicker-months").find("th:eq(1)").text(m).end().find("span").removeClass("active"),l===m&&t.eq(i.date.month()).addClass("active"),o>m-1&&i.widget.find(".datepicker-months th:eq(0)").addClass("disabled"),m+1>q&&i.widget.find(".datepicker-months th:eq(2)").addClass("disabled"),h=0;12>h;h++)m===o&&p>h||o>m?a(t[h]).addClass("disabled"):(m===q&&h>r||m>q)&&a(t[h]).addClass("disabled");for(s="",m=10*parseInt(m/10,10),k=i.widget.find(".datepicker-years").find("th:eq(1)").text(m+"-"+(m+9)).parents("table").find("td"),i.widget.find(".datepicker-years").find("th").removeClass("disabled"),o>m&&i.widget.find(".datepicker-years").find("th:eq(0)").addClass("disabled"),m+9>q&&i.widget.find(".datepicker-years").find("th:eq(2)").addClass("disabled"),m-=1,h=-1;11>h;h++)s+='<span class="year'+(-1===h||10===h?" old":"")+(l===m?" active":"")+(o>m||m>q?" disabled":"")+'">'+m+"</span>",m+=1;k.html(s)}},u=function(){b.locale(i.options.language);var a,c,d,e=i.widget.find(".timepicker .timepicker-hours table"),f="";if(e.parent().hide(),i.use24hours)for(a=0,c=0;6>c;c+=1){for(f+="<tr>",d=0;4>d;d+=1)f+='<td class="hour">'+P(a.toString())+"</td>",a++;f+="</tr>"}else for(a=1,c=0;3>c;c+=1){for(f+="<tr>",d=0;4>d;d+=1)f+='<td class="hour">'+P(a.toString())+"</td>",a++;f+="</tr>"}e.html(f)},v=function(){var a,b,c=i.widget.find(".timepicker .timepicker-minutes table"),d="",e=0,f=i.options.minuteStepping;for(c.parent().hide(),1===f&&(f=5),a=0;a<Math.ceil(60/f/4);a++){for(d+="<tr>",b=0;4>b;b+=1)60>e?(d+='<td class="minute">'+P(e.toString())+"</td>",e+=f):d+="<td></td>";d+="</tr>"}c.html(d)},w=function(){var a,b,c=i.widget.find(".timepicker .timepicker-seconds table"),d="",e=0;for(c.parent().hide(),a=0;3>a;a++){for(d+="<tr>",b=0;4>b;b+=1)d+='<td class="second">'+P(e.toString())+"</td>",e+=5;d+="</tr>"}c.html(d)},x=function(){if(i.date){var a=i.widget.find(".timepicker span[data-time-component]"),b=i.date.hours(),c=i.date.format("A");i.use24hours||(0===b?b=12:12!==b&&(b%=12),i.widget.find(".timepicker [data-action=togglePeriod]").text(c)),a.filter("[data-time-component=hours]").text(P(b)),a.filter("[data-time-component=minutes]").text(P(i.date.minutes())),a.filter("[data-time-component=seconds]").text(P(i.date.second()))}},y=function(c){c.stopPropagation(),c.preventDefault(),i.unset=!1;var d,e,f,g,h=a(c.target).closest("span, td, th"),j=b(i.date);if(1===h.length&&!h.is(".disabled"))switch(h[0].nodeName.toLowerCase()){case"th":switch(h[0].className){case"picker-switch":E(1);break;case"prev":case"next":f=R.modes[i.viewMode].navStep,"prev"===h[0].className&&(f=-1*f),i.viewDate.add(f,R.modes[i.viewMode].navFnc),t()}break;case"span":h.is(".month")?(d=h.parent().find("span").index(h),i.viewDate.month(d)):(e=parseInt(h.text(),10)||0,i.viewDate.year(e)),i.viewMode===i.minViewMode&&(i.date=b({y:i.viewDate.year(),M:i.viewDate.month(),d:i.viewDate.date(),h:i.date.hours(),m:i.date.minutes(),s:i.date.seconds()}),K(),o(j,c.type)),E(-1),t();break;case"td":h.is(".day")&&(g=parseInt(h.text(),10)||1,d=i.viewDate.month(),e=i.viewDate.year(),h.is(".old")?0===d?(d=11,e-=1):d-=1:h.is(".new")&&(11===d?(d=0,e+=1):d+=1),i.date=b({y:e,M:d,d:g,h:i.date.hours(),m:i.date.minutes(),s:i.date.seconds()}),i.viewDate=b({y:e,M:d,d:Math.min(28,g)}),t(),K(),o(j,c.type))}},z={incrementHours:function(){L("add","hours",1)},incrementMinutes:function(){L("add","minutes",i.options.minuteStepping)},incrementSeconds:function(){L("add","seconds",1)},decrementHours:function(){L("subtract","hours",1)},decrementMinutes:function(){L("subtract","minutes",i.options.minuteStepping)},decrementSeconds:function(){L("subtract","seconds",1)},togglePeriod:function(){var a=i.date.hours();a>=12?a-=12:a+=12,i.date.hours(a)},showPicker:function(){i.widget.find(".timepicker > div:not(.timepicker-picker)").hide(),i.widget.find(".timepicker .timepicker-picker").show()},showHours:function(){i.widget.find(".timepicker .timepicker-picker").hide(),i.widget.find(".timepicker .timepicker-hours").show()},showMinutes:function(){i.widget.find(".timepicker .timepicker-picker").hide(),i.widget.find(".timepicker .timepicker-minutes").show()},showSeconds:function(){i.widget.find(".timepicker .timepicker-picker").hide(),i.widget.find(".timepicker .timepicker-seconds").show()},selectHour:function(b){var c=parseInt(a(b.target).text(),10);i.use24hours||(i.date.hours()>=12?12!==c&&(c+=12):12===c&&(c=0)),i.date.hours(c),z.showPicker.call(i)},selectMinute:function(b){i.date.minutes(parseInt(a(b.target).text(),10)),z.showPicker.call(i)},selectSecond:function(b){i.date.seconds(parseInt(a(b.target).text(),10)),z.showPicker.call(i)}},A=function(c){var d=b(i.date),e=a(c.currentTarget).data("action"),f=z[e].apply(i,arguments);return B(c),i.date||(i.date=b({y:1970})),K(),x(),o(d,c.type),f},B=function(a){a.stopPropagation(),a.preventDefault()},C=function(a){27===a.keyCode&&i.hide()},D=function(c){b.locale(i.options.language);var d=a(c.target),e=b(i.date),f=b(d.val(),i.format,i.options.useStrict);f.isValid()&&!M(f)&&N(f)?(q(),i.setValue(f),o(e,c.type),K()):(i.viewDate=e,i.unset=!0,o(e,c.type),p(f))},E=function(a){a&&(i.viewMode=Math.max(i.minViewMode,Math.min(2,i.viewMode+a))),i.widget.find(".datepicker > div").hide().filter(".datepicker-"+R.modes[i.viewMode].clsName).show()},F=function(){var b,c,d,e,f;i.widget.on("click",".datepicker *",a.proxy(y,this)),i.widget.on("click","[data-action]",a.proxy(A,this)),i.widget.on("mousedown",a.proxy(B,this)),i.element.on("keydown",a.proxy(C,this)),i.options.pickDate&&i.options.pickTime&&i.widget.on("click.togglePicker",".accordion-toggle",function(g){if(g.stopPropagation(),b=a(this),c=b.closest("ul"),d=c.find(".in"),e=c.find(".collapse:not(.in)"),d&&d.length){if(f=d.data("collapse"),f&&f.transitioning)return;d.collapse("hide"),e.collapse("show"),b.find("span").toggleClass(i.options.icons.time+" "+i.options.icons.date),i.component&&i.component.find("span").toggleClass(i.options.icons.time+" "+i.options.icons.date)}}),i.isInput?i.element.on({click:a.proxy(i.show,this),focus:a.proxy(i.show,this),change:a.proxy(D,this),blur:a.proxy(i.hide,this)}):(i.element.on({change:a.proxy(D,this)},"input"),i.component?(i.component.on("click",a.proxy(i.show,this)),i.component.on("mousedown",a.proxy(B,this))):i.element.on("click",a.proxy(i.show,this)))},G=function(){a(window).on("resize.datetimepicker"+i.id,a.proxy(n,this)),i.isInput||a(document).on("mousedown.datetimepicker"+i.id,a.proxy(i.hide,this))},H=function(){i.widget.off("click",".datepicker *",i.click),i.widget.off("click","[data-action]"),i.widget.off("mousedown",i.stopEvent),i.options.pickDate&&i.options.pickTime&&i.widget.off("click.togglePicker"),i.isInput?i.element.off({focus:i.show,change:D,click:i.show,blur:i.hide}):(i.element.off({change:D},"input"),i.component?(i.component.off("click",i.show),i.component.off("mousedown",i.stopEvent)):i.element.off("click",i.show))},I=function(){a(window).off("resize.datetimepicker"+i.id),i.isInput||a(document).off("mousedown.datetimepicker"+i.id)},J=function(){if(i.element){var b,c=i.element.parents(),d=!1;for(b=0;b<c.length;b++)if("fixed"===a(c[b]).css("position")){d=!0;break}return d}return!1},K=function(){b.locale(i.options.language);var a="";i.unset||(a=b(i.date).format(i.format)),l().val(a),i.element.data("date",a),i.options.pickTime||i.hide()},L=function(a,c,d){b.locale(i.options.language);var e;return"add"===a?(e=b(i.date),23===e.hours()&&e.add(d,c),e.add(d,c)):e=b(i.date).subtract(d,c),M(b(e.subtract(d,c)))||M(e)?void p(e.format(i.format)):("add"===a?i.date.add(d,c):i.date.subtract(d,c),void(i.unset=!1))},M=function(a,c){b.locale(i.options.language);var d=b(i.options.maxDate,i.format,i.options.useStrict),e=b(i.options.minDate,i.format,i.options.useStrict);return c&&(d=d.endOf(c),e=e.startOf(c)),a.isAfter(d)||a.isBefore(e)?!0:i.options.disabledDates===!1?!1:i.options.disabledDates[a.format("YYYY-MM-DD")]===!0},N=function(a){return b.locale(i.options.language),i.options.enabledDates===!1?!0:i.options.enabledDates[a.format("YYYY-MM-DD")]===!0},O=function(a){var c,d={},e=0;for(c=0;c<a.length;c++)f=b.isMoment(a[c])||a[c]instanceof Date?b(a[c]):b(a[c],i.format,i.options.useStrict),f.isValid()&&(d[f.format("YYYY-MM-DD")]=!0,e++);return e>0?d:!1},P=function(a){return a=a.toString(),a.length>=2?a:"0"+a},Q=function(){var a='<thead><tr><th class="prev">&lsaquo;</th><th colspan="'+(i.options.calendarWeeks?"6":"5")+'" class="picker-switch"></th><th class="next">&rsaquo;</th></tr></thead>',b='<tbody><tr><td colspan="'+(i.options.calendarWeeks?"8":"7")+'"></td></tr></tbody>',c='<div class="datepicker-days"><table class="table-condensed">'+a+'<tbody></tbody></table></div><div class="datepicker-months"><table class="table-condensed">'+a+b+'</table></div><div class="datepicker-years"><table class="table-condensed">'+a+b+"</table></div>",d="";return i.options.pickDate&&i.options.pickTime?(d='<div class="bootstrap-datetimepicker-widget'+(i.options.sideBySide?" timepicker-sbs":"")+(i.use24hours?" usetwentyfour":"")+' dropdown-menu" style="z-index:9999 !important;">',d+=i.options.sideBySide?'<div class="row"><div class="col-sm-6 datepicker">'+c+'</div><div class="col-sm-6 timepicker">'+S.getTemplate()+"</div></div>":'<ul class="list-unstyled"><li'+(i.options.collapse?' class="collapse in"':"")+'><div class="datepicker">'+c+'</div></li><li class="picker-switch accordion-toggle"><a class="btn" style="width:100%"><span class="'+i.options.icons.time+'"></span></a></li><li'+(i.options.collapse?' class="collapse"':"")+'><div class="timepicker">'+S.getTemplate()+"</div></li></ul>",d+="</div>"):i.options.pickTime?'<div class="bootstrap-datetimepicker-widget dropdown-menu"><div class="timepicker">'+S.getTemplate()+"</div></div>":'<div class="bootstrap-datetimepicker-widget dropdown-menu"><div class="datepicker">'+c+"</div></div>"},R={modes:[{clsName:"days",navFnc:"month",navStep:1},{clsName:"months",navFnc:"year",navStep:1},{clsName:"years",navFnc:"year",navStep:10}]},S={hourTemplate:'<span data-action="showHours"   data-time-component="hours"   class="timepicker-hour"></span>',minuteTemplate:'<span data-action="showMinutes" data-time-component="minutes" class="timepicker-minute"></span>',secondTemplate:'<span data-action="showSeconds"  data-time-component="seconds" class="timepicker-second"></span>'};S.getTemplate=function(){return'<div class="timepicker-picker"><table class="table-condensed"><tr><td><a href="#" class="btn" data-action="incrementHours"><span class="'+i.options.icons.up+'"></span></a></td><td class="separator"></td><td>'+(i.options.useMinutes?'<a href="#" class="btn" data-action="incrementMinutes"><span class="'+i.options.icons.up+'"></span></a>':"")+"</td>"+(i.options.useSeconds?'<td class="separator"></td><td><a href="#" class="btn" data-action="incrementSeconds"><span class="'+i.options.icons.up+'"></span></a></td>':"")+(i.use24hours?"":'<td class="separator"></td>')+"</tr><tr><td>"+S.hourTemplate+'</td> <td class="separator">:</td><td>'+(i.options.useMinutes?S.minuteTemplate:'<span class="timepicker-minute">00</span>')+"</td> "+(i.options.useSeconds?'<td class="separator">:</td><td>'+S.secondTemplate+"</td>":"")+(i.use24hours?"":'<td class="separator"></td><td><button type="button" class="btn btn-primary" data-action="togglePeriod"></button></td>')+'</tr><tr><td><a href="#" class="btn" data-action="decrementHours"><span class="'+i.options.icons.down+'"></span></a></td><td class="separator"></td><td>'+(i.options.useMinutes?'<a href="#" class="btn" data-action="decrementMinutes"><span class="'+i.options.icons.down+'"></span></a>':"")+"</td>"+(i.options.useSeconds?'<td class="separator"></td><td><a href="#" class="btn" data-action="decrementSeconds"><span class="'+i.options.icons.down+'"></span></a></td>':"")+(i.use24hours?"":'<td class="separator"></td>')+'</tr></table></div><div class="timepicker-hours" data-action="selectHour"><table class="table-condensed"></table></div><div class="timepicker-minutes" data-action="selectMinute"><table class="table-condensed"></table></div>'+(i.options.useSeconds?'<div class="timepicker-seconds" data-action="selectSecond"><table class="table-condensed"></table></div>':"")},i.destroy=function(){H(),I(),i.widget.remove(),i.element.removeData("DateTimePicker"),i.component&&i.component.removeData("DateTimePicker")},i.show=function(a){if(!l().prop("disabled")){if(i.options.useCurrent&&""===l().val()){if(1!==i.options.minuteStepping){var c=b(),d=i.options.minuteStepping;c.minutes(Math.round(c.minutes()/d)*d%60).seconds(0),i.setValue(c.format(i.format))}else i.setValue(b().format(i.format));o("",a.type)}a&&"click"===a.type&&i.isInput&&i.widget.hasClass("picker-open")||(i.widget.hasClass("picker-open")?(i.widget.hide(),i.widget.removeClass("picker-open")):(i.widget.show(),i.widget.addClass("picker-open")),i.height=i.component?i.component.outerHeight():i.element.outerHeight(),n(),i.element.trigger({type:"dp.show",date:b(i.date)}),G(),a&&B(a))}},i.disable=function(){var a=l();a.prop("disabled")||(a.prop("disabled",!0),H())},i.enable=function(){var a=l();a.prop("disabled")&&(a.prop("disabled",!1),F())},i.hide=function(){var a,c,d=i.widget.find(".collapse");for(a=0;a<d.length;a++)if(c=d.eq(a).data("collapse"),c&&c.transitioning)return;i.widget.hide(),i.widget.removeClass("picker-open"),i.viewMode=i.startViewMode,E(),i.element.trigger({type:"dp.hide",date:b(i.date)}),I()},i.setValue=function(a){b.locale(i.options.language),a?i.unset=!1:(i.unset=!0,K()),a=b.isMoment(a)?a.locale(i.options.language):a instanceof Date?b(a):b(a,i.format,i.options.useStrict),a.isValid()?(i.date=a,K(),i.viewDate=b({y:i.date.year(),M:i.date.month()}),t(),x()):p(a)},i.getDate=function(){return i.unset?null:b(i.date)},i.setDate=function(a){var c=b(i.date);i.setValue(a?a:null),o(c,"function")},i.setDisabledDates=function(a){i.options.disabledDates=O(a),i.viewDate&&q()},i.setEnabledDates=function(a){i.options.enabledDates=O(a),i.viewDate&&q()},i.setMaxDate=function(a){void 0!==a&&(i.options.maxDate=b.isMoment(a)||a instanceof Date?b(a):b(a,i.format,i.options.useStrict),i.viewDate&&q())},i.setMinDate=function(a){void 0!==a&&(i.options.minDate=b.isMoment(a)||a instanceof Date?b(a):b(a,i.format,i.options.useStrict),i.viewDate&&q())},k()};a.fn.datetimepicker=function(b){return this.each(function(){var c=a(this),e=c.data("DateTimePicker");e||c.data("DateTimePicker",new d(this,b))})},a.fn.datetimepicker.defaults={format:!1,pickDate:!0,pickTime:!0,useMinutes:!0,useSeconds:!1,useCurrent:!0,calendarWeeks:!1,minuteStepping:1,minDate:b({y:1900}),maxDate:b().add(100,"y"),showToday:!0,collapse:!0,language:b.locale(),defaultDate:"",disabledDates:!1,enabledDates:!1,icons:{},useStrict:!1,direction:"auto",sideBySide:!1,daysOfWeekDisabled:[],widgetParent:!1}});
\ No newline at end of file
index d7bac32..939a218 100644 (file)
@@ -1595,7 +1595,7 @@ class PageRenderer implements \TYPO3\CMS\Core\SingletonInterface {
                                'nprogress' => $this->backPath . 'sysext/core/Resources/Public/JavaScript/Contrib/nprogress',
                                'moment' => $this->backPath . 'sysext/core/Resources/Public/JavaScript/Contrib/moment/moment',
                                'twbs' => $this->backPath . 'contrib/twbs/bootstrap.min',
-                               'twbs/bootstrap-datetimepicker' => $this->backPath . 'contrib/twbs/bootstrap-datetimepicker.min',
+                               'twbs/bootstrap-datetimepicker' => $this->backPath . 'sysext/core/Resources/Public/JavaScript/Contrib/bootstrap-datetimepicker',
                        );
                        // get all extensions that are loaded
                        $loadedExtensions = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getLoadedExtensionListArray();
diff --git a/typo3/sysext/core/Resources/Public/JavaScript/Contrib/bootstrap-datetimepicker.js b/typo3/sysext/core/Resources/Public/JavaScript/Contrib/bootstrap-datetimepicker.js
new file mode 100644 (file)
index 0000000..cdba4b1
--- /dev/null
@@ -0,0 +1 @@
+!function(a,b){"use strict";if("function"==typeof define&&define.amd)define(["jquery","moment"],b);else if("object"==typeof exports)b(require("jquery"),require("moment"));else{if(!jQuery)throw new Error("bootstrap-datetimepicker requires jQuery to be loaded first");if(!moment)throw new Error("bootstrap-datetimepicker requires moment.js to be loaded first");b(a.jQuery,moment)}}(this,function(a,b){"use strict";if("undefined"==typeof b)throw new Error("momentjs is required");var c=0,d=function(d,e){var f,g=a.fn.datetimepicker.defaults,h={time:"glyphicon glyphicon-time",date:"glyphicon glyphicon-calendar",up:"glyphicon glyphicon-chevron-up",down:"glyphicon glyphicon-chevron-down"},i=this,j=!1,k=function(){var f,j,k=!1;if(i.options=a.extend({},g,e),i.options.icons=a.extend({},h,i.options.icons),i.element=a(d),m(),!i.options.pickTime&&!i.options.pickDate)throw new Error("Must choose at least one picker");if(i.id=c++,b.locale(i.options.language),i.date=b(),i.unset=!1,i.isInput=i.element.is("input"),i.component=!1,i.element.hasClass("input-group")&&(i.component=i.element.find(0===i.element.find(".datepickerbutton").size()?'[class^="input-group-"]':".datepickerbutton")),i.format=i.options.format,f=b().localeData(),i.format||(i.format=i.options.pickDate?f.longDateFormat("L"):"",i.options.pickDate&&i.options.pickTime&&(i.format+=" "),i.format+=i.options.pickTime?f.longDateFormat("LT"):"",i.options.useSeconds&&(-1!==f.longDateFormat("LT").indexOf(" A")?i.format=i.format.split(" A")[0]+":ss A":i.format+=":ss")),i.use24hours=i.format.toLowerCase().indexOf("a")<0&&i.format.indexOf("h")<0,i.component&&(k=i.component.find("span")),i.options.pickTime&&k&&k.addClass(i.options.icons.time),i.options.pickDate&&k&&(k.removeClass(i.options.icons.time),k.addClass(i.options.icons.date)),i.options.widgetParent="string"==typeof i.options.widgetParent&&i.options.widgetParent||i.element.parents().filter(function(){return"scroll"===a(this).css("overflow-y")}).get(0)||"body",i.widget=a(Q()).appendTo(i.options.widgetParent),i.minViewMode=i.options.minViewMode||0,"string"==typeof i.minViewMode)switch(i.minViewMode){case"months":i.minViewMode=1;break;case"years":i.minViewMode=2;break;default:i.minViewMode=0}if(i.viewMode=i.options.viewMode||0,"string"==typeof i.viewMode)switch(i.viewMode){case"months":i.viewMode=1;break;case"years":i.viewMode=2;break;default:i.viewMode=0}i.viewMode=Math.max(i.viewMode,i.minViewMode),i.options.disabledDates=O(i.options.disabledDates),i.options.enabledDates=O(i.options.enabledDates),i.startViewMode=i.viewMode,i.setMinDate(i.options.minDate),i.setMaxDate(i.options.maxDate),r(),s(),u(),v(),w(),q(),E(),l().prop("disabled")||F(),""!==i.options.defaultDate&&""===l().val()&&i.setValue(i.options.defaultDate),1!==i.options.minuteStepping&&(j=i.options.minuteStepping,i.date.minutes(Math.round(i.date.minutes()/j)*j%60).seconds(0))},l=function(){var a;if(i.isInput)return i.element;if(a=i.element.find(".datepickerinput"),0===a.size())a=i.element.find("input");else if(!a.is("input"))throw new Error('CSS class "datepickerinput" cannot be applied to non input element');return a},m=function(){var a;a=i.element.is("input")?i.element.data():i.element.find("input").data(),void 0!==a.dateFormat&&(i.options.format=a.dateFormat),void 0!==a.datePickdate&&(i.options.pickDate=a.datePickdate),void 0!==a.datePicktime&&(i.options.pickTime=a.datePicktime),void 0!==a.dateUseminutes&&(i.options.useMinutes=a.dateUseminutes),void 0!==a.dateUseseconds&&(i.options.useSeconds=a.dateUseseconds),void 0!==a.dateUsecurrent&&(i.options.useCurrent=a.dateUsecurrent),void 0!==a.calendarWeeks&&(i.options.calendarWeeks=a.calendarWeeks),void 0!==a.dateMinutestepping&&(i.options.minuteStepping=a.dateMinutestepping),void 0!==a.dateMindate&&(i.options.minDate=a.dateMindate),void 0!==a.dateMaxdate&&(i.options.maxDate=a.dateMaxdate),void 0!==a.dateShowtoday&&(i.options.showToday=a.dateShowtoday),void 0!==a.dateCollapse&&(i.options.collapse=a.dateCollapse),void 0!==a.dateLanguage&&(i.options.language=a.dateLanguage),void 0!==a.dateDefaultdate&&(i.options.defaultDate=a.dateDefaultdate),void 0!==a.dateDisableddates&&(i.options.disabledDates=a.dateDisableddates),void 0!==a.dateEnableddates&&(i.options.enabledDates=a.dateEnableddates),void 0!==a.dateIcons&&(i.options.icons=a.dateIcons),void 0!==a.dateUsestrict&&(i.options.useStrict=a.dateUsestrict),void 0!==a.dateDirection&&(i.options.direction=a.dateDirection),void 0!==a.dateSidebyside&&(i.options.sideBySide=a.dateSidebyside),void 0!==a.dateDaysofweekdisabled&&(i.options.daysOfWeekDisabled=a.dateDaysofweekdisabled)},n=function(){var b,c="absolute",d=i.component?i.component.offset():i.element.offset(),e=a(window);i.width=i.component?i.component.outerWidth():i.element.outerWidth(),d.top=d.top+i.element.outerHeight(),"up"===i.options.direction?b="top":"bottom"===i.options.direction?b="bottom":"auto"===i.options.direction&&(b=d.top+i.widget.height()>e.height()+e.scrollTop()&&i.widget.height()+i.element.outerHeight()<d.top?"top":"bottom"),"top"===b?(d.bottom=e.height()-d.top+i.element.outerHeight()+3,i.widget.addClass("top").removeClass("bottom")):(d.top+=1,i.widget.addClass("bottom").removeClass("top")),void 0!==i.options.width&&i.widget.width(i.options.width),"left"===i.options.orientation&&(i.widget.addClass("left-oriented"),d.left=d.left-i.widget.width()+20),J()&&(c="fixed",d.top-=e.scrollTop(),d.left-=e.scrollLeft()),e.width()<d.left+i.widget.outerWidth()?(d.right=e.width()-d.left-i.width,d.left="auto",i.widget.addClass("pull-right")):(d.right="auto",i.widget.removeClass("pull-right")),i.widget.css("top"===b?{position:c,bottom:d.bottom,top:"auto",left:d.left,right:d.right}:{position:c,top:d.top,bottom:"auto",left:d.left,right:d.right})},o=function(a,c){(!b(i.date).isSame(b(a))||j)&&(j=!1,i.element.trigger({type:"dp.change",date:b(i.date),oldDate:b(a)}),"change"!==c&&i.element.change())},p=function(a){j=!0,i.element.trigger({type:"dp.error",date:b(a,i.format,i.options.useStrict)})},q=function(a){b.locale(i.options.language);var c=a;c||(c=l().val(),c&&(i.date=b(c,i.format,i.options.useStrict)),i.date||(i.date=b())),i.viewDate=b(i.date).startOf("month"),t(),x()},r=function(){b.locale(i.options.language);var c,d=a("<tr>"),e=b.weekdaysMin();if(i.options.calendarWeeks===!0&&d.append('<th class="cw">#</th>'),0===b().localeData()._week.dow)for(c=0;7>c;c++)d.append('<th class="dow">'+e[c]+"</th>");else for(c=1;8>c;c++)d.append(7===c?'<th class="dow">'+e[0]+"</th>":'<th class="dow">'+e[c]+"</th>");i.widget.find(".datepicker-days thead").append(d)},s=function(){b.locale(i.options.language);var a,c="",d=b.monthsShort();for(a=0;12>a;a++)c+='<span class="month">'+d[a]+"</span>";i.widget.find(".datepicker-months td").append(c)},t=function(){if(i.options.pickDate){b.locale(i.options.language);var c,d,e,f,g,h,j,k,l,m=i.viewDate.year(),n=i.viewDate.month(),o=i.options.minDate.year(),p=i.options.minDate.month(),q=i.options.maxDate.year(),r=i.options.maxDate.month(),s=[],t=b.months();for(i.widget.find(".datepicker-days").find(".disabled").removeClass("disabled"),i.widget.find(".datepicker-months").find(".disabled").removeClass("disabled"),i.widget.find(".datepicker-years").find(".disabled").removeClass("disabled"),i.widget.find(".datepicker-days th:eq(1)").text(t[n]+" "+m),d=b(i.viewDate,i.format,i.options.useStrict).subtract(1,"months"),j=d.daysInMonth(),d.date(j).startOf("week"),(m===o&&p>=n||o>m)&&i.widget.find(".datepicker-days th:eq(0)").addClass("disabled"),(m===q&&n>=r||m>q)&&i.widget.find(".datepicker-days th:eq(2)").addClass("disabled"),e=b(d).add(42,"d");d.isBefore(e);){if(d.weekday()===b().startOf("week").weekday()&&(f=a("<tr>"),s.push(f),i.options.calendarWeeks===!0&&f.append('<td class="cw">'+d.week()+"</td>")),g="",d.year()<m||d.year()===m&&d.month()<n?g+=" old":(d.year()>m||d.year()===m&&d.month()>n)&&(g+=" new"),d.isSame(b({y:i.date.year(),M:i.date.month(),d:i.date.date()}))&&(g+=" active"),(M(d,"day")||!N(d))&&(g+=" disabled"),i.options.showToday===!0&&d.isSame(b(),"day")&&(g+=" today"),i.options.daysOfWeekDisabled)for(h=0;h<i.options.daysOfWeekDisabled.length;h++)if(d.day()===i.options.daysOfWeekDisabled[h]){g+=" disabled";break}f.append('<td class="day'+g+'">'+d.date()+"</td>"),c=d.date(),d.add(1,"d"),c===d.date()&&d.add(1,"d")}for(i.widget.find(".datepicker-days tbody").empty().append(s),l=i.date.year(),t=i.widget.find(".datepicker-months").find("th:eq(1)").text(m).end().find("span").removeClass("active"),l===m&&t.eq(i.date.month()).addClass("active"),o>m-1&&i.widget.find(".datepicker-months th:eq(0)").addClass("disabled"),m+1>q&&i.widget.find(".datepicker-months th:eq(2)").addClass("disabled"),h=0;12>h;h++)m===o&&p>h||o>m?a(t[h]).addClass("disabled"):(m===q&&h>r||m>q)&&a(t[h]).addClass("disabled");for(s="",m=10*parseInt(m/10,10),k=i.widget.find(".datepicker-years").find("th:eq(1)").text(m+"-"+(m+9)).parents("table").find("td"),i.widget.find(".datepicker-years").find("th").removeClass("disabled"),o>m&&i.widget.find(".datepicker-years").find("th:eq(0)").addClass("disabled"),m+9>q&&i.widget.find(".datepicker-years").find("th:eq(2)").addClass("disabled"),m-=1,h=-1;11>h;h++)s+='<span class="year'+(-1===h||10===h?" old":"")+(l===m?" active":"")+(o>m||m>q?" disabled":"")+'">'+m+"</span>",m+=1;k.html(s)}},u=function(){b.locale(i.options.language);var a,c,d,e=i.widget.find(".timepicker .timepicker-hours table"),f="";if(e.parent().hide(),i.use24hours)for(a=0,c=0;6>c;c+=1){for(f+="<tr>",d=0;4>d;d+=1)f+='<td class="hour">'+P(a.toString())+"</td>",a++;f+="</tr>"}else for(a=1,c=0;3>c;c+=1){for(f+="<tr>",d=0;4>d;d+=1)f+='<td class="hour">'+P(a.toString())+"</td>",a++;f+="</tr>"}e.html(f)},v=function(){var a,b,c=i.widget.find(".timepicker .timepicker-minutes table"),d="",e=0,f=i.options.minuteStepping;for(c.parent().hide(),1===f&&(f=5),a=0;a<Math.ceil(60/f/4);a++){for(d+="<tr>",b=0;4>b;b+=1)60>e?(d+='<td class="minute">'+P(e.toString())+"</td>",e+=f):d+="<td></td>";d+="</tr>"}c.html(d)},w=function(){var a,b,c=i.widget.find(".timepicker .timepicker-seconds table"),d="",e=0;for(c.parent().hide(),a=0;3>a;a++){for(d+="<tr>",b=0;4>b;b+=1)d+='<td class="second">'+P(e.toString())+"</td>",e+=5;d+="</tr>"}c.html(d)},x=function(){if(i.date){var a=i.widget.find(".timepicker span[data-time-component]"),b=i.date.hours(),c=i.date.format("A");i.use24hours||(0===b?b=12:12!==b&&(b%=12),i.widget.find(".timepicker [data-action=togglePeriod]").text(c)),a.filter("[data-time-component=hours]").text(P(b)),a.filter("[data-time-component=minutes]").text(P(i.date.minutes())),a.filter("[data-time-component=seconds]").text(P(i.date.second()))}},y=function(c){c.stopPropagation(),c.preventDefault(),i.unset=!1;var d,e,f,g,h=a(c.target).closest("span, td, th"),j=b(i.date);if(1===h.length&&!h.is(".disabled"))switch(h[0].nodeName.toLowerCase()){case"th":switch(h[0].className){case"picker-switch":E(1);break;case"prev":case"next":f=R.modes[i.viewMode].navStep,"prev"===h[0].className&&(f=-1*f),i.viewDate.add(f,R.modes[i.viewMode].navFnc),t()}break;case"span":h.is(".month")?(d=h.parent().find("span").index(h),i.viewDate.month(d)):(e=parseInt(h.text(),10)||0,i.viewDate.year(e)),i.viewMode===i.minViewMode&&(i.date=b({y:i.viewDate.year(),M:i.viewDate.month(),d:i.viewDate.date(),h:i.date.hours(),m:i.date.minutes(),s:i.date.seconds()}),K(),o(j,c.type)),E(-1),t();break;case"td":h.is(".day")&&(g=parseInt(h.text(),10)||1,d=i.viewDate.month(),e=i.viewDate.year(),h.is(".old")?0===d?(d=11,e-=1):d-=1:h.is(".new")&&(11===d?(d=0,e+=1):d+=1),i.date=b({y:e,M:d,d:g,h:i.date.hours(),m:i.date.minutes(),s:i.date.seconds()}),i.viewDate=b({y:e,M:d,d:Math.min(28,g)}),t(),K(),o(j,c.type))}},z={incrementHours:function(){L("add","hours",1)},incrementMinutes:function(){L("add","minutes",i.options.minuteStepping)},incrementSeconds:function(){L("add","seconds",1)},decrementHours:function(){L("subtract","hours",1)},decrementMinutes:function(){L("subtract","minutes",i.options.minuteStepping)},decrementSeconds:function(){L("subtract","seconds",1)},togglePeriod:function(){var a=i.date.hours();a>=12?a-=12:a+=12,i.date.hours(a)},showPicker:function(){i.widget.find(".timepicker > div:not(.timepicker-picker)").hide(),i.widget.find(".timepicker .timepicker-picker").show()},showHours:function(){i.widget.find(".timepicker .timepicker-picker").hide(),i.widget.find(".timepicker .timepicker-hours").show()},showMinutes:function(){i.widget.find(".timepicker .timepicker-picker").hide(),i.widget.find(".timepicker .timepicker-minutes").show()},showSeconds:function(){i.widget.find(".timepicker .timepicker-picker").hide(),i.widget.find(".timepicker .timepicker-seconds").show()},selectHour:function(b){var c=parseInt(a(b.target).text(),10);i.use24hours||(i.date.hours()>=12?12!==c&&(c+=12):12===c&&(c=0)),i.date.hours(c),z.showPicker.call(i)},selectMinute:function(b){i.date.minutes(parseInt(a(b.target).text(),10)),z.showPicker.call(i)},selectSecond:function(b){i.date.seconds(parseInt(a(b.target).text(),10)),z.showPicker.call(i)}},A=function(c){var d=b(i.date),e=a(c.currentTarget).data("action"),f=z[e].apply(i,arguments);return B(c),i.date||(i.date=b({y:1970})),K(),x(),o(d,c.type),f},B=function(a){a.stopPropagation(),a.preventDefault()},C=function(a){27===a.keyCode&&i.hide()},D=function(c){b.locale(i.options.language);var d=a(c.target),e=b(i.date),f=b(d.val(),i.format,i.options.useStrict);f.isValid()&&!M(f)&&N(f)?(q(),i.setValue(f),o(e,c.type),K()):(i.viewDate=e,i.unset=!0,o(e,c.type),p(f))},E=function(a){a&&(i.viewMode=Math.max(i.minViewMode,Math.min(2,i.viewMode+a))),i.widget.find(".datepicker > div").hide().filter(".datepicker-"+R.modes[i.viewMode].clsName).show()},F=function(){var b,c,d,e,f;i.widget.on("click",".datepicker *",a.proxy(y,this)),i.widget.on("click","[data-action]",a.proxy(A,this)),i.widget.on("mousedown",a.proxy(B,this)),i.element.on("keydown",a.proxy(C,this)),i.options.pickDate&&i.options.pickTime&&i.widget.on("click.togglePicker",".accordion-toggle",function(g){if(g.stopPropagation(),b=a(this),c=b.closest("ul"),d=c.find(".in"),e=c.find(".collapse:not(.in)"),d&&d.length){if(f=d.data("collapse"),f&&f.transitioning)return;d.collapse("hide"),e.collapse("show"),b.find("span").toggleClass(i.options.icons.time+" "+i.options.icons.date),i.component&&i.component.find("span").toggleClass(i.options.icons.time+" "+i.options.icons.date)}}),i.isInput?i.element.on({click:a.proxy(i.show,this),focus:a.proxy(i.show,this),change:a.proxy(D,this),blur:a.proxy(i.hide,this)}):(i.element.on({change:a.proxy(D,this)},"input"),i.component?(i.component.on("click",a.proxy(i.show,this)),i.component.on("mousedown",a.proxy(B,this))):i.element.on("click",a.proxy(i.show,this)))},G=function(){a(window).on("resize.datetimepicker"+i.id,a.proxy(n,this)),i.isInput||a(document).on("mousedown.datetimepicker"+i.id,a.proxy(i.hide,this))},H=function(){i.widget.off("click",".datepicker *",i.click),i.widget.off("click","[data-action]"),i.widget.off("mousedown",i.stopEvent),i.options.pickDate&&i.options.pickTime&&i.widget.off("click.togglePicker"),i.isInput?i.element.off({focus:i.show,change:D,click:i.show,blur:i.hide}):(i.element.off({change:D},"input"),i.component?(i.component.off("click",i.show),i.component.off("mousedown",i.stopEvent)):i.element.off("click",i.show))},I=function(){a(window).off("resize.datetimepicker"+i.id),i.isInput||a(document).off("mousedown.datetimepicker"+i.id)},J=function(){if(i.element){var b,c=i.element.parents(),d=!1;for(b=0;b<c.length;b++)if("fixed"===a(c[b]).css("position")){d=!0;break}return d}return!1},K=function(){b.locale(i.options.language);var a="";i.unset||(a=b(i.date).format(i.format)),l().val(a),i.element.data("date",a),i.options.pickTime||i.hide()},L=function(a,c,d){b.locale(i.options.language);var e;return"add"===a?(e=b(i.date),23===e.hours()&&e.add(d,c),e.add(d,c)):e=b(i.date).subtract(d,c),M(b(e.subtract(d,c)))||M(e)?void p(e.format(i.format)):("add"===a?i.date.add(d,c):i.date.subtract(d,c),void(i.unset=!1))},M=function(a,c){b.locale(i.options.language);var d=b(i.options.maxDate,i.format,i.options.useStrict),e=b(i.options.minDate,i.format,i.options.useStrict);return c&&(d=d.endOf(c),e=e.startOf(c)),a.isAfter(d)||a.isBefore(e)?!0:i.options.disabledDates===!1?!1:i.options.disabledDates[a.format("YYYY-MM-DD")]===!0},N=function(a){return b.locale(i.options.language),i.options.enabledDates===!1?!0:i.options.enabledDates[a.format("YYYY-MM-DD")]===!0},O=function(a){var c,d={},e=0;for(c=0;c<a.length;c++)f=b.isMoment(a[c])||a[c]instanceof Date?b(a[c]):b(a[c],i.format,i.options.useStrict),f.isValid()&&(d[f.format("YYYY-MM-DD")]=!0,e++);return e>0?d:!1},P=function(a){return a=a.toString(),a.length>=2?a:"0"+a},Q=function(){var a='<thead><tr><th class="prev">&lsaquo;</th><th colspan="'+(i.options.calendarWeeks?"6":"5")+'" class="picker-switch"></th><th class="next">&rsaquo;</th></tr></thead>',b='<tbody><tr><td colspan="'+(i.options.calendarWeeks?"8":"7")+'"></td></tr></tbody>',c='<div class="datepicker-days"><table class="table-condensed">'+a+'<tbody></tbody></table></div><div class="datepicker-months"><table class="table-condensed">'+a+b+'</table></div><div class="datepicker-years"><table class="table-condensed">'+a+b+"</table></div>",d="";return i.options.pickDate&&i.options.pickTime?(d='<div class="bootstrap-datetimepicker-widget'+(i.options.sideBySide?" timepicker-sbs":"")+(i.use24hours?" usetwentyfour":"")+' dropdown-menu" style="z-index:9999 !important;">',d+=i.options.sideBySide?'<div class="row"><div class="col-sm-6 datepicker">'+c+'</div><div class="col-sm-6 timepicker">'+S.getTemplate()+"</div></div>":'<ul class="list-unstyled"><li'+(i.options.collapse?' class="collapse in"':"")+'><div class="datepicker">'+c+'</div></li><li class="picker-switch accordion-toggle"><a class="btn" style="width:100%"><span class="'+i.options.icons.time+'"></span></a></li><li'+(i.options.collapse?' class="collapse"':"")+'><div class="timepicker">'+S.getTemplate()+"</div></li></ul>",d+="</div>"):i.options.pickTime?'<div class="bootstrap-datetimepicker-widget dropdown-menu"><div class="timepicker">'+S.getTemplate()+"</div></div>":'<div class="bootstrap-datetimepicker-widget dropdown-menu"><div class="datepicker">'+c+"</div></div>"},R={modes:[{clsName:"days",navFnc:"month",navStep:1},{clsName:"months",navFnc:"year",navStep:1},{clsName:"years",navFnc:"year",navStep:10}]},S={hourTemplate:'<span data-action="showHours"   data-time-component="hours"   class="timepicker-hour"></span>',minuteTemplate:'<span data-action="showMinutes" data-time-component="minutes" class="timepicker-minute"></span>',secondTemplate:'<span data-action="showSeconds"  data-time-component="seconds" class="timepicker-second"></span>'};S.getTemplate=function(){return'<div class="timepicker-picker"><table class="table-condensed"><tr><td><a href="#" class="btn" data-action="incrementHours"><span class="'+i.options.icons.up+'"></span></a></td><td class="separator"></td><td>'+(i.options.useMinutes?'<a href="#" class="btn" data-action="incrementMinutes"><span class="'+i.options.icons.up+'"></span></a>':"")+"</td>"+(i.options.useSeconds?'<td class="separator"></td><td><a href="#" class="btn" data-action="incrementSeconds"><span class="'+i.options.icons.up+'"></span></a></td>':"")+(i.use24hours?"":'<td class="separator"></td>')+"</tr><tr><td>"+S.hourTemplate+'</td> <td class="separator">:</td><td>'+(i.options.useMinutes?S.minuteTemplate:'<span class="timepicker-minute">00</span>')+"</td> "+(i.options.useSeconds?'<td class="separator">:</td><td>'+S.secondTemplate+"</td>":"")+(i.use24hours?"":'<td class="separator"></td><td><button type="button" class="btn btn-primary" data-action="togglePeriod"></button></td>')+'</tr><tr><td><a href="#" class="btn" data-action="decrementHours"><span class="'+i.options.icons.down+'"></span></a></td><td class="separator"></td><td>'+(i.options.useMinutes?'<a href="#" class="btn" data-action="decrementMinutes"><span class="'+i.options.icons.down+'"></span></a>':"")+"</td>"+(i.options.useSeconds?'<td class="separator"></td><td><a href="#" class="btn" data-action="decrementSeconds"><span class="'+i.options.icons.down+'"></span></a></td>':"")+(i.use24hours?"":'<td class="separator"></td>')+'</tr></table></div><div class="timepicker-hours" data-action="selectHour"><table class="table-condensed"></table></div><div class="timepicker-minutes" data-action="selectMinute"><table class="table-condensed"></table></div>'+(i.options.useSeconds?'<div class="timepicker-seconds" data-action="selectSecond"><table class="table-condensed"></table></div>':"")},i.destroy=function(){H(),I(),i.widget.remove(),i.element.removeData("DateTimePicker"),i.component&&i.component.removeData("DateTimePicker")},i.show=function(a){if(!l().prop("disabled")){if(i.options.useCurrent&&""===l().val()){if(1!==i.options.minuteStepping){var c=b(),d=i.options.minuteStepping;c.minutes(Math.round(c.minutes()/d)*d%60).seconds(0),i.setValue(c.format(i.format))}else i.setValue(b().format(i.format));o("",a.type)}a&&"click"===a.type&&i.isInput&&i.widget.hasClass("picker-open")||(i.widget.hasClass("picker-open")?(i.widget.hide(),i.widget.removeClass("picker-open")):(i.widget.show(),i.widget.addClass("picker-open")),i.height=i.component?i.component.outerHeight():i.element.outerHeight(),n(),i.element.trigger({type:"dp.show",date:b(i.date)}),G(),a&&B(a))}},i.disable=function(){var a=l();a.prop("disabled")||(a.prop("disabled",!0),H())},i.enable=function(){var a=l();a.prop("disabled")&&(a.prop("disabled",!1),F())},i.hide=function(){var a,c,d=i.widget.find(".collapse");for(a=0;a<d.length;a++)if(c=d.eq(a).data("collapse"),c&&c.transitioning)return;i.widget.hide(),i.widget.removeClass("picker-open"),i.viewMode=i.startViewMode,E(),i.element.trigger({type:"dp.hide",date:b(i.date)}),I()},i.setValue=function(a){b.locale(i.options.language),a?i.unset=!1:(i.unset=!0,K()),a=b.isMoment(a)?a.locale(i.options.language):a instanceof Date?b(a):b(a,i.format,i.options.useStrict),a.isValid()?(i.date=a,K(),i.viewDate=b({y:i.date.year(),M:i.date.month()}),t(),x()):p(a)},i.getDate=function(){return i.unset?null:b(i.date)},i.setDate=function(a){var c=b(i.date);i.setValue(a?a:null),o(c,"function")},i.setDisabledDates=function(a){i.options.disabledDates=O(a),i.viewDate&&q()},i.setEnabledDates=function(a){i.options.enabledDates=O(a),i.viewDate&&q()},i.setMaxDate=function(a){void 0!==a&&(i.options.maxDate=b.isMoment(a)||a instanceof Date?b(a):b(a,i.format,i.options.useStrict),i.viewDate&&q())},i.setMinDate=function(a){void 0!==a&&(i.options.minDate=b.isMoment(a)||a instanceof Date?b(a):b(a,i.format,i.options.useStrict),i.viewDate&&q())},k()};a.fn.datetimepicker=function(b){return this.each(function(){var c=a(this),e=c.data("DateTimePicker");e||c.data("DateTimePicker",new d(this,b))})},a.fn.datetimepicker.defaults={format:!1,pickDate:!0,pickTime:!0,useMinutes:!0,useSeconds:!1,useCurrent:!0,calendarWeeks:!1,minuteStepping:1,minDate:b({y:1900}),maxDate:b().add(100,"y"),showToday:!0,collapse:!0,language:b.locale(),defaultDate:"",disabledDates:!1,enabledDates:!1,icons:{},useStrict:!1,direction:"auto",sideBySide:!1,daysOfWeekDisabled:[],widgetParent:!1}});
\ No newline at end of file
index dd54265..a1e460f 100644 (file)
@@ -14,9 +14,6 @@
 // Prefix for libraries loaded via bower
 @library-directory-prefix: "../../../../../sysext/core/Resources/Contrib/components";
 
-// Prefix for third-party libraries in typo3/contrib/
-@typo3contrib-directory-prefix: "../../../../../contrib/";
-
 // Core variables and mixins
 @import "@{library-directory-prefix}/bootstrap/less/variables.less";
 @import "bootstrap/variables.less";
@@ -70,7 +67,7 @@
 @import "@{library-directory-prefix}/bootstrap/less/responsive-utilities.less";
 
 // Components from bootstrap plugins
-@import "@{typo3contrib-directory-prefix}/twbs/bootstrap-datetimepicker.less";
+@import "@{library-directory-prefix}/eonasdan-bootstrap-datetimepicker/src/less/bootstrap-datetimepicker.less";
 
 /*!
  *  Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome