jcal-zmanim 1.0.4

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.
Files changed (50) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +2 -0
  3. package/build/AppUtils.d.ts +109 -0
  4. package/build/AppUtils.js +394 -0
  5. package/build/GeneralUtils.d.ts +43 -0
  6. package/build/GeneralUtils.js +93 -0
  7. package/build/JCal/Dafyomi.d.ts +27 -0
  8. package/build/JCal/Dafyomi.js +131 -0
  9. package/build/JCal/Location.d.ts +33 -0
  10. package/build/JCal/Location.js +80 -0
  11. package/build/JCal/Molad.d.ts +39 -0
  12. package/build/JCal/Molad.js +95 -0
  13. package/build/JCal/PirkeiAvos.d.ts +13 -0
  14. package/build/JCal/PirkeiAvos.js +172 -0
  15. package/build/JCal/Sedra.d.ts +63 -0
  16. package/build/JCal/Sedra.js +186 -0
  17. package/build/JCal/Utils.d.ts +225 -0
  18. package/build/JCal/Utils.js +666 -0
  19. package/build/JCal/Zmanim.d.ts +95 -0
  20. package/build/JCal/Zmanim.js +224 -0
  21. package/build/JCal/jDate.d.ts +203 -0
  22. package/build/JCal/jDate.js +647 -0
  23. package/build/Locations.d.ts +7 -0
  24. package/build/Locations.js +1308 -0
  25. package/build/Notifications.d.ts +14 -0
  26. package/build/Notifications.js +1040 -0
  27. package/build/Settings.d.ts +25 -0
  28. package/build/Settings.js +75 -0
  29. package/build/ZmanTypes.d.ts +34 -0
  30. package/build/ZmanTypes.js +184 -0
  31. package/build/index.d.ts +1 -0
  32. package/build/index.js +59 -0
  33. package/package.json +33 -0
  34. package/src/AppUtils.ts +500 -0
  35. package/src/GeneralUtils.ts +84 -0
  36. package/src/JCal/Dafyomi.ts +139 -0
  37. package/src/JCal/Location.ts +100 -0
  38. package/src/JCal/Molad.ts +105 -0
  39. package/src/JCal/PirkeiAvos.ts +180 -0
  40. package/src/JCal/Sedra.ts +215 -0
  41. package/src/JCal/Utils.ts +732 -0
  42. package/src/JCal/Zmanim.ts +270 -0
  43. package/src/JCal/jDate.ts +714 -0
  44. package/src/Locations.ts +1303 -0
  45. package/src/Notifications.ts +1243 -0
  46. package/src/Settings.ts +103 -0
  47. package/src/ZmanTypes.ts +184 -0
  48. package/src/index.ts +31 -0
  49. package/src/jcal-zmanim.d.ts +4 -0
  50. package/tsconfig.json +109 -0
