diff --git a/addons/web/static/lib/moment/locale/af.js b/addons/web/static/lib/moment/locale/af.js index 08bb705022f..a89257fdc4c 100644 --- a/addons/web/static/lib/moment/locale/af.js +++ b/addons/web/static/lib/moment/locale/af.js @@ -58,7 +58,7 @@ var af = moment.defineLocale('af', { y : '\'n jaar', yy : '%d jaar' }, - ordinalParse: /\d{1,2}(ste|de)/, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, ordinal : function (number) { return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter }, diff --git a/addons/web/static/lib/moment/locale/ar-kw.js b/addons/web/static/lib/moment/locale/ar-kw.js new file mode 100644 index 00000000000..93c7dd54b44 --- /dev/null +++ b/addons/web/static/lib/moment/locale/ar-kw.js @@ -0,0 +1,59 @@ +//! moment.js locale configuration +//! locale : Arabic (Kuwait) [ar-kw] +//! author : Nusret Parlak: https://github.com/nusretparlak + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var arKw = moment.defineLocale('ar-kw', { + months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +return arKw; + +}))); diff --git a/addons/web/static/lib/moment/locale/ar-ly.js b/addons/web/static/lib/moment/locale/ar-ly.js index 7180ed4ed8f..2d548dfe1db 100644 --- a/addons/web/static/lib/moment/locale/ar-ly.js +++ b/addons/web/static/lib/moment/locale/ar-ly.js @@ -108,7 +108,7 @@ var arLy = moment.defineLocale('ar-ly', { yy : pluralize('y') }, preparse: function (string) { - return string.replace(/\u200f/g, '').replace(/،/g, ','); + return string.replace(/،/g, ','); }, postformat: function (string) { return string.replace(/\d/g, function (match) { diff --git a/addons/web/static/lib/moment/locale/ar.js b/addons/web/static/lib/moment/locale/ar.js index dbe4e7dd940..ae09617a520 100644 --- a/addons/web/static/lib/moment/locale/ar.js +++ b/addons/web/static/lib/moment/locale/ar.js @@ -58,18 +58,18 @@ var pluralize = function (u) { }; }; var months = [ - 'يناير', - 'فبراير', - 'مارس', - 'أبريل', - 'مايو', - 'يونيو', - 'يوليو', - 'أغسطس', - 'سبتمبر', - 'أكتوبر', - 'نوفمبر', - 'ديسمبر' + 'كانون الثاني يناير', + 'شباط فبراير', + 'آذار مارس', + 'نيسان أبريل', + 'أيار مايو', + 'حزيران يونيو', + 'تموز يوليو', + 'آب أغسطس', + 'أيلول سبتمبر', + 'تشرين الأول أكتوبر', + 'تشرين الثاني نوفمبر', + 'كانون الأول ديسمبر' ]; var ar = moment.defineLocale('ar', { @@ -122,7 +122,7 @@ var ar = moment.defineLocale('ar', { yy : pluralize('y') }, preparse: function (string) { - return string.replace(/\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { return numberMap[match]; }).replace(/،/g, ','); }, diff --git a/addons/web/static/lib/moment/locale/az.js b/addons/web/static/lib/moment/locale/az.js index 054cb472427..56021b4463a 100644 --- a/addons/web/static/lib/moment/locale/az.js +++ b/addons/web/static/lib/moment/locale/az.js @@ -84,7 +84,7 @@ var az = moment.defineLocale('az', { return 'axşam'; } }, - ordinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/, + dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/, ordinal : function (number) { if (number === 0) { // special case for zero return number + '-ıncı'; diff --git a/addons/web/static/lib/moment/locale/be.js b/addons/web/static/lib/moment/locale/be.js index e8c269f5f8f..83025fdc441 100644 --- a/addons/web/static/lib/moment/locale/be.js +++ b/addons/web/static/lib/moment/locale/be.js @@ -108,7 +108,7 @@ var be = moment.defineLocale('be', { return 'вечара'; } }, - ordinalParse: /\d{1,2}-(і|ы|га)/, + dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/, ordinal: function (number, period) { switch (period) { case 'M': diff --git a/addons/web/static/lib/moment/locale/bg.js b/addons/web/static/lib/moment/locale/bg.js index 663f5be8132..ee06d1978ae 100644 --- a/addons/web/static/lib/moment/locale/bg.js +++ b/addons/web/static/lib/moment/locale/bg.js @@ -59,7 +59,7 @@ var bg = moment.defineLocale('bg', { y : 'година', yy : '%d години' }, - ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, ordinal : function (number) { var lastDigit = number % 10, last2Digits = number % 100; diff --git a/addons/web/static/lib/moment/locale/bm.js b/addons/web/static/lib/moment/locale/bm.js new file mode 100644 index 00000000000..1de2b5e932f --- /dev/null +++ b/addons/web/static/lib/moment/locale/bm.js @@ -0,0 +1,59 @@ +//! moment.js locale configuration +//! locale : Bambara [bm] +//! author : Estelle Comment : https://github.com/estellecomment + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + +// Language contact person : Abdoufata Kane : https://github.com/abdoufata + +var bm = moment.defineLocale('bm', { + months : 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'), + monthsShort : 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'), + weekdays : 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'), + weekdaysShort : 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'), + weekdaysMin : 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'MMMM [tile] D [san] YYYY', + LLL : 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm', + LLLL : 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm' + }, + calendar : { + sameDay : '[Bi lɛrɛ] LT', + nextDay : '[Sini lɛrɛ] LT', + nextWeek : 'dddd [don lɛrɛ] LT', + lastDay : '[Kunu lɛrɛ] LT', + lastWeek : 'dddd [tɛmɛnen lɛrɛ] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s kɔnɔ', + past : 'a bɛ %s bɔ', + s : 'sanga dama dama', + m : 'miniti kelen', + mm : 'miniti %d', + h : 'lɛrɛ kelen', + hh : 'lɛrɛ %d', + d : 'tile kelen', + dd : 'tile %d', + M : 'kalo kelen', + MM : 'kalo %d', + y : 'san kelen', + yy : 'san %d' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return bm; + +}))); diff --git a/addons/web/static/lib/moment/locale/br.js b/addons/web/static/lib/moment/locale/br.js index 4e1829962f7..723306315c1 100644 --- a/addons/web/static/lib/moment/locale/br.js +++ b/addons/web/static/lib/moment/locale/br.js @@ -92,7 +92,7 @@ var br = moment.defineLocale('br', { y : 'ur bloaz', yy : specialMutationForYears }, - ordinalParse: /\d{1,2}(añ|vet)/, + dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/, ordinal : function (number) { var output = (number === 1) ? 'añ' : 'vet'; return number + output; diff --git a/addons/web/static/lib/moment/locale/bs.js b/addons/web/static/lib/moment/locale/bs.js index f2b8725c531..760a7867033 100644 --- a/addons/web/static/lib/moment/locale/bs.js +++ b/addons/web/static/lib/moment/locale/bs.js @@ -130,7 +130,7 @@ var bs = moment.defineLocale('bs', { y : 'godinu', yy : translate }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/ca.js b/addons/web/static/lib/moment/locale/ca.js index 3a4c62f1781..8064a5d83f4 100644 --- a/addons/web/static/lib/moment/locale/ca.js +++ b/addons/web/static/lib/moment/locale/ca.js @@ -11,20 +11,27 @@ var ca = moment.defineLocale('ca', { - months : 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'), - monthsShort : 'gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.'.split('_'), + months : { + standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'), + format: 'de gener_de febrer_de març_d\'abril_de maig_de juny_de juliol_d\'agost_de setembre_d\'octubre_de novembre_de desembre'.split('_'), + isFormat: /D[oD]?(\s)+MMMM/ + }, + monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'), monthsParseExact : true, weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'), weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'), - weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'), + weekdaysMin : 'dg_dl_dt_dc_dj_dv_ds'.split('_'), weekdaysParseExact : true, longDateFormat : { LT : 'H:mm', LTS : 'H:mm:ss', L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY H:mm', - LLLL : 'dddd D MMMM YYYY H:mm' + LL : 'D MMMM [de] YYYY', + ll : 'D MMM YYYY', + LLL : 'D MMMM [de] YYYY [a les] H:mm', + lll : 'D MMM YYYY, H:mm', + LLLL : 'dddd D MMMM [de] YYYY [a les] H:mm', + llll : 'ddd D MMM YYYY, H:mm' }, calendar : { sameDay : function () { @@ -59,7 +66,7 @@ var ca = moment.defineLocale('ca', { y : 'un any', yy : '%d anys' }, - ordinalParse: /\d{1,2}(r|n|t|è|a)/, + dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, ordinal : function (number, period) { var output = (number === 1) ? 'r' : (number === 2) ? 'n' : diff --git a/addons/web/static/lib/moment/locale/cs.js b/addons/web/static/lib/moment/locale/cs.js index 35a8a5a781e..952dc49ed5a 100644 --- a/addons/web/static/lib/moment/locale/cs.js +++ b/addons/web/static/lib/moment/locale/cs.js @@ -159,7 +159,7 @@ var cs = moment.defineLocale('cs', { y : translate, yy : translate }, - ordinalParse : /\d{1,2}\./, + dayOfMonthOrdinalParse : /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/cv.js b/addons/web/static/lib/moment/locale/cv.js index 59ad1445a56..6d207798405 100644 --- a/addons/web/static/lib/moment/locale/cv.js +++ b/addons/web/static/lib/moment/locale/cv.js @@ -50,7 +50,7 @@ var cv = moment.defineLocale('cv', { y : 'пӗр ҫул', yy : '%d ҫул' }, - ordinalParse: /\d{1,2}-мӗш/, + dayOfMonthOrdinalParse: /\d{1,2}-мӗш/, ordinal : '%d-мӗш', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/cy.js b/addons/web/static/lib/moment/locale/cy.js index 022b1062574..c570c22760f 100644 --- a/addons/web/static/lib/moment/locale/cy.js +++ b/addons/web/static/lib/moment/locale/cy.js @@ -50,7 +50,7 @@ var cy = moment.defineLocale('cy', { y: 'blwyddyn', yy: '%d flynedd' }, - ordinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/, + dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/, // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh ordinal: function (number) { var b = number, diff --git a/addons/web/static/lib/moment/locale/da.js b/addons/web/static/lib/moment/locale/da.js index 223c3d7e45a..42d5f1690f0 100644 --- a/addons/web/static/lib/moment/locale/da.js +++ b/addons/web/static/lib/moment/locale/da.js @@ -19,17 +19,17 @@ var da = moment.defineLocale('da', { longDateFormat : { LT : 'HH:mm', LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', + L : 'DD.MM.YYYY', LL : 'D. MMMM YYYY', LLL : 'D. MMMM YYYY HH:mm', - LLLL : 'dddd [d.] D. MMMM YYYY HH:mm' + LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm' }, calendar : { - sameDay : '[I dag kl.] LT', - nextDay : '[I morgen kl.] LT', - nextWeek : 'dddd [kl.] LT', - lastDay : '[I går kl.] LT', - lastWeek : '[sidste] dddd [kl] LT', + sameDay : '[i dag kl.] LT', + nextDay : '[i morgen kl.] LT', + nextWeek : 'på dddd [kl.] LT', + lastDay : '[i går kl.] LT', + lastWeek : '[i] dddd[s kl.] LT', sameElse : 'L' }, relativeTime : { @@ -47,7 +47,7 @@ var da = moment.defineLocale('da', { y : 'et år', yy : '%d år' }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/de-at.js b/addons/web/static/lib/moment/locale/de-at.js index e72c124dc50..8755e42169f 100644 --- a/addons/web/static/lib/moment/locale/de-at.js +++ b/addons/web/static/lib/moment/locale/de-at.js @@ -29,7 +29,7 @@ function processRelativeTime(number, withoutSuffix, key, isFuture) { var deAt = moment.defineLocale('de-at', { months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), - monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsShort : 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), monthsParseExact : true, weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), @@ -66,7 +66,7 @@ var deAt = moment.defineLocale('de-at', { y : processRelativeTime, yy : processRelativeTime }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/de-ch.js b/addons/web/static/lib/moment/locale/de-ch.js new file mode 100644 index 00000000000..45de05eecc2 --- /dev/null +++ b/addons/web/static/lib/moment/locale/de-ch.js @@ -0,0 +1,78 @@ +//! moment.js locale configuration +//! locale : German (Switzerland) [de-ch] +//! author : sschueller : https://github.com/sschueller + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +// based on: https://www.bk.admin.ch/dokumentation/sprachen/04915/05016/index.html?lang=de# + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +var deCh = moment.defineLocale('de-ch', { + months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH.mm', + LLLL : 'dddd, D. MMMM YYYY HH.mm' + }, + calendar : { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]' + }, + relativeTime : { + future : 'in %s', + past : 'vor %s', + s : 'ein paar Sekunden', + m : processRelativeTime, + mm : '%d Minuten', + h : processRelativeTime, + hh : '%d Stunden', + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return deCh; + +}))); diff --git a/addons/web/static/lib/moment/locale/de.js b/addons/web/static/lib/moment/locale/de.js index bb7197e48bb..f0978a33be4 100644 --- a/addons/web/static/lib/moment/locale/de.js +++ b/addons/web/static/lib/moment/locale/de.js @@ -28,7 +28,7 @@ function processRelativeTime(number, withoutSuffix, key, isFuture) { var de = moment.defineLocale('de', { months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), - monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), monthsParseExact : true, weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), @@ -65,7 +65,7 @@ var de = moment.defineLocale('de', { y : processRelativeTime, yy : processRelativeTime }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/el.js b/addons/web/static/lib/moment/locale/el.js index 8396665ce76..af1ab2cb559 100644 --- a/addons/web/static/lib/moment/locale/el.js +++ b/addons/web/static/lib/moment/locale/el.js @@ -18,7 +18,9 @@ var el = moment.defineLocale('el', { monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'), monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'), months : function (momentToFormat, format) { - if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM' + if (!momentToFormat) { + return this._monthsNominativeEl; + } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM' return this._monthsGenitiveEl[momentToFormat.month()]; } else { return this._monthsNominativeEl[momentToFormat.month()]; @@ -85,7 +87,7 @@ var el = moment.defineLocale('el', { y : 'ένας χρόνος', yy : '%d χρόνια' }, - ordinalParse: /\d{1,2}η/, + dayOfMonthOrdinalParse: /\d{1,2}η/, ordinal: '%dη', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/en-au.js b/addons/web/static/lib/moment/locale/en-au.js index d13415796e2..e8a8fdc96f7 100644 --- a/addons/web/static/lib/moment/locale/en-au.js +++ b/addons/web/static/lib/moment/locale/en-au.js @@ -47,7 +47,7 @@ var enAu = moment.defineLocale('en-au', { y : 'a year', yy : '%d years' }, - ordinalParse: /\d{1,2}(st|nd|rd|th)/, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, ordinal : function (number) { var b = number % 10, output = (~~(number % 100 / 10) === 1) ? 'th' : diff --git a/addons/web/static/lib/moment/locale/en-ca.js b/addons/web/static/lib/moment/locale/en-ca.js index 358b1837a2e..3629bf1ab11 100644 --- a/addons/web/static/lib/moment/locale/en-ca.js +++ b/addons/web/static/lib/moment/locale/en-ca.js @@ -47,7 +47,7 @@ var enCa = moment.defineLocale('en-ca', { y : 'a year', yy : '%d years' }, - ordinalParse: /\d{1,2}(st|nd|rd|th)/, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, ordinal : function (number) { var b = number % 10, output = (~~(number % 100 / 10) === 1) ? 'th' : diff --git a/addons/web/static/lib/moment/locale/en-gb.js b/addons/web/static/lib/moment/locale/en-gb.js index ed382905f35..fe48a78cd00 100644 --- a/addons/web/static/lib/moment/locale/en-gb.js +++ b/addons/web/static/lib/moment/locale/en-gb.js @@ -47,7 +47,7 @@ var enGb = moment.defineLocale('en-gb', { y : 'a year', yy : '%d years' }, - ordinalParse: /\d{1,2}(st|nd|rd|th)/, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, ordinal : function (number) { var b = number % 10, output = (~~(number % 100 / 10) === 1) ? 'th' : diff --git a/addons/web/static/lib/moment/locale/en-ie.js b/addons/web/static/lib/moment/locale/en-ie.js index 54c3065ebe7..bb0cccef670 100644 --- a/addons/web/static/lib/moment/locale/en-ie.js +++ b/addons/web/static/lib/moment/locale/en-ie.js @@ -47,7 +47,7 @@ var enIe = moment.defineLocale('en-ie', { y : 'a year', yy : '%d years' }, - ordinalParse: /\d{1,2}(st|nd|rd|th)/, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, ordinal : function (number) { var b = number % 10, output = (~~(number % 100 / 10) === 1) ? 'th' : diff --git a/addons/web/static/lib/moment/locale/en-nz.js b/addons/web/static/lib/moment/locale/en-nz.js index c6c60302c65..700523193c8 100644 --- a/addons/web/static/lib/moment/locale/en-nz.js +++ b/addons/web/static/lib/moment/locale/en-nz.js @@ -47,7 +47,7 @@ var enNz = moment.defineLocale('en-nz', { y : 'a year', yy : '%d years' }, - ordinalParse: /\d{1,2}(st|nd|rd|th)/, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, ordinal : function (number) { var b = number % 10, output = (~~(number % 100 / 10) === 1) ? 'th' : diff --git a/addons/web/static/lib/moment/locale/eo.js b/addons/web/static/lib/moment/locale/eo.js index 75193181b91..8001c83c69f 100644 --- a/addons/web/static/lib/moment/locale/eo.js +++ b/addons/web/static/lib/moment/locale/eo.js @@ -1,8 +1,8 @@ //! moment.js locale configuration //! locale : Esperanto [eo] //! author : Colin Dean : https://github.com/colindean -//! komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko. -//! Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni! +//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia +//! comment : miestasmia corrected the translation by colindean ;(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' @@ -15,16 +15,16 @@ var eo = moment.defineLocale('eo', { months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'), monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'), - weekdays : 'Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato'.split('_'), - weekdaysShort : 'Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab'.split('_'), - weekdaysMin : 'Di_Lu_Ma_Me_Ĵa_Ve_Sa'.split('_'), + weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'), + weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'), + weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'), longDateFormat : { LT : 'HH:mm', LTS : 'HH:mm:ss', L : 'YYYY-MM-DD', - LL : 'D[-an de] MMMM, YYYY', - LLL : 'D[-an de] MMMM, YYYY HH:mm', - LLLL : 'dddd, [la] D[-an de] MMMM, YYYY HH:mm' + LL : 'D[-a de] MMMM, YYYY', + LLL : 'D[-a de] MMMM, YYYY HH:mm', + LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm' }, meridiemParse: /[ap]\.t\.m/i, isPM: function (input) { @@ -46,7 +46,7 @@ var eo = moment.defineLocale('eo', { sameElse : 'L' }, relativeTime : { - future : 'je %s', + future : 'post %s', past : 'antaŭ %s', s : 'sekundoj', m : 'minuto', @@ -60,7 +60,7 @@ var eo = moment.defineLocale('eo', { y : 'jaro', yy : '%d jaroj' }, - ordinalParse: /\d{1,2}a/, + dayOfMonthOrdinalParse: /\d{1,2}a/, ordinal : '%da', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/es-do.js b/addons/web/static/lib/moment/locale/es-do.js index e86282ad0cd..9aa0535ae87 100644 --- a/addons/web/static/lib/moment/locale/es-do.js +++ b/addons/web/static/lib/moment/locale/es-do.js @@ -12,16 +12,27 @@ var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'); var monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); +var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]; +var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + var esDo = moment.defineLocale('es-do', { months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), monthsShort : function (m, format) { - if (/-MMM-/.test(format)) { + if (!m) { + return monthsShortDot; + } else if (/-MMM-/.test(format)) { return monthsShort[m.month()]; } else { return monthsShortDot[m.month()]; } }, - monthsParseExact : true, + monthsRegex: monthsRegex, + monthsShortRegex: monthsRegex, + monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsParse: monthsParse, + longMonthsParse: monthsParse, + shortMonthsParse: monthsParse, weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), @@ -67,7 +78,7 @@ var esDo = moment.defineLocale('es-do', { y : 'un año', yy : '%d años' }, - ordinalParse : /\d{1,2}º/, + dayOfMonthOrdinalParse : /\d{1,2}º/, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/es-us.js b/addons/web/static/lib/moment/locale/es-us.js new file mode 100644 index 00000000000..c7d2f9737c2 --- /dev/null +++ b/addons/web/static/lib/moment/locale/es-us.js @@ -0,0 +1,83 @@ +//! moment.js locale configuration +//! locale : Spanish (United States) [es-us] +//! author : bustta : https://github.com/bustta + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'); +var monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); + +var esUs = moment.defineLocale('es-us', { + months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortDot; + } else if (/-MMM-/.test(format)) { + return monthsShort[m.month()]; + } else { + return monthsShortDot[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'MM/DD/YYYY', + LL : 'MMMM [de] D [de] YYYY', + LLL : 'MMMM [de] D [de] YYYY H:mm', + LLLL : 'dddd, MMMM [de] D [de] YYYY H:mm' + }, + calendar : { + sameDay : function () { + return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextDay : function () { + return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastDay : function () { + return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'en %s', + past : 'hace %s', + s : 'unos segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'una hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un año', + yy : '%d años' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +return esUs; + +}))); diff --git a/addons/web/static/lib/moment/locale/es.js b/addons/web/static/lib/moment/locale/es.js index 6d1f5907968..9fce89d11f3 100644 --- a/addons/web/static/lib/moment/locale/es.js +++ b/addons/web/static/lib/moment/locale/es.js @@ -8,8 +8,10 @@ typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment) }(this, (function (moment) { 'use strict'; -var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'), - monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); + + +var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'); +var monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]; var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; @@ -66,7 +68,6 @@ var es = moment.defineLocale('es', { future : 'en %s', past : 'hace %s', s : 'unos segundos', - ss : '%d segundos', m : 'un minuto', mm : '%d minutos', h : 'una hora', @@ -78,7 +79,7 @@ var es = moment.defineLocale('es', { y : 'un año', yy : '%d años' }, - ordinalParse : /\d{1,2}º/, + dayOfMonthOrdinalParse : /\d{1,2}º/, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/et.js b/addons/web/static/lib/moment/locale/et.js index dc40ac5044a..3a759e9e89f 100644 --- a/addons/web/static/lib/moment/locale/et.js +++ b/addons/web/static/lib/moment/locale/et.js @@ -67,7 +67,7 @@ var et = moment.defineLocale('et', { y : processRelativeTime, yy : processRelativeTime }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/eu.js b/addons/web/static/lib/moment/locale/eu.js index 7db2443b70a..e2021cfa1a8 100644 --- a/addons/web/static/lib/moment/locale/eu.js +++ b/addons/web/static/lib/moment/locale/eu.js @@ -53,7 +53,7 @@ var eu = moment.defineLocale('eu', { y : 'urte bat', yy : '%d urte' }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/fa.js b/addons/web/static/lib/moment/locale/fa.js index 7743b4f4f5a..e6e5619d09a 100644 --- a/addons/web/static/lib/moment/locale/fa.js +++ b/addons/web/static/lib/moment/locale/fa.js @@ -72,7 +72,7 @@ var fa = moment.defineLocale('fa', { relativeTime : { future : 'در %s', past : '%s پیش', - s : 'چندین ثانیه', + s : 'چند ثانیه', m : 'یک دقیقه', mm : '%d دقیقه', h : 'یک ساعت', @@ -94,7 +94,7 @@ var fa = moment.defineLocale('fa', { return symbolMap[match]; }).replace(/,/g, '،'); }, - ordinalParse: /\d{1,2}م/, + dayOfMonthOrdinalParse: /\d{1,2}م/, ordinal : '%dم', week : { dow : 6, // Saturday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/fi.js b/addons/web/static/lib/moment/locale/fi.js index 4cbe4eec6d3..3eeef5c14a8 100644 --- a/addons/web/static/lib/moment/locale/fi.js +++ b/addons/web/static/lib/moment/locale/fi.js @@ -94,7 +94,7 @@ var fi = moment.defineLocale('fi', { y : translate, yy : translate }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/fo.js b/addons/web/static/lib/moment/locale/fo.js index 344ab5eed4d..eec43bc6b4b 100644 --- a/addons/web/static/lib/moment/locale/fo.js +++ b/addons/web/static/lib/moment/locale/fo.js @@ -47,7 +47,7 @@ var fo = moment.defineLocale('fo', { y : 'eitt ár', yy : '%d ár' }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/fr-ca.js b/addons/web/static/lib/moment/locale/fr-ca.js index 9aada335e3d..49e61d299df 100644 --- a/addons/web/static/lib/moment/locale/fr-ca.js +++ b/addons/web/static/lib/moment/locale/fr-ca.js @@ -27,12 +27,12 @@ var frCa = moment.defineLocale('fr-ca', { LLLL : 'dddd D MMMM YYYY HH:mm' }, calendar : { - sameDay: '[Aujourd\'hui à] LT', - nextDay: '[Demain à] LT', - nextWeek: 'dddd [à] LT', - lastDay: '[Hier à] LT', - lastWeek: 'dddd [dernier à] LT', - sameElse: 'L' + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' }, relativeTime : { future : 'dans %s', @@ -49,9 +49,23 @@ var frCa = moment.defineLocale('fr-ca', { y : 'un an', yy : '%d ans' }, - ordinalParse: /\d{1,2}(er|e)/, - ordinal : function (number) { - return number + (number === 1 ? 'er' : 'e'); + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal : function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } } }); diff --git a/addons/web/static/lib/moment/locale/fr-ch.js b/addons/web/static/lib/moment/locale/fr-ch.js index aade5acbe91..38bf858dc4c 100644 --- a/addons/web/static/lib/moment/locale/fr-ch.js +++ b/addons/web/static/lib/moment/locale/fr-ch.js @@ -27,12 +27,12 @@ var frCh = moment.defineLocale('fr-ch', { LLLL : 'dddd D MMMM YYYY HH:mm' }, calendar : { - sameDay: '[Aujourd\'hui à] LT', - nextDay: '[Demain à] LT', - nextWeek: 'dddd [à] LT', - lastDay: '[Hier à] LT', - lastWeek: 'dddd [dernier à] LT', - sameElse: 'L' + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' }, relativeTime : { future : 'dans %s', @@ -49,9 +49,23 @@ var frCh = moment.defineLocale('fr-ch', { y : 'un an', yy : '%d ans' }, - ordinalParse: /\d{1,2}(er|e)/, - ordinal : function (number) { - return number + (number === 1 ? 'er' : 'e'); + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal : function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } }, week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/fr.js b/addons/web/static/lib/moment/locale/fr.js index 8079ee755ad..7e4cfbce8fc 100644 --- a/addons/web/static/lib/moment/locale/fr.js +++ b/addons/web/static/lib/moment/locale/fr.js @@ -27,12 +27,12 @@ var fr = moment.defineLocale('fr', { LLLL : 'dddd D MMMM YYYY HH:mm' }, calendar : { - sameDay: '[Aujourd\'hui à] LT', - nextDay: '[Demain à] LT', - nextWeek: 'dddd [à] LT', - lastDay: '[Hier à] LT', - lastWeek: 'dddd [dernier à] LT', - sameElse: 'L' + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' }, relativeTime : { future : 'dans %s', @@ -49,9 +49,28 @@ var fr = moment.defineLocale('fr', { y : 'un an', yy : '%d ans' }, - ordinalParse: /\d{1,2}(er|)/, - ordinal : function (number) { - return number + (number === 1 ? 'er' : ''); + dayOfMonthOrdinalParse: /\d{1,2}(er|)/, + ordinal : function (number, period) { + switch (period) { + // TODO: Return 'e' when day of month > 1. Move this case inside + // block for masculine words below. + // See https://github.com/moment/moment/issues/3375 + case 'D': + return number + (number === 1 ? 'er' : ''); + + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } }, week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/fy.js b/addons/web/static/lib/moment/locale/fy.js index 13a32d80eed..2ed7d5b6e64 100644 --- a/addons/web/static/lib/moment/locale/fy.js +++ b/addons/web/static/lib/moment/locale/fy.js @@ -16,7 +16,9 @@ var monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.s var fy = moment.defineLocale('fy', { months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'), monthsShort : function (m, format) { - if (/-MMM-/.test(format)) { + if (!m) { + return monthsShortWithDots; + } else if (/-MMM-/.test(format)) { return monthsShortWithoutDots[m.month()]; } else { return monthsShortWithDots[m.month()]; @@ -58,7 +60,7 @@ var fy = moment.defineLocale('fy', { y : 'ien jier', yy : '%d jierren' }, - ordinalParse: /\d{1,2}(ste|de)/, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, ordinal : function (number) { return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); }, diff --git a/addons/web/static/lib/moment/locale/gd.js b/addons/web/static/lib/moment/locale/gd.js index 542005e14b5..af9eec84798 100644 --- a/addons/web/static/lib/moment/locale/gd.js +++ b/addons/web/static/lib/moment/locale/gd.js @@ -60,7 +60,7 @@ var gd = moment.defineLocale('gd', { y : 'bliadhna', yy : '%d bliadhna' }, - ordinalParse : /\d{1,2}(d|na|mh)/, + dayOfMonthOrdinalParse : /\d{1,2}(d|na|mh)/, ordinal : function (number) { var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; return number + output; diff --git a/addons/web/static/lib/moment/locale/gl.js b/addons/web/static/lib/moment/locale/gl.js index 205819eea18..e894db73516 100644 --- a/addons/web/static/lib/moment/locale/gl.js +++ b/addons/web/static/lib/moment/locale/gl.js @@ -64,7 +64,7 @@ var gl = moment.defineLocale('gl', { y : 'un ano', yy : '%d anos' }, - ordinalParse : /\d{1,2}º/, + dayOfMonthOrdinalParse : /\d{1,2}º/, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/gom-latn.js b/addons/web/static/lib/moment/locale/gom-latn.js new file mode 100644 index 00000000000..084b4b22602 --- /dev/null +++ b/addons/web/static/lib/moment/locale/gom-latn.js @@ -0,0 +1,122 @@ +//! moment.js locale configuration +//! locale : Konkani Latin script [gom-latn] +//! author : The Discoverer : https://github.com/WikiDiscoverer + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 's': ['thodde secondanim', 'thodde second'], + 'm': ['eka mintan', 'ek minute'], + 'mm': [number + ' mintanim', number + ' mintam'], + 'h': ['eka horan', 'ek hor'], + 'hh': [number + ' horanim', number + ' hor'], + 'd': ['eka disan', 'ek dis'], + 'dd': [number + ' disanim', number + ' dis'], + 'M': ['eka mhoinean', 'ek mhoino'], + 'MM': [number + ' mhoineanim', number + ' mhoine'], + 'y': ['eka vorsan', 'ek voros'], + 'yy': [number + ' vorsanim', number + ' vorsam'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +var gomLatn = moment.defineLocale('gom-latn', { + months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'), + monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\'var'.split('_'), + weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'), + weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'A h:mm [vazta]', + LTS : 'A h:mm:ss [vazta]', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY A h:mm [vazta]', + LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]', + llll: 'ddd, D MMM YYYY, A h:mm [vazta]' + }, + calendar : { + sameDay: '[Aiz] LT', + nextDay: '[Faleam] LT', + nextWeek: '[Ieta to] dddd[,] LT', + lastDay: '[Kal] LT', + lastWeek: '[Fatlo] dddd[,] LT', + sameElse: 'L' + }, + relativeTime : { + future : '%s', + past : '%s adim', + s : processRelativeTime, + m : processRelativeTime, + mm : processRelativeTime, + h : processRelativeTime, + hh : processRelativeTime, + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse : /\d{1,2}(er)/, + ordinal : function (number, period) { + switch (period) { + // the ordinal 'er' only applies to day of the month + case 'D': + return number + 'er'; + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + case 'w': + case 'W': + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + }, + meridiemParse: /rati|sokalli|donparam|sanje/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'rati') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'sokalli') { + return hour; + } else if (meridiem === 'donparam') { + return hour > 12 ? hour : hour + 12; + } else if (meridiem === 'sanje') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'rati'; + } else if (hour < 12) { + return 'sokalli'; + } else if (hour < 16) { + return 'donparam'; + } else if (hour < 20) { + return 'sanje'; + } else { + return 'rati'; + } + } +}); + +return gomLatn; + +}))); diff --git a/addons/web/static/lib/moment/locale/gu.js b/addons/web/static/lib/moment/locale/gu.js new file mode 100644 index 00000000000..1a13fc4e1fd --- /dev/null +++ b/addons/web/static/lib/moment/locale/gu.js @@ -0,0 +1,124 @@ +//! moment.js locale configuration +//! locale : Gujarati [gu] +//! author : Kaushik Thanki : https://github.com/Kaushik1987 + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var symbolMap = { + '1': '૧', + '2': '૨', + '3': '૩', + '4': '૪', + '5': '૫', + '6': '૬', + '7': '૭', + '8': '૮', + '9': '૯', + '0': '૦' + }; +var numberMap = { + '૧': '1', + '૨': '2', + '૩': '3', + '૪': '4', + '૫': '5', + '૬': '6', + '૭': '7', + '૮': '8', + '૯': '9', + '૦': '0' + }; + +var gu = moment.defineLocale('gu', { + months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'), + monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'), + monthsParseExact: true, + weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'), + weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'), + weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'), + longDateFormat: { + LT: 'A h:mm વાગ્યે', + LTS: 'A h:mm:ss વાગ્યે', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm વાગ્યે', + LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે' + }, + calendar: { + sameDay: '[આજ] LT', + nextDay: '[કાલે] LT', + nextWeek: 'dddd, LT', + lastDay: '[ગઇકાલે] LT', + lastWeek: '[પાછલા] dddd, LT', + sameElse: 'L' + }, + relativeTime: { + future: '%s મા', + past: '%s પેહલા', + s: 'અમુક પળો', + m: 'એક મિનિટ', + mm: '%d મિનિટ', + h: 'એક કલાક', + hh: '%d કલાક', + d: 'એક દિવસ', + dd: '%d દિવસ', + M: 'એક મહિનો', + MM: '%d મહિનો', + y: 'એક વર્ષ', + yy: '%d વર્ષ' + }, + preparse: function (string) { + return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + // Gujarati notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati. + meridiemParse: /રાત|બપોર|સવાર|સાંજ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'રાત') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'સવાર') { + return hour; + } else if (meridiem === 'બપોર') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'સાંજ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'રાત'; + } else if (hour < 10) { + return 'સવાર'; + } else if (hour < 17) { + return 'બપોર'; + } else if (hour < 20) { + return 'સાંજ'; + } else { + return 'રાત'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +return gu; + +}))); diff --git a/addons/web/static/lib/moment/locale/hr.js b/addons/web/static/lib/moment/locale/hr.js index c2e04e61db8..5caeec8028b 100644 --- a/addons/web/static/lib/moment/locale/hr.js +++ b/addons/web/static/lib/moment/locale/hr.js @@ -132,7 +132,7 @@ var hr = moment.defineLocale('hr', { y : 'godinu', yy : translate }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/hu.js b/addons/web/static/lib/moment/locale/hu.js index c81036b2a83..8460392bf19 100644 --- a/addons/web/static/lib/moment/locale/hu.js +++ b/addons/web/static/lib/moment/locale/hu.js @@ -12,8 +12,7 @@ var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' '); function translate(number, withoutSuffix, key, isFuture) { - var num = number, - suffix; + var num = number; switch (key) { case 's': return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce'; @@ -96,7 +95,7 @@ var hu = moment.defineLocale('hu', { y : translate, yy : translate }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/hy-am.js b/addons/web/static/lib/moment/locale/hy-am.js index 58045b7565b..0b76845883d 100644 --- a/addons/web/static/lib/moment/locale/hy-am.js +++ b/addons/web/static/lib/moment/locale/hy-am.js @@ -69,7 +69,7 @@ var hyAm = moment.defineLocale('hy-am', { return 'երեկոյան'; } }, - ordinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/, + dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/, ordinal: function (number, period) { switch (period) { case 'DDD': diff --git a/addons/web/static/lib/moment/locale/is.js b/addons/web/static/lib/moment/locale/is.js index 9658aab2f9d..541b270e5f5 100644 --- a/addons/web/static/lib/moment/locale/is.js +++ b/addons/web/static/lib/moment/locale/is.js @@ -114,7 +114,7 @@ var is = moment.defineLocale('is', { y : translate, yy : translate }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/it.js b/addons/web/static/lib/moment/locale/it.js index d5ddf18e83c..f3079cb465c 100644 --- a/addons/web/static/lib/moment/locale/it.js +++ b/addons/web/static/lib/moment/locale/it.js @@ -14,9 +14,9 @@ var it = moment.defineLocale('it', { months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'), monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), - weekdays : 'Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato'.split('_'), - weekdaysShort : 'Dom_Lun_Mar_Mer_Gio_Ven_Sab'.split('_'), - weekdaysMin : 'Do_Lu_Ma_Me_Gi_Ve_Sa'.split('_'), + weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'), + weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'), + weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'), longDateFormat : { LT : 'HH:mm', LTS : 'HH:mm:ss', @@ -57,7 +57,7 @@ var it = moment.defineLocale('it', { y : 'un anno', yy : '%d anni' }, - ordinalParse : /\d{1,2}º/, + dayOfMonthOrdinalParse : /\d{1,2}º/, ordinal: '%dº', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/ja.js b/addons/web/static/lib/moment/locale/ja.js index 4df51ad03cf..b2e655395e9 100644 --- a/addons/web/static/lib/moment/locale/ja.js +++ b/addons/web/static/lib/moment/locale/ja.js @@ -17,12 +17,16 @@ var ja = moment.defineLocale('ja', { weekdaysShort : '日_月_火_水_木_金_土'.split('_'), weekdaysMin : '日_月_火_水_木_金_土'.split('_'), longDateFormat : { - LT : 'Ah時m分', - LTS : 'Ah時m分s秒', + LT : 'HH:mm', + LTS : 'HH:mm:ss', L : 'YYYY/MM/DD', LL : 'YYYY年M月D日', - LLL : 'YYYY年M月D日Ah時m分', - LLLL : 'YYYY年M月D日Ah時m分 dddd' + LLL : 'YYYY年M月D日 HH:mm', + LLLL : 'YYYY年M月D日 HH:mm dddd', + l : 'YYYY/MM/DD', + ll : 'YYYY年M月D日', + lll : 'YYYY年M月D日 HH:mm', + llll : 'YYYY年M月D日 HH:mm dddd' }, meridiemParse: /午前|午後/i, isPM : function (input) { @@ -43,7 +47,7 @@ var ja = moment.defineLocale('ja', { lastWeek : '[前週]dddd LT', sameElse : 'L' }, - ordinalParse : /\d{1,2}日/, + dayOfMonthOrdinalParse : /\d{1,2}日/, ordinal : function (number, period) { switch (period) { case 'd': diff --git a/addons/web/static/lib/moment/locale/ka.js b/addons/web/static/lib/moment/locale/ka.js index be866c8b6c9..2a95638a8f2 100644 --- a/addons/web/static/lib/moment/locale/ka.js +++ b/addons/web/static/lib/moment/locale/ka.js @@ -47,10 +47,10 @@ var ka = moment.defineLocale('ka', { }, past : function (s) { if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) { - return s.replace(/(ი|ე)$/, 'ის წინ'); + return s.replace(/(ი|ე)$/, 'ის უკან'); } if ((/წელი/).test(s)) { - return s.replace(/წელი$/, 'წლის წინ'); + return s.replace(/წელი$/, 'წლის უკან'); } }, s : 'რამდენიმე წამი', @@ -65,7 +65,7 @@ var ka = moment.defineLocale('ka', { y : 'წელი', yy : '%d წელი' }, - ordinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/, + dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/, ordinal : function (number) { if (number === 0) { return number; diff --git a/addons/web/static/lib/moment/locale/kk.js b/addons/web/static/lib/moment/locale/kk.js index 94a231258a6..777a5294de7 100644 --- a/addons/web/static/lib/moment/locale/kk.js +++ b/addons/web/static/lib/moment/locale/kk.js @@ -70,7 +70,7 @@ var kk = moment.defineLocale('kk', { y : 'бір жыл', yy : '%d жыл' }, - ordinalParse: /\d{1,2}-(ші|шы)/, + dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/, ordinal : function (number) { var a = number % 10, b = number >= 100 ? 100 : null; diff --git a/addons/web/static/lib/moment/locale/kn.js b/addons/web/static/lib/moment/locale/kn.js new file mode 100644 index 00000000000..aeacafa6b2f --- /dev/null +++ b/addons/web/static/lib/moment/locale/kn.js @@ -0,0 +1,126 @@ +//! moment.js locale configuration +//! locale : Kannada [kn] +//! author : Rajeev Naik : https://github.com/rajeevnaikte + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var symbolMap = { + '1': '೧', + '2': '೨', + '3': '೩', + '4': '೪', + '5': '೫', + '6': '೬', + '7': '೭', + '8': '೮', + '9': '೯', + '0': '೦' +}; +var numberMap = { + '೧': '1', + '೨': '2', + '೩': '3', + '೪': '4', + '೫': '5', + '೬': '6', + '೭': '7', + '೮': '8', + '೯': '9', + '೦': '0' +}; + +var kn = moment.defineLocale('kn', { + months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'), + monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ'.split('_'), + monthsParseExact: true, + weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'), + weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'), + weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm', + LLLL : 'dddd, D MMMM YYYY, A h:mm' + }, + calendar : { + sameDay : '[ಇಂದು] LT', + nextDay : '[ನಾಳೆ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ನಿನ್ನೆ] LT', + lastWeek : '[ಕೊನೆಯ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ನಂತರ', + past : '%s ಹಿಂದೆ', + s : 'ಕೆಲವು ಕ್ಷಣಗಳು', + m : 'ಒಂದು ನಿಮಿಷ', + mm : '%d ನಿಮಿಷ', + h : 'ಒಂದು ಗಂಟೆ', + hh : '%d ಗಂಟೆ', + d : 'ಒಂದು ದಿನ', + dd : '%d ದಿನ', + M : 'ಒಂದು ತಿಂಗಳು', + MM : '%d ತಿಂಗಳು', + y : 'ಒಂದು ವರ್ಷ', + yy : '%d ವರ್ಷ' + }, + preparse: function (string) { + return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ರಾತ್ರಿ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') { + return hour; + } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ಸಂಜೆ') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ರಾತ್ರಿ'; + } else if (hour < 10) { + return 'ಬೆಳಿಗ್ಗೆ'; + } else if (hour < 17) { + return 'ಮಧ್ಯಾಹ್ನ'; + } else if (hour < 20) { + return 'ಸಂಜೆ'; + } else { + return 'ರಾತ್ರಿ'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/, + ordinal : function (number) { + return number + 'ನೇ'; + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +return kn; + +}))); diff --git a/addons/web/static/lib/moment/locale/ko.js b/addons/web/static/lib/moment/locale/ko.js index b736583e8cc..8ac7913fd23 100644 --- a/addons/web/static/lib/moment/locale/ko.js +++ b/addons/web/static/lib/moment/locale/ko.js @@ -18,12 +18,16 @@ var ko = moment.defineLocale('ko', { weekdaysShort : '일_월_화_수_목_금_토'.split('_'), weekdaysMin : '일_월_화_수_목_금_토'.split('_'), longDateFormat : { - LT : 'A h시 m분', - LTS : 'A h시 m분 s초', + LT : 'A h:mm', + LTS : 'A h:mm:ss', L : 'YYYY.MM.DD', LL : 'YYYY년 MMMM D일', - LLL : 'YYYY년 MMMM D일 A h시 m분', - LLLL : 'YYYY년 MMMM D일 dddd A h시 m분' + LLL : 'YYYY년 MMMM D일 A h:mm', + LLLL : 'YYYY년 MMMM D일 dddd A h:mm', + l : 'YYYY.MM.DD', + ll : 'YYYY년 MMMM D일', + lll : 'YYYY년 MMMM D일 A h:mm', + llll : 'YYYY년 MMMM D일 dddd A h:mm' }, calendar : { sameDay : '오늘 LT', @@ -38,7 +42,7 @@ var ko = moment.defineLocale('ko', { past : '%s 전', s : '몇 초', ss : '%d초', - m : '일분', + m : '1분', mm : '%d분', h : '한 시간', hh : '%d시간', @@ -49,8 +53,22 @@ var ko = moment.defineLocale('ko', { y : '일 년', yy : '%d년' }, - ordinalParse : /\d{1,2}일/, - ordinal : '%d일', + dayOfMonthOrdinalParse : /\d{1,2}(일|월|주)/, + ordinal : function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '일'; + case 'M': + return number + '월'; + case 'w': + case 'W': + return number + '주'; + default: + return number; + } + }, meridiemParse : /오전|오후/, isPM : function (token) { return token === '오후'; diff --git a/addons/web/static/lib/moment/locale/ky.js b/addons/web/static/lib/moment/locale/ky.js index baf241813e1..ae4053a3395 100644 --- a/addons/web/static/lib/moment/locale/ky.js +++ b/addons/web/static/lib/moment/locale/ky.js @@ -71,7 +71,7 @@ var ky = moment.defineLocale('ky', { y : 'бир жыл', yy : '%d жыл' }, - ordinalParse: /\d{1,2}-(чи|чы|чү|чу)/, + dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/, ordinal : function (number) { var a = number % 10, b = number >= 100 ? 100 : null; diff --git a/addons/web/static/lib/moment/locale/lb.js b/addons/web/static/lib/moment/locale/lb.js index e55d57bad1e..56c1803900e 100644 --- a/addons/web/static/lib/moment/locale/lb.js +++ b/addons/web/static/lib/moment/locale/lb.js @@ -124,7 +124,7 @@ var lb = moment.defineLocale('lb', { y : processRelativeTime, yy : '%d Joer' }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal: '%d.', week: { dow: 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/lo.js b/addons/web/static/lib/moment/locale/lo.js index 27065c97b92..8e5cdbddf28 100644 --- a/addons/web/static/lib/moment/locale/lo.js +++ b/addons/web/static/lib/moment/locale/lo.js @@ -59,7 +59,7 @@ var lo = moment.defineLocale('lo', { y : '1 ປີ', yy : '%d ປີ' }, - ordinalParse: /(ທີ່)\d{1,2}/, + dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/, ordinal : function (number) { return 'ທີ່' + number; } diff --git a/addons/web/static/lib/moment/locale/lt.js b/addons/web/static/lib/moment/locale/lt.js index 37990261af1..d2fb7603302 100644 --- a/addons/web/static/lib/moment/locale/lt.js +++ b/addons/web/static/lib/moment/locale/lt.js @@ -102,7 +102,7 @@ var lt = moment.defineLocale('lt', { y : translateSingular, yy : translate }, - ordinalParse: /\d{1,2}-oji/, + dayOfMonthOrdinalParse: /\d{1,2}-oji/, ordinal : function (number) { return number + '-oji'; }, diff --git a/addons/web/static/lib/moment/locale/lv.js b/addons/web/static/lib/moment/locale/lv.js index d9699119934..e2d988791a6 100644 --- a/addons/web/static/lib/moment/locale/lv.js +++ b/addons/web/static/lib/moment/locale/lv.js @@ -84,7 +84,7 @@ var lv = moment.defineLocale('lv', { y : relativeTimeWithSingular, yy : relativeTimeWithPlural }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/me.js b/addons/web/static/lib/moment/locale/me.js index 292970e72d5..07ed6ca2a59 100644 --- a/addons/web/static/lib/moment/locale/me.js +++ b/addons/web/static/lib/moment/locale/me.js @@ -98,7 +98,7 @@ var me = moment.defineLocale('me', { y : 'godinu', yy : translator.translate }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/mi.js b/addons/web/static/lib/moment/locale/mi.js index 03b65a47e97..c5cce374b73 100644 --- a/addons/web/static/lib/moment/locale/mi.js +++ b/addons/web/static/lib/moment/locale/mi.js @@ -51,7 +51,7 @@ var mi = moment.defineLocale('mi', { y: 'he tau', yy: '%d tau' }, - ordinalParse: /\d{1,2}º/, + dayOfMonthOrdinalParse: /\d{1,2}º/, ordinal: '%dº', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/mk.js b/addons/web/static/lib/moment/locale/mk.js index 52758d3e8aa..cdfb1e1c88b 100644 --- a/addons/web/static/lib/moment/locale/mk.js +++ b/addons/web/static/lib/moment/locale/mk.js @@ -59,7 +59,7 @@ var mk = moment.defineLocale('mk', { y : 'година', yy : '%d години' }, - ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, ordinal : function (number) { var lastDigit = number % 10, last2Digits = number % 100; diff --git a/addons/web/static/lib/moment/locale/mn.js b/addons/web/static/lib/moment/locale/mn.js deleted file mode 100644 index a37b792b432..00000000000 --- a/addons/web/static/lib/moment/locale/mn.js +++ /dev/null @@ -1,111 +0,0 @@ -//! moment.js locale configuration -//! locale : Mongolian [mn] -//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7 - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - //! moment.js locale configuration - - function translate(number, withoutSuffix, key, isFuture) { - switch (key) { - case 's': - return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын'; - case 'ss': - return number + (withoutSuffix ? ' секунд' : ' секундын'); - case 'm': - case 'mm': - return number + (withoutSuffix ? ' минут' : ' минутын'); - case 'h': - case 'hh': - return number + (withoutSuffix ? ' цаг' : ' цагийн'); - case 'd': - case 'dd': - return number + (withoutSuffix ? ' өдөр' : ' өдрийн'); - case 'M': - case 'MM': - return number + (withoutSuffix ? ' сар' : ' сарын'); - case 'y': - case 'yy': - return number + (withoutSuffix ? ' жил' : ' жилийн'); - default: - return number; - } - } - - var mn = moment.defineLocale('mn', { - months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split( - '_' - ), - monthsShort: - '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split( - '_' - ), - monthsParseExact: true, - weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'), - weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'), - weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'), - weekdaysParseExact: true, - longDateFormat: { - LT: 'HH:mm', - LTS: 'HH:mm:ss', - L: 'YYYY-MM-DD', - LL: 'YYYY оны MMMMын D', - LLL: 'YYYY оны MMMMын D HH:mm', - LLLL: 'dddd, YYYY оны MMMMын D HH:mm', - }, - meridiemParse: /ҮӨ|ҮХ/i, - isPM: function (input) { - return input === 'ҮХ'; - }, - meridiem: function (hour, minute, isLower) { - if (hour < 12) { - return 'ҮӨ'; - } else { - return 'ҮХ'; - } - }, - calendar: { - sameDay: '[Өнөөдөр] LT', - nextDay: '[Маргааш] LT', - nextWeek: '[Ирэх] dddd LT', - lastDay: '[Өчигдөр] LT', - lastWeek: '[Өнгөрсөн] dddd LT', - sameElse: 'L', - }, - relativeTime: { - future: '%s дараа', - past: '%s өмнө', - s: translate, - ss: translate, - m: translate, - mm: translate, - h: translate, - hh: translate, - d: translate, - dd: translate, - M: translate, - MM: translate, - y: translate, - yy: translate, - }, - dayOfMonthOrdinalParse: /\d{1,2} өдөр/, - ordinal: function (number, period) { - switch (period) { - case 'd': - case 'D': - case 'DDD': - return number + ' өдөр'; - default: - return number; - } - }, - }); - - return mn; - -}))); diff --git a/addons/web/static/lib/moment/locale/nb.js b/addons/web/static/lib/moment/locale/nb.js index b77e576dc6c..2cfe374f84b 100644 --- a/addons/web/static/lib/moment/locale/nb.js +++ b/addons/web/static/lib/moment/locale/nb.js @@ -50,7 +50,7 @@ var nb = moment.defineLocale('nb', { y : 'ett år', yy : '%d år' }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/nl-be.js b/addons/web/static/lib/moment/locale/nl-be.js index aaa5d74ac2b..d640f0cecda 100644 --- a/addons/web/static/lib/moment/locale/nl-be.js +++ b/addons/web/static/lib/moment/locale/nl-be.js @@ -20,7 +20,9 @@ var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|sep var nlBe = moment.defineLocale('nl-be', { months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), monthsShort : function (m, format) { - if (/-MMM-/.test(format)) { + if (!m) { + return monthsShortWithDots; + } else if (/-MMM-/.test(format)) { return monthsShortWithoutDots[m.month()]; } else { return monthsShortWithDots[m.month()]; @@ -38,7 +40,7 @@ var nlBe = moment.defineLocale('nl-be', { weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'), - weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'), + weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'), weekdaysParseExact : true, longDateFormat : { LT : 'HH:mm', @@ -71,7 +73,7 @@ var nlBe = moment.defineLocale('nl-be', { y : 'één jaar', yy : '%d jaar' }, - ordinalParse: /\d{1,2}(ste|de)/, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, ordinal : function (number) { return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); }, diff --git a/addons/web/static/lib/moment/locale/nl.js b/addons/web/static/lib/moment/locale/nl.js index 15beaef13cf..12c9994699b 100644 --- a/addons/web/static/lib/moment/locale/nl.js +++ b/addons/web/static/lib/moment/locale/nl.js @@ -20,7 +20,9 @@ var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|sep var nl = moment.defineLocale('nl', { months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), monthsShort : function (m, format) { - if (/-MMM-/.test(format)) { + if (!m) { + return monthsShortWithDots; + } else if (/-MMM-/.test(format)) { return monthsShortWithoutDots[m.month()]; } else { return monthsShortWithDots[m.month()]; @@ -38,7 +40,7 @@ var nl = moment.defineLocale('nl', { weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'), - weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'), + weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'), weekdaysParseExact : true, longDateFormat : { LT : 'HH:mm', @@ -71,7 +73,7 @@ var nl = moment.defineLocale('nl', { y : 'één jaar', yy : '%d jaar' }, - ordinalParse: /\d{1,2}(ste|de)/, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, ordinal : function (number) { return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); }, diff --git a/addons/web/static/lib/moment/locale/nn.js b/addons/web/static/lib/moment/locale/nn.js index cf39af5e7b9..90dda8c6c50 100644 --- a/addons/web/static/lib/moment/locale/nn.js +++ b/addons/web/static/lib/moment/locale/nn.js @@ -47,7 +47,7 @@ var nn = moment.defineLocale('nn', { y : 'eit år', yy : '%d år' }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/pl.js b/addons/web/static/lib/moment/locale/pl.js index aab946b0d7c..db466b6b57f 100644 --- a/addons/web/static/lib/moment/locale/pl.js +++ b/addons/web/static/lib/moment/locale/pl.js @@ -35,7 +35,9 @@ function translate(number, withoutSuffix, key) { var pl = moment.defineLocale('pl', { months : function (momentToFormat, format) { - if (format === '') { + if (!momentToFormat) { + return monthsNominative; + } else if (format === '') { // Hack: if format empty we know this is used to generate // RegExp by moment. Give then back both valid forms of months // in RegExp ready format. @@ -61,7 +63,24 @@ var pl = moment.defineLocale('pl', { calendar : { sameDay: '[Dziś o] LT', nextDay: '[Jutro o] LT', - nextWeek: '[W] dddd [o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[W niedzielę o] LT'; + + case 2: + return '[We wtorek o] LT'; + + case 3: + return '[W środę o] LT'; + + case 6: + return '[W sobotę o] LT'; + + default: + return '[W] dddd [o] LT'; + } + }, lastDay: '[Wczoraj o] LT', lastWeek: function () { switch (this.day()) { @@ -92,7 +111,7 @@ var pl = moment.defineLocale('pl', { y : 'rok', yy : translate }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/pt-br.js b/addons/web/static/lib/moment/locale/pt-br.js index 20897f78af8..478b20717bd 100644 --- a/addons/web/static/lib/moment/locale/pt-br.js +++ b/addons/web/static/lib/moment/locale/pt-br.js @@ -11,11 +11,11 @@ var ptBr = moment.defineLocale('pt-br', { - months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), - monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'), + monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'), weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), - weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'), + weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), weekdaysParseExact : true, longDateFormat : { LT : 'HH:mm', @@ -41,6 +41,7 @@ var ptBr = moment.defineLocale('pt-br', { future : 'em %s', past : '%s atrás', s : 'poucos segundos', + ss : '%d segundos', m : 'um minuto', mm : '%d minutos', h : 'uma hora', @@ -52,7 +53,7 @@ var ptBr = moment.defineLocale('pt-br', { y : 'um ano', yy : '%d anos' }, - ordinalParse: /\d{1,2}º/, + dayOfMonthOrdinalParse: /\d{1,2}º/, ordinal : '%dº' }); diff --git a/addons/web/static/lib/moment/locale/pt.js b/addons/web/static/lib/moment/locale/pt.js index 7a852285698..3d8ee7e2b4e 100644 --- a/addons/web/static/lib/moment/locale/pt.js +++ b/addons/web/static/lib/moment/locale/pt.js @@ -11,11 +11,11 @@ var pt = moment.defineLocale('pt', { - months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), - monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), - weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'), + months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'), + monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), + weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'), weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), - weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'), + weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), weekdaysParseExact : true, longDateFormat : { LT : 'HH:mm', @@ -52,7 +52,7 @@ var pt = moment.defineLocale('pt', { y : 'um ano', yy : '%d anos' }, - ordinalParse: /\d{1,2}º/, + dayOfMonthOrdinalParse: /\d{1,2}º/, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/ru.js b/addons/web/static/lib/moment/locale/ru.js index 35bba86a2ee..356a0fa8c68 100644 --- a/addons/web/static/lib/moment/locale/ru.js +++ b/addons/web/static/lib/moment/locale/ru.js @@ -156,7 +156,7 @@ var ru = moment.defineLocale('ru', { return 'вечера'; } }, - ordinalParse: /\d{1,2}-(й|го|я)/, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/, ordinal: function (number, period) { switch (period) { case 'M': @@ -174,7 +174,7 @@ var ru = moment.defineLocale('ru', { }, week : { dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1st is the first week of the year. + doy : 4 // The week that contains Jan 4th is the first week of the year. } }); diff --git a/addons/web/static/lib/moment/locale/sd.js b/addons/web/static/lib/moment/locale/sd.js new file mode 100644 index 00000000000..0fcf7e10cc9 --- /dev/null +++ b/addons/web/static/lib/moment/locale/sd.js @@ -0,0 +1,98 @@ +//! moment.js locale configuration +//! locale : Sindhi [sd] +//! author : Narain Sagar : https://github.com/narainsagar + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var months = [ + 'جنوري', + 'فيبروري', + 'مارچ', + 'اپريل', + 'مئي', + 'جون', + 'جولاءِ', + 'آگسٽ', + 'سيپٽمبر', + 'آڪٽوبر', + 'نومبر', + 'ڊسمبر' +]; +var days = [ + 'آچر', + 'سومر', + 'اڱارو', + 'اربع', + 'خميس', + 'جمع', + 'ڇنڇر' +]; + +var sd = moment.defineLocale('sd', { + months : months, + monthsShort : months, + weekdays : days, + weekdaysShort : days, + weekdaysMin : days, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd، D MMMM YYYY HH:mm' + }, + meridiemParse: /صبح|شام/, + isPM : function (input) { + return 'شام' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar : { + sameDay : '[اڄ] LT', + nextDay : '[سڀاڻي] LT', + nextWeek : 'dddd [اڳين هفتي تي] LT', + lastDay : '[ڪالهه] LT', + lastWeek : '[گزريل هفتي] dddd [تي] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s پوء', + past : '%s اڳ', + s : 'چند سيڪنڊ', + m : 'هڪ منٽ', + mm : '%d منٽ', + h : 'هڪ ڪلاڪ', + hh : '%d ڪلاڪ', + d : 'هڪ ڏينهن', + dd : '%d ڏينهن', + M : 'هڪ مهينو', + MM : '%d مهينا', + y : 'هڪ سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return sd; + +}))); diff --git a/addons/web/static/lib/moment/locale/se.js b/addons/web/static/lib/moment/locale/se.js index ab52fdff2ad..d44d0df24cd 100644 --- a/addons/web/static/lib/moment/locale/se.js +++ b/addons/web/static/lib/moment/locale/se.js @@ -48,7 +48,7 @@ var se = moment.defineLocale('se', { y : 'okta jahki', yy : '%d jagit' }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/si.js b/addons/web/static/lib/moment/locale/si.js index 47d435b8313..f5c124ee45f 100644 --- a/addons/web/static/lib/moment/locale/si.js +++ b/addons/web/static/lib/moment/locale/si.js @@ -49,7 +49,7 @@ var si = moment.defineLocale('si', { y : 'වසර', yy : 'වසර %d' }, - ordinalParse: /\d{1,2} වැනි/, + dayOfMonthOrdinalParse: /\d{1,2} වැනි/, ordinal : function (number) { return number + ' වැනි'; }, diff --git a/addons/web/static/lib/moment/locale/sk.js b/addons/web/static/lib/moment/locale/sk.js index f31291f4d13..aa61da621ed 100644 --- a/addons/web/static/lib/moment/locale/sk.js +++ b/addons/web/static/lib/moment/locale/sk.js @@ -137,7 +137,7 @@ var sk = moment.defineLocale('sk', { y : translate, yy : translate }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/sl.js b/addons/web/static/lib/moment/locale/sl.js index d9b36245a74..e74b3a11c1d 100644 --- a/addons/web/static/lib/moment/locale/sl.js +++ b/addons/web/static/lib/moment/locale/sl.js @@ -149,7 +149,7 @@ var sl = moment.defineLocale('sl', { y : processRelativeTime, yy : processRelativeTime }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/sq.js b/addons/web/static/lib/moment/locale/sq.js index 1ca3fdd821b..b92dc1726c4 100644 --- a/addons/web/static/lib/moment/locale/sq.js +++ b/addons/web/static/lib/moment/locale/sq.js @@ -57,7 +57,7 @@ var sq = moment.defineLocale('sq', { y : 'një vit', yy : '%d vite' }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/sr-cyrl.js b/addons/web/static/lib/moment/locale/sr-cyrl.js index caeef089e7c..3007819bd22 100644 --- a/addons/web/static/lib/moment/locale/sr-cyrl.js +++ b/addons/web/static/lib/moment/locale/sr-cyrl.js @@ -97,7 +97,7 @@ var srCyrl = moment.defineLocale('sr-cyrl', { y : 'годину', yy : translator.translate }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/sr.js b/addons/web/static/lib/moment/locale/sr.js index 9c254444ff3..90778a9bfa8 100644 --- a/addons/web/static/lib/moment/locale/sr.js +++ b/addons/web/static/lib/moment/locale/sr.js @@ -97,7 +97,7 @@ var sr = moment.defineLocale('sr', { y : 'godinu', yy : translator.translate }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/ss.js b/addons/web/static/lib/moment/locale/ss.js index f2363573870..e89e2db2933 100644 --- a/addons/web/static/lib/moment/locale/ss.js +++ b/addons/web/static/lib/moment/locale/ss.js @@ -76,7 +76,7 @@ var ss = moment.defineLocale('ss', { return hour + 12; } }, - ordinalParse: /\d{1,2}/, + dayOfMonthOrdinalParse: /\d{1,2}/, ordinal : '%d', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/sv.js b/addons/web/static/lib/moment/locale/sv.js index 77a3402b229..1aa76607794 100644 --- a/addons/web/static/lib/moment/locale/sv.js +++ b/addons/web/static/lib/moment/locale/sv.js @@ -49,7 +49,7 @@ var sv = moment.defineLocale('sv', { y : 'ett år', yy : '%d år' }, - ordinalParse: /\d{1,2}(e|a)/, + dayOfMonthOrdinalParse: /\d{1,2}(e|a)/, ordinal : function (number) { var b = number % 10, output = (~~(number % 100 / 10) === 1) ? 'e' : diff --git a/addons/web/static/lib/moment/locale/ta.js b/addons/web/static/lib/moment/locale/ta.js index 043ae6007ad..d9d2555ae8e 100644 --- a/addons/web/static/lib/moment/locale/ta.js +++ b/addons/web/static/lib/moment/locale/ta.js @@ -72,7 +72,7 @@ var ta = moment.defineLocale('ta', { y : 'ஒரு வருடம்', yy : '%d ஆண்டுகள்' }, - ordinalParse: /\d{1,2}வது/, + dayOfMonthOrdinalParse: /\d{1,2}வது/, ordinal : function (number) { return number + 'வது'; }, diff --git a/addons/web/static/lib/moment/locale/te.js b/addons/web/static/lib/moment/locale/te.js index ac6ef033752..fe339047f55 100644 --- a/addons/web/static/lib/moment/locale/te.js +++ b/addons/web/static/lib/moment/locale/te.js @@ -48,7 +48,7 @@ var te = moment.defineLocale('te', { y : 'ఒక సంవత్సరం', yy : '%d సంవత్సరాలు' }, - ordinalParse : /\d{1,2}వ/, + dayOfMonthOrdinalParse : /\d{1,2}వ/, ordinal : '%dవ', meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/, meridiemHour : function (hour, meridiem) { diff --git a/addons/web/static/lib/moment/locale/tet.js b/addons/web/static/lib/moment/locale/tet.js index e419ef32339..c9c2928f5ec 100644 --- a/addons/web/static/lib/moment/locale/tet.js +++ b/addons/web/static/lib/moment/locale/tet.js @@ -48,7 +48,7 @@ var tet = moment.defineLocale('tet', { y : 'tinan ida', yy : 'tinan %d' }, - ordinalParse: /\d{1,2}(st|nd|rd|th)/, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, ordinal : function (number) { var b = number % 10, output = (~~(number % 100 / 10) === 1) ? 'th' : diff --git a/addons/web/static/lib/moment/locale/th.js b/addons/web/static/lib/moment/locale/th.js index 22f6ab9a480..17ec0f19026 100644 --- a/addons/web/static/lib/moment/locale/th.js +++ b/addons/web/static/lib/moment/locale/th.js @@ -21,7 +21,7 @@ var th = moment.defineLocale('th', { longDateFormat : { LT : 'H:mm', LTS : 'H:mm:ss', - L : 'YYYY/MM/DD', + L : 'DD/MM/YYYY', LL : 'D MMMM YYYY', LLL : 'D MMMM YYYY เวลา H:mm', LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm' diff --git a/addons/web/static/lib/moment/locale/tl-ph.js b/addons/web/static/lib/moment/locale/tl-ph.js index a37b86e7131..f66b022073c 100644 --- a/addons/web/static/lib/moment/locale/tl-ph.js +++ b/addons/web/static/lib/moment/locale/tl-ph.js @@ -47,7 +47,7 @@ var tlPh = moment.defineLocale('tl-ph', { y : 'isang taon', yy : '%d taon' }, - ordinalParse: /\d{1,2}/, + dayOfMonthOrdinalParse: /\d{1,2}/, ordinal : function (number) { return number; }, diff --git a/addons/web/static/lib/moment/locale/tlh.js b/addons/web/static/lib/moment/locale/tlh.js index 7eb7df9c520..7c3123c6595 100644 --- a/addons/web/static/lib/moment/locale/tlh.js +++ b/addons/web/static/lib/moment/locale/tlh.js @@ -107,7 +107,7 @@ var tlh = moment.defineLocale('tlh', { y : 'wa’ DIS', yy : translate }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/tr.js b/addons/web/static/lib/moment/locale/tr.js index 425386f369a..911e8d14a7e 100644 --- a/addons/web/static/lib/moment/locale/tr.js +++ b/addons/web/static/lib/moment/locale/tr.js @@ -49,9 +49,9 @@ var tr = moment.defineLocale('tr', { calendar : { sameDay : '[bugün saat] LT', nextDay : '[yarın saat] LT', - nextWeek : '[haftaya] dddd [saat] LT', + nextWeek : '[gelecek] dddd [saat] LT', lastDay : '[dün] LT', - lastWeek : '[geçen hafta] dddd [saat] LT', + lastWeek : '[geçen] dddd [saat] LT', sameElse : 'L' }, relativeTime : { @@ -69,7 +69,7 @@ var tr = moment.defineLocale('tr', { y : 'bir yıl', yy : '%d yıl' }, - ordinalParse: /\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/, + dayOfMonthOrdinalParse: /\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/, ordinal : function (number) { if (number === 0) { // special case for zero return number + '\'ıncı'; diff --git a/addons/web/static/lib/moment/locale/tzl.js b/addons/web/static/lib/moment/locale/tzl.js index bd7537c54cd..978fcb488e7 100644 --- a/addons/web/static/lib/moment/locale/tzl.js +++ b/addons/web/static/lib/moment/locale/tzl.js @@ -61,7 +61,7 @@ var tzl = moment.defineLocale('tzl', { y : processRelativeTime, yy : processRelativeTime }, - ordinalParse: /\d{1,2}\./, + dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal : '%d.', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/uk.js b/addons/web/static/lib/moment/locale/uk.js index af79fab5042..1aff8c14d79 100644 --- a/addons/web/static/lib/moment/locale/uk.js +++ b/addons/web/static/lib/moment/locale/uk.js @@ -38,8 +38,13 @@ function weekdaysCaseReplace(m, format) { 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'), 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'), 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_') - }, - nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ? + }; + + if (!m) { + return weekdays['nominative']; + } + + var nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ? 'accusative' : ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ? 'genitive' : @@ -120,7 +125,7 @@ var uk = moment.defineLocale('uk', { return 'вечора'; } }, - ordinalParse: /\d{1,2}-(й|го)/, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/, ordinal: function (number, period) { switch (period) { case 'M': diff --git a/addons/web/static/lib/moment/locale/ur.js b/addons/web/static/lib/moment/locale/ur.js new file mode 100644 index 00000000000..4cf1c07af9e --- /dev/null +++ b/addons/web/static/lib/moment/locale/ur.js @@ -0,0 +1,99 @@ +//! moment.js locale configuration +//! locale : Urdu [ur] +//! author : Sawood Alam : https://github.com/ibnesayeed +//! author : Zack : https://github.com/ZackVision + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var months = [ + 'جنوری', + 'فروری', + 'مارچ', + 'اپریل', + 'مئی', + 'جون', + 'جولائی', + 'اگست', + 'ستمبر', + 'اکتوبر', + 'نومبر', + 'دسمبر' +]; +var days = [ + 'اتوار', + 'پیر', + 'منگل', + 'بدھ', + 'جمعرات', + 'جمعہ', + 'ہفتہ' +]; + +var ur = moment.defineLocale('ur', { + months : months, + monthsShort : months, + weekdays : days, + weekdaysShort : days, + weekdaysMin : days, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd، D MMMM YYYY HH:mm' + }, + meridiemParse: /صبح|شام/, + isPM : function (input) { + return 'شام' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar : { + sameDay : '[آج بوقت] LT', + nextDay : '[کل بوقت] LT', + nextWeek : 'dddd [بوقت] LT', + lastDay : '[گذشتہ روز بوقت] LT', + lastWeek : '[گذشتہ] dddd [بوقت] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s بعد', + past : '%s قبل', + s : 'چند سیکنڈ', + m : 'ایک منٹ', + mm : '%d منٹ', + h : 'ایک گھنٹہ', + hh : '%d گھنٹے', + d : 'ایک دن', + dd : '%d دن', + M : 'ایک ماہ', + MM : '%d ماہ', + y : 'ایک سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return ur; + +}))); diff --git a/addons/web/static/lib/moment/locale/uz-latn.js b/addons/web/static/lib/moment/locale/uz-latn.js new file mode 100644 index 00000000000..21463b76682 --- /dev/null +++ b/addons/web/static/lib/moment/locale/uz-latn.js @@ -0,0 +1,58 @@ +//! moment.js locale configuration +//! locale : Uzbek Latin [uz-latn] +//! author : Rasulbek Mirzayev : github.com/Rasulbeeek + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var uzLatn = moment.defineLocale('uz-latn', { + months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'), + monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'), + weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'), + weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'), + weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'D MMMM YYYY, dddd HH:mm' + }, + calendar : { + sameDay : '[Bugun soat] LT [da]', + nextDay : '[Ertaga] LT [da]', + nextWeek : 'dddd [kuni soat] LT [da]', + lastDay : '[Kecha soat] LT [da]', + lastWeek : '[O\'tgan] dddd [kuni soat] LT [da]', + sameElse : 'L' + }, + relativeTime : { + future : 'Yaqin %s ichida', + past : 'Bir necha %s oldin', + s : 'soniya', + m : 'bir daqiqa', + mm : '%d daqiqa', + h : 'bir soat', + hh : '%d soat', + d : 'bir kun', + dd : '%d kun', + M : 'bir oy', + MM : '%d oy', + y : 'bir yil', + yy : '%d yil' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return uzLatn; + +}))); diff --git a/addons/web/static/lib/moment/locale/vi.js b/addons/web/static/lib/moment/locale/vi.js index 7af5cce188e..1adacc3a795 100644 --- a/addons/web/static/lib/moment/locale/vi.js +++ b/addons/web/static/lib/moment/locale/vi.js @@ -64,7 +64,7 @@ var vi = moment.defineLocale('vi', { y : 'một năm', yy : '%d năm' }, - ordinalParse: /\d{1,2}/, + dayOfMonthOrdinalParse: /\d{1,2}/, ordinal : function (number) { return number; }, diff --git a/addons/web/static/lib/moment/locale/x-pseudo.js b/addons/web/static/lib/moment/locale/x-pseudo.js index ee24b9f0951..b906e16df61 100644 --- a/addons/web/static/lib/moment/locale/x-pseudo.js +++ b/addons/web/static/lib/moment/locale/x-pseudo.js @@ -48,7 +48,7 @@ var xPseudo = moment.defineLocale('x-pseudo', { y : 'á ~ýéár', yy : '%d ý~éárs' }, - ordinalParse: /\d{1,2}(th|st|nd|rd)/, + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, ordinal : function (number) { var b = number % 10, output = (~~(number % 100 / 10) === 1) ? 'th' : diff --git a/addons/web/static/lib/moment/locale/yo.js b/addons/web/static/lib/moment/locale/yo.js index 760ac96254c..ec28a9122b4 100644 --- a/addons/web/static/lib/moment/locale/yo.js +++ b/addons/web/static/lib/moment/locale/yo.js @@ -47,7 +47,7 @@ var yo = moment.defineLocale('yo', { y : 'ọdún kan', yy : 'ọdún %d' }, - ordinalParse : /ọjọ́\s\d{1,2}/, + dayOfMonthOrdinalParse : /ọjọ́\s\d{1,2}/, ordinal : 'ọjọ́ %d', week : { dow : 1, // Monday is the first day of the week. diff --git a/addons/web/static/lib/moment/locale/zh-cn.js b/addons/web/static/lib/moment/locale/zh-cn.js index df5d2039464..005e941f995 100644 --- a/addons/web/static/lib/moment/locale/zh-cn.js +++ b/addons/web/static/lib/moment/locale/zh-cn.js @@ -18,16 +18,16 @@ var zhCn = moment.defineLocale('zh-cn', { weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'), weekdaysMin : '日_一_二_三_四_五_六'.split('_'), longDateFormat : { - LT : 'Ah点mm分', - LTS : 'Ah点m分s秒', - L : 'YYYY-MM-DD', + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY年MMMD日', LL : 'YYYY年MMMD日', LLL : 'YYYY年MMMD日Ah点mm分', LLLL : 'YYYY年MMMD日ddddAh点mm分', - l : 'YYYY-MM-DD', + l : 'YYYY年MMMD日', ll : 'YYYY年MMMD日', - lll : 'YYYY年MMMD日Ah点mm分', - llll : 'YYYY年MMMD日ddddAh点mm分' + lll : 'YYYY年MMMD日 HH:mm', + llll : 'YYYY年MMMD日dddd HH:mm' }, meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, meridiemHour: function (hour, meridiem) { @@ -61,30 +61,14 @@ var zhCn = moment.defineLocale('zh-cn', { } }, calendar : { - sameDay : function () { - return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT'; - }, - nextDay : function () { - return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT'; - }, - lastDay : function () { - return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT'; - }, - nextWeek : function () { - var startOfWeek, prefix; - startOfWeek = moment().startOf('week'); - prefix = this.diff(startOfWeek, 'days') >= 7 ? '[下]' : '[本]'; - return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm'; - }, - lastWeek : function () { - var startOfWeek, prefix; - startOfWeek = moment().startOf('week'); - prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]'; - return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm'; - }, - sameElse : 'LL' + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' }, - ordinalParse: /\d{1,2}(日|月|周)/, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/, ordinal : function (number, period) { switch (period) { case 'd': diff --git a/addons/web/static/lib/moment/locale/zh-hk.js b/addons/web/static/lib/moment/locale/zh-hk.js index f39fe3fbfc9..5ded143d593 100644 --- a/addons/web/static/lib/moment/locale/zh-hk.js +++ b/addons/web/static/lib/moment/locale/zh-hk.js @@ -19,16 +19,16 @@ var zhHk = moment.defineLocale('zh-hk', { weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'), weekdaysMin : '日_一_二_三_四_五_六'.split('_'), longDateFormat : { - LT : 'Ah點mm分', - LTS : 'Ah點m分s秒', + LT : 'HH:mm', + LTS : 'HH:mm:ss', L : 'YYYY年MMMD日', LL : 'YYYY年MMMD日', - LLL : 'YYYY年MMMD日Ah點mm分', - LLLL : 'YYYY年MMMD日ddddAh點mm分', + LLL : 'YYYY年MMMD日 HH:mm', + LLLL : 'YYYY年MMMD日dddd HH:mm', l : 'YYYY年MMMD日', ll : 'YYYY年MMMD日', - lll : 'YYYY年MMMD日Ah點mm分', - llll : 'YYYY年MMMD日ddddAh點mm分' + lll : 'YYYY年MMMD日 HH:mm', + llll : 'YYYY年MMMD日dddd HH:mm' }, meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, meridiemHour : function (hour, meridiem) { @@ -67,7 +67,7 @@ var zhHk = moment.defineLocale('zh-hk', { lastWeek : '[上]ddddLT', sameElse : 'L' }, - ordinalParse: /\d{1,2}(日|月|週)/, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, ordinal : function (number, period) { switch (period) { case 'd' : diff --git a/addons/web/static/lib/moment/locale/zh-tw.js b/addons/web/static/lib/moment/locale/zh-tw.js index 2e385fb2739..50a6b6a4177 100644 --- a/addons/web/static/lib/moment/locale/zh-tw.js +++ b/addons/web/static/lib/moment/locale/zh-tw.js @@ -18,16 +18,16 @@ var zhTw = moment.defineLocale('zh-tw', { weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'), weekdaysMin : '日_一_二_三_四_五_六'.split('_'), longDateFormat : { - LT : 'Ah點mm分', - LTS : 'Ah點m分s秒', + LT : 'HH:mm', + LTS : 'HH:mm:ss', L : 'YYYY年MMMD日', LL : 'YYYY年MMMD日', - LLL : 'YYYY年MMMD日Ah點mm分', - LLLL : 'YYYY年MMMD日ddddAh點mm分', + LLL : 'YYYY年MMMD日 HH:mm', + LLLL : 'YYYY年MMMD日dddd HH:mm', l : 'YYYY年MMMD日', ll : 'YYYY年MMMD日', - lll : 'YYYY年MMMD日Ah點mm分', - llll : 'YYYY年MMMD日ddddAh點mm分' + lll : 'YYYY年MMMD日 HH:mm', + llll : 'YYYY年MMMD日dddd HH:mm' }, meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, meridiemHour : function (hour, meridiem) { @@ -66,7 +66,7 @@ var zhTw = moment.defineLocale('zh-tw', { lastWeek : '[上]ddddLT', sameElse : 'L' }, - ordinalParse: /\d{1,2}(日|月|週)/, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, ordinal : function (number, period) { switch (period) { case 'd' : diff --git a/addons/web/static/lib/moment/moment.js b/addons/web/static/lib/moment/moment.js index e161d32fa41..9dd31d1362c 100644 --- a/addons/web/static/lib/moment/moment.js +++ b/addons/web/static/lib/moment/moment.js @@ -1,5 +1,5 @@ //! moment.js -//! version : 2.17.1 +//! version : 2.19.3 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! license : MIT //! momentjs.com @@ -33,12 +33,21 @@ function isObject(input) { } function isObjectEmpty(obj) { - var k; - for (k in obj) { - // even if its not own property I'd still call it non-empty - return false; + if (Object.getOwnPropertyNames) { + return (Object.getOwnPropertyNames(obj).length === 0); + } else { + var k; + for (k in obj) { + if (obj.hasOwnProperty(k)) { + return false; + } + } + return true; } - return true; +} + +function isUndefined(input) { + return input === void 0; } function isNumber(input) { @@ -97,7 +106,9 @@ function defaultParsingFlags() { userInvalidated : false, iso : false, parsedDateParts : [], - meridiem : null + meridiem : null, + rfc2822 : false, + weekdayMismatch : false }; } @@ -126,12 +137,10 @@ if (Array.prototype.some) { }; } -var some$1 = some; - function isValid(m) { if (m._isValid == null) { var flags = getParsingFlags(m); - var parsedParts = some$1.call(flags.parsedDateParts, function (i) { + var parsedParts = some.call(flags.parsedDateParts, function (i) { return i != null; }); var isNowValid = !isNaN(m._d.getTime()) && @@ -139,6 +148,7 @@ function isValid(m) { !flags.empty && !flags.invalidMonth && !flags.invalidWeekday && + !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && @@ -173,10 +183,6 @@ function createInvalid (flags) { return m; } -function isUndefined(input) { - return input === void 0; -} - // Plugins that add properties should also add the key here (null value), // so we can properly clone ourselves. var momentProperties = hooks.momentProperties = []; @@ -216,7 +222,7 @@ function copyConfig(to, from) { } if (momentProperties.length > 0) { - for (i in momentProperties) { + for (i = 0; i < momentProperties.length; i++) { prop = momentProperties[i]; val = from[prop]; if (!isUndefined(val)) { @@ -353,8 +359,11 @@ function set (config) { } this._config = config; // Lenient ordinal parsing accepts just a number in addition to - // number + (possibly) stuff coming from _ordinalParseLenient. - this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); + // number + (possibly) stuff coming from _dayOfMonthOrdinalParse. + // TODO: Remove "ordinalParse" fallback in next major release. + this._dayOfMonthOrdinalParseLenient = new RegExp( + (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + + '|' + (/\d{1,2}/).source); } function mergeConfigs(parentConfig, childConfig) { @@ -405,8 +414,6 @@ if (Object.keys) { }; } -var keys$1 = keys; - var defaultCalendar = { sameDay : '[Today at] LT', nextDay : '[Tomorrow at] LT', @@ -452,7 +459,7 @@ function invalidDate () { } var defaultOrdinal = '%d'; -var defaultOrdinalParse = /\d{1,2}/; +var defaultDayOfMonthOrdinalParse = /\d{1,2}/; function ordinal (number) { return this._ordinal.replace('%d', number); @@ -462,6 +469,7 @@ var defaultRelativeTime = { future : 'in %s', past : '%s ago', s : 'a few seconds', + ss : '%d seconds', m : 'a minute', mm : '%d minutes', h : 'an hour', @@ -531,56 +539,6 @@ function getPrioritizedUnits(unitsObj) { return units; } -function makeGetSet (unit, keepTime) { - return function (value) { - if (value != null) { - set$1(this, unit, value); - hooks.updateOffset(this, keepTime); - return this; - } else { - return get(this, unit); - } - }; -} - -function get (mom, unit) { - return mom.isValid() ? - mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; -} - -function set$1 (mom, unit, value) { - if (mom.isValid()) { - mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); - } -} - -// MOMENTS - -function stringGet (units) { - units = normalizeUnits(units); - if (isFunction(this[units])) { - return this[units](); - } - return this; -} - - -function stringSet (units, value) { - if (typeof units === 'object') { - units = normalizeObjectUnits(units); - var prioritized = getPrioritizedUnits(units); - for (var i = 0; i < prioritized.length; i++) { - this[prioritized[i].unit](units[prioritized[i].unit]); - } - } else { - units = normalizeUnits(units); - if (isFunction(this[units])) { - return this[units](value); - } - } - return this; -} - function zeroFill(number, targetLength, forceSign) { var absNumber = '' + Math.abs(number), zerosToFill = targetLength - absNumber.length, @@ -644,7 +602,7 @@ function makeFormatFunction(format) { return function (mom) { var output = '', i; for (i = 0; i < length; i++) { - output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; + output += isFunction(array[i]) ? array[i].call(mom, format) : array[i]; } return output; }; @@ -701,7 +659,7 @@ var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 // any word (or two) characters or numbers including two/three word month in arabic. // includes scottish gaelic two word and hyphenated months -var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; +var matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i; var regexes = {}; @@ -771,6 +729,131 @@ var MILLISECOND = 6; var WEEK = 7; var WEEKDAY = 8; +// FORMATTING + +addFormatToken('Y', 0, 0, function () { + var y = this.year(); + return y <= 9999 ? '' + y : '+' + y; +}); + +addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; +}); + +addFormatToken(0, ['YYYY', 4], 0, 'year'); +addFormatToken(0, ['YYYYY', 5], 0, 'year'); +addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + +// ALIASES + +addUnitAlias('year', 'y'); + +// PRIORITIES + +addUnitPriority('year', 1); + +// PARSING + +addRegexToken('Y', matchSigned); +addRegexToken('YY', match1to2, match2); +addRegexToken('YYYY', match1to4, match4); +addRegexToken('YYYYY', match1to6, match6); +addRegexToken('YYYYYY', match1to6, match6); + +addParseToken(['YYYYY', 'YYYYYY'], YEAR); +addParseToken('YYYY', function (input, array) { + array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); +}); +addParseToken('YY', function (input, array) { + array[YEAR] = hooks.parseTwoDigitYear(input); +}); +addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10); +}); + +// HELPERS + +function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; +} + +function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; +} + +// HOOKS + +hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); +}; + +// MOMENTS + +var getSetYear = makeGetSet('FullYear', true); + +function getIsLeapYear () { + return isLeapYear(this.year()); +} + +function makeGetSet (unit, keepTime) { + return function (value) { + if (value != null) { + set$1(this, unit, value); + hooks.updateOffset(this, keepTime); + return this; + } else { + return get(this, unit); + } + }; +} + +function get (mom, unit) { + return mom.isValid() ? + mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; +} + +function set$1 (mom, unit, value) { + if (mom.isValid() && !isNaN(value)) { + if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) { + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month())); + } + else { + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + } +} + +// MOMENTS + +function stringGet (units) { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](); + } + return this; +} + + +function stringSet (units, value) { + if (typeof units === 'object') { + units = normalizeObjectUnits(units); + var prioritized = getPrioritizedUnits(units); + for (var i = 0; i < prioritized.length; i++) { + this[prioritized[i].unit](units[prioritized[i].unit]); + } + } else { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](value); + } + } + return this; +} + +function mod(n, x) { + return ((n % x) + x) % x; +} + var indexOf; if (Array.prototype.indexOf) { @@ -788,10 +871,13 @@ if (Array.prototype.indexOf) { }; } -var indexOf$1 = indexOf; - function daysInMonth(year, month) { - return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); + if (isNaN(year) || isNaN(month)) { + return NaN; + } + var modMonth = mod(month, 12); + year += (month - modMonth) / 12; + return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2); } // FORMATTING @@ -847,7 +933,8 @@ var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/; var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); function localeMonths (m, format) { if (!m) { - return this._months; + return isArray(this._months) ? this._months : + this._months['standalone']; } return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()]; @@ -856,7 +943,8 @@ function localeMonths (m, format) { var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); function localeMonthsShort (m, format) { if (!m) { - return this._monthsShort; + return isArray(this._monthsShort) ? this._monthsShort : + this._monthsShort['standalone']; } return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; @@ -878,26 +966,26 @@ function handleStrictParse(monthName, format, strict) { if (strict) { if (format === 'MMM') { - ii = indexOf$1.call(this._shortMonthsParse, llc); + ii = indexOf.call(this._shortMonthsParse, llc); return ii !== -1 ? ii : null; } else { - ii = indexOf$1.call(this._longMonthsParse, llc); + ii = indexOf.call(this._longMonthsParse, llc); return ii !== -1 ? ii : null; } } else { if (format === 'MMM') { - ii = indexOf$1.call(this._shortMonthsParse, llc); + ii = indexOf.call(this._shortMonthsParse, llc); if (ii !== -1) { return ii; } - ii = indexOf$1.call(this._longMonthsParse, llc); + ii = indexOf.call(this._longMonthsParse, llc); return ii !== -1 ? ii : null; } else { - ii = indexOf$1.call(this._longMonthsParse, llc); + ii = indexOf.call(this._longMonthsParse, llc); if (ii !== -1) { return ii; } - ii = indexOf$1.call(this._shortMonthsParse, llc); + ii = indexOf.call(this._shortMonthsParse, llc); return ii !== -1 ? ii : null; } } @@ -1056,78 +1144,12 @@ function computeMonthsParse () { this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); } -// FORMATTING - -addFormatToken('Y', 0, 0, function () { - var y = this.year(); - return y <= 9999 ? '' + y : '+' + y; -}); - -addFormatToken(0, ['YY', 2], 0, function () { - return this.year() % 100; -}); - -addFormatToken(0, ['YYYY', 4], 0, 'year'); -addFormatToken(0, ['YYYYY', 5], 0, 'year'); -addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); - -// ALIASES - -addUnitAlias('year', 'y'); - -// PRIORITIES - -addUnitPriority('year', 1); - -// PARSING - -addRegexToken('Y', matchSigned); -addRegexToken('YY', match1to2, match2); -addRegexToken('YYYY', match1to4, match4); -addRegexToken('YYYYY', match1to6, match6); -addRegexToken('YYYYYY', match1to6, match6); - -addParseToken(['YYYYY', 'YYYYYY'], YEAR); -addParseToken('YYYY', function (input, array) { - array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); -}); -addParseToken('YY', function (input, array) { - array[YEAR] = hooks.parseTwoDigitYear(input); -}); -addParseToken('Y', function (input, array) { - array[YEAR] = parseInt(input, 10); -}); - -// HELPERS - -function daysInYear(year) { - return isLeapYear(year) ? 366 : 365; -} - -function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; -} - -// HOOKS - -hooks.parseTwoDigitYear = function (input) { - return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); -}; - -// MOMENTS - -var getSetYear = makeGetSet('FullYear', true); - -function getIsLeapYear () { - return isLeapYear(this.year()); -} - function createDate (y, m, d, h, M, s, ms) { - //can't just apply() to create a date: - //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply + // can't just apply() to create a date: + // https://stackoverflow.com/q/181348 var date = new Date(y, m, d, h, M, s, ms); - //the date constructor remaps years 0-99 to 1900-1999 + // the date constructor remaps years 0-99 to 1900-1999 if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { date.setFullYear(y); } @@ -1137,7 +1159,7 @@ function createDate (y, m, d, h, M, s, ms) { function createUTCDate (y) { var date = new Date(Date.UTC.apply(null, arguments)); - //the Date.UTC function remaps years 0-99 to 1900-1999 + // the Date.UTC function remaps years 0-99 to 1900-1999 if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { date.setUTCFullYear(y); } @@ -1154,7 +1176,7 @@ function firstWeekOffset(year, dow, doy) { return -fwdlw + fwd - 1; } -//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday +// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday function dayOfYearFromWeeks(year, week, weekday, dow, doy) { var localWeekday = (7 + weekday - dow) % 7, weekOffset = firstWeekOffset(year, dow, doy), @@ -1355,7 +1377,8 @@ function parseIsoWeekday(input, locale) { var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); function localeWeekdays (m, format) { if (!m) { - return this._weekdays; + return isArray(this._weekdays) ? this._weekdays : + this._weekdays['standalone']; } return isArray(this._weekdays) ? this._weekdays[m.day()] : this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()]; @@ -1388,48 +1411,48 @@ function handleStrictParse$1(weekdayName, format, strict) { if (strict) { if (format === 'dddd') { - ii = indexOf$1.call(this._weekdaysParse, llc); + ii = indexOf.call(this._weekdaysParse, llc); return ii !== -1 ? ii : null; } else if (format === 'ddd') { - ii = indexOf$1.call(this._shortWeekdaysParse, llc); + ii = indexOf.call(this._shortWeekdaysParse, llc); return ii !== -1 ? ii : null; } else { - ii = indexOf$1.call(this._minWeekdaysParse, llc); + ii = indexOf.call(this._minWeekdaysParse, llc); return ii !== -1 ? ii : null; } } else { if (format === 'dddd') { - ii = indexOf$1.call(this._weekdaysParse, llc); + ii = indexOf.call(this._weekdaysParse, llc); if (ii !== -1) { return ii; } - ii = indexOf$1.call(this._shortWeekdaysParse, llc); + ii = indexOf.call(this._shortWeekdaysParse, llc); if (ii !== -1) { return ii; } - ii = indexOf$1.call(this._minWeekdaysParse, llc); + ii = indexOf.call(this._minWeekdaysParse, llc); return ii !== -1 ? ii : null; } else if (format === 'ddd') { - ii = indexOf$1.call(this._shortWeekdaysParse, llc); + ii = indexOf.call(this._shortWeekdaysParse, llc); if (ii !== -1) { return ii; } - ii = indexOf$1.call(this._weekdaysParse, llc); + ii = indexOf.call(this._weekdaysParse, llc); if (ii !== -1) { return ii; } - ii = indexOf$1.call(this._minWeekdaysParse, llc); + ii = indexOf.call(this._minWeekdaysParse, llc); return ii !== -1 ? ii : null; } else { - ii = indexOf$1.call(this._minWeekdaysParse, llc); + ii = indexOf.call(this._minWeekdaysParse, llc); if (ii !== -1) { return ii; } - ii = indexOf$1.call(this._weekdaysParse, llc); + ii = indexOf.call(this._weekdaysParse, llc); if (ii !== -1) { return ii; } - ii = indexOf$1.call(this._shortWeekdaysParse, llc); + ii = indexOf.call(this._shortWeekdaysParse, llc); return ii !== -1 ? ii : null; } } @@ -1675,8 +1698,10 @@ addRegexToken('a', matchMeridiem); addRegexToken('A', matchMeridiem); addRegexToken('H', match1to2); addRegexToken('h', match1to2); +addRegexToken('k', match1to2); addRegexToken('HH', match1to2, match2); addRegexToken('hh', match1to2, match2); +addRegexToken('kk', match1to2, match2); addRegexToken('hmm', match3to4); addRegexToken('hmmss', match5to6); @@ -1684,6 +1709,10 @@ addRegexToken('Hmm', match3to4); addRegexToken('Hmmss', match5to6); addParseToken(['H', 'HH'], HOUR); +addParseToken(['k', 'kk'], function (input, array, config) { + var kInput = toInt(input); + array[HOUR] = kInput === 24 ? 0 : kInput; +}); addParseToken(['a', 'A'], function (input, array, config) { config._isPm = config._locale.isPM(input); config._meridiem = input; @@ -1754,7 +1783,7 @@ var baseConfig = { longDateFormat: defaultLongDateFormat, invalidDate: defaultInvalidDate, ordinal: defaultOrdinal, - ordinalParse: defaultOrdinalParse, + dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, relativeTime: defaultRelativeTime, months: defaultLocaleMonths, @@ -1812,11 +1841,10 @@ function loadLocale(name) { module && module.exports) { try { oldLocale = globalLocale._abbr; - require('./locale/' + name); - // because defineLocale currently also sets the global locale, we - // want to undo that for lazy loaded locales + var aliasedRequire = require; + aliasedRequire('./locale/' + name); getSetGlobalLocale(oldLocale); - } catch (e) { } + } catch (e) {} } return locales[name]; } @@ -1892,10 +1920,11 @@ function defineLocale (name, config) { function updateLocale(name, config) { if (config != null) { - var locale, parentConfig = baseConfig; + var locale, tmpLocale, parentConfig = baseConfig; // MERGE - if (locales[name] != null) { - parentConfig = locales[name]._config; + tmpLocale = loadLocale(name); + if (tmpLocale != null) { + parentConfig = tmpLocale._config; } config = mergeConfigs(parentConfig, config); locale = new Locale(config); @@ -1942,7 +1971,7 @@ function getLocale (key) { } function listLocales() { - return keys$1(locales); + return keys(locales); } function checkOverflow (m) { @@ -1975,6 +2004,154 @@ function checkOverflow (m) { return m; } +// Pick the first defined of two or three arguments. +function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; +} + +function currentDateArray(config) { + // hooks is actually the exported moment object + var nowValue = new Date(hooks.now()); + if (config._useUTC) { + return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; + } + return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; +} + +// convert an array to a date. +// the array should mirror the parameters below +// note: all values past the year are optional and will default to the lowest possible value. +// [year, month, day , hour, minute, second, millisecond] +function configFromArray (config) { + var i, date, input = [], currentDate, yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear != null) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + + if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) { + getParsingFlags(config)._overflowDayOfYear = true; + } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if (config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } + + // check for mismatching day of week + if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== config._d.getDay()) { + getParsingFlags(config).weekdayMismatch = true; + } +} + +function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + if (weekday < 1 || weekday > 7) { + weekdayOverflow = true; + } + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + var curWeek = weekOfYear(createLocal(), dow, doy); + + weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); + + // Default to current week. + week = defaults(w.w, curWeek.week); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < 0 || weekday > 6) { + weekdayOverflow = true; + } + } else if (w.e != null) { + // local weekday -- counting starts from begining of week + weekday = w.e + dow; + if (w.e < 0 || w.e > 6) { + weekdayOverflow = true; + } + } else { + // default to begining of week + weekday = dow; + } + } + if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { + getParsingFlags(config)._overflowWeeks = true; + } else if (weekdayOverflow != null) { + getParsingFlags(config)._overflowWeekday = true; + } else { + temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } +} + // iso 8601 regex // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; @@ -2065,6 +2242,101 @@ function configFromISO(config) { } } +// RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 +var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/; + +function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { + var result = [ + untruncateYear(yearStr), + defaultLocaleMonthsShort.indexOf(monthStr), + parseInt(dayStr, 10), + parseInt(hourStr, 10), + parseInt(minuteStr, 10) + ]; + + if (secondStr) { + result.push(parseInt(secondStr, 10)); + } + + return result; +} + +function untruncateYear(yearStr) { + var year = parseInt(yearStr, 10); + if (year <= 49) { + return 2000 + year; + } else if (year <= 999) { + return 1900 + year; + } + return year; +} + +function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s.replace(/\([^)]*\)|[\n\t]/g, ' ').replace(/(\s\s+)/g, ' ').trim(); +} + +function checkWeekday(weekdayStr, parsedInput, config) { + if (weekdayStr) { + // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check. + var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), + weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay(); + if (weekdayProvided !== weekdayActual) { + getParsingFlags(config).weekdayMismatch = true; + config._isValid = false; + return false; + } + } + return true; +} + +var obsOffsets = { + UT: 0, + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60 +}; + +function calculateOffset(obsOffset, militaryOffset, numOffset) { + if (obsOffset) { + return obsOffsets[obsOffset]; + } else if (militaryOffset) { + // the only allowed military tz is Z + return 0; + } else { + var hm = parseInt(numOffset, 10); + var m = hm % 100, h = (hm - m) / 100; + return h * 60 + m; + } +} + +// date and time from ref 2822 format +function configFromRFC2822(config) { + var match = rfc2822.exec(preprocessRFC2822(config._i)); + if (match) { + var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]); + if (!checkWeekday(match[1], parsedArray, config)) { + return; + } + + config._a = parsedArray; + config._tzm = calculateOffset(match[8], match[9], match[10]); + + config._d = createUTCDate.apply(null, config._a); + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + + getParsingFlags(config).rfc2822 = true; + } else { + config._isValid = false; + } +} + // date from iso format or fallback function configFromString(config) { var matched = aspNetJsonRegex.exec(config._i); @@ -2077,13 +2349,24 @@ function configFromString(config) { configFromISO(config); if (config._isValid === false) { delete config._isValid; - hooks.createFromInputFallback(config); + } else { + return; } + + configFromRFC2822(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + // Final attempt, use Input Fallback + hooks.createFromInputFallback(config); } hooks.createFromInputFallback = deprecate( - 'value provided is not in a recognized ISO format. moment construction falls back to js Date(), ' + - 'which is not reliable across all browsers and versions. Non ISO date formats are ' + + 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 'discouraged and will be removed in an upcoming major release. Please refer to ' + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', function (config) { @@ -2091,152 +2374,12 @@ hooks.createFromInputFallback = deprecate( } ); -// Pick the first defined of two or three arguments. -function defaults(a, b, c) { - if (a != null) { - return a; - } - if (b != null) { - return b; - } - return c; -} - -function currentDateArray(config) { - // hooks is actually the exported moment object - var nowValue = new Date(hooks.now()); - if (config._useUTC) { - return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; - } - return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; -} - -// convert an array to a date. -// the array should mirror the parameters below -// note: all values past the year are optional and will default to the lowest possible value. -// [year, month, day , hour, minute, second, millisecond] -function configFromArray (config) { - var i, date, input = [], currentDate, yearToUse; - - if (config._d) { - return; - } - - currentDate = currentDateArray(config); - - //compute day of the year from weeks and weekdays - if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { - dayOfYearFromWeekInfo(config); - } - - //if the day of the year is set, figure out what it is - if (config._dayOfYear) { - yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); - - if (config._dayOfYear > daysInYear(yearToUse)) { - getParsingFlags(config)._overflowDayOfYear = true; - } - - date = createUTCDate(yearToUse, 0, config._dayOfYear); - config._a[MONTH] = date.getUTCMonth(); - config._a[DATE] = date.getUTCDate(); - } - - // Default to current date. - // * if no year, month, day of month are given, default to today - // * if day of month is given, default month and year - // * if month is given, default only year - // * if year is given, don't default anything - for (i = 0; i < 3 && config._a[i] == null; ++i) { - config._a[i] = input[i] = currentDate[i]; - } - - // Zero out whatever was not defaulted, including time - for (; i < 7; i++) { - config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; - } - - // Check for 24:00:00.000 - if (config._a[HOUR] === 24 && - config._a[MINUTE] === 0 && - config._a[SECOND] === 0 && - config._a[MILLISECOND] === 0) { - config._nextDay = true; - config._a[HOUR] = 0; - } - - config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); - // Apply timezone offset from input. The actual utcOffset can be changed - // with parseZone. - if (config._tzm != null) { - config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); - } - - if (config._nextDay) { - config._a[HOUR] = 24; - } -} - -function dayOfYearFromWeekInfo(config) { - var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; - - w = config._w; - if (w.GG != null || w.W != null || w.E != null) { - dow = 1; - doy = 4; - - // TODO: We need to take the current isoWeekYear, but that depends on - // how we interpret now (local, utc, fixed offset). So create - // a now version of current config (take local/utc/offset flags, and - // create now). - weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year); - week = defaults(w.W, 1); - weekday = defaults(w.E, 1); - if (weekday < 1 || weekday > 7) { - weekdayOverflow = true; - } - } else { - dow = config._locale._week.dow; - doy = config._locale._week.doy; - - var curWeek = weekOfYear(createLocal(), dow, doy); - - weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); - - // Default to current week. - week = defaults(w.w, curWeek.week); - - if (w.d != null) { - // weekday -- low day numbers are considered next week - weekday = w.d; - if (weekday < 0 || weekday > 6) { - weekdayOverflow = true; - } - } else if (w.e != null) { - // local weekday -- counting starts from beginning of week - weekday = w.e + dow; - if (w.e < 0 || w.e > 6) { - weekdayOverflow = true; - } - } else { - // default to beginning of week - weekday = dow; - } - } - if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { - getParsingFlags(config)._overflowWeeks = true; - } else if (weekdayOverflow != null) { - getParsingFlags(config)._overflowWeekday = true; - } else { - temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); - config._a[YEAR] = temp.year; - config._dayOfYear = temp.dayOfYear; - } -} - // constant that refers to the ISO standard hooks.ISO_8601 = function () {}; +// constant that refers to the RFC 2822 form +hooks.RFC_2822 = function () {}; + // date from string and format string function configFromStringAndFormat(config) { // TODO: Move this to another part of the creation flow to prevent circular deps @@ -2244,7 +2387,10 @@ function configFromStringAndFormat(config) { configFromISO(config); return; } - + if (config._f === hooks.RFC_2822) { + configFromRFC2822(config); + return; + } config._a = []; getParsingFlags(config).empty = true; @@ -2436,7 +2582,7 @@ function prepareConfig (config) { function configFromInput(config) { var input = config._i; - if (input === undefined) { + if (isUndefined(input)) { config._d = new Date(hooks.now()); } else if (isDate(input)) { config._d = new Date(input.valueOf()); @@ -2447,7 +2593,7 @@ function configFromInput(config) { return parseInt(obj, 10); }); configFromArray(config); - } else if (typeof(input) === 'object') { + } else if (isObject(input)) { configFromObject(config); } else if (isNumber(input)) { // from milliseconds @@ -2548,6 +2694,38 @@ var now = function () { return Date.now ? Date.now() : +(new Date()); }; +var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond']; + +function isDurationValid(m) { + for (var key in m) { + if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) { + return false; + } + } + + var unitHasDecimal = false; + for (var i = 0; i < ordering.length; ++i) { + if (m[ordering[i]]) { + if (unitHasDecimal) { + return false; // only allow non-integers for smallest unit + } + if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { + unitHasDecimal = true; + } + } + } + + return true; +} + +function isValid$1() { + return this._isValid; +} + +function createInvalid$1() { + return createDuration(NaN); +} + function Duration (duration) { var normalizedInput = normalizeObjectUnits(duration), years = normalizedInput.year || 0, @@ -2560,6 +2738,8 @@ function Duration (duration) { seconds = normalizedInput.second || 0, milliseconds = normalizedInput.millisecond || 0; + this._isValid = isDurationValid(normalizedInput); + // representation for dateAddRemove this._milliseconds = +milliseconds + seconds * 1e3 + // 1000 @@ -2569,7 +2749,7 @@ function Duration (duration) { // day when working around DST, we need to store them separately this._days = +days + weeks * 7; - // It is impossible translate months into days without knowing + // It is impossible to translate months into days without knowing // which months you are are talking about, so we have to store // it separately. this._months = +months + @@ -2683,7 +2863,7 @@ hooks.updateOffset = function () {}; // a second time. In case it wants us to change the offset again // _changeInProgress == true case, then we have to adjust, because // there is no such time in the given timezone. -function getSetOffset (input, keepLocalTime) { +function getSetOffset (input, keepLocalTime, keepMinutes) { var offset = this._offset || 0, localAdjust; if (!this.isValid()) { @@ -2695,7 +2875,7 @@ function getSetOffset (input, keepLocalTime) { if (input === null) { return this; } - } else if (Math.abs(input) < 16) { + } else if (Math.abs(input) < 16 && !keepMinutes) { input = input * 60; } if (!this._isUTC && keepLocalTime) { @@ -2753,7 +2933,7 @@ function setOffsetToLocal (keepLocalTime) { function setOffsetToParsedOffset () { if (this._tzm != null) { - this.utcOffset(this._tzm); + this.utcOffset(this._tzm, false, true); } else if (typeof this._i === 'string') { var tZone = offsetFromString(matchOffset, this._i); if (tZone != null) { @@ -2816,12 +2996,12 @@ function isUtc () { } // ASP.NET json date format regex -var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/; +var aspNetRegex = /^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/; // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere // and further modified to allow for strings containing both week and day -var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/; +var isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; function createDuration (input, key) { var duration = input, @@ -2855,7 +3035,7 @@ function createDuration (input, key) { ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match }; } else if (!!(match = isoRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; + sign = (match[1] === '-') ? -1 : (match[1] === '+') ? 1 : 1; duration = { y : parseIso(match[2], sign), M : parseIso(match[3], sign), @@ -2885,6 +3065,7 @@ function createDuration (input, key) { } createDuration.fn = Duration.prototype; +createDuration.invalid = createInvalid$1; function parseIso (inp, sign) { // We'd normally use ~~inp for this, but unfortunately it also @@ -2957,14 +3138,14 @@ function addSubtract (mom, duration, isAdding, updateOffset) { updateOffset = updateOffset == null ? true : updateOffset; - if (milliseconds) { - mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); + if (months) { + setMonth(mom, get(mom, 'Month') + months * isAdding); } if (days) { set$1(mom, 'Date', get(mom, 'Date') + days * isAdding); } - if (months) { - setMonth(mom, get(mom, 'Month') + months * isAdding); + if (milliseconds) { + mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); } if (updateOffset) { hooks.updateOffset(mom, days || months); @@ -3074,22 +3255,18 @@ function diff (input, units, asFloat) { units = normalizeUnits(units); - if (units === 'year' || units === 'month' || units === 'quarter') { - output = monthDiff(this, that); - if (units === 'quarter') { - output = output / 3; - } else if (units === 'year') { - output = output / 12; - } - } else { - delta = this - that; - output = units === 'second' ? delta / 1e3 : // 1000 - units === 'minute' ? delta / 6e4 : // 1000 * 60 - units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 - units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst - units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst - delta; + switch (units) { + case 'year': output = monthDiff(this, that) / 12; break; + case 'month': output = monthDiff(this, that); break; + case 'quarter': output = monthDiff(this, that) / 3; break; + case 'second': output = (this - that) / 1e3; break; // 1000 + case 'minute': output = (this - that) / 6e4; break; // 1000 * 60 + case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60 + case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst + case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst + default: output = this - that; } + return asFloat ? output : absFloor(output); } @@ -3121,18 +3298,19 @@ function toString () { return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); } -function toISOString () { +function toISOString() { + if (!this.isValid()) { + return null; + } var m = this.clone().utc(); - if (0 < m.year() && m.year() <= 9999) { - if (isFunction(Date.prototype.toISOString)) { - // native implementation is ~50x faster, use it when we can - return this.toDate().toISOString(); - } else { - return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - } else { + if (m.year() < 0 || m.year() > 9999) { return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); } + if (isFunction(Date.prototype.toISOString)) { + // native implementation is ~50x faster, use it when we can + return this.toDate().toISOString(); + } + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); } /** @@ -3152,7 +3330,7 @@ function inspect () { zone = 'Z'; } var prefix = '[' + func + '("]'; - var year = (0 < this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY'; + var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY'; var datetime = '-MM-DD[T]HH:mm:ss.SSS'; var suffix = zone + '[")]'; @@ -3320,7 +3498,7 @@ function toJSON () { return this.isValid() ? this.toISOString() : null; } -function isValid$1 () { +function isValid$2 () { return isValid(this); } @@ -3480,7 +3658,10 @@ addUnitPriority('date', 9); addRegexToken('D', match1to2); addRegexToken('DD', match1to2, match2); addRegexToken('Do', function (isStrict, locale) { - return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; + // TODO: Remove "ordinalParse" fallback in next major release. + return isStrict ? + (locale._dayOfMonthOrdinalParse || locale._ordinalParse) : + locale._dayOfMonthOrdinalParseLenient; }); addParseToken(['D', 'DD'], DATE); @@ -3660,7 +3841,7 @@ proto.isBetween = isBetween; proto.isSame = isSame; proto.isSameOrAfter = isSameOrAfter; proto.isSameOrBefore = isSameOrBefore; -proto.isValid = isValid$1; +proto.isValid = isValid$2; proto.lang = lang; proto.locale = locale; proto.localeData = localeData; @@ -3885,7 +4066,7 @@ function listWeekdaysMin (localeSorted, format, index) { } getSetGlobalLocale('en', { - ordinalParse: /\d{1,2}(th|st|nd|rd)/, + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, ordinal : function (number) { var b = number % 10, output = (toInt(number % 100 / 10) === 1) ? 'th' : @@ -4006,6 +4187,9 @@ function monthsToDays (months) { } function as (units) { + if (!this.isValid()) { + return NaN; + } var days; var months; var milliseconds = this._milliseconds; @@ -4034,6 +4218,9 @@ function as (units) { // TODO: Use this.as('ms')? function valueOf$1 () { + if (!this.isValid()) { + return NaN; + } return ( this._milliseconds + this._days * 864e5 + @@ -4057,14 +4244,18 @@ var asWeeks = makeAs('w'); var asMonths = makeAs('M'); var asYears = makeAs('y'); +function clone$1 () { + return createDuration(this); +} + function get$2 (units) { units = normalizeUnits(units); - return this[units + 's'](); + return this.isValid() ? this[units + 's']() : NaN; } function makeGetter(name) { return function () { - return this._data[name]; + return this.isValid() ? this._data[name] : NaN; }; } @@ -4082,11 +4273,12 @@ function weeks () { var round = Math.round; var thresholds = { - s: 45, // seconds to minute - m: 45, // minutes to hour - h: 22, // hours to day - d: 26, // days to month - M: 11 // months to year + ss: 44, // a few seconds to seconds + s : 45, // seconds to minute + m : 45, // minutes to hour + h : 22, // hours to day + d : 26, // days to month + M : 11 // months to year }; // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize @@ -4103,16 +4295,17 @@ function relativeTime$1 (posNegDuration, withoutSuffix, locale) { var months = round(duration.as('M')); var years = round(duration.as('y')); - var a = seconds < thresholds.s && ['s', seconds] || - minutes <= 1 && ['m'] || - minutes < thresholds.m && ['mm', minutes] || - hours <= 1 && ['h'] || - hours < thresholds.h && ['hh', hours] || - days <= 1 && ['d'] || - days < thresholds.d && ['dd', days] || - months <= 1 && ['M'] || - months < thresholds.M && ['MM', months] || - years <= 1 && ['y'] || ['yy', years]; + var a = seconds <= thresholds.ss && ['s', seconds] || + seconds < thresholds.s && ['ss', seconds] || + minutes <= 1 && ['m'] || + minutes < thresholds.m && ['mm', minutes] || + hours <= 1 && ['h'] || + hours < thresholds.h && ['hh', hours] || + days <= 1 && ['d'] || + days < thresholds.d && ['dd', days] || + months <= 1 && ['M'] || + months < thresholds.M && ['MM', months] || + years <= 1 && ['y'] || ['yy', years]; a[2] = withoutSuffix; a[3] = +posNegDuration > 0; @@ -4141,10 +4334,17 @@ function getSetRelativeTimeThreshold (threshold, limit) { return thresholds[threshold]; } thresholds[threshold] = limit; + if (threshold === 's') { + thresholds.ss = limit - 1; + } return true; } function humanize (withSuffix) { + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + var locale = this.localeData(); var output = relativeTime$1(this, !withSuffix, locale); @@ -4157,6 +4357,10 @@ function humanize (withSuffix) { var abs$1 = Math.abs; +function sign(x) { + return ((x > 0) - (x < 0)) || +x; +} + function toISOString$1() { // for ISO strings we do not use the normal bubbling rules: // * milliseconds bubble up until they become hours @@ -4165,6 +4369,10 @@ function toISOString$1() { // This is because there is no context-free conversion between hours and days // (think of clock changes) // and also not between days and months (28-31 days per month) + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + var seconds = abs$1(this._milliseconds) / 1000; var days = abs$1(this._days); var months = abs$1(this._months); @@ -4187,7 +4395,7 @@ function toISOString$1() { var D = days; var h = hours; var m = minutes; - var s = seconds; + var s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : ''; var total = this.asSeconds(); if (!total) { @@ -4196,19 +4404,24 @@ function toISOString$1() { return 'P0D'; } - return (total < 0 ? '-' : '') + - 'P' + - (Y ? Y + 'Y' : '') + - (M ? M + 'M' : '') + - (D ? D + 'D' : '') + + var totalSign = total < 0 ? '-' : ''; + var ymSign = sign(this._months) !== sign(total) ? '-' : ''; + var daysSign = sign(this._days) !== sign(total) ? '-' : ''; + var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : ''; + + return totalSign + 'P' + + (Y ? ymSign + Y + 'Y' : '') + + (M ? ymSign + M + 'M' : '') + + (D ? daysSign + D + 'D' : '') + ((h || m || s) ? 'T' : '') + - (h ? h + 'H' : '') + - (m ? m + 'M' : '') + - (s ? s + 'S' : ''); + (h ? hmsSign + h + 'H' : '') + + (m ? hmsSign + m + 'M' : '') + + (s ? hmsSign + s + 'S' : ''); } var proto$2 = Duration.prototype; +proto$2.isValid = isValid$1; proto$2.abs = abs; proto$2.add = add$1; proto$2.subtract = subtract$1; @@ -4223,6 +4436,7 @@ proto$2.asMonths = asMonths; proto$2.asYears = asYears; proto$2.valueOf = valueOf$1; proto$2._bubble = bubble; +proto$2.clone = clone$1; proto$2.get = get$2; proto$2.milliseconds = milliseconds; proto$2.seconds = seconds; @@ -4264,7 +4478,7 @@ addParseToken('x', function (input, array, config) { // Side effect imports -hooks.version = '2.17.1'; +hooks.version = '2.19.3'; setHookCallback(createLocal); @@ -4291,7 +4505,7 @@ hooks.updateLocale = updateLocale; hooks.locales = listLocales; hooks.weekdaysShort = listWeekdaysShort; hooks.normalizeUnits = normalizeUnits; -hooks.relativeTimeRounding = getSetRelativeTimeRounding; +hooks.relativeTimeRounding = getSetRelativeTimeRounding; hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; hooks.calendarFormat = getCalendarFormat; hooks.prototype = proto;