From afc6bbd45e35ae376c8750270ff71c38e7ee7f7c Mon Sep 17 00:00:00 2001 From: Alexander Kosheverov Date: Tue, 25 Jul 2017 12:57:58 +0300 Subject: [PATCH 1/2] Week start date and russian translation --- src/i18n/datepicker.ru-RU.js | 29 +++++++++++++++++++++++++++++ src/js/jquery-datepicker.js | 4 +++- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/i18n/datepicker.ru-RU.js diff --git a/src/i18n/datepicker.ru-RU.js b/src/i18n/datepicker.ru-RU.js new file mode 100644 index 0000000..6afd94c --- /dev/null +++ b/src/i18n/datepicker.ru-RU.js @@ -0,0 +1,29 @@ +(function (factory, jQuery) { + if (typeof define === 'function' && define.amd) { + define('datepicker.ru-RU', ['jquery'], factory); + } else if (typeof exports === 'object') { + factory(require('jquery')); + } else { + factory(jQuery); + } +})(function ($) { + $.fn.datepicker.lang['ru-RU'] = { + days: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'], + daysMin: ['ВС', 'ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ'], + months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'], + monthsShort: ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июнь', 'Июль', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'], + yearSuffix: '', + monthSuffix: '', + todaySuffix: 'Сегодня', + dateInputPlaceholder: 'Выберите дату', + rangeStartInputPlaceholder: 'Начальная дата', + rangeEndPlaceholder: 'Конечная дата', + dateTimeInputPlaceholder: 'Выберите время', + rangeStartTimeInputPlaceholder: 'Начальное время', + rangeEndTimeInputPlaceholder: 'Конечное время', + nowDateButton: 'Сейчас', + confirmDateButton: 'Подтвердить', + cancelTimeButton: 'Отмена', + clearButton: 'Очистить' + }; +}, window.jQuery); diff --git a/src/js/jquery-datepicker.js b/src/js/jquery-datepicker.js index 0cc7773..2d073d2 100644 --- a/src/js/jquery-datepicker.js +++ b/src/js/jquery-datepicker.js @@ -356,6 +356,7 @@ endDate: null, lang: 'en-US', rangeSeparator: '-', + weekStart: 0, defaultValue: '', zIndex: DATE_PANEL_Z_INDEX, onChange: null, @@ -1087,7 +1088,7 @@ var dateCountOfLastMonth = $.getTotalDayCountOfMonth(date.getFullYear(), (date.getMonth() === 0 ? 11 : date.getMonth() - 1)); day = (day === 0) ? 7 : day; - var offset = 0; + var offset = -1 * datepicker.weekStart; var rows = tableRows; var count = 1; var firstDayPosition; @@ -1156,6 +1157,7 @@ }, _getWeekDayRows: function () { var weekDayRows = datepicker.daysMin; + if (datepicker.weekStart) weekDayRows = weekDayRows.slice(datepicker.weekStart).concat(weekDayRows.slice(0,datepicker.weekStart)); return weekDayRows; }, _getYearRows: function (year) { From cbe09551370e2981056f463472bbb31437fcafcb Mon Sep 17 00:00:00 2001 From: Alexander Kosheverov Date: Tue, 25 Jul 2017 13:53:17 +0300 Subject: [PATCH 2/2] Dist files updated aswell --- dist/i18n/datepicker.ru-RU.js | 29 +++++++++++++++++++++++++++++ dist/js/jquery.datepicker.js | 4 +++- dist/js/jquery.datepicker.min.js | 2 +- 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 dist/i18n/datepicker.ru-RU.js diff --git a/dist/i18n/datepicker.ru-RU.js b/dist/i18n/datepicker.ru-RU.js new file mode 100644 index 0000000..6afd94c --- /dev/null +++ b/dist/i18n/datepicker.ru-RU.js @@ -0,0 +1,29 @@ +(function (factory, jQuery) { + if (typeof define === 'function' && define.amd) { + define('datepicker.ru-RU', ['jquery'], factory); + } else if (typeof exports === 'object') { + factory(require('jquery')); + } else { + factory(jQuery); + } +})(function ($) { + $.fn.datepicker.lang['ru-RU'] = { + days: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'], + daysMin: ['ВС', 'ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ'], + months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'], + monthsShort: ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июнь', 'Июль', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'], + yearSuffix: '', + monthSuffix: '', + todaySuffix: 'Сегодня', + dateInputPlaceholder: 'Выберите дату', + rangeStartInputPlaceholder: 'Начальная дата', + rangeEndPlaceholder: 'Конечная дата', + dateTimeInputPlaceholder: 'Выберите время', + rangeStartTimeInputPlaceholder: 'Начальное время', + rangeEndTimeInputPlaceholder: 'Конечное время', + nowDateButton: 'Сейчас', + confirmDateButton: 'Подтвердить', + cancelTimeButton: 'Отмена', + clearButton: 'Очистить' + }; +}, window.jQuery); diff --git a/dist/js/jquery.datepicker.js b/dist/js/jquery.datepicker.js index 0cc7773..2d073d2 100644 --- a/dist/js/jquery.datepicker.js +++ b/dist/js/jquery.datepicker.js @@ -356,6 +356,7 @@ endDate: null, lang: 'en-US', rangeSeparator: '-', + weekStart: 0, defaultValue: '', zIndex: DATE_PANEL_Z_INDEX, onChange: null, @@ -1087,7 +1088,7 @@ var dateCountOfLastMonth = $.getTotalDayCountOfMonth(date.getFullYear(), (date.getMonth() === 0 ? 11 : date.getMonth() - 1)); day = (day === 0) ? 7 : day; - var offset = 0; + var offset = -1 * datepicker.weekStart; var rows = tableRows; var count = 1; var firstDayPosition; @@ -1156,6 +1157,7 @@ }, _getWeekDayRows: function () { var weekDayRows = datepicker.daysMin; + if (datepicker.weekStart) weekDayRows = weekDayRows.slice(datepicker.weekStart).concat(weekDayRows.slice(0,datepicker.weekStart)); return weekDayRows; }, _getYearRows: function (year) { diff --git a/dist/js/jquery.datepicker.min.js b/dist/js/jquery.datepicker.min.js index 95f3b59..463d7dc 100644 --- a/dist/js/jquery.datepicker.min.js +++ b/dist/js/jquery.datepicker.min.js @@ -1,2 +1,2 @@ -!function(e,t,a){"function"==typeof define&&define.amd?define(["jquery","fecha"],e):"object"==typeof exports?module.exports=e(require("jquery"),require("fecha")):e(t,a)}(function(e,t){function a(e,t){var a=[];return Array.from?Array.from(e).slice(t||0):("number"!=typeof t||isNaN(t)||a.push(t),a.slice.apply(e,a))}function n(e){return"string"==typeof e}function r(e){return"object"==typeof e&&e instanceof Date}function i(t,n,r){t.removeClass(n).addClass(n).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){e(this).removeClass(n),r.apply(t,a(arguments))}),d&&s<=9&&(t.removeClass(n),r.apply(t,a(arguments)))}t=t||function(){function e(e,t){for(var a=[],n=0,r=e.length;n3?0:(e-e%10!=10)*e%10]}};var p={D:function(e){return e.getDay()},DD:function(e){return a(e.getDay())},Do:function(e,t){return t.DoFn(e.getDate())},d:function(e){return e.getDate()},dd:function(e){return a(e.getDate())},ddd:function(e,t){return t.dayNamesShort[e.getDay()]},dddd:function(e,t){return t.dayNames[e.getDay()]},M:function(e){return e.getMonth()+1},MM:function(e){return a(e.getMonth()+1)},MMM:function(e,t){return t.monthNamesShort[e.getMonth()]},MMMM:function(e,t){return t.monthNames[e.getMonth()]},yy:function(e){return String(e.getFullYear()).substr(2)},yyyy:function(e){return e.getFullYear()},h:function(e){return e.getHours()%12||12},hh:function(e){return a(e.getHours()%12||12)},H:function(e){return e.getHours()},HH:function(e){return a(e.getHours())},m:function(e){return e.getMinutes()},mm:function(e){return a(e.getMinutes())},s:function(e){return e.getSeconds()},ss:function(e){return a(e.getSeconds())},S:function(e){return Math.round(e.getMilliseconds()/100)},SS:function(e){return a(Math.round(e.getMilliseconds()/10),2)},SSS:function(e){return a(e.getMilliseconds(),3)},a:function(e,t){return e.getHours()<12?t.amPm[0]:t.amPm[1]},A:function(e,t){return e.getHours()<12?t.amPm[0].toUpperCase():t.amPm[1].toUpperCase()},ZZ:function(e){var t=e.getTimezoneOffset();return(t>0?"-":"+")+a(100*Math.floor(Math.abs(t)/60)+Math.abs(t)%60,4)}},f={d:[i,function(e,t){e.day=t}],M:[i,function(e,t){e.month=t-1}],yy:[i,function(e,t){var a=new Date,n=+(""+a.getFullYear()).substr(0,2);e.year=""+(t>68?n-1:n)+t}],h:[i,function(e,t){e.hour=t}],m:[i,function(e,t){e.minute=t}],s:[i,function(e,t){e.second=t}],yyyy:[o,function(e,t){e.year=t}],S:[/\d/,function(e,t){e.millisecond=100*t}],SS:[/\d{2}/,function(e,t){e.millisecond=10*t}],SSS:[l,function(e,t){e.millisecond=t}],D:[i,s],ddd:[d,s],MMM:[d,t("monthNamesShort")],MMMM:[d,t("monthNames")],a:[d,function(e,t,a){var n=t.toLowerCase();n===a.amPm[0]?e.isPm=!1:n===a.amPm[1]&&(e.isPm=!0)}],ZZ:[/[\+\-]\d\d:?\d\d/,function(e,t){var a,n=(t+"").match(/([\+\-]|\d\d)/gi);n&&(a=60*n[1]+parseInt(n[2],10),e.timezoneOffset="+"===n[0]?a:-a)}]};return f.DD=f.DD,f.dddd=f.ddd,f.Do=f.dd=f.d,f.mm=f.m,f.hh=f.H=f.HH=f.h,f.MM=f.M,f.ss=f.s,f.A=f.a,n.masks={default:"ddd MMM dd yyyy HH:mm:ss",shortDate:"M/D/yy",mediumDate:"MMM d, yyyy",longDate:"MMMM d, yyyy",fullDate:"dddd, MMMM d, yyyy",shortTime:"HH:mm",mediumTime:"HH:mm:ss",longTime:"HH:mm:ss.SSS"},n.format=function(e,t,a){var i=a||n.i18n;if("number"==typeof e&&(e=new Date(e)),"[object Date]"!==Object.prototype.toString.call(e)||isNaN(e.getTime()))throw new Error("Invalid Date in fecha.format");return t=n.masks[t]||t||n.masks.default,t.replace(r,function(t){return t in p?p[t](e,i):t.slice(1,t.length-1)})},n.parse=function(e,t,a){var i=a||n.i18n;if("string"!=typeof t)throw new Error("Invalid format in fecha.parse");if(t=n.masks[t]||t,e.length>1e3)return!1;var l=!0,o={};if(t.replace(r,function(t){if(f[t]){var a=f[t],n=e.search(a[0]);~n?e.replace(a[0],function(t){return a[1](o,t,i),e=e.substr(n+t.length),t}):l=!1}return f[t]?"":t.slice(1,t.length-1)}),!l)return!1;var d=new Date;!0===o.isPm&&null!=o.hour&&12!=+o.hour?o.hour=+o.hour+12:!1===o.isPm&&12==+o.hour&&(o.hour=0);var s;return null!=o.timezoneOffset?(o.minute=+(o.minute||0)-+o.timezoneOffset,s=new Date(Date.UTC(o.year||d.getFullYear(),o.month||0,o.day||1,o.hour||0,o.minute||0,o.second||0,o.millisecond||0))):s=new Date(o.year||d.getFullYear(),o.month||0,o.day||1,o.hour||0,o.minute||0,o.second||0,o.millisecond||0),s},n}();var l="undefined"!=typeof window,o=l&&window.navigator.userAgent.toLowerCase(),d=o&&/msie|trident/.test(o),s=document.documentMode,m=function(t,a){var l=this,o={defaults:{readonly:!1,disabled:!1,type:"date",format:"yyyy-MM-dd",placeholder:"Please pick a day",align:"left",startDate:null,endDate:null,lang:"en-US",rangeSeparator:"-",defaultValue:"",zIndex:2008,onChange:null,onShow:null,onHide:null},_init:function(){l=e.extend(!0,l,o.defaults,a||{}),l.lang&&(l=e.extend(l,e.fn.datepicker.lang[l.lang]));var n=l.type;"datetime"!==n&&"datetime-range"!==n||l.format!==o.defaults.format?"year"===n?l.format="yyyy":"month"===n&&l.format===o.defaults.format&&(l.format="yyyy-MM"):l.format="yyyy-MM-dd HH:mm:ss",l.date=new Date,l.value="",l.yearLabel=l.date.getFullYear(),l.monthLabel=l.date.getMonth(),l.readonly&&t.attr("readonly",!0),l.disabled&&t.attr("disabled",!0),l.placeholder&&t.attr("placeholder",l.placeholder),o._created()},_created:function(){var a,n=l.type,r=l.align,i=l.zIndex,m="center"===r?"50%":"right"===r?"100%":"0",c=e("body");if("date"===n||"month"===n||"year"===n||"datetime"===n?("date"===n||"datetime"===n?l.currentView="dateView":"year"===n?l.currentView="yearView":"month"===n&&(l.currentView="monthView"),a=o._generateDateDOM()):"date-range"!==n&&"datetime-range"!==n||(a=o._generateRangeDateDOM()),l.$pickerPanel=e(a).appendTo(c).css({position:"absolute",zIndex:parseInt(i,10)}),(!d||d&&s>9)&&l.$pickerPanel.css({transformOrigin:m+" 0",msTransformOrigin:m+" 0"}),l.$pickerPanel.find(".gmi-time-panel").length>0){var u=l.$pickerPanel.find(".gmi-time-panel");u.css({width:"154px",position:"absolute",left:0,zIndex:2009}),l.$timePanel=u}switch(e.isFunction(l.onChange)&&t.on("pick.datepicker",l.onChange),o._setDate(l.defaultValue),n){case"date":case"datetime":l.$pickerPanel.find(".gmi-date-table").show().siblings().hide();break;case"year":l.$pickerPanel.find(".gmi-year-table").show().siblings().hide();break;case"month":l.$pickerPanel.find(".gmi-month-table").show().siblings().hide()}o._echoDateOrTimeIntoInput(),o._bindEvent()},_unCreate:function(){var e=l.$pickerPanel;e&&e.length>0&&e.remove()},_bindEvent:function(){e(document).on("click.datepicker",function(){o._hidePickerPanel()}),e(window).on("resize.datepicker",function(){o._setDatePanelPosition()}).on("scroll.datepicker",function(){o._setDatePanelPosition()}),t.on("focus.datepicker",o._elFocusHandler).on("click.datepicker",o._elClickHandler).on("change.datepicker",o._elChangeHandler).on("keyup.datepicker",o._elKeyUpHandler),e.isFunction(l.onShow)&&t.on("show.datepicker",l.onShow),e.isFunction(l.onHide)&&t.on("show.datepicker",l.onHide),l.$pickerPanel.on("click.datepicker",function(e){e.stopPropagation()}),l.$pickerPanel.on("focus.datepicker",".gmi-time-picker--input",function(t){var a=e(this);o._setTimeView(a,t)}).on("keyup.datepicker",".gmi-time-picker--input",function(t){var a=e(this);o._setTimeView(a,t)}).on("change.datepicker",".gmi-time-picker--input",function(t){var a=e(this);o._setTimeView(a,t)}),l.$timePanel&&l.$timePanel.length>0&&(l.$timePanel.on("mouseenter.datepicker",".gmi-time-panel__body__item",function(t){var a=e(this),n=a.find("> ul.gmi-time-panel__body__item--spinner");a.css("overflow","auto"),n.css("width","100%")}).on("mouseleave.datepicker",".gmi-time-panel__body__item",function(t){var a=e(this),n=a.find("> ul.gmi-time-panel__body__item--spinner"),r=a.outerWidth();a.css("overflow","hidden"),n.css("width",r+"px")}),l.$timePanel.on("click.datepicker",".gmi-time-panel__body__item--spinner__item:not(.disabled)",function(t){var a=e(this),n=a.parents(".gmi-time-panel__body__item").eq(0),r=(a.parents(".gmi-time-panel__body__item--spinner").data("role"),Number(a.text())),i=a.outerHeight(),l=r*i;a.addClass("active").siblings().removeClass("active"),n.scrollTop(l),t.stopPropagation()}),l.$timePanel.on("click.datepicker",".gmi-time-panel__btn",function(t){var a=e(this),n=a.data("role"),r=new Date,i=e(t.delegateTarget),o=i.siblings(".gmi-time-picker--input"),d=i.find('.gmi-time-panel__body__item--spinner[data-role="hour"]'),s=i.find('.gmi-time-panel__body__item--spinner[data-role="min"]'),m=i.find('.gmi-time-panel__body__item--spinner[data-role="sec"]'),c=Number(d.find("> li.active").text()),u=Number(s.find("> li.active").text()),g=Number(m.find("> li.active").text());switch(r.setHours(c,u,g,0),n){case"confirm":o.val(e.formatDate(r,"HH:mm:ss")),i.hide();var p=l.$pickerPanel.find(".gmi-time-picker--input").filter(function(){return""===e(this).val()||!e.parseDate(e(this).val(),"HH:mm:ss")});p&&0===p.length&&l.$pickerPanel.find(".gmi-picker-panel__link-btn--determine").removeClass("disabled");break;case"cancel":i.hide()}})),l.$pickerPanel.on("click.datepicker","td:not(.disabled)",function(t){var a,n,r=l.type,i=l.format,d=e(t.delegateTarget),s=d.find(".gmi-picker-panel__link-btn--determine"),m=e(this);if(t.stopPropagation(),"date"===r||"datetime"===r){var c,u,g=l.currentView;if("dateView"===g){var p=m.text()===l.todaySuffix?(new Date).getDate():Number(m.text());if(m.hasClass("prev-month")||m.hasClass("next-month")?(m.hasClass("prev-month")?(c=l.monthLabel-1<0?l.yearLabel-1:l.yearLabel,u=l.monthLabel-1<0?11:l.monthLabel-1):m.hasClass("next-month")&&(c=l.monthLabel+1>11?l.yearLabel+1:l.yearLabel,u=l.monthLabel+1>11?0:l.monthLabel+1),"date"===r?(n=e.formatDate(new Date(c,u,p),i),o._setDate(n)):(n=e.formatDate(new Date(c,u,p)),o._setNewDateDOM(d,c,u,p),d.find(".gmi-date-table td").removeClass("current").filter(function(){return Number(e(this).data("year"))===c&&Number(e(this).data("month"))===u&&Number(e(this).text())===p}).addClass("current"),l.yearLabel=c,l.monthLabel=u)):(c=l.yearLabel,u=l.monthLabel,"date"===r?(n=e.formatDate(new Date(c,u,p),i),o._setDate(n)):(n=e.formatDate(new Date(c,u,p)),d.find(".gmi-date-table").find("td").removeClass("current"),m.addClass("current"))),"datetime"===r)return d.find(".gmi-date-picker--input").val(n),a=d.find(".gmi-time-picker--input"),""!==a.val()&&e.parseDate(a.val(),"HH:mm:ss")||a.val("00:00:00"),s.removeClass("disabled"),!1;o._hidePickerPanel()}else"yearView"===g?o._setYearView(m):o._setMonthView(m)}else if("month"===r)switch(l.currentView){case"monthView":o._setMonthView(m);break;case"yearView":o._setYearView(m)}else if("year"===r)o._setYearView(m);else if("date-range"===r||"datetime-range"===r){var f,h=l.minDate,_=l.maxDate,D=d.find('.gmi-date-picker--input[data-role="range-start"]'),y=d.find('.gmi-time-picker--input[data-role="range-start"]'),b=d.find('.gmi-date-picker--input[data-role="range-end"]'),v=d.find('.gmi-time-picker--input[data-role="range-end"]');c=Number(m.data("year")),u=Number(m.data("month")),p=m.text()===l.todaySuffix?(new Date).getDate():Number(m.text()),h&&_?(l.minDate=new Date(c,u,p),l.maxDate=null,d.find(".gmi-date-table td").removeClass("start-date in-range end-date"),m.hasClass("prev-month")||m.hasClass("next-month")||m.addClass("start-date in-range"),"datetime-range"===r&&(D.val(e.formatDate(l.minDate)),s.addClass("disabled"))):h&&!_?new Date(c,u,p).getTime()l.minDate.getTime()&&i.getTime()=s.getTime()&&(a.find(".gmi-date-table td").filter(function(){var t=Number(e(this).data("year")),a=Number(e(this).data("month")),n=e(this).text()===l.todaySuffix?(new Date).getDate():Number(e(this).text());return!e(this).hasClass("prev-month")&&!e(this).hasClass("next-month")&&new Date(t,a,n).getTime()>s.getTime()&&new Date(t,a,n).getTime()