@@ -0,0 +1,1243 @@
1
+ import Utils from './JCal/Utils';
2
+ import Settings from './Settings';
3
+ import jDate from './JCal/jDate';
4
+ import Molad from './JCal/Molad';
5
+ import PirkeiAvos from './JCal/PirkeiAvos';
6
+ import AppUtils, { DaysOfWeek } from './AppUtils';
7
+ import Location from './JCal/Location';
8
+ import { Time } from './jcal-zmanim';
9
+
10
+ type DayInfo = {
11
+ jdate: jDate,
12
+ sdate: Date,
13
+ month: number,
14
+ day: number,
15
+ dow: number,
16
+ isAfterChatzosHayom: boolean,
17
+ isAfterChatzosHalayla: boolean,
18
+ isAfterAlos: boolean,
19
+ isAfterShkia: boolean,
20
+ isDaytime: boolean,
21
+ isNightTime: boolean,
22
+ isMorning: boolean,
23
+ isAfternoon: boolean,
24
+ isYomTov: boolean,
25
+ isLeapYear: boolean,
26
+ noTachnun: boolean,
27
+ location: Location,
28
+ }
29
+ const dayNotes: string[] = [];
30
+ const tefillahNotes: string[] = [];
31
+ let showEnglish = false,
32
+ dayInfo: DayInfo,
33
+ showGaonShirShelYom = true,
34
+ israel = true;
35
+
36
+ /**
37
+ * Get shul notifications for the given date and location
38
+ * @param {jDate} jdate
39
+ * @param {Date} sdate
40
+ * @param {Time} time
41
+ * @param {Settings} settings
42
+ */
43
+ export default function getNotifications(jdate: jDate, sdate: Date, time: Time, settings: Settings) {
44
+ dayNotes.length = 0;
45
+ tefillahNotes.length = 0;
46
+ const month = jdate.Month,
47
+ day = jdate.Day,
48
+ dow = jdate.DayOfWeek,
49
+ { location, showGaonShir, showDafYomi, english } = settings,
50
+ {
51
+ chatzosHayom,
52
+ chatzosHalayla,
53
+ alos,
54
+ shkia,
55
+ } = AppUtils.getBasicShulZmanim(jdate, sdate, location),
56
+ isAfterChatzosHayom = Utils.isTimeAfter(chatzosHayom, time),
57
+ isAfterChatzosHalayla = (typeof (chatzosHalayla) !== 'undefined') &&
58
+ (Utils.isTimeAfter(chatzosHalayla, time) ||
59
+ (chatzosHalayla.hour > 12 && time.hour < 12)), //Chatzos is before 0:00 and time is after 0:00
60
+ isAfterAlos = Utils.isTimeAfter(alos, time),
61
+ isAfterShkia = Utils.isTimeAfter(shkia, time),
62
+ isDaytime = isAfterAlos && !isAfterShkia,
63
+ isNightTime = !isDaytime,
64
+ isNotBeinHasmashos =
65
+ !isAfterShkia ||
66
+ Utils.isTimeAfter(Utils.addMinutes(shkia, 18), time),
67
+ isMorning = isDaytime && !isAfterChatzosHayom,
68
+ isAfternoon = isDaytime && isAfterChatzosHayom,
69
+ isYomTov = jdate.isYomTovOrCholHamoed(location.Israel),
70
+ isLeapYear = jDate.isJdLeapY(jdate.Year),
71
+ noTachnun = isAfternoon && (dow === DaysOfWeek.FRIDAY || day === 29);
72
+
73
+ dayInfo = {
74
+ jdate,
75
+ sdate,
76
+ month,
77
+ day,
78
+ dow,
79
+ isAfterChatzosHayom,
80
+ isAfterChatzosHalayla,
81
+ isAfterAlos,
82
+ isAfterShkia,
83
+ isDaytime,
84
+ isNightTime,
85
+ isMorning,
86
+ isAfternoon,
87
+ isYomTov,
88
+ isLeapYear,
89
+ noTachnun,
90
+ location,
91
+ };
92
+ showEnglish = english;
93
+ showGaonShirShelYom = showGaonShir;
94
+ israel = location.Israel;
95
+
96
+ if (dow === DaysOfWeek.SHABBOS) {
97
+ getShabbosNotifications();
98
+ } else {
99
+ getWeekDayNotifications();
100
+ }
101
+ getAroundTheYearNotifications();
102
+
103
+ if (dayInfo.noTachnun && isDaytime && !isYomTov) {
104
+ if (dow !== DaysOfWeek.SHABBOS) {
105
+ addTefillahNote('No Tachnun', 'א"א תחנון');
106
+ } else if (isAfternoon) {
107
+ addTefillahNote('No Tzidkascha', 'א"א צדקתך');
108
+ } else if (
109
+ !(
110
+ (month === 1 && day > 21) ||
111
+ month === 2 ||
112
+ (month === 3 && day < 6)
113
+ )
114
+ ) {
115
+ addTefillahNote('No Av Harachamim', 'א"א אב הרחמים');
116
+ }
117
+ }
118
+ if (showDafYomi) {
119
+ addDayNote(jdate.getDafYomi(), jdate.getDafyomiHeb());
120
+ }
121
+
122
+ //If it is after the earliest Nacht during Sefiras Ha'omer
123
+ if (
124
+ isNotBeinHasmashos &&
125
+ ((month === 1 && day > 15) || month === 2 || (month === 3 && day < 6))
126
+ ) {
127
+ const dayOfSefirah = jdate.getDayOfOmer();
128
+ if (dayOfSefirah > 0) {
129
+ addTefillahNote(Utils.getOmerNusach(dayOfSefirah, 'ashkenaz'));
130
+ }
131
+ }
132
+
133
+ //return only unique values
134
+ return {
135
+ dayNotes: [...new Set(dayNotes)],
136
+ tefillahNotes: [...new Set(tefillahNotes)],
137
+ };
138
+ }
139
+
140
+ function getShabbosNotifications() {
141
+ const {
142
+ month,
143
+ day,
144
+ isLeapYear,
145
+ isMorning,
146
+ isYomTov,
147
+ jdate,
148
+ isDaytime,
149
+ isAfternoon,
150
+ } = dayInfo;
151
+ if (month === 1 && day > 7 && day < 15) {
152
+ addDayNote('Shabbos Hagadol', 'שבת הגדול');
153
+ } else if (month === 7 && day > 2 && day < 10) {
154
+ addDayNote('Shabbos Shuva', 'שבת שובה');
155
+ } else if (month === 5 && day > 2 && day < 10) {
156
+ addDayNote('Shabbos Chazon', 'שבת חזון');
157
+ } else if (
158
+ (month === (isLeapYear ? 12 : 11) && day > 24) ||
159
+ (month === (isLeapYear ? 13 : 12) && day === 1)
160
+ ) {
161
+ addDayNote('Parshas Shkalim', 'פרשת שקלים');
162
+ } else if (month === (isLeapYear ? 13 : 12) && day > 7 && day < 14) {
163
+ addDayNote('Parshas Zachor', 'פרשת זכור');
164
+ } else if (month === (isLeapYear ? 13 : 12) && day > 16 && day < 24) {
165
+ addDayNote('Parshas Parah', 'פרשת פרה');
166
+ } else if (
167
+ (month === (isLeapYear ? 13 : 12) && day > 23 && day < 30) ||
168
+ (month === 1 && day === 1)
169
+ ) {
170
+ addDayNote('Parshas Hachodesh', 'פרשת החודש');
171
+ }
172
+ if (isMorning && !isYomTov) {
173
+ const sedra = jdate.getSedra(israel);
174
+ if (sedra.sedras.length > 0) {
175
+ addTefillahNote(
176
+ `Kriyas Hatorah Parshas ${sedra.toString()}`,
177
+ `קה"ת פרשת ${sedra.toStringHeb()}`,
178
+ );
179
+ }
180
+ //All months but Tishrei have Shabbos Mevarchim on the Shabbos before Rosh Chodesh
181
+ if (month !== 6 && day > 22 && day < 30) {
182
+ const nextMonth = jdate.addMonths(1);
183
+ addTefillahNote(
184
+ 'The molad will be ' +
185
+ Molad.getString(nextMonth.Year, nextMonth.Month),
186
+ 'המולד יהיה ב' +
187
+ Molad.getStringHeb(nextMonth.Year, nextMonth.Month),
188
+ );
189
+ addTefillahNote('Bircas Hachodesh', 'מברכים החודש');
190
+ if (month !== 1 && month !== 2) {
191
+ addTefillahNote('No Av Harachamim', 'א"א אב הרחמים');
192
+ }
193
+ }
194
+ }
195
+ //Rosh Chodesh
196
+ if (month !== 7 && (day === 1 || day === 30)) {
197
+ addDayNote('Rosh Chodesh', 'ראש חודש');
198
+ addTefillahNote('Ya`aleh Viyavo', 'יעלה ויבא');
199
+ if (showGaonShirShelYom && isDaytime) {
200
+ addTefillahNote('Barchi Nafshi', 'שיר של יום - קי"ד - ברכי נפשי');
201
+ }
202
+ //Rosh Chodesh Teves is during Chanuka
203
+ if (isDaytime && month !== 10 && !(month === 9 && day === 30)) {
204
+ addTefillahNote('Chatzi Hallel', 'חצי הלל');
205
+ }
206
+ addTefillahNote('No Av Harachamim', 'א"א אב הרחמים');
207
+ } else if (isYomTov) {
208
+ addTefillahNote('No Av Harachamim', 'א"א אב הרחמים');
209
+ if (showGaonShirShelYom && isDaytime) {
210
+ addTefillahNote('שיר של יום - מזמור שיר ליום השבת');
211
+ }
212
+ }
213
+ //Kriyas Hatora - Shabbos by mincha - besides for Yom Kippur
214
+ if (isAfternoon && !(month === 7 && day === 10)) {
215
+ const sedra = jdate.addDays(1).getSedra(israel);
216
+ addTefillahNote(
217
+ 'Kriyas Hatorah Mincha Parshas ' + sedra.sedras[0].eng,
218
+ 'קה"ת במנחה פרשת ' + sedra.sedras[0].heb,
219
+ );
220
+ }
221
+ if (
222
+ isAfternoon &&
223
+ ((month === 1 && day > 21) ||
224
+ (month <= 6 && !(month === 5 && [8, 9].includes(day))))
225
+ ) {
226
+ const prakim = PirkeiAvos.getPrakim(jdate, israel);
227
+ if (prakim.length > 0) {
228
+ addDayNote(
229
+ 'Pirkei Avos - ' +
230
+ prakim.map(s => `Perek ${Utils.toJNum(s)}`).join(' and '),
231
+ 'פרקי אבות - ' +
232
+ prakim.map(s => `פרק ${Utils.toJNum(s)}`).join(' ו'),
233
+ );
234
+ }
235
+ }
236
+ }
237
+
238
+ function getWeekDayNotifications() {
239
+ const {
240
+ isNightTime,
241
+ dow,
242
+ isYomTov,
243
+ month,
244
+ day,
245
+ isMorning,
246
+ jdate,
247
+ location,
248
+ isDaytime,
249
+ isAfternoon,
250
+ } = dayInfo;
251
+
252
+ //מוצאי שבת
253
+ if (isNightTime && dow === DaysOfWeek.SUNDAY) {
254
+ //הבדלה בתפילה for מוצאי שבת
255
+ addTefillahNote(
256
+ (month === 1 && day === 15) || (month === 3 && day === 6)
257
+ ? 'ותודיעינו'
258
+ : 'אתה חוננתנו',
259
+ );
260
+ //Motzai Shabbos before Yom Tov - no ויהי נועם
261
+ if (
262
+ (month === 6 && day > 22) ||
263
+ (month === 7 && day < 22 && day !== 3) ||
264
+ (month === 1 && day > 8 && day < 15) ||
265
+ (month === 3 && day < 6)
266
+ ) {
267
+ addTefillahNote('No Vihi Noam', 'א"א ויהי נועם');
268
+ }
269
+ }
270
+ //אתה חוננתנו for מוצאי יו"ט
271
+ else if (
272
+ isNightTime &&
273
+ ((month === 1 && (day === 16 || day === 22)) ||
274
+ (month === 3 && day === 7) ||
275
+ (month === 7 && [3, 11, 16, 23].includes(day)))
276
+ ) {
277
+ addTefillahNote('Ata Chonantanu', 'אתה חוננתנו');
278
+ }
279
+ //Kriyas hatorah for monday and thursday
280
+ //when it's not chol hamoed, chanuka, purim, a fast day or rosh chodesh
281
+ if (
282
+ isMorning &&
283
+ !isYomTov &&
284
+ (dow === DaysOfWeek.MONDAY || dow === DaysOfWeek.THURSDAY) &&
285
+ !hasOwnKriyasHatorah(jdate, location)
286
+ ) {
287
+ const sedra = jdate.getSedra(israel);
288
+ if (sedra.sedras.length > 0) {
289
+ addTefillahNote(
290
+ `Kriyas Hatorah Parshas ${sedra.sedras[0].eng}`,
291
+ `קה"ת פרשת ${sedra.sedras[0].heb}`,
292
+ );
293
+ }
294
+ }
295
+ //Rosh Chodesh
296
+ if ((month !== 7 && day === 1) || day === 30) {
297
+ dayInfo.noTachnun = true;
298
+ addDayNote('Rosh Chodesh', 'ראש חודש');
299
+ addTefillahNote('Ya`aleh Viyavo', 'יעלה ויבא');
300
+ if (showGaonShirShelYom && isDaytime) {
301
+ addTefillahNote('Barchi Nafshi', 'שיר של יום - קי"ד - ברכי נפשי');
302
+ }
303
+ //Rosh Chodesh Teves is during Chanuka
304
+ if (isDaytime && month !== 10 && !(month === 9 && day === 30)) {
305
+ addTefillahNote('Chatzi Hallel', 'חצי הלל');
306
+ if (isMorning && dow !== DaysOfWeek.SHABBOS) {
307
+ noLaminatzeach();
308
+ }
309
+ }
310
+ }
311
+ //Yom Kippur Kattan
312
+ else if (
313
+ month !== 6 &&
314
+ ((dow < DaysOfWeek.FRIDAY && day === 29) ||
315
+ (dow === DaysOfWeek.THURSDAY && day === 28)) &&
316
+ isAfternoon
317
+ ) {
318
+ addTefillahNote('Yom Kippur Kattan', 'יו"כ קטן');
319
+ }
320
+ if (jdate.hasEiruvTavshilin(israel)) {
321
+ addDayNote('Eruv Tavshilin', 'עירוב תבשילין');
322
+ }
323
+ }
324
+
325
+ function getAroundTheYearNotifications() {
326
+ const {
327
+ month,
328
+ day,
329
+ isNightTime,
330
+ dow,
331
+ isAfternoon,
332
+ isDaytime,
333
+ isMorning,
334
+ isAfterChatzosHalayla,
335
+ jdate,
336
+ isLeapYear,
337
+ location,
338
+ } = dayInfo;
339
+ switch (month) {
340
+ case 1: //Nissan
341
+ dayInfo.noTachnun = true;
342
+ if (day > 15) {
343
+ addTefillahNote('Morid Hatal', 'מוריד הטל');
344
+ }
345
+ if (dow !== DaysOfWeek.SHABBOS && day > 15 && day !== 21) {
346
+ addTefillahNote('Vesain Bracha', 'ותן ברכה');
347
+ }
348
+ if (
349
+ isMorning &&
350
+ dow !== DaysOfWeek.SHABBOS &&
351
+ [14, 16, 17, 18, 19, 20].includes(day)
352
+ ) {
353
+ addTefillahNote('No Mizmor Lesodah', 'א"א מזמור לתודה');
354
+ if (dow !== DaysOfWeek.SHABBOS) {
355
+ noLaminatzeach();
356
+ }
357
+ }
358
+ if (day === 15) {
359
+ addDayNote('First Day of Pesach', 'יו"ט ראשון של פסח');
360
+ addTefillahNote('Full Hallel', 'הלל השלם');
361
+ if (isAfternoon) {
362
+ addTefillahNote('Morid Hatal', 'מוריד הטל');
363
+ }
364
+ if (
365
+ showGaonShirShelYom &&
366
+ isDaytime &&
367
+ dow !== DaysOfWeek.SHABBOS
368
+ ) {
369
+ addTefillahNote('שיר של יום - קי"ד - בצאת ישראל');
370
+ }
371
+ addTefillahNote('Ya`aleh V`yavo', 'יעלה ויבא');
372
+ } else if (day === 16 && !israel) {
373
+ addDayNote('Second Day of Pesach', 'יו"ט שני של פסח');
374
+ addTefillahNote('Full Hallel', 'הלל השלם');
375
+ addTefillahNote('Morid Hatal', 'מוריד הטל');
376
+ if (
377
+ showGaonShirShelYom &&
378
+ isDaytime &&
379
+ dow !== DaysOfWeek.SHABBOS
380
+ ) {
381
+ addTefillahNote('שיר של יום - קי"ד - בצאת ישראל');
382
+ }
383
+ addTefillahNote('Ya`aleh V`yavo', 'יעלה ויבא');
384
+ } else if ([16, 17, 18, 19, 20, 21].includes(day)) {
385
+ if (day === 21) {
386
+ addDayNote('Shvi`i Shel Pesach', 'שביעי של פםח');
387
+ if (isDaytime) {
388
+ if (israel) {
389
+ addTefillahNote('Yizkor', 'יזכור');
390
+ }
391
+ if (showGaonShirShelYom && dow !== DaysOfWeek.SHABBOS) {
392
+ addTefillahNote(
393
+ 'שיר של יום - י"ח - למנצח לעבד ה\'',
394
+ );
395
+ }
396
+ }
397
+ } else {
398
+ addDayNote('Chol Ha`moed Pesach', 'פסח - חול המועד');
399
+ addTefillahNote('Ya`aleh Viyavo', 'יעלה ויבא');
400
+ if (isMorning && dow !== DaysOfWeek.SHABBOS)
401
+ noLaminatzeach();
402
+ if (
403
+ showGaonShirShelYom &&
404
+ isDaytime &&
405
+ dow !== DaysOfWeek.SHABBOS
406
+ ) {
407
+ switch (day) {
408
+ case 16:
409
+ if (dow === DaysOfWeek.SUNDAY) {
410
+ addTefillahNote(
411
+ 'שיר של יום - קי"ד - בצאת ישראל',
412
+ );
413
+ } else {
414
+ addTefillahNote(
415
+ 'שיר של יום - ע"ח - משכיל לאסף',
416
+ );
417
+ }
418
+ break;
419
+ case 17:
420
+ if (dow === DaysOfWeek.MONDAY) {
421
+ addTefillahNote(
422
+ 'שיר של יום - ע"ח - משכיל לאסף',
423
+ );
424
+ } else {
425
+ addTefillahNote(
426
+ "שיר של יום - פ' - למנצח אל שושנים",
427
+ );
428
+ }
429
+ break;
430
+ case 18:
431
+ if (
432
+ dow === DaysOfWeek.TUESDAY ||
433
+ dow === DaysOfWeek.SUNDAY
434
+ ) {
435
+ addTefillahNote(
436
+ "שיר של יום - פ' - למנצח אל שושנים",
437
+ );
438
+ } else {
439
+ addTefillahNote(
440
+ 'שיר של יום - ק"ה - הודו לה\'',
441
+ );
442
+ }
443
+ break;
444
+ case 19:
445
+ if (dow === DaysOfWeek.THURSDAY) {
446
+ addTefillahNote(
447
+ 'שיר של יום - קל"ה - הללוי-ה הללו את שם',
448
+ );
449
+ } else {
450
+ addTefillahNote(
451
+ 'שיר של יום - ק"ה - הודו לה\'',
452
+ );
453
+ }
454
+ break;
455
+ case 20:
456
+ if (dow === DaysOfWeek.FRIDAY) {
457
+ addTefillahNote(
458
+ 'שיר של יום - ס"ו - למנצח שיר מזמור',
459
+ );
460
+ } else {
461
+ addTefillahNote(
462
+ 'שיר של יום - קל"ה - הללוי-ה הללו את שם',
463
+ );
464
+ }
465
+ break;
466
+ }
467
+ }
468
+ }
469
+ if (isDaytime) addTefillahNote('Half Hallel', 'חצי הלל');
470
+ addTefillahNote('Ya`aleh V`yavo', 'יעלה ויבא');
471
+ }
472
+ if (day === 22) {
473
+ if (israel) {
474
+ addDayNote('Isru Chag', 'איסרו חג');
475
+ } else {
476
+ addDayNote('Acharon Shel Pesach', 'אחרון של פסח');
477
+ if (isDaytime) {
478
+ addTefillahNote('Yizkor', 'יזכור');
479
+ addTefillahNote('Half Hallel', 'חצי הלל');
480
+ }
481
+ addTefillahNote('Ya`aleh V`yavo', 'יעלה ויבא');
482
+ }
483
+ if (dow !== DaysOfWeek.SHABBOS && isMorning) {
484
+ noLaminatzeach();
485
+ }
486
+ }
487
+ if (
488
+ dow === DaysOfWeek.SHABBOS &&
489
+ ([15, 16, 17, 18, 19, 20, 21].includes(day) ||
490
+ (!israel && day === 22))
491
+ ) {
492
+ addTefillahNote('Shir Hashirim', 'מגילת שיר השירים');
493
+ }
494
+ break;
495
+ case 2: //Iyar
496
+ if (day <= 15) {
497
+ addTefillahNote('Morid Hatal', 'מוריד הטל');
498
+ if (dow !== DaysOfWeek.SHABBOS) {
499
+ addTefillahNote('V`sain Bracha', 'ותן ברכה');
500
+ }
501
+ }
502
+ //Pesach Sheini and Lag Ba'Omer
503
+ if (
504
+ day === 14 ||
505
+ (day === 13 && isAfternoon) ||
506
+ day === 18 ||
507
+ (day === 17 && isAfternoon)
508
+ ) {
509
+ dayInfo.noTachnun = true;
510
+ if (day === 14) {
511
+ addDayNote('Pesach Sheini', 'פסח שני');
512
+ }
513
+ }
514
+ //Baha"b
515
+ if (
516
+ isMorning &&
517
+ ((dow === DaysOfWeek.MONDAY && day > 3 && day < 13) ||
518
+ (dow === DaysOfWeek.THURSDAY && day > 6 && day < 14) ||
519
+ (dow === DaysOfWeek.MONDAY &&
520
+ day > 10 &&
521
+ day < 18 &&
522
+ day !== 14))
523
+ ) {
524
+ addTefillahNote('Ba`hab', 'סליחות בה"ב');
525
+ addTefillahNote('Avinu Malkeinu', 'אבינו מלכנו');
526
+ }
527
+ break;
528
+ case 3: //Sivan
529
+ if (day < 13) {
530
+ dayInfo.noTachnun = true;
531
+ }
532
+
533
+ if (day === 6) {
534
+ addDayNote('Shavuos', 'יום טוב של שבועות');
535
+ if (isDaytime) {
536
+ addTefillahNote('Full Hallel', 'הלל השלם');
537
+ addTefillahNote('Megilas Rus', 'מגילת רות');
538
+ addTefillahNote('Akdamus', 'אקדמות');
539
+ if (israel) addTefillahNote('Yizkor', 'יזכור');
540
+ if (showGaonShirShelYom) {
541
+ addTefillahNote('שיר של יום - י"ט - ..השמים מספרים..');
542
+ }
543
+ }
544
+ addTefillahNote('Ya`aleh V`yavo', 'יעלה ויבא');
545
+ } else if (day === 7) {
546
+ if (israel) {
547
+ addDayNote('Issru Chag', 'איסרו חג');
548
+ if (isMorning && dow !== DaysOfWeek.SHABBOS) {
549
+ noLaminatzeach();
550
+ }
551
+ } else {
552
+ addDayNote('Shavuos Second Day', 'יום טוב של שבועות');
553
+ if (isDaytime) {
554
+ addTefillahNote('Full Hallel', 'הלל השלם');
555
+ addTefillahNote('Yizkor', 'יזכור');
556
+ }
557
+ addTefillahNote('Ya`aleh V`yavo', 'יעלה ויבא');
558
+ }
559
+ }
560
+
561
+ break;
562
+ case 4: //Tammuz
563
+ if (
564
+ isDaytime &&
565
+ ((day === 17 && DaysOfWeek.SHABBOS !== 6) ||
566
+ (day === 18 && dow === DaysOfWeek.SUNDAY))
567
+ ) {
568
+ if (isDaytime) {
569
+ addDayNote('Shiva Asar B`Tamuz', 'י"ז בתמוז');
570
+ addTefillahNote('Avinu Malkeinu', 'אבינו מלכנו');
571
+ addTefillahNote('Aneinu', 'עננו');
572
+ }
573
+ if (isMorning) {
574
+ addTefillahNote('Selichos', 'סליחות');
575
+ }
576
+ }
577
+ break;
578
+ case 5: //Av
579
+ if (isAfternoon && day === 8 && dow !== DaysOfWeek.FRIDAY) {
580
+ dayInfo.noTachnun = true;
581
+ } else if (
582
+ (day === 9 && dow !== DaysOfWeek.SHABBOS) ||
583
+ (day === 10 && dow === DaysOfWeek.SUNDAY)
584
+ ) {
585
+ addDayNote('Tish B`Av', 'תשעה באב');
586
+ if (isDaytime) {
587
+ addTefillahNote('Kinos', 'קינות');
588
+ addTefillahNote('Aneinu', 'עננו');
589
+ if (isMorning && dow !== DaysOfWeek.SHABBOS) {
590
+ noLaminatzeach();
591
+ }
592
+ } else {
593
+ addTefillahNote('Megilas Eicha', 'מגילת איכה');
594
+ if (isNightTime && dow === DaysOfWeek.SUNDAY) {
595
+ addTefillahNote('No Vihi Noam', 'א"א ויהי נועם');
596
+ }
597
+ }
598
+ dayInfo.noTachnun = true;
599
+ } else if (isAfternoon && day === 14) {
600
+ dayInfo.noTachnun = true;
601
+ } else if (day === 15) {
602
+ addDayNote('Tu B`Av', 'ט"ו באב');
603
+ dayInfo.noTachnun = true;
604
+ }
605
+ break;
606
+ case 6: //Ellul
607
+ addTefillahNote('L`Dovid Hashem Ori', 'לדוד ה');
608
+ if (
609
+ day > 20 &&
610
+ dow !== DaysOfWeek.SHABBOS &&
611
+ (isAfterChatzosHalayla || isMorning)
612
+ ) {
613
+ let startedSelichos = day >= 26;
614
+ if (day < 26) {
615
+ const daysToRH = 30 - day,
616
+ dowRH = (daysToRH + dow) % 7;
617
+ switch (dowRH) {
618
+ case DaysOfWeek.MONDAY:
619
+ startedSelichos = day >= 22;
620
+ break;
621
+ case DaysOfWeek.TUESDAY:
622
+ startedSelichos = day >= 21;
623
+ break;
624
+ case DaysOfWeek.SHABBOS:
625
+ startedSelichos = day >= 24;
626
+ break;
627
+ }
628
+ }
629
+ if (startedSelichos) {
630
+ addTefillahNote('Selichos', 'סליחות');
631
+ }
632
+ }
633
+ if (day === 29) {
634
+ dayInfo.noTachnun = true;
635
+ }
636
+ break;
637
+ case 7: //Tishrei
638
+ if (day < 11) {
639
+ addTefillahNote('Hamelech Hakadosh', 'המלך הקדוש');
640
+ if (dow !== DaysOfWeek.SHABBOS && day !== 9) {
641
+ addTefillahNote('Avinu Malkeinu', 'אבינו מלכנו');
642
+ }
643
+ }
644
+ //Days of Rosh Hashana, Tzom Gedaliah and Yom Kippur are dealt with individually below.
645
+ if (day > 4 && day < 10 && dow !== DaysOfWeek.SHABBOS) {
646
+ addTefillahNote('Selichos', 'סליחות');
647
+ addTefillahNote('Hamelech Hamishpat', 'המלך המשפט');
648
+ }
649
+ if (dow === DaysOfWeek.SHABBOS && day > 2 && day < 10) {
650
+ addDayNote('Shabbos Shuva', 'שבת שובה');
651
+ }
652
+ if (day >= 10) {
653
+ dayInfo.noTachnun = true;
654
+ }
655
+ switch (day) {
656
+ case 1:
657
+ addDayNote('Rosh Hashana', 'ראש השנה');
658
+ if (dow !== DaysOfWeek.SHABBOS && isDaytime) {
659
+ addTefillahNote('Tekias Shofar', 'תקיעת שופר');
660
+ if (showGaonShirShelYom) {
661
+ addTefillahNote(
662
+ 'שיר של יום - פ"א - למנצח על הגתית',
663
+ );
664
+ }
665
+ if (isAfternoon) {
666
+ addDayNote('Tashlich', 'תשליך');
667
+ }
668
+ }
669
+ addTefillahNote('Ya`aleh V`yavo', 'יעלה ויבא');
670
+ break;
671
+ case 2:
672
+ addDayNote('Rosh Hashana', 'ראש השנה');
673
+ if (isDaytime) {
674
+ addTefillahNote('Tekias Shofar', 'תקיעת שופר');
675
+ if (showGaonShirShelYom) {
676
+ addTefillahNote(
677
+ 'שיר של יום - פ"א - למנצח על הגתית',
678
+ );
679
+ }
680
+ if (dow === DaysOfWeek.SUNDAY && isAfternoon) {
681
+ addDayNote('Tashlich', 'תשליך');
682
+ }
683
+ }
684
+ addTefillahNote('Ya`aleh V`yavo', 'יעלה ויבא');
685
+ break;
686
+ case 3:
687
+ if (dow !== DaysOfWeek.SHABBOS) {
688
+ if (isDaytime) {
689
+ addDayNote('Fast of Tzom Gedalya', 'צום גדליה');
690
+ addTefillahNote('Aneinu', 'עננו');
691
+ }
692
+ if (isAfterChatzosHalayla || isMorning) {
693
+ addTefillahNote('Selichos', 'סליחות');
694
+ }
695
+ addTefillahNote('Hamelech Hamishpat', 'המלך המשפט');
696
+ }
697
+ break;
698
+ case 4:
699
+ if (dow === DaysOfWeek.SUNDAY) {
700
+ if (isDaytime) {
701
+ addDayNote('Fast of Tzom Gedalya', 'צום גדליה');
702
+ addTefillahNote('Aneinu', 'עננו');
703
+ }
704
+ if (isAfterChatzosHalayla || isMorning) {
705
+ addTefillahNote('Selichos', 'סליחות');
706
+ }
707
+ addTefillahNote('Hamelech Hamishpat', 'המלך המשפט');
708
+ } else if (dow !== DaysOfWeek.SHABBOS) {
709
+ addTefillahNote('Hamelech Hamishpat', 'המלך המשפט');
710
+ if (isAfterChatzosHalayla || isMorning) {
711
+ addTefillahNote('Selichos', 'סליחות');
712
+ }
713
+ }
714
+ break;
715
+ case 9:
716
+ addDayNote('Erev Yom Kippur', 'ערב יום כיפור');
717
+ if (isMorning) {
718
+ addTefillahNote('No Mizmor L`Sodah', 'א"א מזמור לתודה');
719
+ if (dow !== DaysOfWeek.SHABBOS) {
720
+ noLaminatzeach();
721
+ }
722
+ if (dow === DaysOfWeek.FRIDAY) {
723
+ addTefillahNote('Avinu Malkeinu', 'אבינו מלכנו');
724
+ }
725
+ } else if (isAfternoon) {
726
+ addTefillahNote('Vidduy', 'ודוי בעמידה');
727
+ }
728
+ if (isDaytime && dow !== DaysOfWeek.FRIDAY) {
729
+ addTefillahNote('No Avinu Malkeinu', 'א"א אבינו מלכנו');
730
+ }
731
+ dayInfo.noTachnun = true;
732
+ break;
733
+ case 10:
734
+ addDayNote('Yom Kippur', 'יום הכיפורים');
735
+ addDayNote("לפני ה' תטהרו");
736
+ if (isDaytime) {
737
+ addTefillahNote('Yizkor', 'יזכור');
738
+ if (showGaonShirShelYom && dow !== DaysOfWeek.SHABBOS) {
739
+ addTefillahNote('שיר של יום - ל"ב - לדוד משכיל');
740
+ }
741
+ }
742
+ if (isAfternoon) {
743
+ //only Yom Kippur has its own Kriyas Hatorah
744
+ addTefillahNote('קה"ת במנחה סוף פרשת אח"מ');
745
+ }
746
+ break;
747
+ case 15:
748
+ addDayNote('First day of Sukkos', 'יו"ט ראשון של סוכות');
749
+ addTefillahNote('Ya`aleh V`yavo', 'יעלה ויבא');
750
+ if (isDaytime) {
751
+ addTefillahNote('Full Hallel', 'הלל השלם');
752
+ if (dow !== DaysOfWeek.SHABBOS) {
753
+ addTefillahNote(
754
+ 'Hoshanos - למען אמתך',
755
+ 'הושענות - למען אמתך',
756
+ );
757
+ addTefillahNote('Kah Keli', 'קה קלי');
758
+ if (showGaonShirShelYom) {
759
+ addTefillahNote(
760
+ 'שיר של יום - ע"ו - למנצח בנגינות מזמור',
761
+ );
762
+ }
763
+ } else {
764
+ addTefillahNote(
765
+ 'Hoshanos - אום נצורה',
766
+ 'הושענות - אום נצורה',
767
+ );
768
+ }
769
+ }
770
+ break;
771
+ case 16:
772
+ case 17:
773
+ case 18:
774
+ case 19:
775
+ case 20:
776
+ addTefillahNote('Ya`aleh V`yavo', 'יעלה ויבא');
777
+ if (day === 16 && !israel) {
778
+ addDayNote(
779
+ 'Second day of Sukkos',
780
+ 'סוכות - יום טוב שני',
781
+ );
782
+ } else if (!israel) {
783
+ addDayNote('Chol Hamoed Sukkos', 'סוכות - חול המועד');
784
+ addTefillahNote('Ya`aleh V`yavo', 'יעלה ויבא');
785
+ }
786
+ if (isDaytime) {
787
+ addTefillahNote('Full Hallel', 'הלל השלם');
788
+ switch (day) {
789
+ case 16:
790
+ addTefillahNote(
791
+ 'הושענות - ' +
792
+ (dow === DaysOfWeek.SUNDAY
793
+ ? 'למען אמתך'
794
+ : 'אבן שתיה'),
795
+ );
796
+ if (
797
+ showGaonShirShelYom &&
798
+ dow !== DaysOfWeek.SHABBOS
799
+ ) {
800
+ addTefillahNote(
801
+ 'שיר של יום - כ"ט - ..הבו לה\' בני אלים',
802
+ );
803
+ }
804
+ break;
805
+ case 17:
806
+ addTefillahNote(
807
+ (showEnglish ? 'Hoshanos' : 'הושענות') +
808
+ ' - ' +
809
+ (dow === DaysOfWeek.SHABBOS
810
+ ? 'אום נצורה'
811
+ : 'אערוך שועי'),
812
+ );
813
+ if (
814
+ showGaonShirShelYom &&
815
+ dow !== DaysOfWeek.SHABBOS
816
+ ) {
817
+ addTefillahNote(
818
+ "שיר של יום - נ' - מזמור לאסף",
819
+ );
820
+ }
821
+ break;
822
+ case 18:
823
+ if (dow === DaysOfWeek.SUNDAY) {
824
+ addTefillahNote(
825
+ (showEnglish ? 'Hoshanos' : 'הושענות') +
826
+ ' - ' +
827
+ 'אערוך שועי',
828
+ );
829
+ if (showGaonShirShelYom) {
830
+ addTefillahNote(
831
+ "שיר של יום - נ' - מזמור לאסף",
832
+ );
833
+ }
834
+ } else {
835
+ if (dow === DaysOfWeek.TUESDAY) {
836
+ addTefillahNote(
837
+ (showEnglish
838
+ ? 'Hoshanos'
839
+ : 'הושענות') +
840
+ ' - ' +
841
+ 'אבן שתיה',
842
+ );
843
+ } else if (dow === DaysOfWeek.THURSDAY) {
844
+ addTefillahNote(
845
+ (showEnglish
846
+ ? 'Hoshanos'
847
+ : 'הושענות') +
848
+ ' - ' +
849
+ 'אום אני חומה',
850
+ );
851
+ } else if (dow === DaysOfWeek.FRIDAY) {
852
+ addTefillahNote(
853
+ (showEnglish
854
+ ? 'Hoshanos'
855
+ : 'הושענות') +
856
+ ' - ' +
857
+ 'א-ל למושעות',
858
+ );
859
+ }
860
+ if (
861
+ showGaonShirShelYom &&
862
+ dow !== DaysOfWeek.SHABBOS
863
+ ) {
864
+ addTefillahNote(
865
+ 'שיר של יום - צ"ד - ..מי יקום לי..',
866
+ );
867
+ }
868
+ }
869
+ break;
870
+ case 19:
871
+ addTefillahNote(
872
+ (showEnglish ? 'Hoshanos' : 'הושענות') +
873
+ ' - ' +
874
+ (dow === DaysOfWeek.SHABBOS
875
+ ? 'אום נצורה'
876
+ : 'א-ל למושעות'),
877
+ );
878
+ if (
879
+ showGaonShirShelYom &&
880
+ dow !== DaysOfWeek.SHABBOS
881
+ ) {
882
+ if (dow === DaysOfWeek.MONDAY) {
883
+ addTefillahNote(
884
+ 'שיר של יום - צ"ד - ..מי יקום לי..',
885
+ );
886
+ } else {
887
+ addTefillahNote(
888
+ 'שיר של יום - צ"ד - א-ל נקמות.. ישרי לב',
889
+ );
890
+ }
891
+ }
892
+ break;
893
+ case 20:
894
+ addTefillahNote(
895
+ (showEnglish ? 'Hoshanos' : 'הושענות') +
896
+ ' - ' +
897
+ (dow === DaysOfWeek.SHABBOS
898
+ ? 'אום נצורה'
899
+ : 'אדון המושיע'),
900
+ );
901
+ if (
902
+ showGaonShirShelYom &&
903
+ dow !== DaysOfWeek.SHABBOS
904
+ ) {
905
+ if (dow === DaysOfWeek.THURSDAY) {
906
+ addTefillahNote(
907
+ 'שיר של יום - פ"א - למנצח על הגתית',
908
+ );
909
+ } else {
910
+ addTefillahNote(
911
+ 'שיר של יום - צ"ד - א-ל נקמות.. ישרי לב',
912
+ );
913
+ }
914
+ }
915
+ break;
916
+ }
917
+ }
918
+ break;
919
+ case 21:
920
+ addDayNote('Hoshana Raba', 'הושעה רבה');
921
+ addTefillahNote('Ya`aleh V`yavo', 'יעלה ויבא');
922
+ if (isNightTime) {
923
+ addTefillahNote('Mishneh Torah', 'משנה תורה');
924
+ } else {
925
+ addTefillahNote('Hoshanos', 'הושענות');
926
+ addTefillahNote('Full Hallel', 'הלל השלם');
927
+ if (showGaonShirShelYom) {
928
+ if (dow === DaysOfWeek.FRIDAY) {
929
+ addTefillahNote(
930
+ 'שיר של יום - פ"ב - מזמור לאסף',
931
+ );
932
+ } else {
933
+ addTefillahNote(
934
+ 'שיר של יום - פ"א - למנצח על הגתית',
935
+ );
936
+ }
937
+ }
938
+ }
939
+ break;
940
+ case 22:
941
+ addDayNote('Shmini Atzeres', 'שמיני עצרת');
942
+ addTefillahNote('Ya`aleh V`yavo', 'יעלה ויבא');
943
+ if (israel) {
944
+ addDayNote('Simchas Torah', 'שמחת תורה');
945
+ addTefillahNote('Hakafos', 'הקפות');
946
+ }
947
+ if (isDaytime) {
948
+ addTefillahNote('Full Hallel', 'הלל השלם');
949
+ addTefillahNote('Yizkor', 'יזכור');
950
+ addTefillahNote('Tefilas Geshem', 'תפילת גשם');
951
+ addTefillahNote('משיב הרוח ומוריד הגשם');
952
+ if (showGaonShirShelYom && dow !== DaysOfWeek.SHABBOS) {
953
+ addTefillahNote(
954
+ 'שיר של יום - י"ב - למנצח על השמינית',
955
+ );
956
+ }
957
+ }
958
+ break;
959
+ }
960
+ if (day === 23) {
961
+ if (!israel) {
962
+ addDayNote('Simchas Torah', 'שמחת תורה');
963
+ addTefillahNote('Ya`aleh V`yavo', 'יעלה ויבא');
964
+ addTefillahNote('Hakafos', 'הקפות');
965
+ addTefillahNote('Full Hallel', 'הלל השלם');
966
+ } else {
967
+ addDayNote('Issru Chag', 'איסרו חג');
968
+ if (isNightTime) {
969
+ addDayNote('א גוטען ווינטער', 'חורף טוב');
970
+ } else if (dow !== DaysOfWeek.SHABBOS && isMorning) {
971
+ noLaminatzeach();
972
+ }
973
+ }
974
+ } else if (
975
+ dow === DaysOfWeek.SHABBOS &&
976
+ [15, 17, 18, 19, 20].includes(day)
977
+ ) {
978
+ addTefillahNote('Megilas Koheles', 'מגילת קהלת');
979
+ }
980
+ if (day < 22) {
981
+ addTefillahNote('L`Dovid Hashem Ori', 'לדוד ה');
982
+ } else if (day > 22) {
983
+ addTefillahNote(
984
+ 'Mashiv Haruach U`Morid Hageshem',
985
+ 'משיב הרוח ומוריד הגשם',
986
+ );
987
+ }
988
+ break;
989
+ case 8: //Cheshvan
990
+ if (
991
+ isDaytime &&
992
+ ((dow === DaysOfWeek.MONDAY && day > 3 && day < 13) ||
993
+ (dow === DaysOfWeek.THURSDAY && day > 6 && day < 14) ||
994
+ (dow === DaysOfWeek.MONDAY && day > 10 && day < 18))
995
+ ) {
996
+ addTefillahNote('Ba`Hab', 'סליחות בה"ב');
997
+ addTefillahNote('Avinu Malkeinu', 'אבינו מלכנו');
998
+ }
999
+ if (day <= 22) {
1000
+ addTefillahNote(
1001
+ 'Mashiv Haruach U`Morid Hageshem',
1002
+ 'משיב הרוח ומוריד הגשם',
1003
+ );
1004
+ }
1005
+ if (day >= 7 && dow !== DaysOfWeek.SHABBOS) {
1006
+ addTefillahNote('V`sain Tal U`matar', 'ותן טל ומטר');
1007
+ }
1008
+ break;
1009
+ case 9: //Kislev
1010
+ if (day <= 7 && dow !== DaysOfWeek.SHABBOS) {
1011
+ addTefillahNote('V`sain Tal U`matar', 'ותן טל ומטר');
1012
+ } else if (
1013
+ day === 24 &&
1014
+ dow !== DaysOfWeek.SHABBOS &&
1015
+ isAfternoon
1016
+ ) {
1017
+ dayInfo.noTachnun = true;
1018
+ } else if (day >= 25) {
1019
+ dayInfo.noTachnun = true;
1020
+ addDayNote('Chanukah', 'חנוכה');
1021
+ addTefillahNote('Al Hanissim', 'על הניסים');
1022
+ if (isDaytime) {
1023
+ addTefillahNote('Full Hallel', 'הלל השלם');
1024
+ if (isMorning && dow !== DaysOfWeek.SHABBOS)
1025
+ noLaminatzeach();
1026
+ if (
1027
+ showGaonShirShelYom &&
1028
+ day !== 30 &&
1029
+ dow !== DaysOfWeek.SHABBOS
1030
+ ) {
1031
+ addTefillahNote(
1032
+ "שיר של יום - ל' - מזמור שיר חנוכת הבית",
1033
+ );
1034
+ }
1035
+ }
1036
+ }
1037
+ break;
1038
+ case 10: //Teves
1039
+ if (day <= (jDate.isShortKislev(jdate.Year) ? 3 : 2)) {
1040
+ dayInfo.noTachnun = true;
1041
+ addDayNote('Chanukah', 'חנוכה');
1042
+ addTefillahNote('Al Hanissim', 'על הניסים');
1043
+ if (isDaytime) {
1044
+ addTefillahNote('Full Hallel', 'הלל השלם');
1045
+ if (isMorning && dow !== DaysOfWeek.SHABBOS) {
1046
+ noLaminatzeach();
1047
+ if (day !== 1 && showGaonShirShelYom) {
1048
+ addTefillahNote(
1049
+ "שיר של יום - ל' - מזמור שיר חנוכת הבית",
1050
+ );
1051
+ }
1052
+ }
1053
+ }
1054
+ } else if (day === 10 && isDaytime) {
1055
+ addDayNote('Fast of Asara B`Teves', 'עשרה בטבת');
1056
+ if (isMorning) {
1057
+ addTefillahNote('Selichos', 'סליחות');
1058
+ }
1059
+ addTefillahNote('Avinu Malkeinu', 'אבינו מלכנו');
1060
+ addTefillahNote('Aneinu', 'עננו');
1061
+ }
1062
+ break;
1063
+ case 11: //Shvat
1064
+ if (day === 14 && isAfternoon) dayInfo.noTachnun = true;
1065
+ if (day === 15) {
1066
+ dayInfo.noTachnun = true;
1067
+ addDayNote('Tu B`Shvat', 'ט"ו בשבט');
1068
+ }
1069
+ break;
1070
+ case 12:
1071
+ case 13:
1072
+ if (month === 12 && isLeapYear) {
1073
+ //Adar Rishon in a leap year
1074
+ if (
1075
+ ((day === 13 && isAfternoon) || [14, 15].includes(day)) &&
1076
+ isDaytime
1077
+ ) {
1078
+ addDayNote(
1079
+ day === 14
1080
+ ? showEnglish
1081
+ ? 'Purim Katan'
1082
+ : 'פורים קטן'
1083
+ : showEnglish
1084
+ ? 'Shushan Purim Katan'
1085
+ : 'שושן פורים קטן',
1086
+ );
1087
+ dayInfo.noTachnun = true;
1088
+ if (isMorning && dow !== DaysOfWeek.SHABBOS) {
1089
+ noLaminatzeach();
1090
+ }
1091
+ }
1092
+ } else {
1093
+ //The "real" Adar: the only one in a non-leap-year or Adar Sheini
1094
+ if (
1095
+ isDaytime &&
1096
+ ((day === 11 && dow === DaysOfWeek.THURSDAY) ||
1097
+ (day === 13 && dow !== DaysOfWeek.SHABBOS))
1098
+ ) {
1099
+ if (isMorning) {
1100
+ addDayNote('Fast of Ta`anis Esther', 'תענית אסתר');
1101
+ addTefillahNote('Selichos', 'סליחות');
1102
+ }
1103
+ addTefillahNote('Avinu Malkeinu', 'אבינו מלכנו');
1104
+ addTefillahNote('Aneinu', 'עננו');
1105
+ } else {
1106
+ //Only ירושלים says על הניסים on ט"ו
1107
+ const isYerushalayim = location.Name === 'ירושלים';
1108
+ if (day === 14) {
1109
+ dayInfo.noTachnun = true;
1110
+ if (isMorning && dow !== DaysOfWeek.SHABBOS) {
1111
+ noLaminatzeach();
1112
+ }
1113
+ //On a Purim Meshulash in Yerushalayim, מגילת אסתר is on י"ד
1114
+ if (!isYerushalayim || dow === DaysOfWeek.FRIDAY) {
1115
+ addDayNote('Megilas Esther', 'מגילת אסתר');
1116
+ if (!isYerushalayim) {
1117
+ addDayNote('Purim', 'פורים');
1118
+ addTefillahNote('Al Hanissim', 'על הניסים');
1119
+ if (showGaonShirShelYom) {
1120
+ addTefillahNote(
1121
+ 'שיר של יום - כ"ב - למנצח על אילת השחר',
1122
+ );
1123
+ }
1124
+ } else {
1125
+ //On a Purim Meshulash in Yerushalayim, מתנות לאביונים is on י"ד
1126
+ addDayNote(
1127
+ 'Matanos LeEvyonim',
1128
+ 'מתנות לאביונים',
1129
+ );
1130
+ }
1131
+ } else {
1132
+ addDayNote('Purim D`Prazim', 'פורים דפרזים');
1133
+ }
1134
+ } else if (day === 15) {
1135
+ dayInfo.noTachnun = true;
1136
+ if (isMorning && dow !== DaysOfWeek.SHABBOS) {
1137
+ noLaminatzeach();
1138
+ }
1139
+ if (isYerushalayim) {
1140
+ addDayNote('Purim', 'פורים');
1141
+ addTefillahNote('Al Hanissim', 'על הניסים');
1142
+ if (dow !== DaysOfWeek.SHABBOS) {
1143
+ addDayNote('Megilas Esther', 'מגילת אסתר');
1144
+ }
1145
+ if (
1146
+ showGaonShirShelYom &&
1147
+ isDaytime &&
1148
+ dow !== DaysOfWeek.SHABBOS
1149
+ ) {
1150
+ addTefillahNote(
1151
+ 'שיר של יום - כ"ב - למנצח על אילת השחר',
1152
+ );
1153
+ }
1154
+ } else if (
1155
+ [
1156
+ 'טבריה',
1157
+ 'יפו',
1158
+ 'עכו',
1159
+ 'צפת',
1160
+ 'באר שבע',
1161
+ 'חיפה',
1162
+ 'באר שבע',
1163
+ 'בית שאן',
1164
+ 'לוד',
1165
+ ].includes(location.Name)
1166
+ ) {
1167
+ addDayNote('Purim D`Mukafin', 'פורים דמוקפין');
1168
+ if (dow !== DaysOfWeek.SHABBOS) {
1169
+ addDayNote('(Megilas Esther)', '(מגילת אסתר)');
1170
+ }
1171
+ } else {
1172
+ addDayNote('Shushan Purim', 'שושן פורים');
1173
+ }
1174
+ } else if (
1175
+ day === 16 &&
1176
+ isYerushalayim &&
1177
+ dow === DaysOfWeek.SUNDAY
1178
+ ) {
1179
+ addDayNote(
1180
+ 'Purim Seuda and Mishloach Manos',
1181
+ 'סעודת פורים ומשלוח מנות',
1182
+ );
1183
+ }
1184
+ }
1185
+ }
1186
+ break;
1187
+ }
1188
+ }
1189
+
1190
+ function noLaminatzeach() {
1191
+ addTefillahNote('No Laminatzeach', 'א"א למנצח');
1192
+ }
1193
+
1194
+ function addDayNote(englishOrDefaultText: string, hebrewText?: string) {
1195
+ const note = showEnglish || !hebrewText ? englishOrDefaultText : hebrewText;
1196
+ if (!dayNotes.includes(note)) {
1197
+ dayNotes.push(note);
1198
+ }
1199
+ }
1200
+
1201
+ function addTefillahNote(englishOrDefaultText: string, hebrewText?: string) {
1202
+ const note = showEnglish || !hebrewText ? englishOrDefaultText : hebrewText;
1203
+ if (!tefillahNotes.includes(note)) {
1204
+ tefillahNotes.push(note);
1205
+ }
1206
+ }
1207
+
1208
+ function hasOwnKriyasHatorah(jdate: jDate, location: Location) {
1209
+ const { Month, Day, DayOfWeek } = jdate;
1210
+ //Rosh chodesh
1211
+ if (Day === 1 || Day === 30) {
1212
+ return true;
1213
+ }
1214
+ switch (Month) {
1215
+ case 1:
1216
+ return Day > 14 && Day < 22;
1217
+ case 4:
1218
+ return Day === 17 || (DayOfWeek === 0 && Day === 18);
1219
+ case 5:
1220
+ return Day === 9 || (DayOfWeek === 0 && Day === 10);
1221
+ case 7:
1222
+ return (
1223
+ [3, 16, 17, 18, 19, 20, 21].includes(Day) ||
1224
+ (DayOfWeek === 0 && Day === 4)
1225
+ );
1226
+ case 9:
1227
+ return Day >= 25;
1228
+ case 10:
1229
+ return (
1230
+ Day === 10 ||
1231
+ Day < 3 ||
1232
+ (Day === 3 && jDate.isShortKislev(jdate.Year))
1233
+ );
1234
+ case 12:
1235
+ case 13:
1236
+ return (
1237
+ Month === (jDate.isJdLeapY(jdate.Year) ? 13 : 12) &&
1238
+ (Day === 13 || Day === (location.Name === 'ירושלים' ? 15 : 14))
1239
+ );
1240
+ default:
1241
+ return false;
1242
+ }
1243
+ }