@hebcal/core 3.50.3 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -383
- package/dist/bundle.js +368 -835
- package/dist/bundle.min.js +2 -2
- package/dist/greg0.mjs +1 -1
- package/dist/hdate-bundle.js +28 -9
- package/dist/hdate-bundle.min.js +2 -2
- package/dist/hdate.js +28 -10
- package/dist/hdate.mjs +29 -10
- package/dist/hdate0-bundle.js +19 -5
- package/dist/hdate0-bundle.min.js +2 -2
- package/dist/hdate0.mjs +20 -5
- package/dist/index.js +181 -666
- package/dist/index.mjs +181 -657
- package/hebcal.d.ts +18 -103
- package/package.json +12 -12
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @hebcal/core
|
|
1
|
+
/*! @hebcal/core v4.0.0 */
|
|
2
2
|
/*
|
|
3
3
|
* More minimal greg routines
|
|
4
4
|
*/
|
|
@@ -432,7 +432,7 @@ class Locale {
|
|
|
432
432
|
/**
|
|
433
433
|
* Register locale translations.
|
|
434
434
|
* @param {string} locale Locale name (i.e.: `'he'`, `'fr'`)
|
|
435
|
-
* @param {
|
|
435
|
+
* @param {LocaleData} data parsed data from a `.po` file.
|
|
436
436
|
*/
|
|
437
437
|
static addLocale(locale, data) {
|
|
438
438
|
if (typeof data.contexts !== 'object' || typeof data.contexts[''] !== 'object') {
|
|
@@ -595,6 +595,17 @@ const EPOCH = -1373428;
|
|
|
595
595
|
// Avg year length in the cycle (19 solar years with 235 lunar months)
|
|
596
596
|
const AVG_HEBYEAR_DAYS = 365.24682220597794;
|
|
597
597
|
|
|
598
|
+
/**
|
|
599
|
+
* @private
|
|
600
|
+
* @param {any} n
|
|
601
|
+
* @param {string} name
|
|
602
|
+
*/
|
|
603
|
+
function assertNumber(n, name) {
|
|
604
|
+
if (typeof n !== 'number' || isNaN(n)) {
|
|
605
|
+
throw new TypeError(`invalid parameter '${name}' not a number: ${n}`);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
|
|
598
609
|
/**
|
|
599
610
|
* Converts Hebrew date to R.D. (Rata Die) fixed days.
|
|
600
611
|
* R.D. 1 is the imaginary date Monday, January 1, 1 on the Gregorian
|
|
@@ -606,6 +617,9 @@ const AVG_HEBYEAR_DAYS = 365.24682220597794;
|
|
|
606
617
|
* @return {number}
|
|
607
618
|
*/
|
|
608
619
|
function hebrew2abs(year, month, day) {
|
|
620
|
+
assertNumber(year, 'year');
|
|
621
|
+
assertNumber(month, 'month');
|
|
622
|
+
assertNumber(day, 'day');
|
|
609
623
|
if (year < 1) {
|
|
610
624
|
throw new RangeError(`hebrew2abs: invalid year ${year}`);
|
|
611
625
|
}
|
|
@@ -641,9 +655,7 @@ function newYear(year) {
|
|
|
641
655
|
* @return {SimpleHebrewDate}
|
|
642
656
|
*/
|
|
643
657
|
function abs2hebrew(abs) {
|
|
644
|
-
|
|
645
|
-
throw new TypeError(`invalid parameter to abs2hebrew ${abs}`);
|
|
646
|
-
}
|
|
658
|
+
assertNumber(abs, 'abs');
|
|
647
659
|
abs = Math.trunc(abs);
|
|
648
660
|
if (abs <= EPOCH) {
|
|
649
661
|
throw new RangeError(`abs2hebrew: ${abs} is before epoch`);
|
|
@@ -718,7 +730,9 @@ function daysInMonth(month, year) {
|
|
|
718
730
|
* @return {string}
|
|
719
731
|
*/
|
|
720
732
|
function getMonthName(month, year) {
|
|
721
|
-
|
|
733
|
+
assertNumber(month, 'month');
|
|
734
|
+
assertNumber(year, 'year');
|
|
735
|
+
if (month < 1 || month > 14) {
|
|
722
736
|
throw new TypeError(`bad month argument ${month}`);
|
|
723
737
|
}
|
|
724
738
|
return monthNames[+isLeapYear(year)][month];
|
|
@@ -1144,11 +1158,13 @@ class HDate {
|
|
|
1144
1158
|
* import {HDate, months} from '@hebcal/core';
|
|
1145
1159
|
* const hd = new HDate(15, months.CHESHVAN, 5769);
|
|
1146
1160
|
* console.log(hd.renderGematriya()); // 'ט״ו חֶשְׁוָן תשס״ט'
|
|
1161
|
+
* @param {boolean} [suppressNikud]
|
|
1147
1162
|
* @return {string}
|
|
1148
1163
|
*/
|
|
1149
|
-
renderGematriya() {
|
|
1164
|
+
renderGematriya(suppressNikud = false) {
|
|
1150
1165
|
const d = this.getDate();
|
|
1151
|
-
const
|
|
1166
|
+
const locale = suppressNikud ? 'he-x-NoNikud' : 'he';
|
|
1167
|
+
const m = Locale.gettext(this.getMonthName(), locale);
|
|
1152
1168
|
const y = this.getFullYear();
|
|
1153
1169
|
return gematriya(d) + ' ' + m + ' ' + gematriya(y);
|
|
1154
1170
|
}
|
|
@@ -1699,6 +1715,9 @@ const flags = {
|
|
|
1699
1715
|
/** Nach Yomi */
|
|
1700
1716
|
NACH_YOMI: 0x2000000
|
|
1701
1717
|
};
|
|
1718
|
+
const flagToCategory = [[flags.MAJOR_FAST, 'holiday', 'major', 'fast'], [flags.CHANUKAH_CANDLES, 'holiday', 'major'], [flags.HEBREW_DATE, 'hebdate'], [flags.MINOR_FAST, 'holiday', 'fast'], [flags.MINOR_HOLIDAY, 'holiday', 'minor'], [flags.MODERN_HOLIDAY, 'holiday', 'modern'], [flags.MOLAD, 'molad'], [flags.OMER_COUNT, 'omer'], [flags.PARSHA_HASHAVUA, 'parashat'],
|
|
1719
|
+
// backwards-compat
|
|
1720
|
+
[flags.ROSH_CHODESH, 'roshchodesh'], [flags.SHABBAT_MEVARCHIM, 'mevarchim'], [flags.SPECIAL_SHABBAT, 'holiday', 'shabbat'], [flags.USER_EVENT, 'user']];
|
|
1702
1721
|
|
|
1703
1722
|
/** Represents an Event with a title, date, and flags */
|
|
1704
1723
|
class Event {
|
|
@@ -1846,8 +1865,21 @@ class Event {
|
|
|
1846
1865
|
}
|
|
1847
1866
|
return ev;
|
|
1848
1867
|
}
|
|
1868
|
+
/**
|
|
1869
|
+
* Returns a list of event categories
|
|
1870
|
+
* @return {string[]}
|
|
1871
|
+
*/
|
|
1872
|
+
getCategories() {
|
|
1873
|
+
const mask = this.getFlags();
|
|
1874
|
+
for (let i = 0; i < flagToCategory.length; i++) {
|
|
1875
|
+
const attrs = flagToCategory[i];
|
|
1876
|
+
if (mask & attrs[0]) {
|
|
1877
|
+
return attrs.slice(1);
|
|
1878
|
+
}
|
|
1879
|
+
}
|
|
1880
|
+
return ['unknown'];
|
|
1881
|
+
}
|
|
1849
1882
|
}
|
|
1850
|
-
const KEYCAP_DIGITS = ['0️⃣', '1️⃣', '2️⃣', '3️⃣', '4️⃣', '5️⃣', '6️⃣', '7️⃣', '8️⃣', '9️⃣'];
|
|
1851
1883
|
|
|
1852
1884
|
/** Daily Hebrew date ("11th of Sivan, 5780") */
|
|
1853
1885
|
class HebrewDateEvent extends Event {
|
|
@@ -3097,6 +3129,22 @@ class TimedEvent extends Event {
|
|
|
3097
3129
|
renderBrief(locale) {
|
|
3098
3130
|
return Locale.gettext(this.getDesc(), locale);
|
|
3099
3131
|
}
|
|
3132
|
+
/** @return {string[]} */
|
|
3133
|
+
getCategories() {
|
|
3134
|
+
const desc = this.getDesc();
|
|
3135
|
+
switch (desc) {
|
|
3136
|
+
// LIGHT_CANDLES or LIGHT_CANDLES_TZEIS
|
|
3137
|
+
case 'Candle lighting':
|
|
3138
|
+
return ['candles'];
|
|
3139
|
+
// YOM_TOV_ENDS
|
|
3140
|
+
case 'Havdalah':
|
|
3141
|
+
return ['havdalah'];
|
|
3142
|
+
// flags.MINOR_FAST or flags.MAJOR_FAST
|
|
3143
|
+
case 'Fast begins':
|
|
3144
|
+
case 'Fast ends':
|
|
3145
|
+
return ['zmanim', 'fast'];
|
|
3146
|
+
}
|
|
3147
|
+
}
|
|
3100
3148
|
}
|
|
3101
3149
|
|
|
3102
3150
|
/** Havdalah after Shabbat or holiday */
|
|
@@ -3521,173 +3569,6 @@ function getTodayIsHe(omer) {
|
|
|
3521
3569
|
return str.normalize();
|
|
3522
3570
|
}
|
|
3523
3571
|
|
|
3524
|
-
/* eslint-disable no-multi-spaces */
|
|
3525
|
-
const osdate = new Date(1923, 8, 11);
|
|
3526
|
-
const osday = greg2abs(osdate);
|
|
3527
|
-
const nsday = greg2abs(new Date(1975, 5, 24));
|
|
3528
|
-
const shas0 = [['Berachot', 64], ['Shabbat', 157], ['Eruvin', 105], ['Pesachim', 121], ['Shekalim', 22], ['Yoma', 88], ['Sukkah', 56], ['Beitzah', 40], ['Rosh Hashana', 35], ['Taanit', 31], ['Megillah', 32], ['Moed Katan', 29], ['Chagigah', 27], ['Yevamot', 122], ['Ketubot', 112], ['Nedarim', 91], ['Nazir', 66], ['Sotah', 49], ['Gitin', 90], ['Kiddushin', 82], ['Baba Kamma', 119], ['Baba Metzia', 119], ['Baba Batra', 176], ['Sanhedrin', 113], ['Makkot', 24], ['Shevuot', 49], ['Avodah Zarah', 76], ['Horayot', 14], ['Zevachim', 120], ['Menachot', 110], ['Chullin', 142], ['Bechorot', 61], ['Arachin', 34], ['Temurah', 34], ['Keritot', 28], ['Meilah', 22], ['Kinnim', 4], ['Tamid', 9], ['Midot', 5], ['Niddah', 73]].map(m => {
|
|
3529
|
-
return {
|
|
3530
|
-
name: m[0],
|
|
3531
|
-
blatt: m[1]
|
|
3532
|
-
};
|
|
3533
|
-
});
|
|
3534
|
-
|
|
3535
|
-
/**
|
|
3536
|
-
* Returns the Daf Yomi for given date
|
|
3537
|
-
*/
|
|
3538
|
-
class DafYomi {
|
|
3539
|
-
/**
|
|
3540
|
-
* Initializes a daf yomi instance
|
|
3541
|
-
* @param {Date|HDate|number} gregdate Gregorian date
|
|
3542
|
-
*/
|
|
3543
|
-
constructor(gregdate) {
|
|
3544
|
-
const cday = typeof gregdate === 'number' && !isNaN(gregdate) ? gregdate : isDate(gregdate) ? greg2abs(gregdate) : HDate.isHDate(gregdate) ? gregdate.abs() : throwTypeError(`non-date given to dafyomi: ${gregdate}`);
|
|
3545
|
-
if (cday < osday) {
|
|
3546
|
-
throw new RangeError(`Date ${gregdate} too early; Daf Yomi cycle began on ${osdate}`);
|
|
3547
|
-
}
|
|
3548
|
-
let cno;
|
|
3549
|
-
let dno;
|
|
3550
|
-
if (cday >= nsday) {
|
|
3551
|
-
// "new" cycle
|
|
3552
|
-
cno = 8 + Math.floor((cday - nsday) / 2711);
|
|
3553
|
-
dno = (cday - nsday) % 2711;
|
|
3554
|
-
} else {
|
|
3555
|
-
// old cycle
|
|
3556
|
-
cno = 1 + Math.floor((cday - osday) / 2702);
|
|
3557
|
-
dno = (cday - osday) % 2702;
|
|
3558
|
-
}
|
|
3559
|
-
|
|
3560
|
-
// Find the daf taking note that the cycle changed slightly after cycle 7.
|
|
3561
|
-
|
|
3562
|
-
let total = 0;
|
|
3563
|
-
let blatt = 0;
|
|
3564
|
-
let count = -1;
|
|
3565
|
-
|
|
3566
|
-
// Fix Shekalim for old cycles
|
|
3567
|
-
const shortShekalim = cno <= 7;
|
|
3568
|
-
const shas = shortShekalim ? shas0.slice() : shas0;
|
|
3569
|
-
if (shortShekalim) {
|
|
3570
|
-
shas[4] = {
|
|
3571
|
-
name: 'Shekalim',
|
|
3572
|
-
blatt: 13
|
|
3573
|
-
};
|
|
3574
|
-
}
|
|
3575
|
-
|
|
3576
|
-
// Find the daf
|
|
3577
|
-
let j = 0;
|
|
3578
|
-
const dafcnt = 40;
|
|
3579
|
-
while (j < dafcnt) {
|
|
3580
|
-
count++;
|
|
3581
|
-
total = total + shas[j].blatt - 1;
|
|
3582
|
-
if (dno < total) {
|
|
3583
|
-
blatt = shas[j].blatt + 1 - (total - dno);
|
|
3584
|
-
// fiddle with the weird ones near the end
|
|
3585
|
-
switch (count) {
|
|
3586
|
-
case 36:
|
|
3587
|
-
blatt = blatt + 21;
|
|
3588
|
-
break;
|
|
3589
|
-
case 37:
|
|
3590
|
-
blatt = blatt + 24;
|
|
3591
|
-
break;
|
|
3592
|
-
case 38:
|
|
3593
|
-
blatt = blatt + 32;
|
|
3594
|
-
break;
|
|
3595
|
-
}
|
|
3596
|
-
// Bailout
|
|
3597
|
-
j = 1 + dafcnt;
|
|
3598
|
-
}
|
|
3599
|
-
j++;
|
|
3600
|
-
}
|
|
3601
|
-
this.name = shas[count].name;
|
|
3602
|
-
this.blatt = blatt;
|
|
3603
|
-
}
|
|
3604
|
-
/**
|
|
3605
|
-
* @return {number}
|
|
3606
|
-
*/
|
|
3607
|
-
getBlatt() {
|
|
3608
|
-
return this.blatt;
|
|
3609
|
-
}
|
|
3610
|
-
/**
|
|
3611
|
-
* @return {string}
|
|
3612
|
-
*/
|
|
3613
|
-
getName() {
|
|
3614
|
-
return this.name;
|
|
3615
|
-
}
|
|
3616
|
-
/**
|
|
3617
|
-
* Formats (with translation) the dafyomi result as a string like "Pesachim 34"
|
|
3618
|
-
* @param {string} [locale] Optional locale name (defaults to active locale).
|
|
3619
|
-
* @return {string}
|
|
3620
|
-
*/
|
|
3621
|
-
render(locale) {
|
|
3622
|
-
locale = locale || Locale.getLocaleName();
|
|
3623
|
-
if (typeof locale === 'string') {
|
|
3624
|
-
locale = locale.toLowerCase();
|
|
3625
|
-
}
|
|
3626
|
-
if (locale === 'he' || locale === 'he-x-nonikud') {
|
|
3627
|
-
return Locale.gettext(this.name, locale) + ' דף ' + gematriya(this.blatt);
|
|
3628
|
-
}
|
|
3629
|
-
return Locale.gettext(this.name, locale) + ' ' + this.blatt;
|
|
3630
|
-
}
|
|
3631
|
-
}
|
|
3632
|
-
const dafYomiSefaria = {
|
|
3633
|
-
'Berachot': 'Berakhot',
|
|
3634
|
-
'Rosh Hashana': 'Rosh Hashanah',
|
|
3635
|
-
'Gitin': 'Gittin',
|
|
3636
|
-
'Baba Kamma': 'Bava Kamma',
|
|
3637
|
-
'Baba Metzia': 'Bava Metzia',
|
|
3638
|
-
'Baba Batra': 'Bava Batra',
|
|
3639
|
-
'Bechorot': 'Bekhorot',
|
|
3640
|
-
'Arachin': 'Arakhin',
|
|
3641
|
-
'Midot': 'Middot',
|
|
3642
|
-
'Shekalim': 'Jerusalem_Talmud_Shekalim'
|
|
3643
|
-
};
|
|
3644
|
-
|
|
3645
|
-
/**
|
|
3646
|
-
* Event wrapper around a DafYomi instance
|
|
3647
|
-
*/
|
|
3648
|
-
class DafYomiEvent extends Event {
|
|
3649
|
-
/**
|
|
3650
|
-
* @param {HDate} date
|
|
3651
|
-
*/
|
|
3652
|
-
constructor(date) {
|
|
3653
|
-
const daf = new DafYomi(date.greg());
|
|
3654
|
-
super(date, daf.render('en'), flags.DAF_YOMI);
|
|
3655
|
-
this.daf = daf;
|
|
3656
|
-
}
|
|
3657
|
-
/**
|
|
3658
|
-
* Returns Daf Yomi name including the 'Daf Yomi: ' prefix (e.g. "Daf Yomi: Pesachim 107").
|
|
3659
|
-
* @param {string} [locale] Optional locale name (defaults to active locale).
|
|
3660
|
-
* @return {string}
|
|
3661
|
-
*/
|
|
3662
|
-
render(locale) {
|
|
3663
|
-
return Locale.gettext('Daf Yomi', locale) + ': ' + this.daf.render(locale);
|
|
3664
|
-
}
|
|
3665
|
-
/**
|
|
3666
|
-
* Returns Daf Yomi name without the 'Daf Yomi: ' prefix (e.g. "Pesachim 107").
|
|
3667
|
-
* @param {string} [locale] Optional locale name (defaults to active locale).
|
|
3668
|
-
* @return {string}
|
|
3669
|
-
*/
|
|
3670
|
-
renderBrief(locale) {
|
|
3671
|
-
return this.daf.render(locale);
|
|
3672
|
-
}
|
|
3673
|
-
/**
|
|
3674
|
-
* Returns a link to sefaria.org or dafyomi.org
|
|
3675
|
-
* @return {string}
|
|
3676
|
-
*/
|
|
3677
|
-
url() {
|
|
3678
|
-
const daf = this.daf;
|
|
3679
|
-
const tractate = daf.getName();
|
|
3680
|
-
const blatt = daf.getBlatt();
|
|
3681
|
-
if (tractate == 'Kinnim' || tractate == 'Midot') {
|
|
3682
|
-
return `https://www.dafyomi.org/index.php?masechta=meilah&daf=${blatt}a`;
|
|
3683
|
-
} else {
|
|
3684
|
-
const name0 = dafYomiSefaria[tractate] || tractate;
|
|
3685
|
-
const name = name0.replace(/ /g, '_');
|
|
3686
|
-
return `https://www.sefaria.org/${name}.${blatt}a?lang=bi`;
|
|
3687
|
-
}
|
|
3688
|
-
}
|
|
3689
|
-
}
|
|
3690
|
-
|
|
3691
3572
|
/* eslint-disable new-cap */
|
|
3692
3573
|
const INCOMPLETE = 0;
|
|
3693
3574
|
const REGULAR = 1;
|
|
@@ -4117,10 +3998,10 @@ class ParshaEvent extends Event {
|
|
|
4117
3998
|
}
|
|
4118
3999
|
}
|
|
4119
4000
|
|
|
4120
|
-
const SUN$
|
|
4001
|
+
const SUN$1 = 0;
|
|
4121
4002
|
const TUE$1 = 2;
|
|
4122
4003
|
const FRI$2 = 5;
|
|
4123
|
-
const SAT$
|
|
4004
|
+
const SAT$2 = 6;
|
|
4124
4005
|
const NISAN$3 = months.NISAN;
|
|
4125
4006
|
const IYYAR = months.IYYAR;
|
|
4126
4007
|
|
|
@@ -4142,7 +4023,7 @@ function dateYomHaShoah(year) {
|
|
|
4142
4023
|
let nisan27dt = new HDate(27, NISAN$3, year);
|
|
4143
4024
|
if (nisan27dt.getDay() === FRI$2) {
|
|
4144
4025
|
nisan27dt = new HDate(26, NISAN$3, year);
|
|
4145
|
-
} else if (nisan27dt.getDay() === SUN$
|
|
4026
|
+
} else if (nisan27dt.getDay() === SUN$1) {
|
|
4146
4027
|
nisan27dt = new HDate(28, NISAN$3, year);
|
|
4147
4028
|
}
|
|
4148
4029
|
return nisan27dt;
|
|
@@ -4161,9 +4042,9 @@ function dateYomHaZikaron(year) {
|
|
|
4161
4042
|
let day;
|
|
4162
4043
|
const pesach = new HDate(15, NISAN$3, year);
|
|
4163
4044
|
const pdow = pesach.getDay();
|
|
4164
|
-
if (pdow === SUN$
|
|
4045
|
+
if (pdow === SUN$1) {
|
|
4165
4046
|
day = 2;
|
|
4166
|
-
} else if (pdow === SAT$
|
|
4047
|
+
} else if (pdow === SAT$2) {
|
|
4167
4048
|
day = 3;
|
|
4168
4049
|
} else if (year < 5764) {
|
|
4169
4050
|
day = 4;
|
|
@@ -4649,6 +4530,29 @@ class HolidayEvent extends Event {
|
|
|
4649
4530
|
return '✡️';
|
|
4650
4531
|
}
|
|
4651
4532
|
}
|
|
4533
|
+
/** @return {string[]} */
|
|
4534
|
+
getCategories() {
|
|
4535
|
+
const cats = super.getCategories();
|
|
4536
|
+
if (cats[0] !== 'unknown') {
|
|
4537
|
+
return cats;
|
|
4538
|
+
}
|
|
4539
|
+
const desc = this.getDesc();
|
|
4540
|
+
// Don't depend on flags.MINOR_HOLIDAY always being set
|
|
4541
|
+
switch (desc) {
|
|
4542
|
+
case 'Lag BaOmer':
|
|
4543
|
+
case 'Leil Selichot':
|
|
4544
|
+
case 'Pesach Sheni':
|
|
4545
|
+
case 'Erev Purim':
|
|
4546
|
+
case 'Purim Katan':
|
|
4547
|
+
case 'Shushan Purim':
|
|
4548
|
+
case 'Tu B\'Av':
|
|
4549
|
+
case 'Tu BiShvat':
|
|
4550
|
+
case 'Rosh Hashana LaBehemot':
|
|
4551
|
+
return ['holiday', 'minor'];
|
|
4552
|
+
default:
|
|
4553
|
+
return ['holiday', 'major'];
|
|
4554
|
+
}
|
|
4555
|
+
}
|
|
4652
4556
|
}
|
|
4653
4557
|
const roshChodeshStr = 'Rosh Chodesh';
|
|
4654
4558
|
|
|
@@ -4796,13 +4700,13 @@ class YomKippurKatanEvent extends HolidayEvent {
|
|
|
4796
4700
|
return undefined;
|
|
4797
4701
|
}
|
|
4798
4702
|
}
|
|
4799
|
-
const SUN
|
|
4703
|
+
const SUN = 0;
|
|
4800
4704
|
// const MON = 1;
|
|
4801
4705
|
const TUE = 2;
|
|
4802
4706
|
// const WED = 3;
|
|
4803
4707
|
const THU = 4;
|
|
4804
4708
|
const FRI$1 = 5;
|
|
4805
|
-
const SAT$
|
|
4709
|
+
const SAT$1 = 6;
|
|
4806
4710
|
const NISAN$2 = months.NISAN;
|
|
4807
4711
|
// const IYYAR = months.IYYAR;
|
|
4808
4712
|
// const SIVAN = months.SIVAN;
|
|
@@ -4887,6 +4791,7 @@ const emojiIsraelFlag = {
|
|
|
4887
4791
|
};
|
|
4888
4792
|
const chanukahEmoji = '🕎';
|
|
4889
4793
|
const yearCache = Object.create(null);
|
|
4794
|
+
const KEYCAP_DIGITS = ['0️⃣', '1️⃣', '2️⃣', '3️⃣', '4️⃣', '5️⃣', '6️⃣', '7️⃣', '8️⃣', '9️⃣'];
|
|
4890
4795
|
|
|
4891
4796
|
/**
|
|
4892
4797
|
* Lower-level holidays interface, which returns a `Map` of `Event`s indexed by
|
|
@@ -4940,7 +4845,7 @@ function getHolidaysForYear_(year) {
|
|
|
4940
4845
|
// Variable date holidays
|
|
4941
4846
|
add(new HolidayEvent(new HDate(3 + (RH.getDay() == THU), TISHREI$1, year), 'Tzom Gedaliah', MINOR_FAST$1));
|
|
4942
4847
|
// first SAT after RH
|
|
4943
|
-
add(new HolidayEvent(new HDate(HDate.dayOnOrBefore(SAT$
|
|
4848
|
+
add(new HolidayEvent(new HDate(HDate.dayOnOrBefore(SAT$1, 7 + RH.abs())), 'Shabbat Shuva', SPECIAL_SHABBAT$1));
|
|
4944
4849
|
const rchTevet = HDate.shortKislev(year) ? new HDate(1, TEVET$1, year) : new HDate(30, KISLEV$1, year);
|
|
4945
4850
|
add(new HolidayEvent(rchTevet, 'Chag HaBanot', MINOR_HOLIDAY$1));
|
|
4946
4851
|
// yes, we know Kislev 30-32 are wrong
|
|
@@ -4958,14 +4863,14 @@ function getHolidaysForYear_(year) {
|
|
|
4958
4863
|
}));
|
|
4959
4864
|
add(new AsaraBTevetEvent(new HDate(10, TEVET$1, year), 'Asara B\'Tevet', MINOR_FAST$1));
|
|
4960
4865
|
const pesachAbs = pesach.abs();
|
|
4961
|
-
add(new HolidayEvent(new HDate(HDate.dayOnOrBefore(SAT$
|
|
4962
|
-
add(new HolidayEvent(new HDate(HDate.dayOnOrBefore(SAT$
|
|
4866
|
+
add(new HolidayEvent(new HDate(HDate.dayOnOrBefore(SAT$1, pesachAbs - 43)), 'Shabbat Shekalim', SPECIAL_SHABBAT$1), new HolidayEvent(new HDate(HDate.dayOnOrBefore(SAT$1, pesachAbs - 30)), 'Shabbat Zachor', SPECIAL_SHABBAT$1), new HolidayEvent(new HDate(pesachAbs - (pesach.getDay() == TUE ? 33 : 31)), 'Ta\'anit Esther', MINOR_FAST$1));
|
|
4867
|
+
add(new HolidayEvent(new HDate(HDate.dayOnOrBefore(SAT$1, pesachAbs - 14) - 7), 'Shabbat Parah', SPECIAL_SHABBAT$1), new HolidayEvent(new HDate(HDate.dayOnOrBefore(SAT$1, pesachAbs - 14)), 'Shabbat HaChodesh', SPECIAL_SHABBAT$1), new HolidayEvent(new HDate(HDate.dayOnOrBefore(SAT$1, pesachAbs - 1)), 'Shabbat HaGadol', SPECIAL_SHABBAT$1), new HolidayEvent(
|
|
4963
4868
|
// if the fast falls on Shabbat, move to Thursday
|
|
4964
|
-
pesach.prev().getDay() == SAT$
|
|
4965
|
-
add(new HolidayEvent(new HDate(HDate.dayOnOrBefore(SAT$
|
|
4869
|
+
pesach.prev().getDay() == SAT$1 ? pesach.onOrBefore(THU) : new HDate(14, NISAN$2, year), 'Ta\'anit Bechorot', MINOR_FAST$1));
|
|
4870
|
+
add(new HolidayEvent(new HDate(HDate.dayOnOrBefore(SAT$1, new HDate(1, TISHREI$1, year + 1).abs() - 4)), 'Leil Selichot', MINOR_HOLIDAY$1, {
|
|
4966
4871
|
emoji: '🕍'
|
|
4967
4872
|
}));
|
|
4968
|
-
if (pesach.getDay() == SUN
|
|
4873
|
+
if (pesach.getDay() == SUN) {
|
|
4969
4874
|
add(new HolidayEvent(new HDate(16, months.ADAR_II, year), 'Purim Meshulash', MINOR_HOLIDAY$1));
|
|
4970
4875
|
}
|
|
4971
4876
|
if (HDate.isLeapYear(year)) {
|
|
@@ -4988,11 +4893,11 @@ function getHolidaysForYear_(year) {
|
|
|
4988
4893
|
if (year >= h.firstYear) {
|
|
4989
4894
|
let hd = new HDate(h.dd, h.mm, year);
|
|
4990
4895
|
const dow = hd.getDay();
|
|
4991
|
-
if (h.friSatMovetoThu && (dow === FRI$1 || dow === SAT$
|
|
4896
|
+
if (h.friSatMovetoThu && (dow === FRI$1 || dow === SAT$1)) {
|
|
4992
4897
|
hd = hd.onOrBefore(THU);
|
|
4993
4898
|
} else if (h.friPostponeToSun && dow === FRI$1) {
|
|
4994
4899
|
hd = new HDate(hd.abs() + 2);
|
|
4995
|
-
} else if (h.satPostponeToSun && dow === SAT$
|
|
4900
|
+
} else if (h.satPostponeToSun && dow === SAT$1) {
|
|
4996
4901
|
hd = hd.next();
|
|
4997
4902
|
}
|
|
4998
4903
|
const mask = h.chul ? MODERN_HOLIDAY$1 : MODERN_HOLIDAY$1 | flags.IL_ONLY;
|
|
@@ -5005,7 +4910,7 @@ function getHolidaysForYear_(year) {
|
|
|
5005
4910
|
});
|
|
5006
4911
|
let tamuz17 = new HDate(17, TAMUZ, year);
|
|
5007
4912
|
let tamuz17attrs;
|
|
5008
|
-
if (tamuz17.getDay() == SAT$
|
|
4913
|
+
if (tamuz17.getDay() == SAT$1) {
|
|
5009
4914
|
tamuz17 = new HDate(18, TAMUZ, year);
|
|
5010
4915
|
tamuz17attrs = {
|
|
5011
4916
|
observed: true
|
|
@@ -5015,7 +4920,7 @@ function getHolidaysForYear_(year) {
|
|
|
5015
4920
|
let av9dt = new HDate(9, AV, year);
|
|
5016
4921
|
let av9title = 'Tish\'a B\'Av';
|
|
5017
4922
|
let av9attrs;
|
|
5018
|
-
if (av9dt.getDay() == SAT$
|
|
4923
|
+
if (av9dt.getDay() == SAT$1) {
|
|
5019
4924
|
av9dt = av9dt.next();
|
|
5020
4925
|
av9attrs = {
|
|
5021
4926
|
observed: true
|
|
@@ -5023,7 +4928,7 @@ function getHolidaysForYear_(year) {
|
|
|
5023
4928
|
av9title += ' (observed)';
|
|
5024
4929
|
}
|
|
5025
4930
|
const av9abs = av9dt.abs();
|
|
5026
|
-
add(new HolidayEvent(new HDate(HDate.dayOnOrBefore(SAT$
|
|
4931
|
+
add(new HolidayEvent(new HDate(HDate.dayOnOrBefore(SAT$1, av9abs)), 'Shabbat Chazon', SPECIAL_SHABBAT$1), new HolidayEvent(av9dt.prev(), 'Erev Tish\'a B\'Av', EREV$1 | MAJOR_FAST$1, av9attrs), new HolidayEvent(av9dt, av9title, MAJOR_FAST$1, av9attrs), new HolidayEvent(new HDate(HDate.dayOnOrBefore(SAT$1, av9abs + 7)), 'Shabbat Nachamu', SPECIAL_SHABBAT$1));
|
|
5027
4932
|
const monthsInYear = HDate.monthsInYear(year);
|
|
5028
4933
|
for (let month = 1; month <= monthsInYear; month++) {
|
|
5029
4934
|
const monthName = HDate.getMonthName(month, year);
|
|
@@ -5039,7 +4944,7 @@ function getHolidaysForYear_(year) {
|
|
|
5039
4944
|
|
|
5040
4945
|
// Don't worry about month overrun; will get "Nisan" for month=14
|
|
5041
4946
|
const nextMonthName = HDate.getMonthName(month + 1, year);
|
|
5042
|
-
add(new MevarchimChodeshEvent(new HDate(29, month, year).onOrBefore(SAT$
|
|
4947
|
+
add(new MevarchimChodeshEvent(new HDate(29, month, year).onOrBefore(SAT$1), nextMonthName));
|
|
5043
4948
|
}
|
|
5044
4949
|
|
|
5045
4950
|
// Begin: Yom Kippur Katan
|
|
@@ -5054,7 +4959,7 @@ function getHolidaysForYear_(year) {
|
|
|
5054
4959
|
}
|
|
5055
4960
|
let ykk = new HDate(29, month, year);
|
|
5056
4961
|
const dow = ykk.getDay();
|
|
5057
|
-
if (dow === FRI$1 || dow === SAT$
|
|
4962
|
+
if (dow === FRI$1 || dow === SAT$1) {
|
|
5058
4963
|
ykk = ykk.onOrBefore(THU);
|
|
5059
4964
|
}
|
|
5060
4965
|
const nextMonthName = HDate.getMonthName(nextMonth, year);
|
|
@@ -5104,422 +5009,41 @@ function getBirkatHaChama(year) {
|
|
|
5104
5009
|
return 0;
|
|
5105
5010
|
}
|
|
5106
5011
|
|
|
5107
|
-
|
|
5108
|
-
|
|
5109
|
-
const cycleStartDate$1 = new Date(1947, 4, 20);
|
|
5110
|
-
const mishnaYomiStart = greg2abs(cycleStartDate$1);
|
|
5111
|
-
const numMishnayot = 4192;
|
|
5112
|
-
const numDays = numMishnayot / 2;
|
|
5113
|
-
|
|
5114
|
-
/**
|
|
5115
|
-
* Describes a mishna to be read
|
|
5116
|
-
* @typedef {Object} MishnaYomi
|
|
5117
|
-
* @property {string} k tractate name in Sephardic transliteration (e.g. "Berakhot", "Moed Katan")
|
|
5118
|
-
* @property {string} v verse (e.g. "2:1")
|
|
5119
|
-
*/
|
|
5120
|
-
|
|
5121
|
-
/**
|
|
5122
|
-
* A program of daily learning in which participants study two Mishnahs
|
|
5123
|
-
* each day in order to finish the entire Mishnah in ~6 years.
|
|
5124
|
-
*/
|
|
5125
|
-
class MishnaYomiIndex {
|
|
5126
|
-
/**
|
|
5127
|
-
* Initializes a Mishna Yomi instance
|
|
5128
|
-
*/
|
|
5129
|
-
constructor() {
|
|
5130
|
-
const tmp = Array(numMishnayot);
|
|
5131
|
-
let i = 0;
|
|
5132
|
-
for (let j = 0; j < mishnayot.length; j++) {
|
|
5133
|
-
const tractate = mishnayot[j];
|
|
5134
|
-
const v = tractate.v;
|
|
5135
|
-
for (let chap = 1; chap <= v.length; chap++) {
|
|
5136
|
-
const numv = v[chap - 1];
|
|
5137
|
-
for (let verse = 1; verse <= numv; verse++) {
|
|
5138
|
-
tmp[i++] = {
|
|
5139
|
-
k: tractate.k,
|
|
5140
|
-
v: `${chap}:${verse}`
|
|
5141
|
-
};
|
|
5142
|
-
}
|
|
5143
|
-
}
|
|
5144
|
-
}
|
|
5145
|
-
const days = Array(numDays);
|
|
5146
|
-
for (let j = 0; j < numDays; j++) {
|
|
5147
|
-
const k = j * 2;
|
|
5148
|
-
days[j] = [tmp[k], tmp[k + 1]];
|
|
5149
|
-
}
|
|
5150
|
-
/** @type {MishnaYomi[]} */
|
|
5151
|
-
this.days = days;
|
|
5152
|
-
}
|
|
5153
|
-
|
|
5154
|
-
/**
|
|
5155
|
-
* Looks up a Mishna Yomi
|
|
5156
|
-
* @param {Date|HDate|number} date Gregorian date
|
|
5157
|
-
* @return {MishnaYomi[]}
|
|
5158
|
-
*/
|
|
5159
|
-
lookup(date) {
|
|
5160
|
-
const abs = typeof date === 'number' && !isNaN(date) ? date : isDate(date) ? greg2abs(date) : HDate.isHDate(date) ? date.abs() : throwTypeError(`Invalid date: ${date}`);
|
|
5161
|
-
if (abs < mishnaYomiStart) {
|
|
5162
|
-
const dt = abs2greg(abs);
|
|
5163
|
-
const s = dt.toISOString().substring(0, 10);
|
|
5164
|
-
throw new RangeError(`Date ${s} too early; Mishna Yomi cycle began on 1947-05-20`);
|
|
5165
|
-
}
|
|
5166
|
-
const dayNum = (abs - mishnaYomiStart) % numDays;
|
|
5167
|
-
return this.days[dayNum];
|
|
5168
|
-
}
|
|
5169
|
-
}
|
|
5170
|
-
|
|
5171
|
-
/**
|
|
5172
|
-
* @private
|
|
5173
|
-
* @param {MishnaYomi[]} mishnaYomi
|
|
5174
|
-
* @param {string} locale
|
|
5175
|
-
* @return {string}
|
|
5176
|
-
*/
|
|
5177
|
-
function formatMyomi(mishnaYomi, locale) {
|
|
5178
|
-
const k1 = mishnaYomi[0].k;
|
|
5179
|
-
const cv1 = mishnaYomi[0].v;
|
|
5180
|
-
const mishna1 = Locale.gettext(k1, locale) + ' ' + cv1;
|
|
5181
|
-
const k2 = mishnaYomi[1].k;
|
|
5182
|
-
const cv2 = mishnaYomi[1].v;
|
|
5183
|
-
if (k1 !== k2) {
|
|
5184
|
-
return mishna1 + '-' + Locale.gettext(k2, locale) + ' ' + cv2;
|
|
5185
|
-
}
|
|
5186
|
-
const p1 = cv1.split(':');
|
|
5187
|
-
const p2 = cv2.split(':');
|
|
5188
|
-
if (p1[0] === p2[0]) {
|
|
5189
|
-
return mishna1 + '-' + p2[1];
|
|
5190
|
-
}
|
|
5191
|
-
return mishna1 + '-' + cv2;
|
|
5192
|
-
}
|
|
5193
|
-
|
|
5194
|
-
/**
|
|
5195
|
-
* Event wrapper around a Mishna Yomi instance
|
|
5196
|
-
*/
|
|
5197
|
-
class MishnaYomiEvent extends Event {
|
|
5198
|
-
/**
|
|
5199
|
-
* @param {HDate} date
|
|
5200
|
-
* @param {MishnaYomi[]} mishnaYomi
|
|
5201
|
-
*/
|
|
5202
|
-
constructor(date, mishnaYomi) {
|
|
5203
|
-
super(date, formatMyomi(mishnaYomi, null), flags.MISHNA_YOMI);
|
|
5204
|
-
this.mishnaYomi = mishnaYomi;
|
|
5205
|
-
}
|
|
5206
|
-
/**
|
|
5207
|
-
* Returns Mishna Yomi name (e.g. "Bava Metzia 10:5-6" or "Berakhot 9:5-Peah 1:1").
|
|
5208
|
-
* @param {string} [locale] Optional locale name (defaults to active locale).
|
|
5209
|
-
* @return {string}
|
|
5210
|
-
*/
|
|
5211
|
-
render(locale) {
|
|
5212
|
-
return formatMyomi(this.mishnaYomi, locale);
|
|
5213
|
-
}
|
|
5214
|
-
/**
|
|
5215
|
-
* Returns a link to sefaria.org
|
|
5216
|
-
* @return {string}
|
|
5217
|
-
*/
|
|
5218
|
-
url() {
|
|
5219
|
-
const mishnaYomi = this.mishnaYomi;
|
|
5220
|
-
const k1 = mishnaYomi[0].k;
|
|
5221
|
-
const mishna = k1 === 'Avot' ? 'Pirkei' : 'Mishnah';
|
|
5222
|
-
const name = k1.replace(/ /g, '_');
|
|
5223
|
-
const prefix = `https://www.sefaria.org/${mishna}_${name}`;
|
|
5224
|
-
const cv1 = mishnaYomi[0].v;
|
|
5225
|
-
if (k1 !== mishnaYomi[1].k) {
|
|
5226
|
-
const verse1 = cv1.replace(':', '.');
|
|
5227
|
-
return `${prefix}.${verse1}?lang=bi`;
|
|
5228
|
-
}
|
|
5229
|
-
const cv2 = mishnaYomi[1].v;
|
|
5230
|
-
const p1 = cv1.split(':');
|
|
5231
|
-
const p2 = cv2.split(':');
|
|
5232
|
-
const verse1 = p1.join('.');
|
|
5233
|
-
const verse2 = p1[0] === p2[0] ? p2[1] : p2.join('.');
|
|
5234
|
-
return `${prefix}.${verse1}-${verse2}?lang=bi`;
|
|
5235
|
-
}
|
|
5236
|
-
}
|
|
5237
|
-
|
|
5238
|
-
const nach = [['Joshua', 24], ['Judges', 21], ['I Samuel', 31], ['II Samuel', 24], ['I Kings', 22], ['II Kings', 25], ['Isaiah', 66], ['Jeremiah', 52], ['Ezekiel', 48], ['Hosea', 14], ['Joel', 4], ['Amos', 9], ['Obadiah', 1], ['Jonah', 4], ['Micah', 7], ['Nachum', 3], ['Habakkuk', 3], ['Zephaniah', 3], ['Haggai', 2], ['Zechariah', 14], ['Malachi', 3], ['Psalms', 150], ['Proverbs', 31], ['Job', 42], ['Song of Songs', 8], ['Ruth', 4], ['Lamentations', 5], ['Ecclesiastes', 12], ['Esther', 10], ['Daniel', 12], ['Ezra', 10], ['Nehemiah', 13], ['I Chronicles', 29], ['II Chronicles', 36]];
|
|
5239
|
-
const cycleStartDate = new Date(2007, 10, 1);
|
|
5240
|
-
const nachYomiStart = greg2abs(cycleStartDate);
|
|
5241
|
-
const numChapters = 742;
|
|
5242
|
-
|
|
5243
|
-
/**
|
|
5244
|
-
* Describes a chapter to be read
|
|
5245
|
-
* @typedef {Object} NachYomi
|
|
5246
|
-
* @property {string} k book name in Sephardic transliteration (e.g. "Berakhot", "Moed Katan")
|
|
5247
|
-
* @property {number} v chapter (e.g. "2:1")
|
|
5248
|
-
*/
|
|
5012
|
+
/** @private */
|
|
5013
|
+
const cals = Object.create(null);
|
|
5249
5014
|
|
|
5250
5015
|
/**
|
|
5251
|
-
*
|
|
5252
|
-
*
|
|
5016
|
+
* Plug-ins for daily learning calendars such as Daf Yomi, Mishna Yomi, Nach Yomi, etc.
|
|
5017
|
+
*
|
|
5018
|
+
* Learning schedules are provided by the `@hebcal/learning` package.
|
|
5253
5019
|
*/
|
|
5254
|
-
class
|
|
5255
|
-
/**
|
|
5256
|
-
* Initializes a Nach Yomi instance
|
|
5257
|
-
*/
|
|
5258
|
-
constructor() {
|
|
5259
|
-
const days = Array(numChapters);
|
|
5260
|
-
let i = 0;
|
|
5261
|
-
for (let j = 0; j < nach.length; j++) {
|
|
5262
|
-
const book = nach[j][0];
|
|
5263
|
-
const chapters = nach[j][1];
|
|
5264
|
-
for (let chap = 1; chap <= chapters; chap++) {
|
|
5265
|
-
days[i++] = {
|
|
5266
|
-
k: book,
|
|
5267
|
-
v: chap
|
|
5268
|
-
};
|
|
5269
|
-
}
|
|
5270
|
-
}
|
|
5271
|
-
this.days = days;
|
|
5272
|
-
}
|
|
5273
|
-
|
|
5020
|
+
class DailyLearning {
|
|
5274
5021
|
/**
|
|
5275
|
-
*
|
|
5276
|
-
* @param {
|
|
5277
|
-
* @
|
|
5022
|
+
* Register a new learning calendar.
|
|
5023
|
+
* @param {string} name
|
|
5024
|
+
* @param {Function} calendar
|
|
5278
5025
|
*/
|
|
5279
|
-
|
|
5280
|
-
|
|
5281
|
-
|
|
5282
|
-
const dt = abs2greg(abs);
|
|
5283
|
-
const s = dt.toISOString().substring(0, 10);
|
|
5284
|
-
throw new RangeError(`Date ${s} too early; Nach Yomi cycle began on 2007-11-01`);
|
|
5026
|
+
static addCalendar(name, calendar) {
|
|
5027
|
+
if (typeof calendar !== 'function') {
|
|
5028
|
+
throw new TypeError(`Invalid calendar function: ${calendar}`);
|
|
5285
5029
|
}
|
|
5286
|
-
|
|
5287
|
-
return this.days[dayNum];
|
|
5030
|
+
cals[name] = calendar;
|
|
5288
5031
|
}
|
|
5289
|
-
}
|
|
5290
5032
|
|
|
5291
|
-
/**
|
|
5292
|
-
* Event wrapper around a Nach Yomi instance
|
|
5293
|
-
*/
|
|
5294
|
-
class NachYomiEvent extends Event {
|
|
5295
5033
|
/**
|
|
5296
|
-
*
|
|
5297
|
-
*
|
|
5298
|
-
|
|
5299
|
-
|
|
5300
|
-
|
|
5301
|
-
this.nachYomi = nachYomi;
|
|
5302
|
-
}
|
|
5303
|
-
/**
|
|
5304
|
-
* Returns name of tractate and page (e.g. "Beitzah 21").
|
|
5305
|
-
* @param {string} [locale] Optional locale name (defaults to active locale).
|
|
5306
|
-
* @return {string}
|
|
5034
|
+
* Returns an event from daily calendar for a given date. Returns `null` if there
|
|
5035
|
+
* is no learning from this calendar on this date.
|
|
5036
|
+
* @param {string} name
|
|
5037
|
+
* @param {HDate} hd
|
|
5038
|
+
* @return {Event}
|
|
5307
5039
|
*/
|
|
5308
|
-
|
|
5309
|
-
|
|
5310
|
-
if (typeof
|
|
5311
|
-
|
|
5040
|
+
static lookup(name, hd) {
|
|
5041
|
+
const lookup = cals[name];
|
|
5042
|
+
if (typeof lookup === 'function') {
|
|
5043
|
+
return lookup(hd);
|
|
5312
5044
|
}
|
|
5313
|
-
const name = Locale.gettext(this.nachYomi.k, locale);
|
|
5314
|
-
if (locale === 'he' || locale === 'he-x-nonikud') {
|
|
5315
|
-
return name + ' ' + gematriya(this.nachYomi.v);
|
|
5316
|
-
}
|
|
5317
|
-
return name + ' ' + this.nachYomi.v;
|
|
5318
|
-
}
|
|
5319
|
-
/**
|
|
5320
|
-
* Returns a link to sefaria.org
|
|
5321
|
-
* @return {string}
|
|
5322
|
-
*/
|
|
5323
|
-
url() {
|
|
5324
|
-
const name = this.nachYomi.k.replace(/ /g, '_');
|
|
5325
|
-
const chapter = this.nachYomi.v;
|
|
5326
|
-
return `https://www.sefaria.org/${name}.${chapter}?lang=bi`;
|
|
5327
|
-
}
|
|
5328
|
-
}
|
|
5329
|
-
|
|
5330
|
-
const Berakhot=["1:1:1-2","1:1:7-11","1:1:12-15","1:1:16-19","1:1:23-27","1:1:29-31","1:1:36-2:2","1:2:8-9","1:4:3-5:3","1:5:9-14","1:5:18-6:3","2:1:1-4","2:1:14-19","2:3:4-7","2:3:10-14","2:4:1-3","2:4:8-12","2:5:1-8","2:6:3-7:2","2:8:2-7","2:9:1-4","3:1:4-7","3:1:12-18","3:1:23-2:3","3:2:5-3:8","3:3:11-4:5","3:4:15-5:6","3:5:13-6:1","4:1:1-2","4:1:10-16","4:1:21-25","4:1:28-31","4:1:33-3:2","4:3:11-4:2","4:4:9-5:5","4:6:3-7","5:1:3-11","5:1:18-2:3","5:2:6-10","5:3:2-7","6:1:1-2","6:1:4-6","6:1:8-9","6:1:11-15","6:1:17-23","6:2:1-4","6:4:2-4","6:5:3-5","6:6:3-4","6:6:6-8:2","7:1:1-3","7:1:5-6","7:1:7-2:2","7:2:7-3:1","7:3:4-4:3","7:5:5-11","8:1:6-7","8:2:2-6","8:2:12-3:3","8:4:1-5:6","8:6:4-11","9:1:1-4","9:1:13-22","9:1:33-2:6","9:2:12-20","9:3:3-7","9:5:1-7","9:5:16-22"];const Peah=["1:1:1-3","1:1:6-11","1:1:15-22","1:1:31-39","1:1:47-56","1:3:1-3","1:3:5-4:1","1:4:3-7","1:5:1-2",null,"2:1:4-9","2:1:11-3:2","2:4:3-5:1","3:1:1-7","3:1:10-2:4","3:4:3-5:4","3:7:1-3","3:7:7-13","3:7:18","4:1:1-3","4:2:1-5","4:2:7-5:3","4:6:6-9","4:7:1-5","5:1:3-2:2","5:2:5-7","5:3:5-5:3","6:1:1-7","6:2:1-3:1","6:3:4-5:3","6:6:7-8:4","7:2:1-6","7:3:5-4:2","7:5:3-11","8:1:1-2:1","8:3:2-5:4","8:7:1-8:5"];const Demai=["1:1:1-5","1:1:10-2:1","1:2:4-5","1:3:6-16","1:3:21-4:1","1:4:7-8","2:1:1-3","2:1:6-12","2:1:19-2:4","2:3:4-4:2","2:4:4-5:4","3:1:5-7","3:2:1-4","3:3:5-4:3","3:4:5-7","3:4:9-5:1","4:1:4-8","4:2:2-3:4","4:3:8-5:4","5:1:2-2:1","5:2:5-8","5:3:3-5:1","5:6:2-8:4","5:8:8-11","6:1:1-6","6:1:9-2:5","6:2:9-3:1","6:5:3-6","6:8:1-7","7:1:4-2:4","7:4:2-4","7:4:5-6:1","7:6:6-7:1","7:8:1-3"];const Kilayim=["1:1:1-4","1:2:1-4:3","1:6:3-7:3","1:7:6-9:2","1:9:4-5","2:1:1-5","2:1:9-11","2:3:2-4","2:3:4-4:3","2:5:3-6:2","2:6:5-7:1","2:8:2-7","3:1:1-2","3:1:2-3","3:1:6-2:3","3:3:1-4:1","3:4:3-5:1","3:6:1-6","4:1:2-5","4:1:7-8","4:2:4-9","4:3:2-5:1","4:6:3-5","5:1:4-5","5:1:5-2:2","5:3:1-4:1","5:5:2-6:3","6:1:1-3","6:1:4-2:2","6:2:5-3:4","6:4:4-9","7:1:3-2:3","7:2:6-3:2","7:3:4-4:2","7:6:2-5","8:1:3-4","8:1:6-8","8:2:1-3:2","8:3:6-4:5","9:1:2-7","9:1:12-2:5","9:3:3-8","9:3:13-4:5","9:5:2-6:3"];const Sheviit=["1:1:1-2:2","1:2:4-3:6","2:1:1-2","2:2:2-3:2","2:4:6-5:3","2:5:8-7:6","3:1:3-2:3","3:3:4-4:5","3:6:2-7:4","4:1:6-2:4","4:2:10-4:4","4:6:3-7:1","5:1:1-4","5:2:3-9","5:3:3-4:3","6:1:4-10","6:1:17-2:4","6:4:1-7","7:1:9-15","7:2:3-5","7:2:5-7","8:1:4-2:3","8:4:3-5:3","8:7:1-8:4","9:1:5-12","9:2:9-5:1","9:6:1-5","10:1:5-9","10:1:16-2:1","10:3:2-10","10:4:6"];const Terumot=["1:1:1-4","1:1:8-12","1:1:15-16","1:1:19-21","1:1:23-2:3","1:3:1-4:3","1:5:1-3","1:5:5-9","2:1:3-9","2:1:12-13","2:1:15-17","2:1:19-21","2:2:2-4","2:3:2-6","3:1:4-2:2","3:2:3-8","3:3:5-11","4:1:1-2","4:1:4-2:3","4:3:3-7","4:4:3-6","4:5:2-7:3","4:7:6-10","4:8:1-4","5:1:1-2","5:1:4-8","5:1:10-12","5:1:14-2:3","5:2:3-4","5:2:6-3:2","6:1:1-5","6:1:10","6:2:2","6:2:5-3:3","7:1:3-7","7:1:10-12","7:2:2-6","7:3:4-6","8:1:2","8:1:3","8:1:6-9","8:2:2-3:6","8:3:15-21","8:3:29-36","8:4:3-4","8:4:6-7","8:4:11-15","9:1:11-14","9:2:1-3","9:2:7-3:4","10:1:6-2:2","10:2:6-4:2","10:5:2-6:1","10:6:4-12","11:1:6-2:4","11:2:7-3:3","11:4:5-9","11:5:2-5","11:5:12-13"];const Maasrot=["1:1:1-3","1:1:5-9","1:2:5-13","1:3:4-4:2","1:4:6-7","1:4:10-5:3","2:1:1-4","2:1:6-8","2:1:9-2:2","2:3:2-4","2:3:8-4:5","2:4:10-14","3:1:3-4","3:1:6-10","3:1:12-2:1","3:2:4-3:2","3:4:1-7","3:4:10-14","4:1:5-2:3","4:3:1-4:4","5:1:1-3","5:1:5-7","5:2:1-5","5:2:6-3:1","5:3:4","5:3:8-11"];const Challah=["1:1:1-3","1:1:9-13","1:1:16-20","1:1:21-25","1:1:27-2:2","1:3:4-7","1:3:12-16","1:4:2-5:1","1:5:6-6:1","2:1:1-3","2:1:5-7","2:1:8-12","2:2:1-3:2","2:3:4-7","3:1:2-5","3:1:8","3:2:2-4:2","3:4:6-7","3:5:2-3","3:5:4-5","3:5:8-9","3:5:11-13","4:1:4-2:2","4:2:5-3:2","4:3:4-4:1","4:4:5-6","4:4:9-15","4:5:1-7"];const Orlah=["1:1:1-6","1:1:10-14","1:1:18-2:2","1:2:7-9","1:3:3-6","1:3:9-13","1:4:1-6","1:5:2-9","2:1:4-6","2:1:10-14","2:1:19-21","2:2:2","2:3:5-4:2","2:4:5-5:4","2:6:2-7:4","2:9:1-4","3:1:6-12","3:1:16-2:3","3:3:1-5:2","3:6:4-7:7"];const Bikkurim=["1:1:1-4","1:2:2-3","1:3:6-4:3","1:5:5-8","1:6:4-7:1","1:8:1-9:3","2:1:9-15","2:2:2-8","2:2:10-3:2","2:4:2-6:2","3:1:4-3:8","3:3:20-4:10","3:6:1-4"];const Shabbat=["1:1:1-2","1:1:3-7","1:1:9-10","1:1:14-17","1:1:20-23","1:1:26-2:2","1:2:6-11","1:3:3-7","1:3:11-4:4","1:4:6-9","1:4:15-5:1","1:5:4-7:3","1:8:3-10:2","1:11:2-8","2:1:9-13","2:1:17-2:1","2:3:3-6","2:5:1-6","2:5:8-6:1","2:6:9-7:3","3:1:1-8","3:1:10-13","3:3:2-6","3:3:8-14","3:4:4-6:2","3:7:2-6","3:7:9-13","4:1:1-2","4:1:3-7","4:2:4-9","5:1:1-7","5:2:5-4:2","6:1:1-2","6:1:7-10","6:2:2-8","6:2:11-3:2","6:4:4-5:3","6:6:2-8:2","6:9:6-14","7:1:1-3","7:1:4-6","7:1:7-9","7:1:12-15","7:2:1-6","7:2:9-12","7:2:14-16","7:2:17-19","7:2:20-22","7:2:27-32","7:2:35-37","7:2:41-45","7:2:49-54","7:2:59-4:2","8:1:1-5","8:1:9-2:3","8:3:5-6:1","9:1:1-2","9:1:4","9:2:3-3:2","9:3:4-4:2","9:6:2-7:7","10:2:1-3","10:4:2-5:2","10:5:4-6:2","11:1:3-7","11:2:3-3:2","11:5:2-6","12:1:1-4","12:1:7-3:2","12:3:5-4:3","13:1:1-2","13:1:4-3:3","13:5:1-3","14:1:1-2","14:2:3-3:5","14:4:2-6","15:1:1-2","15:2:3-3:3","16:1:2-4","16:1:9-3:3","16:5:1-7:2","17:1:1-6","17:2:4-5:1","18:1:1-5","18:1:6-2:1","19:1:1-3","19:1:8-2:1","19:3:1-4:2","19:4:2-5:2","19:5:2-6:3","20:1:4-3:2","23:1:1"];const Eruvin=["1:1:1-2","1:1:2-4","1:1:7-9","1:1:12-13","1:1:14-18","1:1:22-26","1:2:3-3:4","1:4:4-5:4","1:6:3-6","1:7:4-8:3","1:9:3-5","1:10:2-3","1:10:5-6","2:1:3-4","2:1:6-8","2:2:2-4:2","2:5:2-6:1","3:1:1-2","3:1:5-7","3:1:10-2:3","3:3:1-2","3:3:4-4:1","3:4:4-5","3:5:2-4","3:7:1-3","3:8:3-9:3","4:1:2-4","4:1:7-3:3","4:5:3-7:1","4:9:2-10:2","5:1:4-5","5:1:10-13","5:1:15-17","5:2:1-3","5:3:3-4:2","5:5:2-7:1","5:7:4-8:2","6:1:1-2:2","6:2:5-3:2","6:4:1-4","6:5:2-6:3","6:7:2-3","6:8:2-6","6:8:8-10:1","7:1:1-3","7:1:5-2:1","7:2:4-3:1","7:5:1-6:1","7:6:3-7:2","7:10:1-4","8:1:2-2:3","8:3:3-7","8:4:3-6:4","8:8:1-3","8:8:6-9:2","9:1:1-3","9:1:8-3:2","9:4:4-5:3","10:1:3-6","10:2:1-3:2","10:5:1-6:2","10:7:1-8:4","10:9:2-10:3","10:12:2-13:3","10:14:2-5"];const Pesachim=["1:1:1-4","1:1:9-12","1:1:17-2:2","1:3:4-4:4","1:4:6-5:2","1:5:5-6:2","1:7:2-8:2","1:8:3-6","1:8:7-9","1:8:12-13","2:1:4-7","2:1:11-16","2:2:2-9","2:2:12-13","2:2:16-3:1","2:3:4-6","2:4:4-9","2:4:10-5:4","2:7:3-6","3:1:11-12","3:2:3-3:2","3:3:5-9","3:4:3-6:3","3:7:4-8:3","4:1:1-4","4:1:10-13","4:3:2-5","4:4:1-4","4:8:1-9:1","4:9:5-9","5:1:2-6","5:2:1-6","5:2:8-10","5:3:1-3","5:3:7-4:1","5:4:5-9","5:4:12-6:1","5:7:2-8:3","6:1:1-4","6:1:8-13","6:1:15-19","6:2:2-3:3","6:4:4-5:2","6:5:4-5","6:5:5-6:2","7:1:1-5","7:1:7-2:3","7:2:8-4:3","7:5:4-6","7:6:2","7:6:5-7:4","7:7:5-8","7:8:2-9:3","7:10:1-2","7:11:2-5","7:12:2-13:2","7:13:4-7","8:1:2-5","8:1:7-10","8:3:2-3","8:4:3-5:2","8:6:4-8:3","8:8:6-9","9:1:4-2:1","9:3:2-4:3","9:6:1-6","9:7:1-9:1","10:1:1-2","10:1:7-14","10:3:1-4:1","10:5:4-7:1"];const Beitzah=["1:1:1-3","1:1:5-7","1:1:9-11","1:3:2-3","1:3:5-4:2","1:5:1-4","1:6:3-8:1","1:9:3-10:3","1:11:2-12:4","2:1:3-7","2:3:2-4:5","2:6:1-8:1","3:1:1-2","3:3:1-4:2","3:5:1-6:3","4:1:1-2","4:1:6-3:1","4:3:10-4:5","5:1:1-6","5:2:2-7","5:2:12-16","5:4:3-7:2"];const Yoma=["1:1:1-4","1:1:5-8","1:1:11-13","1:1:13-16","1:1:20-25","1:2:2-5","1:4:1-5:5","2:1:1-3","2:1:5-8","2:1:10-16","2:2:2-3","2:2:4-8","2:4:1-4","3:2:1-3:1","3:3:4-4:3","3:5:3-6:2","3:6:4-6","3:7:1-5","3:8:3-9","4:1:1-4","4:1:7-9","4:2:1-3:4","4:4:9-5:5","4:6:3-6","5:1:3-5","5:1:7-9","5:2:2-4:1","5:4:5-8","5:5:1-2","5:6:3-7","5:6:9-7:2","6:1:1-7","6:1:13-3:2","6:4:1-5:2","6:6:3-5","6:6:7-7:1","7:1:4-2:3","7:3:2-6","8:1:3-9","8:3:2-11","8:3:15-5:2","8:6:3-7:4"];const Sukkah=["1:1:1-2","1:1:4-5","1:1:7-10","1:1:14-2:1","1:3:2-4:3","1:5:4-7:2","1:8:2-10:2","2:1:1-2","2:2:2-4:2","2:4:5-5:6","2:7:2-8:3","3:1:1-4","3:1:8-3:2","3:4:2-3","3:6:2-7:2","3:9:2-10:4","3:11:2-12:1","4:1:2-2:2","4:3:4-4:2","4:5:4-6:2","4:6:5-6","5:1:1-2","5:1:3-2:2","5:3:4-5:1","5:6:2-7:1","5:8:1-6"];const Taanit=["1:1:1-2","1:1:5-9","1:1:13-17","1:2:4-3:3","1:3:8-4:6","1:5:1-6:4","1:6:9-8:2","2:1:2-8","2:1:13-2:3","2:2:11-3:2","2:6:2-10:1","2:11:4-12:3","2:13:2-14:2","3:1:3-3:1","3:4:3-5:2","3:7:1-9:3","3:10:3-11:4","4:1:2-6","4:1:10-15","4:2:3-8","4:2:14-3:2","4:3:4-4:2","4:5:2-6","4:5:9-13","4:5:16-22","4:6:4-7:2"];const Shekalim=["1:1:1-4","1:1:6-8","1:1:14-2:3","1:3:1-4","1:4:1-4","1:4:5-7","1:4:7","2:1:3-2:1","2:2:4-3:2","2:4:1-3","2:5:3-6","3:1:3-4","3:2:2-6","3:2:10-3:4","4:1:1-3","4:2:1-3","4:2:6-3:1","4:3:3-4:1","4:4:2-5","4:4:6-10","5:1:1-6","5:1:12-21","5:3:1-4:1","6:1:1-5","6:1:9-14","6:2:3-7","6:3:3-4:2","6:4:5-7","7:1:3-2:6","7:3:1-3","7:3:8-10","8:1:2-2:1","8:3:2-4:4"];const Megillah=["1:1:1-2","1:1:4","1:1:8-10","1:3:2-3","1:4:2-6","1:4:9-12","1:5:3-7","1:6:3-5","1:7:3-8:3","1:8:4-9:4","1:9:6-9","1:9:10-12","1:9:17-10:1","1:10:4-8","1:11:3-5","1:11:6-7","1:12:3-4","2:1:1-3","2:2:1-6","2:3:2-4:4","2:5:2-6:1","2:7:2-5","3:1:3-5","3:1:10-2:5","3:3:1-4:3","3:5:3-7:1","3:7:3-6","4:1:4-8","4:1:11-13","4:2:2-4:1","4:4:6-5:2","4:5:6-7:2","4:10:3-11:2","4:12:3-6"];const Chagigah=["1:1:1-3","1:1:8-9","1:1:9-18","1:1:20-2:3","1:2:4-4:2","1:6:2-7:3","1:8:4-10","2:1:1-2","2:1:6-9","2:1:11-15","2:2:4-6","2:3:3-4:3","2:5:2-5","2:6:3-7:3","3:1:1-3","3:1:4-7","3:2:4-5","3:2:7","3:2:10-3:3","3:4:1-3","3:5:1-7:1","3:8:2-4"];const Yevamot=["1:1:1-6","1:1:7-10","1:1:14-17","1:1:18-20","1:1:21-24","1:2:2-5","1:2:10-5:2","1:6:2-5","1:6:8-9","2:1:6-2:3","2:2:4-3:1","2:4:2-7","2:4:10-6:5","2:8:3-10:3","2:11:2-12:2","3:1:3-4","3:1:5-6","3:1:8-10","3:2:1-3:2","3:3:4-4:3","3:8:2-9:4","4:1:1-2","4:1:4-6","4:2:3-4","4:2:7-4:2","4:7:3-8:3","4:11:1-4","4:11:6-8","4:12:3-15:3","5:1:1-5","5:1:7-10","5:2:3-4:1","5:4:3-6:1","5:8:1-2","6:1:3-7","6:3:1-2","6:4:5-5:2","6:6:3-6","7:1:3-4","7:1:8-3:2","7:3:3-5","7:4:2-5:4","8:1:1-2","8:1:6-8","8:1:12-15","8:1:18-2:2","8:2:4-6","8:2:9-12","8:3:5-8","8:4:1-6:2","9:1:1-2:2","9:4:4-5:1","10:1:1-2","10:1:5-11","10:1:12-2:2","10:3:2-4","10:5:3-6:4","10:6:7-7:3","10:7:6-8","11:1:1-2","11:1:5-7","11:1:11-2:2","11:2:6-3:1","11:5:5-6:3","11:7:3-8","12:1:8-14","12:1:17-2:4","12:2:6-4:2","12:6:1-6","13:1:2-6","13:1:13-2:6","13:2:8-9","13:6:1-4","13:7:3-8:2","13:14:1-3","14:1:4-2:3","15:1:1-4","15:2:2-3:7","15:3:9-4:4","15:5:2-4","15:8:2-9:3","16:1:2-2:3","16:3:5-4:2","16:5:5-6:4","16:9:2"];const Ketubot=["1:1:1-4","1:1:6-9","1:1:14-17","1:2:5-3:1","1:3:5-4:5","1:5:3-6:3","1:8:2-9:3","1:10:3-4","2:1:1-4","2:2:1-4","2:2:4-3:3","2:4:5-6","2:5:4-7:2","2:7:4-9:4","2:10:3-8","3:1:4-7","3:1:12-13","3:1:16-18","3:3:3-5:1","3:5:4-6:2","3:6:3-7:2","3:8:1-9:3","4:1:1-4","4:1:6-2:1","4:2:3-3:2","4:4:3-7","4:4:8-9","4:4:12-7:1","4:8:4-12","4:9:1-11:3","4:12:2-14:3","5:1:3-4","5:1:6-2:2","5:3:1-4:1","5:5:2-3","5:5:4-6:3","5:6:5-7:5","5:8:3-10:1","6:1:2-3","6:3:2-4:2","6:5:2-6:3","6:7:1-4","7:1:1-3","7:2:1-5:1","7:6:6-7","7:7:3-5","7:8:2-9:3","8:2:2-4:2","8:6:2-9:1","8:10:3","9:1:1-2","9:1:5-7","9:1:12","9:3:1-4:2","9:5:3-6:2","9:7:6-8:1","9:9:1-10:1","10:1:1-6","10:2:3-4:1","10:4:4-5:2","11:1:1-5","11:2:4-3:2","11:4:2-6:2","11:7:1-8","12:2:2-3:3","12:3:8-10","12:3:14-5:2","13:1:2-5","13:2:3-3:1","13:3:4-4:3","13:7:1-8:2","13:10:2-11:3"];const Sotah=["1:1:1-6","1:1:9-10","1:2:1-5","1:2:7-10","1:3:2-4:3","1:5:1-6:1","1:7:4-8:5","1:8:11-10:4","2:1:2-4","2:1:9-2:5","2:2:9-4:1","2:5:1-5","2:5:6-6:1","3:1:4-2:1","3:3:2-4:1","3:4:6-11","3:5:3-6:5","3:6:6-8:2","4:1:3-2:2","4:4:1-5:3","5:1:5","5:2:3-5","5:2:6-8","5:2:11-3:2","5:4:3-5:6","6:1:1-2","6:2:4-3:1","6:3:2-4:4","7:1:1-5","7:2:2-3:2","7:4:4-7","7:4:9-5:3","7:5:6-6:3","8:1:1-2","8:2:2-3:3","8:3:6-9","8:3:12-4:3","8:5:5-8:1","8:9:2-10:1","9:1:2-6","9:2:1-7","9:4:2-5:4","9:5:7-6:3","9:8:1-11:2","9:11:8-13:2","9:14:1-15:6","9:16:1-4"];const Nedarim=["1:1:1-3","1:1:7-10","1:1:14-2:2","1:3:1-9","2:1:1-2","2:2:2-3:2","2:4:2-4","3:1:2-4","3:2:1-5","3:2:9-3:2","3:4:3-5:3","3:7:1-9:1","4:1:1-3","4:2:4-3:3","4:5:2-7:2","4:10:2-3","5:1:1-2","5:1:5-3:3","5:5:1-6:1","6:1:2-2:2","6:4:2-3","6:8:1-6","6:8:10-14","7:1:1-5","7:3:2-6:2","8:1:1-5","8:2:2-4:2","8:6:1-7:3","9:1:2-6","9:2:3-4:2","9:5:2-8:1","10:1:3-4","10:2:3-4:2","10:6:1-7:2","10:8:4-9","11:1:2-4","11:1:8-2:3","11:3:5-4:3","11:7:1-11:1","11:12:6"];const Nazir=["1:1:1-3","1:1:7-9","1:2:5-7","1:2:9-3:2","2:1:1-2","2:1:4-2:2","2:4:1-5:1","2:5:3-7:2","2:9:1-2","2:10:2-3","3:1:1-3","3:2:2","3:4:1-2","3:5:3-5","3:5:7-6:1","4:1:1-2","4:2:2-3:5","4:4:3-7","4:5:1-6:1","5:1:1-3","5:1:6-7","5:1:9-12","5:2:3-3:3","6:1:1-2","6:1:4-6","6:1:7-9","6:1:11-14","6:2:5-3:2","6:3:5-4:3","6:6:2-7:2","6:9:1-5","6:9:9-11:2","7:1:2-6","7:1:11-20","7:2:1-4","7:2:7-11","7:3:4-6","7:4:2-3","8:1:2-3","8:1:5-9","8:2:2-8","9:1:1-3","9:1:4-6","9:2:3-6","9:2:10-3:2","9:3:7-4:2","9:5:2-6:1"];const Gittin=["1:1:1-3","1:1:3-4","1:1:5-6","1:1:7-8","1:2:2-5","1:3:2-4:1","1:4:3-5","1:5:2-4","2:1:1-2","2:1:4-6","2:2:2-3:1","2:3:3-7","2:3:8-4:3","2:6:1-7:3","3:1:3-6","3:2:2-3:1","3:4:1-5:3","3:6:3-7:2","3:8:1-4","4:1:2-2:3","4:2:5-3:1","4:3:4-4:2","4:4:5-6","4:4:7-6:2","4:7:1-8:3","5:1:1-5","5:1:7-11","5:3:3-6","5:4:1-4","5:5:2-4","5:6:4-7:2","5:7:5-9:2","5:9:6-10:3","6:1:1-5","6:1:6-9","6:2:3-4","6:4:2-5:4","6:6:2-7:2","7:1:3-7","7:1:10-3:2","7:3:4-6","7:4:2-5","7:5:1-6:3","8:1:1-3","8:1:3-2:1","8:3:3-9","8:4:3-6:2","8:8:2-10:2","8:10:4-6","9:1:4-6","9:3:2-5","9:5:2-6:2","9:7:2-4","9:8:5-11:1"];const Kiddushin=["1:1:1-7","1:1:13-18","1:1:18-19","1:1:21-25","1:1:30-2:1","1:2:3-6","1:2:7","1:2:10-13","1:2:15-20","1:2:23-24","1:2:27-29","1:3:1-6","1:3:8-11","1:3:13-4:3","1:4:6-9","1:4:11-5:3","1:5:8-11","1:5:14-6:3","1:6:4-7:2","1:7:4-8","1:7:14-18","1:8:2-6","2:1:1-2","2:1:5-8","2:1:10-11","2:1:14-2:1","2:4:2-5","2:5:2-6:3","2:7:4-7","2:7:9-8:3","3:1:1-4","3:1:6-8","3:1:11-2:1","3:2:5-6","3:3:2-3","3:4:4-7","3:5:3-7","3:6:3-8:1","3:8:4-10:1","3:12:1-5","3:12:9-13:3","4:1:4-7","4:1:8-12","4:2:3-3:3","4:4:2-5:1","4:6:3-7:1","4:8:1-11:1","4:11:3-12:2"];const Shevuot=["1:1:1-2","1:1:3-5","1:1:5-2:1","1:2:3-7","1:3:2-4:2","1:4:3-5","1:6:3-8","1:7:2-3","2:1:4-7","2:1:9-11","2:3:2-5:1","3:1:2-3","3:2:2-3:2","3:4:2-4","3:4:8-5:2","3:5:3-7:2","3:7:7-8:4","3:8:9-9:5","4:1:1-20","4:2:3-3:1","4:3:4-5:2","4:7:1-9:2","5:1:1-2","5:1:4-2:4","5:3:4-4:2","5:4:4","5:5:1-6:1","6:1:2-4","6:1:7-2:4","6:3:2-4:2","6:5:1-3","6:6:3-7:2","6:8:4","7:1:3-4","7:1:6-8","7:2:4-4:2","7:5:4-6:2","7:7:2-4","7:7:9-8:3","8:1:2-5","8:1:9","8:1:12-2:3","8:3:2-4","8:3:5-6"];const Makkot=["1:1:1-4","1:2:2-4","1:3:2-4:2","1:6:2-7:3","2:1:1-3:1","2:5:1-6:1","2:6:7-11","3:1:1-3:1","3:7:1-11:1"];const Sanhedrin=["1:1:1-6","1:1:11-17","1:1:29-2:1","1:2:8-13","1:2:19-26","1:2:33-38","1:2:45-3:4","1:3:7-4:2","1:4:7-10","2:1:3-6","2:2:4-3:7","2:4:2-5:3","2:6:4-12","3:2:1-3:2","3:4:2-5:4","3:5:7-11","3:6:3-7:1","3:9:1-11","3:9:19-21","3:10:2-12:1","4:1:2-2:2","4:5:2-7:1","4:7:6-9:1","5:1:1-8","5:2:3-4","5:3:4-4:2","6:1:1-2","6:3:2-5:2","6:6:5-7:3","7:1:1-2","7:1:4-2:4","7:5:2-3","7:5:5-6","7:6:3-5","7:6:6-7:1","7:7:4-8:2","7:8:7-9:3","7:9:7-10:2","7:10:4-8","7:11:2-12:1","7:13:3-7","8:2:4-3:4","8:6:5-7:1","8:8:3-9:3","9:1:5-9","9:1:14-2:1","9:3:2-3","9:5:1-6:3","10:1:1-8","10:1:13-22","10:2:3-7","10:2:15-19","10:2:23-4:2","10:6:1-7:2","11:1:2-3:2","11:4:3-4","11:5:4-6:2"];const Horayot=["1:1:1-3","1:1:4-7","1:1:8-2:1","1:2:3-5","1:2:8-3:3","1:4:2-6:2","1:6:2-8:2","2:1:1-2","2:2:2-4:2","2:4:2-5:4","2:7:1-3","3:1:2-2:3","3:2:7-11","3:2:11-13","3:2:15-19","3:2:25-30","3:2:35-3:4","3:4:3-9","3:5:7-9"];const Niddah=["1:1:1-4","1:1:7-2:2","1:3:4-7","1:4:5-5:2","1:5:4-6:2","2:1:1-5","2:2:3-4:2","2:6:1-7:2","3:1:1-2:1","3:2:5-9","3:4:1-5","3:4:7-5:3"];var vilnaMap = {Berakhot:Berakhot,Peah:Peah,Demai:Demai,Kilayim:Kilayim,Sheviit:Sheviit,Terumot:Terumot,Maasrot:Maasrot,"Maaser Sheni":["1:1:1-3","1:1:5-10","1:1:13-16","1:1:19-20","1:2:2-5","1:2:8-3:1","1:3:2-4","2:1:1-2","2:1:8-10","2:1:14-16","2:2:3-6","2:3:2-6","2:3:9-4:1","3:1:1-4","3:2:2-5","3:2:6-3:1","3:3:7-9","3:4:3-5:3","3:5:7-6:4","3:6:5-9","4:1:4-7","4:1:10-2:3","4:2:7-3:4","4:3:8-4:2","4:4:6-5:1","4:5:2-6:1","4:6:5-9","5:1:1-4","5:1:10-2:1","5:2:9-3:1","5:3:5-9","5:4:5-5:1","5:5:8-12"],Challah:Challah,Orlah:Orlah,Bikkurim:Bikkurim,Shabbat:Shabbat,Eruvin:Eruvin,Pesachim:Pesachim,Beitzah:Beitzah,"Rosh Hashanah":["1:1:1-2","1:1:3-5","1:1:8","1:1:10-11","1:1:12-15","1:2:1-4","1:2:6-3:4","1:3:6-4:3","1:7:1-6","1:8:4","2:1:3-7","2:1:8-4:1","2:4:6-5:3","2:6:1-8:4","3:1:3-5","3:1:10-3:4","3:5:4-6:2","4:1:1-2","4:2:2-4:2","4:6:3-7:3","4:8:3-10:2","4:10:5"],Yoma:Yoma,Sukkah:Sukkah,Taanit:Taanit,Shekalim:Shekalim,Megillah:Megillah,Chagigah:Chagigah,"Moed Katan":["1:1:1-2","1:1:4-2:2","1:2:3-3:1","1:4:4-5:2","1:5:2-4","1:7:2-8:1","1:9:2-10:5","2:1:5-2:3","2:3:3-4:3","3:1:1-6","3:1:10-14","3:1:16-3:1","3:5:1-4","3:5:6-10","3:5:14-16","3:5:19-23","3:6:1-7:5","3:7:12-17","3:8:3-9:2"],Yevamot:Yevamot,Ketubot:Ketubot,Sotah:Sotah,Nedarim:Nedarim,Nazir:Nazir,Gittin:Gittin,Kiddushin:Kiddushin,"Bava Kamma":["1:1:1","1:1:3-7","1:1:8","1:1:10-2:2","1:2:3-4","1:2:5-3:1","2:1:1-2","2:1:5-2:2","2:2:2-3:2","2:4:2-5:3","2:5:3-6:3","3:1:2-4","3:1:7-2:2","3:3:4-4:4","3:4:5-5:2","3:6:2-9:1","3:10:1-11:2","4:1:2-5","4:1:6-2:3","4:4:3-5","4:5:2-3","4:5:3-6:3","5:1:1-2","5:2:1-5:1","5:6:1-7:1","5:7:6-8:3","6:1:3-2:4","6:2:5-4:2","6:5:2-7:2","7:1:1-2","7:2:1-3:2","7:3:2-4:1","7:4:3-5:2","8:1:1-4","8:2:2-3:3","8:5:1-6:1","8:8:1-2","9:1:3-3:1","9:5:1-4","9:5:5-6:2","9:8:1-9:2","10:1:1-2","10:1:5-2:3","10:6:1-8:2"],"Bava Metzia":["1:1:1-2","1:1:3-3:2","1:4:2","1:5:1-6:2","1:6:3-7:3","2:1:1-3","2:3:2-4:3","2:5:2-7","2:8:2-10:2","3:1:1-2","3:2:1-3:2","3:4:2-6:2","3:7:1-9:3","4:1:2-5","4:2:1-4","4:2:7-3:2","4:3:4-5:1","4:6:1-7:2","5:1:3-7","5:2:2-3:1","5:3:7-8","5:4:7-5:4","5:5:9-6:2","5:6:4-7:1","6:1:1-3","6:2:2-3:3","6:4:2-6:2","7:1:4-3:1","7:6:1-7:2","8:2:1-3:2","8:4:2-7:1","9:1:1-3:1","9:5:2-7:2","9:8:2-10:2","9:12:2-13:2","10:2:1-4:1","10:5:2-6:3"],"Bava Batra":["1:1:1-2","1:3:2-4:2","1:5:3-6","2:1:4-2:2","2:3:5-4:2","2:5:2-7:1","2:10:1-11:2","3:1:3-5","3:1:6-3:2","3:4:1-5:1","3:5:6-8:1","3:8:4-10:2","4:1:1-2:1","4:4:2-8:1","4:8:4","5:1:3-4","5:1:7-4:1","6:1:1-2","6:1:6-2:1","7:1:1-2","7:2:2-4:2","8:1:2-2:1","8:2:7-4:1","8:5:2-3","8:7:1-4","8:8:3-5","9:1:4-5","9:3:1-4:1","9:5:3-6:3","9:7:2-9:1","10:1:6-9","10:4:1-5:1","10:6:4-9:2","10:10:2-4"],Shevuot:Shevuot,Makkot:Makkot,Sanhedrin:Sanhedrin,"Avodah Zarah":["1:1:1-3","1:1:8-11","1:2:3-9","1:3:3-4:2","1:4:3-5:1","1:6:1-5","1:7:1-9:1","1:9:5-10:2","2:1:2-5","2:1:11-2:4","2:2:9-14","2:3:7-15","2:3:19-4:3","2:4:10-7:1","2:7:3-10","2:8:4-10","2:9:2-4","3:1:1-9","3:2:2-3:3","3:4:2-5:3","3:5:5-8","3:6:2-4","3:6:4-7:2","3:8:4-11:2","4:1:1-3","4:1:7-3:1","4:4:4-9","4:5:2-7:3","4:8:3-9:1","4:10:1-11:2","5:1:1-3","5:1:5-3:1","5:3:5-4:3","5:4:8-7:1","5:8:3-10:4","5:11:4-12:1","5:13:2-15:1"],Horayot:Horayot,Niddah:Niddah};
|
|
5331
|
-
|
|
5332
|
-
const vilnaStartDate = new Date(1980, 1, 2);
|
|
5333
|
-
/**
|
|
5334
|
-
* Yerushalmi Yomi configuration for Vilna Edition
|
|
5335
|
-
* @readonly
|
|
5336
|
-
*/
|
|
5337
|
-
const vilna = {
|
|
5338
|
-
ed: 'vilna',
|
|
5339
|
-
startDate: vilnaStartDate,
|
|
5340
|
-
startAbs: greg2abs(vilnaStartDate),
|
|
5341
|
-
skipYK9Av: true,
|
|
5342
|
-
shas: [['Berakhot', 68], ['Peah', 37], ['Demai', 34], ['Kilayim', 44], ['Sheviit', 31], ['Terumot', 59], ['Maasrot', 26], ['Maaser Sheni', 33], ['Challah', 28], ['Orlah', 20], ['Bikkurim', 13], ['Shabbat', 92], ['Eruvin', 65], ['Pesachim', 71], ['Beitzah', 22], ['Rosh Hashanah', 22], ['Yoma', 42], ['Sukkah', 26], ['Taanit', 26], ['Shekalim', 33], ['Megillah', 34], ['Chagigah', 22], ['Moed Katan', 19], ['Yevamot', 85], ['Ketubot', 72], ['Sotah', 47], ['Nedarim', 40], ['Nazir', 47], ['Gittin', 54], ['Kiddushin', 48], ['Bava Kamma', 44], ['Bava Metzia', 37], ['Bava Batra', 34], ['Shevuot', 44], ['Makkot', 9], ['Sanhedrin', 57], ['Avodah Zarah', 37], ['Horayot', 19], ['Niddah', 13]]
|
|
5343
|
-
};
|
|
5344
|
-
const schottensteinStartDate = new Date(2022, 10, 14);
|
|
5345
|
-
/**
|
|
5346
|
-
* Yerushalmi Yomi configuration for Schottenstein Edition
|
|
5347
|
-
* @readonly
|
|
5348
|
-
*/
|
|
5349
|
-
const schottenstein = {
|
|
5350
|
-
ed: 'schottenstein',
|
|
5351
|
-
startDate: schottensteinStartDate,
|
|
5352
|
-
startAbs: greg2abs(schottensteinStartDate),
|
|
5353
|
-
skipYK9Av: false,
|
|
5354
|
-
shas: [['Berakhot', 94], ['Peah', 73], ['Demai', 77], ['Kilayim', 84], ['Sheviit', 87], ['Terumot', 107], ['Maasrot', 46], ['Maaser Sheni', 59], ['Challah', 49], ['Orlah', 42], ['Bikkurim', 26], ['Shabbat', 113], ['Eruvin', 71], ['Pesachim', 86], ['Shekalim', 61], ['Yoma', 57], ['Sukkah', 33], ['Beitzah', 49], ['Rosh Hashanah', 27], ['Taanit', 31], ['Megillah', 41], ['Chagigah', 28], ['Moed Katan', 23], ['Yevamot', 88], ['Ketubot', 77], ['Nedarim', 42], ['Nazir', 53], ['Sotah', 52], ['Gittin', 53], ['Kiddushin', 53], ['Bava Kamma', 40], ['Bava Metzia', 35], ['Bava Batra', 39], ['Sanhedrin', 75], ['Shevuot', 49], ['Avodah Zarah', 34], ['Makkot', 11], ['Horayot', 18], ['Niddah', 11]]
|
|
5355
|
-
};
|
|
5356
|
-
const SUN = 0;
|
|
5357
|
-
const SAT$1 = 6;
|
|
5358
|
-
|
|
5359
|
-
/**
|
|
5360
|
-
* Using the Vilna edition, the Yerushalmi Daf Yomi program takes
|
|
5361
|
-
* ~4.25 years or 51 months.
|
|
5362
|
-
* Unlike the Daf Yomi Bavli cycle, this Yerushalmi cycle skips both
|
|
5363
|
-
* Yom Kippur and Tisha B'Av (returning `null`).
|
|
5364
|
-
* The page numbers are according to the Vilna
|
|
5365
|
-
* Edition which is used since 1900.
|
|
5366
|
-
*
|
|
5367
|
-
* The Schottenstein edition uses different page numbers and takes
|
|
5368
|
-
* ~6 years to complete.
|
|
5369
|
-
*
|
|
5370
|
-
* Throws an exception if the date is before Daf Yomi Yerushalmi
|
|
5371
|
-
* cycle began (2 February 1980 for Vilna,
|
|
5372
|
-
* 14 November 2022 for Schottenstein).
|
|
5373
|
-
*
|
|
5374
|
-
* @param {HDate|Date|number} date - Hebrew or Gregorian date
|
|
5375
|
-
* @param {any} config - either vilna or schottenstein
|
|
5376
|
-
* @return {any}
|
|
5377
|
-
*/
|
|
5378
|
-
function yerushalmiYomi(date, config) {
|
|
5379
|
-
if (typeof config !== 'object' || !Array.isArray(config.shas)) {
|
|
5380
|
-
throw new Error('invalid yerushalmi config');
|
|
5381
|
-
}
|
|
5382
|
-
const cday = typeof date === 'number' && !isNaN(date) ? date : isDate(date) ? greg2abs(date) : HDate.isHDate(date) ? date.abs() : throwTypeError(`non-date given to dafyomi: ${date}`);
|
|
5383
|
-
const startAbs = config.startAbs;
|
|
5384
|
-
if (cday < startAbs) {
|
|
5385
|
-
throw new RangeError(`Date ${date} too early; Yerushalmi Yomi cycle began on ${config.startDate}`);
|
|
5386
|
-
}
|
|
5387
|
-
const hd = new HDate(cday);
|
|
5388
|
-
// No Daf for Yom Kippur and Tisha B'Av
|
|
5389
|
-
if (config.skipYK9Av && skipDay(hd)) {
|
|
5390
5045
|
return null;
|
|
5391
5046
|
}
|
|
5392
|
-
const shas = config.shas;
|
|
5393
|
-
let numDapim = 0;
|
|
5394
|
-
for (let j = 0; j < shas.length; j++) {
|
|
5395
|
-
numDapim += shas[j][1];
|
|
5396
|
-
}
|
|
5397
|
-
let prevCycle = startAbs;
|
|
5398
|
-
let nextCycle = startAbs;
|
|
5399
|
-
while (cday >= nextCycle) {
|
|
5400
|
-
prevCycle = nextCycle;
|
|
5401
|
-
nextCycle += numDapim;
|
|
5402
|
-
nextCycle += numSpecialDays(config, prevCycle, nextCycle);
|
|
5403
|
-
}
|
|
5404
|
-
let total = cday - prevCycle - numSpecialDays(config, prevCycle, cday);
|
|
5405
|
-
for (let j = 0; j < shas.length; j++) {
|
|
5406
|
-
const masechet = shas[j];
|
|
5407
|
-
if (total < masechet[1]) {
|
|
5408
|
-
return {
|
|
5409
|
-
name: masechet[0],
|
|
5410
|
-
blatt: total + 1,
|
|
5411
|
-
ed: config.ed
|
|
5412
|
-
};
|
|
5413
|
-
}
|
|
5414
|
-
total -= masechet[1];
|
|
5415
|
-
}
|
|
5416
|
-
throw new Error('Interal error, this code should be unreachable');
|
|
5417
|
-
}
|
|
5418
|
-
|
|
5419
|
-
/**
|
|
5420
|
-
* @private
|
|
5421
|
-
* @param {HDate} hd
|
|
5422
|
-
* @return {boolean}
|
|
5423
|
-
*/
|
|
5424
|
-
function skipDay(hd) {
|
|
5425
|
-
if (hd.getMonth() === months.TISHREI && hd.getDate() === 10 || hd.getMonth() === months.AV && (hd.getDate() === 9 && hd.getDay() !== SAT$1 || hd.getDate() === 10 && hd.getDay() === SUN)) {
|
|
5426
|
-
return true;
|
|
5427
|
-
}
|
|
5428
|
-
return false;
|
|
5429
|
-
}
|
|
5430
|
-
|
|
5431
|
-
/**
|
|
5432
|
-
* @private
|
|
5433
|
-
* @param {any} config
|
|
5434
|
-
* @param {number} startAbs
|
|
5435
|
-
* @param {number} endAbs
|
|
5436
|
-
* @return {number}
|
|
5437
|
-
*/
|
|
5438
|
-
function numSpecialDays(config, startAbs, endAbs) {
|
|
5439
|
-
if (!config.skipYK9Av) {
|
|
5440
|
-
return 0;
|
|
5441
|
-
}
|
|
5442
|
-
const startYear = new HDate(startAbs).getFullYear();
|
|
5443
|
-
const endYear = new HDate(endAbs).getFullYear();
|
|
5444
|
-
let specialDays = 0;
|
|
5445
|
-
for (let year = startYear; year <= endYear; year++) {
|
|
5446
|
-
const ykAbs = new HDate(10, months.TISHREI, year).abs();
|
|
5447
|
-
if (ykAbs >= startAbs && ykAbs <= endAbs) {
|
|
5448
|
-
specialDays++;
|
|
5449
|
-
}
|
|
5450
|
-
let av9dt = new HDate(9, months.AV, year);
|
|
5451
|
-
if (av9dt.getDay() == SAT$1) {
|
|
5452
|
-
av9dt = av9dt.next();
|
|
5453
|
-
}
|
|
5454
|
-
const av9abs = av9dt.abs();
|
|
5455
|
-
if (av9abs >= startAbs && av9abs <= endAbs) {
|
|
5456
|
-
specialDays++;
|
|
5457
|
-
}
|
|
5458
|
-
}
|
|
5459
|
-
return specialDays;
|
|
5460
|
-
}
|
|
5461
|
-
|
|
5462
|
-
/**
|
|
5463
|
-
* Event wrapper around a Yerushalmi Yomi result
|
|
5464
|
-
*/
|
|
5465
|
-
class YerushalmiYomiEvent extends Event {
|
|
5466
|
-
/**
|
|
5467
|
-
* @param {HDate} date
|
|
5468
|
-
* @param {any} daf
|
|
5469
|
-
*/
|
|
5470
|
-
constructor(date, daf) {
|
|
5471
|
-
super(date, `${daf.name} ${daf.blatt}`, flags.YERUSHALMI_YOMI);
|
|
5472
|
-
this.daf = daf;
|
|
5473
|
-
}
|
|
5474
|
-
/**
|
|
5475
|
-
* Returns name of tractate and page (e.g. "Yerushalmi Beitzah 21").
|
|
5476
|
-
* @param {string} [locale] Optional locale name (defaults to active locale).
|
|
5477
|
-
* @return {string}
|
|
5478
|
-
*/
|
|
5479
|
-
render(locale) {
|
|
5480
|
-
const prefix = Locale.gettext('Yerushalmi', locale);
|
|
5481
|
-
return prefix + ' ' + this.renderBrief(locale);
|
|
5482
|
-
}
|
|
5483
|
-
/**
|
|
5484
|
-
* Returns name of tractate and page (e.g. "Beitzah 21").
|
|
5485
|
-
* @param {string} [locale] Optional locale name (defaults to active locale).
|
|
5486
|
-
* @return {string}
|
|
5487
|
-
*/
|
|
5488
|
-
renderBrief(locale) {
|
|
5489
|
-
locale = locale || Locale.getLocaleName();
|
|
5490
|
-
if (typeof locale === 'string') {
|
|
5491
|
-
locale = locale.toLowerCase();
|
|
5492
|
-
}
|
|
5493
|
-
const name = Locale.gettext(this.daf.name, locale);
|
|
5494
|
-
if (locale === 'he' || locale === 'he-x-nonikud') {
|
|
5495
|
-
return name + ' דף ' + gematriya(this.daf.blatt);
|
|
5496
|
-
}
|
|
5497
|
-
return name + ' ' + this.daf.blatt;
|
|
5498
|
-
}
|
|
5499
|
-
/**
|
|
5500
|
-
* Returns a link to sefaria.org
|
|
5501
|
-
* @return {string}
|
|
5502
|
-
*/
|
|
5503
|
-
url() {
|
|
5504
|
-
const daf = this.daf;
|
|
5505
|
-
if (daf.ed !== 'vilna') {
|
|
5506
|
-
return undefined;
|
|
5507
|
-
}
|
|
5508
|
-
const tractate = daf.name;
|
|
5509
|
-
const pageMap = vilnaMap[tractate];
|
|
5510
|
-
if (!Array.isArray(pageMap)) {
|
|
5511
|
-
return undefined;
|
|
5512
|
-
}
|
|
5513
|
-
const idx = daf.blatt - 1;
|
|
5514
|
-
const verses0 = pageMap[idx];
|
|
5515
|
-
if (typeof verses0 !== 'string') {
|
|
5516
|
-
return undefined;
|
|
5517
|
-
}
|
|
5518
|
-
const name0 = 'Jerusalem Talmud ' + tractate;
|
|
5519
|
-
const name = name0.replace(/ /g, '_');
|
|
5520
|
-
const verses = verses0.replace(/:/g, '.');
|
|
5521
|
-
return `https://www.sefaria.org/${name}.${verses}?lang=bi`;
|
|
5522
|
-
}
|
|
5523
5047
|
}
|
|
5524
5048
|
|
|
5525
5049
|
const NISAN$1 = months.NISAN;
|
|
@@ -5586,7 +5110,9 @@ function getYahrzeit_(hyear, gdate) {
|
|
|
5586
5110
|
function getBirthdayOrAnniversary_(hyear, gdate) {
|
|
5587
5111
|
const orig = HDate.isHDate(gdate) ? gdate : new HDate(gdate);
|
|
5588
5112
|
const origYear = orig.getFullYear();
|
|
5589
|
-
if (hyear
|
|
5113
|
+
if (hyear === origYear) {
|
|
5114
|
+
return orig;
|
|
5115
|
+
} else if (hyear < origYear) {
|
|
5590
5116
|
// `Hebrew year ${hyear} occurs on or before original date in ${origYear}`
|
|
5591
5117
|
return undefined;
|
|
5592
5118
|
}
|
|
@@ -5608,7 +5134,7 @@ function getBirthdayOrAnniversary_(hyear, gdate) {
|
|
|
5608
5134
|
return new HDate(day, month, hyear);
|
|
5609
5135
|
}
|
|
5610
5136
|
|
|
5611
|
-
const version="
|
|
5137
|
+
const version="4.0.0";
|
|
5612
5138
|
|
|
5613
5139
|
const headers$1={"plural-forms":"nplurals=2; plural=(n > 1);"};const contexts$1={"":{Berachot:["Berachos"],Shabbat:["Shabbos"],Taanit:["Taanis"],Yevamot:["Yevamos"],Ketubot:["Kesubos"],"Baba Batra":["Baba Basra"],Makkot:["Makkos"],Shevuot:["Shevuos"],Horayot:["Horayos"],Menachot:["Menachos"],Bechorot:["Bechoros"],Keritot:["Kerisos"],Midot:["Midos"],"Achrei Mot":["Achrei Mos"],Bechukotai:["Bechukosai"],"Beha'alotcha":["Beha'aloscha"],Bereshit:["Bereshis"],Chukat:["Chukas"],"Erev Shavuot":["Erev Shavuos"],"Erev Sukkot":["Erev Sukkos"],"Ki Tavo":["Ki Savo"],"Ki Teitzei":["Ki Seitzei"],"Ki Tisa":["Ki Sisa"],Matot:["Matos"],"Purim Katan":["Purim Koton"],Tazria:["Sazria"],"Shabbat Chazon":["Shabbos Chazon"],"Shabbat HaChodesh":["Shabbos HaChodesh"],"Shabbat HaGadol":["Shabbos HaGadol"],"Shabbat Nachamu":["Shabbos Nachamu"],"Shabbat Parah":["Shabbos Parah"],"Shabbat Shekalim":["Shabbos Shekalim"],"Shabbat Shuva":["Shabbos Shuvah"],"Shabbat Zachor":["Shabbos Zachor"],Shavuot:["Shavuos"],"Shavuot I":["Shavuos I"],"Shavuot II":["Shavuos II"],Shemot:["Shemos"],"Shmini Atzeret":["Shmini Atzeres"],"Simchat Torah":["Simchas Torah"],Sukkot:["Sukkos"],"Sukkot I":["Sukkos I"],"Sukkot II":["Sukkos II"],"Sukkot II (CH''M)":["Sukkos II (CH''M)"],"Sukkot III (CH''M)":["Sukkos III (CH''M)"],"Sukkot IV (CH''M)":["Sukkos IV (CH''M)"],"Sukkot V (CH''M)":["Sukkos V (CH''M)"],"Sukkot VI (CH''M)":["Sukkos VI (CH''M)"],"Sukkot VII (Hoshana Raba)":["Sukkos VII (Hoshana Raba)"],"Ta'anit Bechorot":["Ta'anis Bechoros"],"Ta'anit Esther":["Ta'anis Esther"],Toldot:["Toldos"],Vaetchanan:["Vaeschanan"],Yitro:["Yisro"],"Vezot Haberakhah":["Vezos Haberakhah"],Parashat:["Parshas"],"Leil Selichot":["Leil Selichos"],"Shabbat Mevarchim Chodesh":["Shabbos Mevorchim Chodesh"],"Shabbat Shirah":["Shabbos Shirah"],Tevet:["Teves"],"Asara B'Tevet":["Asara B'Teves"],Berakhot:["Berakhos"],Sheviit:["Sheviis"],Terumot:["Terumos"],Maasrot:["Maasros"],Eduyot:["Eduyos"],Avot:["Avos"],Bekhorot:["Bekhoros"],Middot:["Middos"],Oholot:["Oholos"],Tahorot:["Tahoros"],Mikvaot:["Mikvaos"],"Alot HaShachar":["Alos HaShachar"],"Kriat Shema, sof zeman":["Krias Shema, sof zman"],"Tefilah, sof zeman":["Tefilah, sof zman"],"Kriat Shema, sof zeman (MGA)":["Krias Shema, sof zman (MGA)"],"Tefilah, sof zeman (MGA)":["Tefilah, sof zman (MGA)"],"Chatzot HaLailah":["Chatzos HaLailah"],"Chatzot hayom":["Chatzos"],"Tzeit HaKochavim":["Tzeis HaKochavim"],"Birkat Hachamah":["Birkas Hachamah"],"Shushan Purim Katan":["Shushan Purim Koton"]}};var poAshkenazi = {headers:headers$1,contexts:contexts$1};
|
|
5614
5140
|
|
|
@@ -5877,9 +5403,6 @@ const RECOGNIZED_OPTIONS = {
|
|
|
5877
5403
|
noRoshChodesh: 1,
|
|
5878
5404
|
noSpecialShabbat: 1,
|
|
5879
5405
|
noHolidays: 1,
|
|
5880
|
-
dafyomi: 1,
|
|
5881
|
-
mishnaYomi: 1,
|
|
5882
|
-
nachYomi: 1,
|
|
5883
5406
|
omer: 1,
|
|
5884
5407
|
molad: 1,
|
|
5885
5408
|
ashkenazi: 1,
|
|
@@ -5891,8 +5414,7 @@ const RECOGNIZED_OPTIONS = {
|
|
|
5891
5414
|
userMask: 1,
|
|
5892
5415
|
yomKippurKatan: 1,
|
|
5893
5416
|
hour12: 1,
|
|
5894
|
-
|
|
5895
|
-
yerushalmiEdition: 1
|
|
5417
|
+
dailyLearning: 1
|
|
5896
5418
|
};
|
|
5897
5419
|
|
|
5898
5420
|
/**
|
|
@@ -6001,11 +5523,6 @@ function checkCandleOptions(options) {
|
|
|
6001
5523
|
* @property {boolean} shabbatMevarchim - add Shabbat Mevarchim
|
|
6002
5524
|
* @property {boolean} noSpecialShabbat - suppress Special Shabbat
|
|
6003
5525
|
* @property {boolean} noHolidays - suppress regular holidays
|
|
6004
|
-
* @property {boolean} dafyomi - Babylonian Talmud Daf Yomi
|
|
6005
|
-
* @property {boolean} yerushalmi - Jerusalem Talmud (Yerushalmi) Yomi
|
|
6006
|
-
* @property {number} yerushalmiEdition - Use 1 for Vilna, 2 for Schottenstein
|
|
6007
|
-
* @property {boolean} mishnaYomi - include Mishna Yomi
|
|
6008
|
-
* @property {boolean} nachYomi - include Nach Yomi
|
|
6009
5526
|
* @property {boolean} omer - include Days of the Omer
|
|
6010
5527
|
* @property {boolean} molad - include event announcing the molad
|
|
6011
5528
|
* @property {boolean} ashkenazi - use Ashkenazi transliterations for event titles (default Sephardi transliterations)
|
|
@@ -6025,6 +5542,9 @@ function checkCandleOptions(options) {
|
|
|
6025
5542
|
* See {@link https://en.wikipedia.org/wiki/Yom_Kippur_Katan#Practices Wikipedia Yom Kippur Katan practices}
|
|
6026
5543
|
* @property {boolean} hour12 - Whether to use 12-hour time (as opposed to 24-hour time).
|
|
6027
5544
|
* Possible values are `true` and `false`; the default is locale dependent.
|
|
5545
|
+
* @property {Object<string,any>} dailyLearning - map of options to enable daily study calendars
|
|
5546
|
+
* such as `dafYomi`, `mishnaYomi`, `nachYomi` with value `true`. For `yerushalmi`
|
|
5547
|
+
* the value should be a `number` for edition (`1` for Vilna, `2` for Schottenstein).
|
|
6028
5548
|
*/
|
|
6029
5549
|
|
|
6030
5550
|
/**
|
|
@@ -6122,13 +5642,25 @@ function getMaskFromOptions(options) {
|
|
|
6122
5642
|
if (m & MINOR_FAST) delete options.noMinorFast;
|
|
6123
5643
|
if (m & SPECIAL_SHABBAT) delete options.noSpecialShabbat;
|
|
6124
5644
|
if (m & PARSHA_HASHAVUA) options.sedrot = true;
|
|
6125
|
-
if (m & DAF_YOMI)
|
|
5645
|
+
if (m & DAF_YOMI) {
|
|
5646
|
+
options.dailyLearning = options.dailyLearning || {};
|
|
5647
|
+
options.dailyLearning.dafYomi = true;
|
|
5648
|
+
}
|
|
6126
5649
|
if (m & OMER_COUNT) options.omer = true;
|
|
6127
5650
|
if (m & SHABBAT_MEVARCHIM) options.shabbatMevarchim = true;
|
|
6128
|
-
if (m & flags.MISHNA_YOMI)
|
|
6129
|
-
|
|
5651
|
+
if (m & flags.MISHNA_YOMI) {
|
|
5652
|
+
options.dailyLearning = options.dailyLearning || {};
|
|
5653
|
+
options.dailyLearning.mishnaYomi = true;
|
|
5654
|
+
}
|
|
5655
|
+
if (m & flags.NACH_YOMI) {
|
|
5656
|
+
options.dailyLearning = options.dailyLearning || {};
|
|
5657
|
+
options.dailyLearning.nachYomi = true;
|
|
5658
|
+
}
|
|
6130
5659
|
if (m & flags.YOM_KIPPUR_KATAN) options.yomKippurKatan = true;
|
|
6131
|
-
if (m & flags.YERUSHALMI_YOMI)
|
|
5660
|
+
if (m & flags.YERUSHALMI_YOMI) {
|
|
5661
|
+
options.dailyLearning = options.dailyLearning || {};
|
|
5662
|
+
options.dailyLearning.yerushalmi = 1;
|
|
5663
|
+
}
|
|
6132
5664
|
options.userMask = true;
|
|
6133
5665
|
return m;
|
|
6134
5666
|
}
|
|
@@ -6165,15 +5697,6 @@ function getMaskFromOptions(options) {
|
|
|
6165
5697
|
if (options.sedrot) {
|
|
6166
5698
|
mask |= PARSHA_HASHAVUA;
|
|
6167
5699
|
}
|
|
6168
|
-
if (options.dafyomi) {
|
|
6169
|
-
mask |= DAF_YOMI;
|
|
6170
|
-
}
|
|
6171
|
-
if (options.mishnaYomi) {
|
|
6172
|
-
mask |= flags.MISHNA_YOMI;
|
|
6173
|
-
}
|
|
6174
|
-
if (options.nachYomi) {
|
|
6175
|
-
mask |= flags.NACH_YOMI;
|
|
6176
|
-
}
|
|
6177
5700
|
if (options.omer) {
|
|
6178
5701
|
mask |= OMER_COUNT;
|
|
6179
5702
|
}
|
|
@@ -6183,8 +5706,20 @@ function getMaskFromOptions(options) {
|
|
|
6183
5706
|
if (options.yomKippurKatan) {
|
|
6184
5707
|
mask |= flags.YOM_KIPPUR_KATAN;
|
|
6185
5708
|
}
|
|
6186
|
-
if (options.
|
|
6187
|
-
|
|
5709
|
+
if (options.dailyLearning) {
|
|
5710
|
+
const dailyLearning = options.dailyLearning;
|
|
5711
|
+
if (dailyLearning.dafYomi) {
|
|
5712
|
+
mask |= DAF_YOMI;
|
|
5713
|
+
}
|
|
5714
|
+
if (dailyLearning.mishnaYomi) {
|
|
5715
|
+
mask |= flags.MISHNA_YOMI;
|
|
5716
|
+
}
|
|
5717
|
+
if (dailyLearning.nachYomi) {
|
|
5718
|
+
mask |= flags.NACH_YOMI;
|
|
5719
|
+
}
|
|
5720
|
+
if (dailyLearning.yerushalmi) {
|
|
5721
|
+
mask |= flags.YERUSHALMI_YOMI;
|
|
5722
|
+
}
|
|
6188
5723
|
}
|
|
6189
5724
|
return mask;
|
|
6190
5725
|
}
|
|
@@ -6262,14 +5797,16 @@ class HebrewCalendar {
|
|
|
6262
5797
|
* Additional non-default event types can be specified:
|
|
6263
5798
|
* * Parashat HaShavua - weekly Torah Reading on Saturdays (`options.sedrot`)
|
|
6264
5799
|
* * Counting of the Omer (`options.omer`)
|
|
6265
|
-
* * Babylonian Talmud Daf Yomi (`options.dafyomi`)
|
|
6266
|
-
* * Jerusalem Talmud (Yerushalmi) Yomi (`options.yerushalmi`)
|
|
6267
|
-
* * Mishna Yomi (`options.mishnaYomi`)
|
|
6268
|
-
* * Nach Yomi (`options.nachYomi`)
|
|
6269
5800
|
* * Shabbat Mevarchim HaChodesh on Saturday before Rosh Chodesh (`options.shabbatMevarchim`)
|
|
6270
5801
|
* * Molad announcement on Saturday before Rosh Chodesh (`options.molad`)
|
|
6271
5802
|
* * Yom Kippur Katan (`options.yomKippurKatan`)
|
|
6272
5803
|
*
|
|
5804
|
+
* Daily Study of texts:
|
|
5805
|
+
* * Babylonian Talmud Daf Yomi (`options.dailyLearning.dafYomi`)
|
|
5806
|
+
* * Jerusalem Talmud (Yerushalmi) Yomi (`options.dailyLearning.yerushalmi`)
|
|
5807
|
+
* * Mishna Yomi (`options.dailyLearning.mishnaYomi`)
|
|
5808
|
+
* * Nach Yomi (`options.dailyLearning.nachYomi`)
|
|
5809
|
+
*
|
|
6273
5810
|
* Candle-lighting and Havdalah times are approximated using latitude and longitude
|
|
6274
5811
|
* specified by the {@link Location} class. The `Location` class contains a small
|
|
6275
5812
|
* database of cities with their associated geographic information and time-zone information.
|
|
@@ -6367,15 +5904,6 @@ class HebrewCalendar {
|
|
|
6367
5904
|
if (startGreg.getFullYear() < 100) {
|
|
6368
5905
|
options.candlelighting = false;
|
|
6369
5906
|
}
|
|
6370
|
-
let mishnaYomiIndex;
|
|
6371
|
-
if (options.mishnaYomi) {
|
|
6372
|
-
mishnaYomiIndex = new MishnaYomiIndex();
|
|
6373
|
-
}
|
|
6374
|
-
let nachYomiIndex;
|
|
6375
|
-
if (options.nachYomi) {
|
|
6376
|
-
nachYomiIndex = new NachYomiIndex();
|
|
6377
|
-
}
|
|
6378
|
-
const yerushalmiCfg = options.yerushalmiEdition === 2 ? schottenstein : vilna;
|
|
6379
5907
|
for (let abs = startAbs; abs <= endAbs; abs++) {
|
|
6380
5908
|
const hd = new HDate(abs);
|
|
6381
5909
|
const hyear = hd.getFullYear();
|
|
@@ -6403,23 +5931,19 @@ class HebrewCalendar {
|
|
|
6403
5931
|
evts.push(new ParshaEvent(hd, parsha0.parsha, il, parsha0.num));
|
|
6404
5932
|
}
|
|
6405
5933
|
}
|
|
6406
|
-
|
|
6407
|
-
|
|
6408
|
-
|
|
6409
|
-
|
|
6410
|
-
|
|
6411
|
-
|
|
6412
|
-
|
|
6413
|
-
|
|
6414
|
-
|
|
6415
|
-
|
|
6416
|
-
|
|
6417
|
-
|
|
6418
|
-
|
|
6419
|
-
}
|
|
6420
|
-
if (options.nachYomi && abs >= nachYomiStart) {
|
|
6421
|
-
const nachYomi = nachYomiIndex.lookup(abs);
|
|
6422
|
-
evts.push(new NachYomiEvent(hd, nachYomi));
|
|
5934
|
+
const dailyLearning = options.dailyLearning;
|
|
5935
|
+
if (typeof dailyLearning === 'object') {
|
|
5936
|
+
Object.entries(dailyLearning).forEach(kv => {
|
|
5937
|
+
const key = kv[0];
|
|
5938
|
+
const val = kv[1];
|
|
5939
|
+
if (val) {
|
|
5940
|
+
const name = key === 'yerushalmi' ? val === 2 ? 'yerushalmi-schottenstein' : 'yerushalmi-vilna' : key;
|
|
5941
|
+
const learningEv = DailyLearning.lookup(name, hd);
|
|
5942
|
+
if (learningEv) {
|
|
5943
|
+
evts.push(learningEv);
|
|
5944
|
+
}
|
|
5945
|
+
}
|
|
5946
|
+
});
|
|
6423
5947
|
}
|
|
6424
5948
|
if (options.omer && abs >= beginOmer && abs <= endOmer) {
|
|
6425
5949
|
const omer = abs - beginOmer + 1;
|
|
@@ -6746,4 +6270,4 @@ function appendHolidayAndRelated(events, ev, options, candlesEv, dow) {
|
|
|
6746
6270
|
return candlesEv;
|
|
6747
6271
|
}
|
|
6748
6272
|
|
|
6749
|
-
export { AsaraBTevetEvent, CandleLightingEvent,
|
|
6273
|
+
export { AsaraBTevetEvent, CandleLightingEvent, DailyLearning, Event, HDate, HavdalahEvent, HebrewCalendar, HebrewDateEvent, HolidayEvent, Locale, Location, MevarchimChodeshEvent, Molad, MoladEvent, OmerEvent, ParshaEvent, RoshChodeshEvent, RoshHashanaEvent, Sedra, SolarCalc, TimedEvent, Zmanim, flags, gematriya, greg, months, parshiot, version };
|