poli_planning/polyclinic_scheduling/apps/RUG_template/static/RUG_template/javascript/humanize-duration.js

807 lines
30 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// HumanizeDuration.js - https://git.io/j0HgmQ
;(function () {
// This has to be defined separately because of a bug: we want to alias
// `gr` and `el` for backwards-compatiblity. In a breaking change, we can
// remove `gr` entirely.
// See https://github.com/EvanHahn/HumanizeDuration.js/issues/143 for more.
var greek = {
y: function (c) { return c === 1 ? 'χρόνος' : 'χρόνια' },
mo: function (c) { return c === 1 ? 'μήνας' : 'μήνες' },
w: function (c) { return c === 1 ? 'εβδομάδα' : 'εβδομάδες' },
d: function (c) { return c === 1 ? 'μέρα' : 'μέρες' },
h: function (c) { return c === 1 ? 'ώρα' : 'ώρες' },
m: function (c) { return c === 1 ? 'λεπτό' : 'λεπτά' },
s: function (c) { return c === 1 ? 'δευτερόλεπτο' : 'δευτερόλεπτα' },
ms: function (c) { return c === 1 ? 'χιλιοστό του δευτερολέπτου' : 'χιλιοστά του δευτερολέπτου' },
decimal: ','
}
var languages = {
ar: {
y: function (c) { return c === 1 ? 'سنة' : 'سنوات' },
mo: function (c) { return c === 1 ? 'شهر' : 'أشهر' },
w: function (c) { return c === 1 ? 'أسبوع' : 'أسابيع' },
d: function (c) { return c === 1 ? 'يوم' : 'أيام' },
h: function (c) { return c === 1 ? 'ساعة' : 'ساعات' },
m: function (c) {
return ['دقيقة', 'دقائق'][getArabicForm(c)]
},
s: function (c) { return c === 1 ? 'ثانية' : 'ثواني' },
ms: function (c) { return c === 1 ? 'جزء من الثانية' : 'أجزاء من الثانية' },
decimal: ','
},
bg: {
y: function (c) { return ['години', 'година', 'години'][getSlavicForm(c)] },
mo: function (c) { return ['месеца', 'месец', 'месеца'][getSlavicForm(c)] },
w: function (c) { return ['седмици', 'седмица', 'седмици'][getSlavicForm(c)] },
d: function (c) { return ['дни', 'ден', 'дни'][getSlavicForm(c)] },
h: function (c) { return ['часа', 'час', 'часа'][getSlavicForm(c)] },
m: function (c) { return ['минути', 'минута', 'минути'][getSlavicForm(c)] },
s: function (c) { return ['секунди', 'секунда', 'секунди'][getSlavicForm(c)] },
ms: function (c) { return ['милисекунди', 'милисекунда', 'милисекунди'][getSlavicForm(c)] },
decimal: ','
},
ca: {
y: function (c) { return 'any' + (c === 1 ? '' : 's') },
mo: function (c) { return 'mes' + (c === 1 ? '' : 'os') },
w: function (c) { return 'setman' + (c === 1 ? 'a' : 'es') },
d: function (c) { return 'di' + (c === 1 ? 'a' : 'es') },
h: function (c) { return 'hor' + (c === 1 ? 'a' : 'es') },
m: function (c) { return 'minut' + (c === 1 ? '' : 's') },
s: function (c) { return 'segon' + (c === 1 ? '' : 's') },
ms: function (c) { return 'milisegon' + (c === 1 ? '' : 's') },
decimal: ','
},
cs: {
y: function (c) { return ['rok', 'roku', 'roky', 'let'][getCzechOrSlovakForm(c)] },
mo: function (c) { return ['měsíc', 'měsíce', 'měsíce', 'měsíců'][getCzechOrSlovakForm(c)] },
w: function (c) { return ['týden', 'týdne', 'týdny', 'týdnů'][getCzechOrSlovakForm(c)] },
d: function (c) { return ['den', 'dne', 'dny', 'dní'][getCzechOrSlovakForm(c)] },
h: function (c) { return ['hodina', 'hodiny', 'hodiny', 'hodin'][getCzechOrSlovakForm(c)] },
m: function (c) { return ['minuta', 'minuty', 'minuty', 'minut'][getCzechOrSlovakForm(c)] },
s: function (c) { return ['sekunda', 'sekundy', 'sekundy', 'sekund'][getCzechOrSlovakForm(c)] },
ms: function (c) { return ['milisekunda', 'milisekundy', 'milisekundy', 'milisekund'][getCzechOrSlovakForm(c)] },
decimal: ','
},
da: {
y: 'år',
mo: function (c) { return 'måned' + (c === 1 ? '' : 'er') },
w: function (c) { return 'uge' + (c === 1 ? '' : 'r') },
d: function (c) { return 'dag' + (c === 1 ? '' : 'e') },
h: function (c) { return 'time' + (c === 1 ? '' : 'r') },
m: function (c) { return 'minut' + (c === 1 ? '' : 'ter') },
s: function (c) { return 'sekund' + (c === 1 ? '' : 'er') },
ms: function (c) { return 'millisekund' + (c === 1 ? '' : 'er') },
decimal: ','
},
de: {
y: function (c) { return 'Jahr' + (c === 1 ? '' : 'e') },
mo: function (c) { return 'Monat' + (c === 1 ? '' : 'e') },
w: function (c) { return 'Woche' + (c === 1 ? '' : 'n') },
d: function (c) { return 'Tag' + (c === 1 ? '' : 'e') },
h: function (c) { return 'Stunde' + (c === 1 ? '' : 'n') },
m: function (c) { return 'Minute' + (c === 1 ? '' : 'n') },
s: function (c) { return 'Sekunde' + (c === 1 ? '' : 'n') },
ms: function (c) { return 'Millisekunde' + (c === 1 ? '' : 'n') },
decimal: ','
},
el: greek,
en: {
y: function (c) { return 'year' + (c === 1 ? '' : 's') },
mo: function (c) { return 'month' + (c === 1 ? '' : 's') },
w: function (c) { return 'week' + (c === 1 ? '' : 's') },
d: function (c) { return 'day' + (c === 1 ? '' : 's') },
h: function (c) { return 'hour' + (c === 1 ? '' : 's') },
m: function (c) { return 'minute' + (c === 1 ? '' : 's') },
s: function (c) { return 'second' + (c === 1 ? '' : 's') },
ms: function (c) { return 'millisecond' + (c === 1 ? '' : 's') },
decimal: '.'
},
es: {
y: function (c) { return 'año' + (c === 1 ? '' : 's') },
mo: function (c) { return 'mes' + (c === 1 ? '' : 'es') },
w: function (c) { return 'semana' + (c === 1 ? '' : 's') },
d: function (c) { return 'día' + (c === 1 ? '' : 's') },
h: function (c) { return 'hora' + (c === 1 ? '' : 's') },
m: function (c) { return 'minuto' + (c === 1 ? '' : 's') },
s: function (c) { return 'segundo' + (c === 1 ? '' : 's') },
ms: function (c) { return 'milisegundo' + (c === 1 ? '' : 's') },
decimal: ','
},
et: {
y: function (c) { return 'aasta' + (c === 1 ? '' : 't') },
mo: function (c) { return 'kuu' + (c === 1 ? '' : 'd') },
w: function (c) { return 'nädal' + (c === 1 ? '' : 'at') },
d: function (c) { return 'päev' + (c === 1 ? '' : 'a') },
h: function (c) { return 'tund' + (c === 1 ? '' : 'i') },
m: function (c) { return 'minut' + (c === 1 ? '' : 'it') },
s: function (c) { return 'sekund' + (c === 1 ? '' : 'it') },
ms: function (c) { return 'millisekund' + (c === 1 ? '' : 'it') },
decimal: ','
},
fa: {
y: 'سال',
mo: 'ماه',
w: 'هفته',
d: 'روز',
h: 'ساعت',
m: 'دقیقه',
s: 'ثانیه',
ms: 'میلی ثانیه',
decimal: '.'
},
fi: {
y: function (c) { return c === 1 ? 'vuosi' : 'vuotta' },
mo: function (c) { return c === 1 ? 'kuukausi' : 'kuukautta' },
w: function (c) { return 'viikko' + (c === 1 ? '' : 'a') },
d: function (c) { return 'päivä' + (c === 1 ? '' : 'ä') },
h: function (c) { return 'tunti' + (c === 1 ? '' : 'a') },
m: function (c) { return 'minuutti' + (c === 1 ? '' : 'a') },
s: function (c) { return 'sekunti' + (c === 1 ? '' : 'a') },
ms: function (c) { return 'millisekunti' + (c === 1 ? '' : 'a') },
decimal: ','
},
fo: {
y: 'ár',
mo: function (c) { return c === 1 ? 'mánaður' : 'mánaðir' },
w: function (c) { return c === 1 ? 'vika' : 'vikur' },
d: function (c) { return c === 1 ? 'dagur' : 'dagar' },
h: function (c) { return c === 1 ? 'tími' : 'tímar' },
m: function (c) { return c === 1 ? 'minuttur' : 'minuttir' },
s: 'sekund',
ms: 'millisekund',
decimal: ','
},
fr: {
y: function (c) { return 'an' + (c >= 2 ? 's' : '') },
mo: 'mois',
w: function (c) { return 'semaine' + (c >= 2 ? 's' : '') },
d: function (c) { return 'jour' + (c >= 2 ? 's' : '') },
h: function (c) { return 'heure' + (c >= 2 ? 's' : '') },
m: function (c) { return 'minute' + (c >= 2 ? 's' : '') },
s: function (c) { return 'seconde' + (c >= 2 ? 's' : '') },
ms: function (c) { return 'milliseconde' + (c >= 2 ? 's' : '') },
decimal: ','
},
gr: greek,
he: {
y: function (c) { return c === 1 ? 'שנה' : 'שנים' },
mo: function (c) { return c === 1 ? 'חודש' : 'חודשים' },
w: function (c) { return c === 1 ? 'שבוע' : 'שבועות' },
d: function (c) { return c === 1 ? 'יום' : 'ימים' },
h: function (c) { return c === 1 ? 'שעה' : 'שעות' },
m: function (c) { return c === 1 ? 'דקה' : 'דקות' },
s: function (c) { return c === 1 ? 'שניה' : 'שניות' },
ms: function (c) { return c === 1 ? 'מילישנייה' : 'מילישניות' },
decimal: '.'
},
hr: {
y: function (c) {
if (c % 10 === 2 || c % 10 === 3 || c % 10 === 4) {
return 'godine'
}
return 'godina'
},
mo: function (c) {
if (c === 1) {
return 'mjesec'
} else if (c === 2 || c === 3 || c === 4) {
return 'mjeseca'
}
return 'mjeseci'
},
w: function (c) {
if (c % 10 === 1 && c !== 11) {
return 'tjedan'
}
return 'tjedna'
},
d: function (c) { return c === 1 ? 'dan' : 'dana' },
h: function (c) {
if (c === 1) {
return 'sat'
} else if (c === 2 || c === 3 || c === 4) {
return 'sata'
}
return 'sati'
},
m: function (c) {
var mod10 = c % 10
if ((mod10 === 2 || mod10 === 3 || mod10 === 4) && (c < 10 || c > 14)) {
return 'minute'
}
return 'minuta'
},
s: function (c) {
if ((c === 10 || c === 11 || c === 12 || c === 13 || c === 14 || c === 16 || c === 17 || c === 18 || c === 19) || (c % 10 === 5)) {
return 'sekundi'
} else if (c % 10 === 1) {
return 'sekunda'
} else if (c % 10 === 2 || c % 10 === 3 || c % 10 === 4) {
return 'sekunde'
}
return 'sekundi'
},
ms: function (c) {
if (c === 1) {
return 'milisekunda'
} else if (c % 10 === 2 || c % 10 === 3 || c % 10 === 4) {
return 'milisekunde'
}
return 'milisekundi'
},
decimal: ','
},
hu: {
y: 'év',
mo: 'hónap',
w: 'hét',
d: 'nap',
h: 'óra',
m: 'perc',
s: 'másodperc',
ms: 'ezredmásodperc',
decimal: ','
},
id: {
y: 'tahun',
mo: 'bulan',
w: 'minggu',
d: 'hari',
h: 'jam',
m: 'menit',
s: 'detik',
ms: 'milidetik',
decimal: '.'
},
is: {
y: 'ár',
mo: function (c) { return 'mánuð' + (c === 1 ? 'ur' : 'ir') },
w: function (c) { return 'vik' + (c === 1 ? 'a' : 'ur') },
d: function (c) { return 'dag' + (c === 1 ? 'ur' : 'ar') },
h: function (c) { return 'klukkutím' + (c === 1 ? 'i' : 'ar') },
m: function (c) { return 'mínút' + (c === 1 ? 'a' : 'ur') },
s: function (c) { return 'sekúnd' + (c === 1 ? 'a' : 'ur') },
ms: function (c) { return 'millisekúnd' + (c === 1 ? 'a' : 'ur') },
decimal: '.'
},
it: {
y: function (c) { return 'ann' + (c === 1 ? 'o' : 'i') },
mo: function (c) { return 'mes' + (c === 1 ? 'e' : 'i') },
w: function (c) { return 'settiman' + (c === 1 ? 'a' : 'e') },
d: function (c) { return 'giorn' + (c === 1 ? 'o' : 'i') },
h: function (c) { return 'or' + (c === 1 ? 'a' : 'e') },
m: function (c) { return 'minut' + (c === 1 ? 'o' : 'i') },
s: function (c) { return 'second' + (c === 1 ? 'o' : 'i') },
ms: function (c) { return 'millisecond' + (c === 1 ? 'o' : 'i') },
decimal: ','
},
ja: {
y: '年',
mo: '月',
w: '週',
d: '日',
h: '時間',
m: '分',
s: '秒',
ms: 'ミリ秒',
decimal: '.'
},
ko: {
y: '년',
mo: '개월',
w: '주일',
d: '일',
h: '시간',
m: '분',
s: '초',
ms: '밀리 초',
decimal: '.'
},
lo: {
y: 'ປີ',
mo: 'ເດືອນ',
w: 'ອາທິດ',
d: 'ມື້',
h: 'ຊົ່ວໂມງ',
m: 'ນາທີ',
s: 'ວິນາທີ',
ms: 'ມິນລິວິນາທີ',
decimal: ','
},
lt: {
y: function (c) { return ((c % 10 === 0) || (c % 100 >= 10 && c % 100 <= 20)) ? 'metų' : 'metai' },
mo: function (c) { return ['mėnuo', 'mėnesiai', 'mėnesių'][getLithuanianForm(c)] },
w: function (c) { return ['savaitė', 'savaitės', 'savaičių'][getLithuanianForm(c)] },
d: function (c) { return ['diena', 'dienos', 'dienų'][getLithuanianForm(c)] },
h: function (c) { return ['valanda', 'valandos', 'valandų'][getLithuanianForm(c)] },
m: function (c) { return ['minutė', 'minutės', 'minučių'][getLithuanianForm(c)] },
s: function (c) { return ['sekundė', 'sekundės', 'sekundžių'][getLithuanianForm(c)] },
ms: function (c) { return ['milisekundė', 'milisekundės', 'milisekundžių'][getLithuanianForm(c)] },
decimal: ','
},
lv: {
y: function (c) { return ['gads', 'gadi'][getLatvianForm(c)] },
mo: function (c) { return ['mēnesis', 'mēneši'][getLatvianForm(c)] },
w: function (c) { return ['nedēļa', 'nedēļas'][getLatvianForm(c)] },
d: function (c) { return ['diena', 'dienas'][getLatvianForm(c)] },
h: function (c) { return ['stunda', 'stundas'][getLatvianForm(c)] },
m: function (c) { return ['minūte', 'minūtes'][getLatvianForm(c)] },
s: function (c) { return ['sekunde', 'sekundes'][getLatvianForm(c)] },
ms: function (c) { return ['milisekunde', 'milisekundes'][getLatvianForm(c)] },
decimal: ','
},
ms: {
y: 'tahun',
mo: 'bulan',
w: 'minggu',
d: 'hari',
h: 'jam',
m: 'minit',
s: 'saat',
ms: 'milisaat',
decimal: '.'
},
nl: {
y: 'jaar',
mo: function (c) { return c === 1 ? 'maand' : 'maanden' },
w: function (c) { return c === 1 ? 'week' : 'weken' },
d: function (c) { return c === 1 ? 'dag' : 'dagen' },
h: 'uur',
m: function (c) { return c === 1 ? 'minuut' : 'minuten' },
s: function (c) { return c === 1 ? 'seconde' : 'seconden' },
ms: function (c) { return c === 1 ? 'milliseconde' : 'milliseconden' },
decimal: ','
},
no: {
y: 'år',
mo: function (c) { return 'måned' + (c === 1 ? '' : 'er') },
w: function (c) { return 'uke' + (c === 1 ? '' : 'r') },
d: function (c) { return 'dag' + (c === 1 ? '' : 'er') },
h: function (c) { return 'time' + (c === 1 ? '' : 'r') },
m: function (c) { return 'minutt' + (c === 1 ? '' : 'er') },
s: function (c) { return 'sekund' + (c === 1 ? '' : 'er') },
ms: function (c) { return 'millisekund' + (c === 1 ? '' : 'er') },
decimal: ','
},
pl: {
y: function (c) { return ['rok', 'roku', 'lata', 'lat'][getPolishForm(c)] },
mo: function (c) { return ['miesiąc', 'miesiąca', 'miesiące', 'miesięcy'][getPolishForm(c)] },
w: function (c) { return ['tydzień', 'tygodnia', 'tygodnie', 'tygodni'][getPolishForm(c)] },
d: function (c) { return ['dzień', 'dnia', 'dni', 'dni'][getPolishForm(c)] },
h: function (c) { return ['godzina', 'godziny', 'godziny', 'godzin'][getPolishForm(c)] },
m: function (c) { return ['minuta', 'minuty', 'minuty', 'minut'][getPolishForm(c)] },
s: function (c) { return ['sekunda', 'sekundy', 'sekundy', 'sekund'][getPolishForm(c)] },
ms: function (c) { return ['milisekunda', 'milisekundy', 'milisekundy', 'milisekund'][getPolishForm(c)] },
decimal: ','
},
pt: {
y: function (c) { return 'ano' + (c === 1 ? '' : 's') },
mo: function (c) { return c === 1 ? 'mês' : 'meses' },
w: function (c) { return 'semana' + (c === 1 ? '' : 's') },
d: function (c) { return 'dia' + (c === 1 ? '' : 's') },
h: function (c) { return 'hora' + (c === 1 ? '' : 's') },
m: function (c) { return 'minuto' + (c === 1 ? '' : 's') },
s: function (c) { return 'segundo' + (c === 1 ? '' : 's') },
ms: function (c) { return 'milissegundo' + (c === 1 ? '' : 's') },
decimal: ','
},
ro: {
y: function (c) { return c === 1 ? 'an' : 'ani' },
mo: function (c) { return c === 1 ? 'lună' : 'luni' },
w: function (c) { return c === 1 ? 'săptămână' : 'săptămâni' },
d: function (c) { return c === 1 ? 'zi' : 'zile' },
h: function (c) { return c === 1 ? 'oră' : 'ore' },
m: function (c) { return c === 1 ? 'minut' : 'minute' },
s: function (c) { return c === 1 ? 'secundă' : 'secunde' },
ms: function (c) { return c === 1 ? 'milisecundă' : 'milisecunde' },
decimal: ','
},
ru: {
y: function (c) { return ['лет', 'год', 'года'][getSlavicForm(c)] },
mo: function (c) { return ['месяцев', 'месяц', 'месяца'][getSlavicForm(c)] },
w: function (c) { return ['недель', 'неделя', 'недели'][getSlavicForm(c)] },
d: function (c) { return ['дней', 'день', 'дня'][getSlavicForm(c)] },
h: function (c) { return ['часов', 'час', 'часа'][getSlavicForm(c)] },
m: function (c) { return ['минут', 'минута', 'минуты'][getSlavicForm(c)] },
s: function (c) { return ['секунд', 'секунда', 'секунды'][getSlavicForm(c)] },
ms: function (c) { return ['миллисекунд', 'миллисекунда', 'миллисекунды'][getSlavicForm(c)] },
decimal: ','
},
uk: {
y: function (c) { return ['років', 'рік', 'роки'][getSlavicForm(c)] },
mo: function (c) { return ['місяців', 'місяць', 'місяці'][getSlavicForm(c)] },
w: function (c) { return ['тижнів', 'тиждень', 'тижні'][getSlavicForm(c)] },
d: function (c) { return ['днів', 'день', 'дні'][getSlavicForm(c)] },
h: function (c) { return ['годин', 'година', 'години'][getSlavicForm(c)] },
m: function (c) { return ['хвилин', 'хвилина', 'хвилини'][getSlavicForm(c)] },
s: function (c) { return ['секунд', 'секунда', 'секунди'][getSlavicForm(c)] },
ms: function (c) { return ['мілісекунд', 'мілісекунда', 'мілісекунди'][getSlavicForm(c)] },
decimal: ','
},
ur: {
y: 'سال',
mo: function (c) { return c === 1 ? 'مہینہ' : 'مہینے' },
w: function (c) { return c === 1 ? 'ہفتہ' : 'ہفتے' },
d: 'دن',
h: function (c) { return c === 1 ? 'گھنٹہ' : 'گھنٹے' },
m: 'منٹ',
s: 'سیکنڈ',
ms: 'ملی سیکنڈ',
decimal: '.'
},
sk: {
y: function (c) { return ['rok', 'roky', 'roky', 'rokov'][getCzechOrSlovakForm(c)] },
mo: function (c) { return ['mesiac', 'mesiace', 'mesiace', 'mesiacov'][getCzechOrSlovakForm(c)] },
w: function (c) { return ['týždeň', 'týždne', 'týždne', 'týždňov'][getCzechOrSlovakForm(c)] },
d: function (c) { return ['deň', 'dni', 'dni', 'dní'][getCzechOrSlovakForm(c)] },
h: function (c) { return ['hodina', 'hodiny', 'hodiny', 'hodín'][getCzechOrSlovakForm(c)] },
m: function (c) { return ['minúta', 'minúty', 'minúty', 'minút'][getCzechOrSlovakForm(c)] },
s: function (c) { return ['sekunda', 'sekundy', 'sekundy', 'sekúnd'][getCzechOrSlovakForm(c)] },
ms: function (c) { return ['milisekunda', 'milisekundy', 'milisekundy', 'milisekúnd'][getCzechOrSlovakForm(c)] },
decimal: ','
},
sv: {
y: 'år',
mo: function (c) { return 'månad' + (c === 1 ? '' : 'er') },
w: function (c) { return 'veck' + (c === 1 ? 'a' : 'or') },
d: function (c) { return 'dag' + (c === 1 ? '' : 'ar') },
h: function (c) { return 'timm' + (c === 1 ? 'e' : 'ar') },
m: function (c) { return 'minut' + (c === 1 ? '' : 'er') },
s: function (c) { return 'sekund' + (c === 1 ? '' : 'er') },
ms: function (c) { return 'millisekund' + (c === 1 ? '' : 'er') },
decimal: ','
},
sw: {
y: function (c) { return c === 1 ? 'mwaka' : 'miaka' },
mo: function (c) { return c === 1 ? 'mwezi' : 'miezi' },
w: 'wiki',
d: function (c) { return c === 1 ? 'siku' : 'masiku' },
h: function (c) { return c === 1 ? 'saa' : 'masaa' },
m: 'dakika',
s: 'sekunde',
ms: 'milisekunde',
decimal: '.'
},
tr: {
y: 'yıl',
mo: 'ay',
w: 'hafta',
d: 'gün',
h: 'saat',
m: 'dakika',
s: 'saniye',
ms: 'milisaniye',
decimal: ','
},
th: {
y: 'ปี',
mo: 'เดือน',
w: 'อาทิตย์',
d: 'วัน',
h: 'ชั่วโมง',
m: 'นาที',
s: 'วินาที',
ms: 'มิลลิวินาที',
decimal: '.'
},
vi: {
y: 'năm',
mo: 'tháng',
w: 'tuần',
d: 'ngày',
h: 'giờ',
m: 'phút',
s: 'giây',
ms: 'mili giây',
decimal: ','
},
zh_CN: {
y: '年',
mo: '个月',
w: '周',
d: '天',
h: '小时',
m: '分钟',
s: '秒',
ms: '毫秒',
decimal: '.'
},
zh_TW: {
y: '年',
mo: '個月',
w: '周',
d: '天',
h: '小時',
m: '分鐘',
s: '秒',
ms: '毫秒',
decimal: '.'
}
}
// You can create a humanizer, which returns a function with default
// parameters.
function humanizer (passedOptions) {
var result = function humanizer (ms, humanizerOptions) {
var options = extend({}, result, humanizerOptions || {})
return doHumanization(ms, options)
}
return extend(result, {
language: 'en',
delimiter: ', ',
spacer: ' ',
conjunction: '',
serialComma: true,
units: ['y', 'mo', 'w', 'd', 'h', 'm', 's'],
languages: {},
round: false,
unitMeasures: {
y: 31557600000,
mo: 2629800000,
w: 604800000,
d: 86400000,
h: 3600000,
m: 60000,
s: 1000,
ms: 1
}
}, passedOptions)
}
// The main function is just a wrapper around a default humanizer.
var humanizeDuration = humanizer({})
// Build dictionary from options
function getDictionary (options) {
var languagesFromOptions = [options.language]
if (has(options, 'fallbacks')) {
if (isArray(options.fallbacks) && options.fallbacks.length) {
languagesFromOptions = languagesFromOptions.concat(options.fallbacks)
} else {
throw new Error('fallbacks must be an array with at least one element')
}
}
for (var i = 0; i < languagesFromOptions.length; i++) {
var languageToTry = languagesFromOptions[i]
if (has(options.languages, languageToTry)) {
return options.languages[languageToTry]
} else if (has(languages, languageToTry)) {
return languages[languageToTry]
}
}
throw new Error('No language found.')
}
// doHumanization does the bulk of the work.
function doHumanization (ms, options) {
var i, len, piece
// Make sure we have a positive number.
// Has the nice sideffect of turning Number objects into primitives.
ms = Math.abs(ms)
var dictionary = getDictionary(options)
var pieces = []
// Start at the top and keep removing units, bit by bit.
var unitName, unitMS, unitCount
for (i = 0, len = options.units.length; i < len; i++) {
unitName = options.units[i]
unitMS = options.unitMeasures[unitName]
// What's the number of full units we can fit?
if (i + 1 === len) {
if (has(options, 'maxDecimalPoints')) {
// We need to use this expValue to avoid rounding functionality of toFixed call
var expValue = Math.pow(10, options.maxDecimalPoints)
var unitCountFloat = (ms / unitMS)
unitCount = parseFloat((Math.floor(expValue * unitCountFloat) / expValue).toFixed(options.maxDecimalPoints))
} else {
unitCount = ms / unitMS
}
} else {
unitCount = Math.floor(ms / unitMS)
}
// Add the string.
pieces.push({
unitCount: unitCount,
unitName: unitName
})
// Remove what we just figured out.
ms -= unitCount * unitMS
}
var firstOccupiedUnitIndex = 0
for (i = 0; i < pieces.length; i++) {
if (pieces[i].unitCount) {
firstOccupiedUnitIndex = i
break
}
}
if (options.round) {
var ratioToLargerUnit, previousPiece
for (i = pieces.length - 1; i >= 0; i--) {
piece = pieces[i]
piece.unitCount = Math.round(piece.unitCount)
if (i === 0) { break }
previousPiece = pieces[i - 1]
ratioToLargerUnit = options.unitMeasures[previousPiece.unitName] / options.unitMeasures[piece.unitName]
if ((piece.unitCount % ratioToLargerUnit) === 0 || (options.largest && ((options.largest - 1) < (i - firstOccupiedUnitIndex)))) {
previousPiece.unitCount += piece.unitCount / ratioToLargerUnit
piece.unitCount = 0
}
}
}
var result = []
for (i = 0, pieces.length; i < len; i++) {
piece = pieces[i]
if (piece.unitCount) {
result.push(render(piece.unitCount, piece.unitName, dictionary, options))
}
if (result.length === options.largest) { break }
}
if (result.length) {
if (!options.conjunction || result.length === 1) {
return result.join(options.delimiter)
} else if (result.length === 2) {
return result.join(options.conjunction)
} else if (result.length > 2) {
return result.slice(0, -1).join(options.delimiter) + (options.serialComma ? ',' : '') + options.conjunction + result.slice(-1)
}
} else {
return render(0, options.units[options.units.length - 1], dictionary, options)
}
}
function render (count, type, dictionary, options) {
var decimal
if (has(options, 'decimal')) {
decimal = options.decimal
} else if (has(dictionary, 'decimal')) {
decimal = dictionary.decimal
} else {
decimal = '.'
}
var countStr = count.toString().replace('.', decimal)
var dictionaryValue = dictionary[type]
var word
if (typeof dictionaryValue === 'function') {
word = dictionaryValue(count)
} else {
word = dictionaryValue
}
return countStr + options.spacer + word
}
function extend (destination) {
var source
for (var i = 1; i < arguments.length; i++) {
source = arguments[i]
for (var prop in source) {
if (has(source, prop)) {
destination[prop] = source[prop]
}
}
}
return destination
}
// Internal helper function for Polish language.
function getPolishForm (c) {
if (c === 1) {
return 0
} else if (Math.floor(c) !== c) {
return 1
} else if (c % 10 >= 2 && c % 10 <= 4 && !(c % 100 > 10 && c % 100 < 20)) {
return 2
} else {
return 3
}
}
// Internal helper function for Russian and Ukranian languages.
function getSlavicForm (c) {
if (Math.floor(c) !== c) {
return 2
} else if ((c % 100 >= 5 && c % 100 <= 20) || (c % 10 >= 5 && c % 10 <= 9) || c % 10 === 0) {
return 0
} else if (c % 10 === 1) {
return 1
} else if (c > 1) {
return 2
} else {
return 0
}
}
// Internal helper function for Slovak language.
function getCzechOrSlovakForm (c) {
if (c === 1) {
return 0
} else if (Math.floor(c) !== c) {
return 1
} else if (c % 10 >= 2 && c % 10 <= 4 && c % 100 < 10) {
return 2
} else {
return 3
}
}
// Internal helper function for Lithuanian language.
function getLithuanianForm (c) {
if (c === 1 || (c % 10 === 1 && c % 100 > 20)) {
return 0
} else if (Math.floor(c) !== c || (c % 10 >= 2 && c % 100 > 20) || (c % 10 >= 2 && c % 100 < 10)) {
return 1
} else {
return 2
}
}
// Internal helper function for Latvian language.
function getLatvianForm (c) {
if (c === 1 || (c % 10 === 1 && c % 100 !== 11)) {
return 0
} else {
return 1
}
}
// Internal helper function for Arabic language.
function getArabicForm (c) {
if (c <= 2) { return 0 }
if (c > 2 && c < 11) { return 1 }
return 0
}
// We need to make sure we support browsers that don't have
// `Array.isArray`, so we define a fallback here.
var isArray = Array.isArray || function (arg) {
return Object.prototype.toString.call(arg) === '[object Array]'
}
function has (obj, key) {
return Object.prototype.hasOwnProperty.call(obj, key)
}
humanizeDuration.getSupportedLanguages = function getSupportedLanguages () {
var result = []
for (var language in languages) {
if (has(languages, language) && language !== 'gr') {
result.push(language)
}
}
return result
}
humanizeDuration.humanizer = humanizer
if (typeof define === 'function' && define.amd) {
define(function () {
return humanizeDuration
})
} else if (typeof module !== 'undefined' && module.exports) {
module.exports = humanizeDuration
} else {
this.humanizeDuration = humanizeDuration
}
})(); // eslint-disable-line semi