/** * Datepicker wrapper. * * @author Htmlstream * @version 1.0 * */ ;(function ($) { 'use strict'; $.HSCore.components.HSDatepicker = { /** * * * @var Object _baseConfig */ _baseConfig: { dateFormat: 'dd.mm.yy', dayNamesMin: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ], prevText: '', nextText: '' }, /** * * * @var jQuery pageCollection */ pageCollection: $(), /** * Initialization of Datepicker wrapper. * * @param String selector (optional) * @param Object config (optional) * * @return jQuery pageCollection - collection of initialized items. */ init: function (selector, config) { this.collection = selector && $(selector).length ? $(selector) : $(); if (!$(selector).length) return; this.config = config && $.isPlainObject(config) ? $.extend({}, this._baseConfig, config) : this._baseConfig; this.config.itemSelector = selector; this.initDatepicker(); return this.pageCollection; }, initDatepicker: function () { //Variables var $self = this, config = $self.config, collection = $self.pageCollection; //Actions this.collection.each(function (i, el) { //Variables var $this = $(el), to = $this.data('to'), type = $this.data('type'), minDate, maxDate; if (type == 'one-field-range') { var datePicker = $this.datepicker({ dateFormat: config['dateFormat'], defaultDate: '+1w', dayNamesMin: config['dayNamesMin'], numberOfMonths: 1, showOtherMonths: true, prevText: config['prevText'], nextText: config['nextText'], beforeShow: $self.datepickerCustomClass, onSelect: function(dateText, inst) { console.log(inst); } }).on('change', function () { var activeDate = datePicker.datepicker("getDate"); if(minDate == null) { minDate = activeDate; } else if(activeDate < minDate) { minDate = activeDate; } if(maxDate == null && activeDate > minDate) { maxDate = activeDate; } else if(activeDate > maxDate) { maxDate = activeDate; } }); } else if (type == 'range') { var dateFrom = $this.datepicker({ dateFormat: config['dateFormat'], defaultDate: '+1w', dayNamesMin: config['dayNamesMin'], numberOfMonths: 1, showOtherMonths: true, prevText: config['prevText'], nextText: config['nextText'], beforeShow: $self.datepickerCustomClass }).on('change', function () { dateTo.datepicker('option', 'minDate', $self.getDate(this)); }); var dateTo = $('#' + to).datepicker({ dateFormat: config['dateFormat'], defaultDate: '+1w', dayNamesMin: config['dayNamesMin'], numberOfMonths: 1, showOtherMonths: true, prevText: config['prevText'], nextText: config['nextText'], beforeShow: $self.datepickerCustomClass }).on('change', function () { dateFrom.datepicker('option', 'maxDate', $self.getDate(this)); }); } else { $this.datepicker({ dateFormat: config['dateFormat'], dayNamesMin: config['dayNamesMin'], showOtherMonths: true, prevText: config['prevText'], nextText: config['nextText'], beforeShow: $self.datepickerCustomClass }); } //Actions collection = collection.add($this); }); }, datepickerCustomClass: function (el, attr) { var arrayOfClasses, customClass, i; arrayOfClasses = attr.input[0].className.split(' '); for (i = 0; arrayOfClasses.length > i; i++) { if (arrayOfClasses[i].substring(0, 6) == 'u-date') { customClass = arrayOfClasses[i]; } } $('#ui-datepicker-div').addClass(customClass); }, getDate: function (element) { var $self = this, date, config = $self.config; try { date = $.datepicker.parseDate(config['dateFormat'], element.value); } catch (error) { date = null; } return date; } }; })(jQuery);