diff --git a/README.md b/README.md index da0cfe3..e8cab5b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Air Datepicker -Lightweight customizable cross-browser jQuery datepicker, built with es5 and css-flexbox. Works in all modern browsers. +Lightweight customizable cross-browser jQuery datepicker, built with es5 and css-flexbox. Works in all modern desktop and mobile browsers (tested no Android 4.4+ and iOS8+) ![air datepicker image](https://github.com/t1m0n/air-datepicker/raw/master/docs/img/promo-img.png) ## Install @@ -19,6 +19,10 @@ $('.my-datepicker').datepicker([options]) ## Change log +### v1.2.3 +* fixed `dateFormat` method. +* fixed typo in Russian docs, add ids in docs headers. + ### v1.2.2 * fixed typo in `monthsField` * added German language (thanks to [Ichag](https://github.com/Ichag)) diff --git a/src/js/datepicker.js b/src/js/datepicker.js index e82b93e..3e3a5c4 100644 --- a/src/js/datepicker.js +++ b/src/js/datepicker.js @@ -317,6 +317,7 @@ var Datepicker; formatDate: function (string, date) { date = date || this.date; var result = string, + boundary = this._getWordBoundaryRegExp, locale = this.loc, decade = datepicker.getDecade(date), d = datepicker.getParsedDate(date); @@ -325,21 +326,21 @@ var Datepicker; case /@/.test(result): result = result.replace(/@/, date.getTime()); case /dd/.test(result): - result = result.replace(/\bdd\b/, d.fullDate); + result = result.replace(boundary('dd'), d.fullDate); case /d/.test(result): - result = result.replace(/\bd\b/, d.date); + result = result.replace(boundary('d'), d.date); case /DD/.test(result): - result = result.replace(/\bDD\b/, locale.days[d.day]); + result = result.replace(boundary('DD'), locale.days[d.day]); case /D/.test(result): - result = result.replace(/\bD\b/, locale.daysShort[d.day]); + result = result.replace(boundary('D'), locale.daysShort[d.day]); case /mm/.test(result): - result = result.replace(/\bmm\b/, d.fullMonth); + result = result.replace(boundary('mm'), d.fullMonth); case /m/.test(result): - result = result.replace(/\bm\b/, d.month + 1); + result = result.replace(boundary('m'), d.month + 1); case /MM/.test(result): - result = result.replace(/\bMM\b/, this.loc.months[d.month]); + result = result.replace(boundary('MM'), this.loc.months[d.month]); case /M/.test(result): - result = result.replace(/\bM\b/, locale.monthsShort[d.month]); + result = result.replace(boundary('M'), locale.monthsShort[d.month]); case /ii/.test(result): result = result.replace(/\bii\b/, d.fullMinutes); case /i/.test(result): @@ -349,18 +350,22 @@ var Datepicker; case /h/.test(result): result = result.replace(/\bh\b/, d.hours); case /yyyy/.test(result): - result = result.replace(/\byyyy\b/, d.year); + result = result.replace(boundary('yyyy'), d.year); case /yyyy1/.test(result): - result = result.replace(/\byyyy1\b/, decade[0]); + result = result.replace(boundary('yyyy1'), decade[0]); case /yyyy2/.test(result): - result = result.replace(/\byyyy2\b/, decade[1]); + result = result.replace(boundary('yyyy2'), decade[1]); case /yy/.test(result): - result = result.replace(/\byy\b/, d.year.toString().slice(-2)); + result = result.replace(boundary('yy'), d.year.toString().slice(-2)); } return result; }, + _getWordBoundaryRegExp: function (sign) { + return new RegExp('\\b(?=[a-zA-Z0-9äöüßÄÖÜ<])' + sign + '(?![>a-zA-Z0-9äöüßÄÖÜ])'); + }, + selectDate: function (date) { var _this = this, opts = _this.opts, diff --git a/tests/index.html b/tests/index.html index 390882e..d788759 100644 --- a/tests/index.html +++ b/tests/index.html @@ -8,6 +8,7 @@ + diff --git a/tests/specs/options.js b/tests/specs/options.js index 619a4b4..c35fd1b 100644 --- a/tests/specs/options.js +++ b/tests/specs/options.js @@ -136,7 +136,6 @@ describe('Options', function () { 'yy': 15, 'yyyy1': 2010, 'yyyy2': 2019 - }; for (var format in formats) { @@ -151,6 +150,15 @@ describe('Options', function () { }) }(format)) } + + it('should work with special characters', function () { + dp = $input.datepicker({ + language: 'de', + dateFormat: 'Month is MM' + }).data('datepicker'); + dp.selectDate(new Date(2016, 2, 1)); + expect(dp.$el.val()).to.be.equal('Month is März'); + }) }); describe('altField', function () {