@hebcal/leyning 6.2.2 → 6.2.3
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 +2 -1
- package/dist/bundle.js +57 -224
- package/dist/bundle.min.js +2 -2
- package/dist/index.js +47 -199
- package/dist/index.mjs +47 -197
- package/package.json +14 -14
package/dist/bundle.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @hebcal/leyning v6.2.
|
|
1
|
+
/*! @hebcal/leyning v6.2.3 */
|
|
2
2
|
var hebcal__leyning = (function (exports, core) {
|
|
3
3
|
'use strict';
|
|
4
4
|
|
|
@@ -95,34 +95,24 @@ var FunctionPrototype$1 = Function.prototype;
|
|
|
95
95
|
var call$3 = FunctionPrototype$1.call;
|
|
96
96
|
var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype$1.bind.bind(call$3, call$3);
|
|
97
97
|
|
|
98
|
-
var
|
|
99
|
-
return
|
|
98
|
+
var functionUncurryThis = NATIVE_BIND ? uncurryThisWithBind : function (fn) {
|
|
99
|
+
return function () {
|
|
100
100
|
return call$3.apply(fn, arguments);
|
|
101
101
|
};
|
|
102
102
|
};
|
|
103
103
|
|
|
104
|
-
var
|
|
104
|
+
var uncurryThis$8 = functionUncurryThis;
|
|
105
105
|
|
|
106
|
-
var toString$1 =
|
|
107
|
-
var stringSlice =
|
|
106
|
+
var toString$1 = uncurryThis$8({}.toString);
|
|
107
|
+
var stringSlice = uncurryThis$8(''.slice);
|
|
108
108
|
|
|
109
|
-
var classofRaw
|
|
109
|
+
var classofRaw = function (it) {
|
|
110
110
|
return stringSlice(toString$1(it), 8, -1);
|
|
111
111
|
};
|
|
112
112
|
|
|
113
|
-
var classofRaw = classofRaw$1;
|
|
114
|
-
var uncurryThisRaw = functionUncurryThisRaw;
|
|
115
|
-
|
|
116
|
-
var functionUncurryThis = function (fn) {
|
|
117
|
-
// Nashorn bug:
|
|
118
|
-
// https://github.com/zloirock/core-js/issues/1128
|
|
119
|
-
// https://github.com/zloirock/core-js/issues/1130
|
|
120
|
-
if (classofRaw(fn) === 'Function') return uncurryThisRaw(fn);
|
|
121
|
-
};
|
|
122
|
-
|
|
123
113
|
var uncurryThis$7 = functionUncurryThis;
|
|
124
114
|
var fails$6 = fails$9;
|
|
125
|
-
var classof$1 = classofRaw
|
|
115
|
+
var classof$1 = classofRaw;
|
|
126
116
|
|
|
127
117
|
var $Object$2 = Object;
|
|
128
118
|
var split = uncurryThis$7(''.split);
|
|
@@ -353,10 +343,10 @@ var store$2 = sharedStore;
|
|
|
353
343
|
(shared$3.exports = function (key, value) {
|
|
354
344
|
return store$2[key] || (store$2[key] = value !== undefined ? value : {});
|
|
355
345
|
})('versions', []).push({
|
|
356
|
-
version: '3.
|
|
346
|
+
version: '3.26.1',
|
|
357
347
|
mode: 'global',
|
|
358
348
|
copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',
|
|
359
|
-
license: 'https://github.com/zloirock/core-js/blob/v3.
|
|
349
|
+
license: 'https://github.com/zloirock/core-js/blob/v3.26.1/LICENSE',
|
|
360
350
|
source: 'https://github.com/zloirock/core-js'
|
|
361
351
|
});
|
|
362
352
|
|
|
@@ -1081,7 +1071,7 @@ var arrayMethodIsStrict$1 = function (METHOD_NAME, argument) {
|
|
|
1081
1071
|
});
|
|
1082
1072
|
};
|
|
1083
1073
|
|
|
1084
|
-
var classof = classofRaw
|
|
1074
|
+
var classof = classofRaw;
|
|
1085
1075
|
var global$1 = global$b;
|
|
1086
1076
|
|
|
1087
1077
|
var engineIsNode = classof(global$1.process) == 'process';
|
|
@@ -1113,23 +1103,21 @@ var Genesis=[0,31,25,24,26,32,22,24,22,29,32,32,20,18,24,21,16,27,33,38,18,34,24
|
|
|
1113
1103
|
* @readonly
|
|
1114
1104
|
* @const {string[]}
|
|
1115
1105
|
*/
|
|
1116
|
-
|
|
1117
1106
|
var BOOK = ['', 'Genesis', 'Exodus', 'Leviticus', 'Numbers', 'Deuteronomy'];
|
|
1107
|
+
|
|
1118
1108
|
/**
|
|
1119
1109
|
* Formats parsha as a string
|
|
1120
1110
|
* @param {string[]} parsha
|
|
1121
1111
|
* @return {string}
|
|
1122
1112
|
*/
|
|
1123
|
-
|
|
1124
1113
|
function parshaToString(parsha) {
|
|
1125
1114
|
var s = parsha[0];
|
|
1126
|
-
|
|
1127
1115
|
if (parsha.length == 2) {
|
|
1128
1116
|
s += '-' + parsha[1];
|
|
1129
1117
|
}
|
|
1130
|
-
|
|
1131
1118
|
return s;
|
|
1132
1119
|
}
|
|
1120
|
+
|
|
1133
1121
|
/**
|
|
1134
1122
|
* Represents an aliyah
|
|
1135
1123
|
* @typedef {Object} Aliyah
|
|
@@ -1145,10 +1133,10 @@ function parshaToString(parsha) {
|
|
|
1145
1133
|
* @param {any} src
|
|
1146
1134
|
* @return {any}
|
|
1147
1135
|
*/
|
|
1148
|
-
|
|
1149
1136
|
function clone(src) {
|
|
1150
1137
|
return JSON.parse(JSON.stringify(src));
|
|
1151
1138
|
}
|
|
1139
|
+
|
|
1152
1140
|
/**
|
|
1153
1141
|
* Calculates the number of verses in an aliyah or haftara based on
|
|
1154
1142
|
* the `b` (begin verse), `e` (end verse) and `k` (book).
|
|
@@ -1156,100 +1144,87 @@ function clone(src) {
|
|
|
1156
1144
|
* @param {Aliyah} aliyah
|
|
1157
1145
|
* @return {number}
|
|
1158
1146
|
*/
|
|
1159
|
-
|
|
1160
1147
|
function calculateNumVerses(aliyah) {
|
|
1161
1148
|
if (aliyah.v) {
|
|
1162
1149
|
return aliyah.v;
|
|
1163
1150
|
}
|
|
1164
|
-
|
|
1165
1151
|
var chapVerseBegin = aliyah.b.split(':');
|
|
1166
1152
|
var chapVerseEnd = aliyah.e.split(':');
|
|
1167
1153
|
var c1 = parseInt(chapVerseBegin[0], 10);
|
|
1168
1154
|
var c2 = parseInt(chapVerseEnd[0], 10);
|
|
1169
1155
|
var v1 = parseInt(chapVerseBegin[1], 10);
|
|
1170
1156
|
var v2 = parseInt(chapVerseEnd[1], 10);
|
|
1171
|
-
|
|
1172
1157
|
if (c1 === c2) {
|
|
1173
1158
|
aliyah.v = v2 - v1 + 1;
|
|
1174
1159
|
} else if (typeof aliyah.k === 'string') {
|
|
1175
1160
|
var numv = numverses[aliyah.k];
|
|
1176
|
-
|
|
1177
1161
|
if (_typeof(numv) !== 'object' || !numv.length) {
|
|
1178
1162
|
throw new ReferenceError("Can't find numverses for ".concat(aliyah.k));
|
|
1179
1163
|
}
|
|
1180
|
-
|
|
1181
1164
|
var total = numv[c1] - v1 + 1;
|
|
1182
|
-
|
|
1183
1165
|
for (var chap = c1 + 1; chap < c2; chap++) {
|
|
1184
1166
|
total += numv[chap];
|
|
1185
1167
|
}
|
|
1186
|
-
|
|
1187
1168
|
total += v2;
|
|
1188
1169
|
aliyah.v = total;
|
|
1189
1170
|
}
|
|
1190
|
-
|
|
1191
1171
|
return aliyah.v;
|
|
1192
1172
|
}
|
|
1173
|
+
|
|
1193
1174
|
/**
|
|
1194
1175
|
* Formats an aliyah object like "Numbers 28:9-28:15"
|
|
1195
1176
|
* @param {Aliyah} a aliyah
|
|
1196
1177
|
* @return {string}
|
|
1197
1178
|
*/
|
|
1198
|
-
|
|
1199
1179
|
function formatAliyahWithBook(a) {
|
|
1200
1180
|
return "".concat(a.k, " ").concat(a.b, "-").concat(a.e);
|
|
1201
1181
|
}
|
|
1182
|
+
|
|
1202
1183
|
/**
|
|
1203
1184
|
* Formats an aliyah object like "Numbers 28:9-15"
|
|
1204
1185
|
* @param {Aliyah} aliyah
|
|
1205
1186
|
* @param {boolean} showBook
|
|
1206
1187
|
* @return {string}
|
|
1207
1188
|
*/
|
|
1208
|
-
|
|
1209
1189
|
function formatAliyahShort(aliyah, showBook) {
|
|
1210
1190
|
var begin = aliyah.b;
|
|
1211
1191
|
var end0 = aliyah.e;
|
|
1212
1192
|
var prefix = showBook ? aliyah.k + ' ' : '';
|
|
1213
|
-
|
|
1214
1193
|
if (begin === end0) {
|
|
1215
1194
|
return "".concat(prefix).concat(begin);
|
|
1216
1195
|
}
|
|
1217
|
-
|
|
1218
1196
|
var cv1 = begin.split(':');
|
|
1219
1197
|
var cv2 = end0.split(':');
|
|
1220
1198
|
var end = cv1[0] === cv2[0] ? cv2[1] : end0;
|
|
1221
1199
|
return "".concat(prefix).concat(begin, "-").concat(end);
|
|
1222
1200
|
}
|
|
1201
|
+
|
|
1223
1202
|
/**
|
|
1224
1203
|
* Returns the total number of verses in an array of Aliyah (or haftarah) objects
|
|
1225
1204
|
* @param {Aliyah|Aliyah[]} aliyot
|
|
1226
1205
|
* @return {number}
|
|
1227
1206
|
*/
|
|
1228
|
-
|
|
1229
1207
|
function sumVerses(aliyot) {
|
|
1230
1208
|
return Array.isArray(aliyot) ? aliyot.reduce(function (prev, cur) {
|
|
1231
1209
|
return prev + cur.v;
|
|
1232
1210
|
}, 0) : aliyot.v;
|
|
1233
1211
|
}
|
|
1212
|
+
|
|
1234
1213
|
/**
|
|
1235
1214
|
* @private
|
|
1236
1215
|
* @param {Aliyah|Aliyah[]} haft
|
|
1237
1216
|
* @return {Aliyah|Aliyah[]}
|
|
1238
1217
|
*/
|
|
1239
|
-
|
|
1240
1218
|
function cloneHaftara(haft) {
|
|
1241
1219
|
if (!haft) {
|
|
1242
1220
|
return haft;
|
|
1243
1221
|
}
|
|
1244
|
-
|
|
1245
1222
|
var dest = clone(haft);
|
|
1246
|
-
|
|
1247
1223
|
if (Array.isArray(dest)) {
|
|
1248
1224
|
dest.map(calculateNumVerses);
|
|
1249
1225
|
} else {
|
|
1250
1226
|
calculateNumVerses(dest);
|
|
1251
1227
|
}
|
|
1252
|
-
|
|
1253
1228
|
return dest;
|
|
1254
1229
|
}
|
|
1255
1230
|
|
|
@@ -1259,7 +1234,6 @@ function cloneHaftara(haft) {
|
|
|
1259
1234
|
* @param {string} b
|
|
1260
1235
|
* @return {boolean}
|
|
1261
1236
|
*/
|
|
1262
|
-
|
|
1263
1237
|
function isChapVerseBefore(a, b) {
|
|
1264
1238
|
var cv1 = a.split(':').map(function (x) {
|
|
1265
1239
|
return +x;
|
|
@@ -1269,14 +1243,13 @@ function isChapVerseBefore(a, b) {
|
|
|
1269
1243
|
});
|
|
1270
1244
|
return cv1[0] * 100 + cv1[1] < cv2[0] * 100 + cv2[1];
|
|
1271
1245
|
}
|
|
1246
|
+
|
|
1272
1247
|
/**
|
|
1273
1248
|
* Summarizes an `AliyotMap` by collapsing all adjacent aliyot.
|
|
1274
1249
|
* Finds any non-overlapping parts (e.g. special 7th aliyah or maftir)
|
|
1275
1250
|
* @param {Object<string,Aliyah>} aliyot
|
|
1276
1251
|
* @return {Aliyah[]}
|
|
1277
1252
|
*/
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
1253
|
function makeLeyningParts(aliyot) {
|
|
1281
1254
|
var nums = Object.keys(aliyot).filter(function (x) {
|
|
1282
1255
|
return x.length === 1;
|
|
@@ -1284,20 +1257,16 @@ function makeLeyningParts(aliyot) {
|
|
|
1284
1257
|
var start = aliyot[nums[0]];
|
|
1285
1258
|
var end = start;
|
|
1286
1259
|
var parts = [];
|
|
1287
|
-
|
|
1288
1260
|
for (var i = 0; i < nums.length; i++) {
|
|
1289
1261
|
var num = nums[i];
|
|
1290
1262
|
var aliyah = aliyot[num];
|
|
1291
|
-
|
|
1292
1263
|
if (i === nums.length - 1 && aliyah.k === end.k && aliyah.e === end.e) {
|
|
1293
1264
|
// short-circuit when final aliyah is within the previous (e.g. M inside of 7)
|
|
1294
1265
|
continue;
|
|
1295
1266
|
}
|
|
1296
|
-
|
|
1297
1267
|
var prevEndChap = +end.e.split(':')[0];
|
|
1298
1268
|
var curStartChap = +aliyah.b.split(':')[0];
|
|
1299
1269
|
var sameOrNextChap = curStartChap === prevEndChap || curStartChap === prevEndChap + 1;
|
|
1300
|
-
|
|
1301
1270
|
if (i !== 0 && (aliyah.k !== start.k || isChapVerseBefore(aliyah.b, start.e) || !sameOrNextChap)) {
|
|
1302
1271
|
parts.push({
|
|
1303
1272
|
k: start.k,
|
|
@@ -1306,10 +1275,8 @@ function makeLeyningParts(aliyot) {
|
|
|
1306
1275
|
});
|
|
1307
1276
|
start = aliyah;
|
|
1308
1277
|
}
|
|
1309
|
-
|
|
1310
1278
|
end = aliyah;
|
|
1311
1279
|
}
|
|
1312
|
-
|
|
1313
1280
|
parts.push({
|
|
1314
1281
|
k: start.k,
|
|
1315
1282
|
b: start.b,
|
|
@@ -1317,6 +1284,7 @@ function makeLeyningParts(aliyot) {
|
|
|
1317
1284
|
});
|
|
1318
1285
|
return parts;
|
|
1319
1286
|
}
|
|
1287
|
+
|
|
1320
1288
|
/**
|
|
1321
1289
|
* Returns a string representation of the leyning parts.
|
|
1322
1290
|
* Separate verse ranges read from the same book are separated
|
|
@@ -1326,36 +1294,30 @@ function makeLeyningParts(aliyot) {
|
|
|
1326
1294
|
* @param {Aliyah|Aliyah[]} parts
|
|
1327
1295
|
* @return {string}
|
|
1328
1296
|
*/
|
|
1329
|
-
|
|
1330
1297
|
function makeSummaryFromParts(parts) {
|
|
1331
1298
|
if (!Array.isArray(parts)) {
|
|
1332
1299
|
parts = [parts];
|
|
1333
1300
|
}
|
|
1334
|
-
|
|
1335
1301
|
var prev = parts[0];
|
|
1336
1302
|
var summary = formatAliyahShort(prev, true);
|
|
1337
|
-
|
|
1338
1303
|
for (var i = 1; i < parts.length; i++) {
|
|
1339
1304
|
var part = parts[i];
|
|
1340
|
-
|
|
1341
1305
|
if (part.k === prev.k) {
|
|
1342
1306
|
summary += ', ';
|
|
1343
1307
|
} else {
|
|
1344
1308
|
summary += "; ".concat(part.k, " ");
|
|
1345
1309
|
}
|
|
1346
|
-
|
|
1347
1310
|
summary += formatAliyahShort(part, false);
|
|
1348
1311
|
prev = part;
|
|
1349
1312
|
}
|
|
1350
|
-
|
|
1351
1313
|
return summary;
|
|
1352
1314
|
}
|
|
1315
|
+
|
|
1353
1316
|
/**
|
|
1354
1317
|
* Makes a summary of the leyning, like "Genesis 6:9-11:32"
|
|
1355
1318
|
* @param {Object<string,Aliyah>} aliyot
|
|
1356
1319
|
* @return {string}
|
|
1357
1320
|
*/
|
|
1358
|
-
|
|
1359
1321
|
function makeLeyningSummary(aliyot) {
|
|
1360
1322
|
var parts = makeLeyningParts(aliyot);
|
|
1361
1323
|
return makeSummaryFromParts(parts);
|
|
@@ -1426,35 +1388,28 @@ var Purim={fullkriyah:{"1":{p:16,k:2,b:"17:8",e:"17:10"},"2":{p:16,k:2,b:"17:11"
|
|
|
1426
1388
|
* @param {string} holiday
|
|
1427
1389
|
* @return {boolean}
|
|
1428
1390
|
*/
|
|
1429
|
-
|
|
1430
1391
|
function hasFestival(holiday) {
|
|
1431
1392
|
return _typeof(festivals[holiday]) === 'object';
|
|
1432
1393
|
}
|
|
1394
|
+
|
|
1433
1395
|
/**
|
|
1434
1396
|
* Returns the raw metadata for festival reading for `holiday`
|
|
1435
1397
|
* @param {string} holiday
|
|
1436
1398
|
* @return {any}
|
|
1437
1399
|
*/
|
|
1438
|
-
|
|
1439
1400
|
function lookupFestival(holiday) {
|
|
1440
1401
|
var src = festivals[holiday];
|
|
1441
|
-
|
|
1442
1402
|
if (typeof src === 'undefined') {
|
|
1443
1403
|
return undefined;
|
|
1444
1404
|
}
|
|
1445
|
-
|
|
1446
1405
|
if (src.alias) {
|
|
1447
1406
|
var tmp = festivals[src.key];
|
|
1448
|
-
|
|
1449
1407
|
if (typeof tmp === 'undefined') {
|
|
1450
1408
|
throw new Error("Leyning alias ".concat(holiday, " => ").concat(src.key, " not found"));
|
|
1451
1409
|
}
|
|
1452
|
-
|
|
1453
1410
|
src = tmp;
|
|
1454
1411
|
}
|
|
1455
|
-
|
|
1456
1412
|
var result = src.fullkriyah ? clone(src) : src;
|
|
1457
|
-
|
|
1458
1413
|
if (result.fullkriyah) {
|
|
1459
1414
|
Object.values(result.fullkriyah).forEach(function (aliyah) {
|
|
1460
1415
|
if (typeof aliyah.k === 'number') {
|
|
@@ -1462,33 +1417,28 @@ function lookupFestival(holiday) {
|
|
|
1462
1417
|
}
|
|
1463
1418
|
});
|
|
1464
1419
|
}
|
|
1465
|
-
|
|
1466
1420
|
return result;
|
|
1467
1421
|
}
|
|
1468
1422
|
|
|
1469
|
-
var HOLIDAY_IGNORE_MASK = core.flags.DAF_YOMI | core.flags.OMER_COUNT | core.flags.SHABBAT_MEVARCHIM | core.flags.MOLAD | core.flags.USER_EVENT | core.flags.HEBREW_DATE | core.flags.MISHNA_YOMI | core.flags.MODERN_HOLIDAY;
|
|
1423
|
+
var HOLIDAY_IGNORE_MASK = core.flags.DAF_YOMI | core.flags.OMER_COUNT | core.flags.SHABBAT_MEVARCHIM | core.flags.MOLAD | core.flags.USER_EVENT | core.flags.HEBREW_DATE | core.flags.MISHNA_YOMI | core.flags.MODERN_HOLIDAY | core.flags.YERUSHALMI_YOMI;
|
|
1424
|
+
|
|
1470
1425
|
/**
|
|
1471
1426
|
* Based on the event date, type and title, finds the relevant leyning key
|
|
1472
1427
|
* @param {Event} ev event
|
|
1473
1428
|
* @param {boolean} [il] true if Israel holiday scheme
|
|
1474
1429
|
* @return {string} key to look up in holiday-reading.json
|
|
1475
1430
|
*/
|
|
1476
|
-
|
|
1477
1431
|
function getLeyningKeyForEvent(ev) {
|
|
1478
1432
|
var il = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
1479
1433
|
var mask = ev.getFlags();
|
|
1480
|
-
|
|
1481
1434
|
if (mask & HOLIDAY_IGNORE_MASK) {
|
|
1482
1435
|
return undefined;
|
|
1483
|
-
}
|
|
1484
|
-
|
|
1485
|
-
|
|
1436
|
+
}
|
|
1437
|
+
// Skip all Erevs except for Simchat Torah
|
|
1486
1438
|
var desc = ev.getDesc();
|
|
1487
|
-
|
|
1488
1439
|
if (mask & core.flags.EREV && desc !== 'Erev Simchat Torah') {
|
|
1489
1440
|
return undefined;
|
|
1490
1441
|
}
|
|
1491
|
-
|
|
1492
1442
|
var hd = ev.getDate();
|
|
1493
1443
|
var day = hd.getDate();
|
|
1494
1444
|
var dow = hd.abs() % 7;
|
|
@@ -1497,15 +1447,12 @@ function getLeyningKeyForEvent(ev) {
|
|
|
1497
1447
|
var isRoshChodesh = day == 1 || day == 30;
|
|
1498
1448
|
var holiday = ev.basename();
|
|
1499
1449
|
var isPesach = holiday === 'Pesach';
|
|
1500
|
-
|
|
1501
1450
|
if (il && isPesach) {
|
|
1502
1451
|
if (isShabbat) {
|
|
1503
1452
|
return day === 15 || day === 21 ? desc + ' (on Shabbat)' : 'Pesach Shabbat Chol ha-Moed';
|
|
1504
1453
|
}
|
|
1505
|
-
|
|
1506
1454
|
return desc;
|
|
1507
1455
|
}
|
|
1508
|
-
|
|
1509
1456
|
if (day == 1 && month === core.months.TISHREI) {
|
|
1510
1457
|
return isShabbat ? 'Rosh Hashana I (on Shabbat)' : 'Rosh Hashana I';
|
|
1511
1458
|
} else if (ev.cholHaMoedDay) {
|
|
@@ -1514,12 +1461,10 @@ function getLeyningKeyForEvent(ev) {
|
|
|
1514
1461
|
return holiday + ' Shabbat Chol ha-Moed';
|
|
1515
1462
|
} else if (desc == 'Sukkot VII (Hoshana Raba)') {
|
|
1516
1463
|
return 'Sukkot Final Day (Hoshana Raba)';
|
|
1517
|
-
}
|
|
1464
|
+
}
|
|
1465
|
+
// If Shabbat falls on the third day of Chol ha-Moed Pesach,
|
|
1518
1466
|
// the readings for the third, fourth, and fifth days are moved ahead
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
1467
|
var cholHaMoedDay = ev.cholHaMoedDay;
|
|
1522
|
-
|
|
1523
1468
|
if (isPesach && cholHaMoedDay >= 3) {
|
|
1524
1469
|
if (dow == 0 && cholHaMoedDay == 4) {
|
|
1525
1470
|
cholHaMoedDay = 3;
|
|
@@ -1527,7 +1472,6 @@ function getLeyningKeyForEvent(ev) {
|
|
|
1527
1472
|
cholHaMoedDay = 4;
|
|
1528
1473
|
}
|
|
1529
1474
|
}
|
|
1530
|
-
|
|
1531
1475
|
return "".concat(holiday, " Chol ha-Moed Day ").concat(cholHaMoedDay);
|
|
1532
1476
|
} else if (ev.chanukahDay) {
|
|
1533
1477
|
if (isShabbat && isRoshChodesh) {
|
|
@@ -1540,54 +1484,42 @@ function getLeyningKeyForEvent(ev) {
|
|
|
1540
1484
|
return "Chanukah Day ".concat(ev.chanukahDay);
|
|
1541
1485
|
}
|
|
1542
1486
|
}
|
|
1543
|
-
|
|
1544
1487
|
if (isRoshChodesh && (desc == 'Shabbat HaChodesh' || desc == 'Shabbat Shekalim')) {
|
|
1545
1488
|
return desc + ' (on Rosh Chodesh)';
|
|
1546
1489
|
}
|
|
1547
|
-
|
|
1548
1490
|
if (desc == 'Shavuot') {
|
|
1549
1491
|
return 'Shavuot I';
|
|
1550
1492
|
} else if (il && desc == 'Shmini Atzeret') {
|
|
1551
1493
|
return 'Simchat Torah';
|
|
1552
1494
|
}
|
|
1553
|
-
|
|
1554
1495
|
if (isShabbat && 'Shabbat' != desc.substring(0, 7)) {
|
|
1555
1496
|
if (isRoshChodesh) {
|
|
1556
1497
|
if (desc === 'Rosh Chodesh Tevet') {
|
|
1557
1498
|
return 'Shabbat Rosh Chodesh Chanukah';
|
|
1558
1499
|
}
|
|
1559
|
-
|
|
1560
1500
|
return 'Shabbat Rosh Chodesh';
|
|
1561
1501
|
}
|
|
1562
|
-
|
|
1563
1502
|
var desc2 = desc + ' (on Shabbat)';
|
|
1564
|
-
|
|
1565
1503
|
if (hasFestival(desc2)) {
|
|
1566
1504
|
return desc2;
|
|
1567
1505
|
}
|
|
1568
1506
|
}
|
|
1569
|
-
|
|
1570
1507
|
if (hasFestival(desc)) {
|
|
1571
1508
|
return desc;
|
|
1572
1509
|
}
|
|
1573
|
-
|
|
1574
1510
|
if (isShabbat) {
|
|
1575
1511
|
var tommorow = hd.next().getDate();
|
|
1576
|
-
|
|
1577
1512
|
if (tommorow === 30 || tommorow === 1) {
|
|
1578
1513
|
return 'Shabbat Machar Chodesh';
|
|
1579
1514
|
}
|
|
1580
1515
|
}
|
|
1581
|
-
|
|
1582
1516
|
if (desc === 'Rosh Hashana LaBehemot') {
|
|
1583
1517
|
return undefined;
|
|
1584
1518
|
}
|
|
1585
|
-
|
|
1586
1519
|
if (desc === 'Rosh Chodesh Tevet') {
|
|
1587
1520
|
if (isShabbat) {
|
|
1588
1521
|
return 'Shabbat Rosh Chodesh Chanukah';
|
|
1589
1522
|
}
|
|
1590
|
-
|
|
1591
1523
|
if (day === 30 || core.HDate.shortKislev(hd.getFullYear())) {
|
|
1592
1524
|
return 'Chanukah Day 6'; // 30th of Kislev or 1st of Tevet
|
|
1593
1525
|
} else {
|
|
@@ -1598,11 +1530,9 @@ function getLeyningKeyForEvent(ev) {
|
|
|
1598
1530
|
if (isRoshChodesh) {
|
|
1599
1531
|
return desc;
|
|
1600
1532
|
}
|
|
1601
|
-
|
|
1602
1533
|
if (desc === 'Tish\'a B\'Av (observed)') {
|
|
1603
1534
|
return 'Tish\'a B\'Av';
|
|
1604
1535
|
}
|
|
1605
|
-
|
|
1606
1536
|
return undefined;
|
|
1607
1537
|
}
|
|
1608
1538
|
|
|
@@ -1610,45 +1540,40 @@ function getLeyningKeyForEvent(ev) {
|
|
|
1610
1540
|
* @private
|
|
1611
1541
|
* @param {Object<string,Aliyah>} aliyot
|
|
1612
1542
|
*/
|
|
1613
|
-
|
|
1614
1543
|
function aliyotCombine67(aliyot) {
|
|
1615
1544
|
var a6 = clone(aliyot['6']);
|
|
1616
1545
|
var a7 = aliyot['7'];
|
|
1617
|
-
|
|
1618
1546
|
if (a6.k !== a7.k) {
|
|
1619
1547
|
throw new Error('Impossible to combine aliyot 6 & 7: ' + JSON.stringify(aliyot));
|
|
1620
1548
|
}
|
|
1621
|
-
|
|
1622
1549
|
delete aliyot['7'];
|
|
1623
1550
|
aliyot['6'] = {
|
|
1624
1551
|
k: a6.k,
|
|
1625
1552
|
b: a6.b,
|
|
1626
1553
|
e: a7.e
|
|
1627
1554
|
};
|
|
1628
|
-
|
|
1629
1555
|
if (a6.v && a7.v) {
|
|
1630
1556
|
aliyot['6'].v = a6.v + a7.v;
|
|
1631
1557
|
}
|
|
1632
1558
|
}
|
|
1559
|
+
|
|
1633
1560
|
/**
|
|
1634
1561
|
* @private
|
|
1635
1562
|
* @param {Object<string,Aliyah>} aliyot
|
|
1636
1563
|
* @param {Object<string,Aliyah>} special
|
|
1637
1564
|
*/
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
1565
|
function mergeAliyotWithSpecial(aliyot, special) {
|
|
1641
1566
|
if (special['7']) {
|
|
1642
1567
|
aliyotCombine67(aliyot);
|
|
1643
1568
|
aliyot['7'] = clone(special['7']);
|
|
1644
1569
|
calculateNumVerses(aliyot['7']);
|
|
1645
1570
|
}
|
|
1646
|
-
|
|
1647
1571
|
if (special['M']) {
|
|
1648
1572
|
aliyot['M'] = clone(special['M']);
|
|
1649
1573
|
calculateNumVerses(aliyot['M']);
|
|
1650
1574
|
}
|
|
1651
1575
|
}
|
|
1576
|
+
|
|
1652
1577
|
/**
|
|
1653
1578
|
* Determines if the regular parashat haShavua coincides with an event that requires
|
|
1654
1579
|
* a special maftir or Haftara (for example Shabbat HaGadol, Shabbat Chanukah, Rosh
|
|
@@ -1667,33 +1592,28 @@ function mergeAliyotWithSpecial(aliyot, special) {
|
|
|
1667
1592
|
* @param {boolean} [wantSeph]
|
|
1668
1593
|
* @return {Aliyah | Aliyah[]}
|
|
1669
1594
|
*/
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
1595
|
function specialReadings(hd, il, aliyot, reason, parsha) {
|
|
1673
1596
|
var wantSeph = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
|
|
1674
1597
|
var haft;
|
|
1675
1598
|
var seph;
|
|
1676
1599
|
var specialHaft = false;
|
|
1677
|
-
var parshaName = parsha ? parshaToString(parsha) : null;
|
|
1600
|
+
var parshaName = parsha ? parshaToString(parsha) : null;
|
|
1678
1601
|
|
|
1602
|
+
// eslint-disable-next-line require-jsdoc
|
|
1679
1603
|
function handleSpecial(key) {
|
|
1680
1604
|
var special = lookupFestival(key);
|
|
1681
|
-
|
|
1682
1605
|
if (!special) {
|
|
1683
1606
|
return;
|
|
1684
1607
|
}
|
|
1685
|
-
|
|
1686
1608
|
if (special.haft && !specialHaft) {
|
|
1687
1609
|
haft = cloneHaftara(special.haft);
|
|
1688
1610
|
reason.haftara = key;
|
|
1689
1611
|
specialHaft = true;
|
|
1690
|
-
|
|
1691
1612
|
if (special.seph) {
|
|
1692
1613
|
seph = cloneHaftara(special.seph);
|
|
1693
1614
|
reason.sephardic = key;
|
|
1694
1615
|
}
|
|
1695
1616
|
}
|
|
1696
|
-
|
|
1697
1617
|
if (special.fullkriyah) {
|
|
1698
1618
|
mergeAliyotWithSpecial(aliyot, special.fullkriyah);
|
|
1699
1619
|
Object.keys(special.fullkriyah).map(function (k) {
|
|
@@ -1701,7 +1621,6 @@ function specialReadings(hd, il, aliyot, reason, parsha) {
|
|
|
1701
1621
|
});
|
|
1702
1622
|
}
|
|
1703
1623
|
}
|
|
1704
|
-
|
|
1705
1624
|
var events0 = core.HebrewCalendar.getHolidaysOnDate(hd, il) || [];
|
|
1706
1625
|
var events = events0.filter(function (ev) {
|
|
1707
1626
|
return !(ev.getFlags() & core.flags.ROSH_CHODESH);
|
|
@@ -1711,16 +1630,13 @@ function specialReadings(hd, il, aliyot, reason, parsha) {
|
|
|
1711
1630
|
handleSpecial("Shabbat Shuva (with ".concat(parshaName, ")"));
|
|
1712
1631
|
} else {
|
|
1713
1632
|
var key = getLeyningKeyForEvent(ev, il);
|
|
1714
|
-
|
|
1715
1633
|
if (key) {
|
|
1716
1634
|
handleSpecial(key);
|
|
1717
1635
|
}
|
|
1718
1636
|
}
|
|
1719
1637
|
});
|
|
1720
|
-
|
|
1721
1638
|
if (!haft) {
|
|
1722
1639
|
var day = hd.getDate();
|
|
1723
|
-
|
|
1724
1640
|
if (parshaName === 'Pinchas' && day > 17) {
|
|
1725
1641
|
// Pinchas is always read in Tamuz (never another month)
|
|
1726
1642
|
// either on the 14, 16, 17 (in Israel), 19, 21, 23, 24
|
|
@@ -1730,13 +1646,11 @@ function specialReadings(hd, il, aliyot, reason, parsha) {
|
|
|
1730
1646
|
handleSpecial(key);
|
|
1731
1647
|
} else {
|
|
1732
1648
|
var tommorow = hd.next().getDate();
|
|
1733
|
-
|
|
1734
1649
|
if (tommorow === 30 || tommorow === 1) {
|
|
1735
1650
|
handleSpecial('Shabbat Machar Chodesh');
|
|
1736
1651
|
}
|
|
1737
1652
|
}
|
|
1738
1653
|
}
|
|
1739
|
-
|
|
1740
1654
|
if (wantSeph && haft) {
|
|
1741
1655
|
return {
|
|
1742
1656
|
haft: haft,
|
|
@@ -1795,10 +1709,8 @@ var Bereshit={num:1,hebrew:"בְּרֵאשִׁית",book:1,haft:{k:"Isaiah",b:"4
|
|
|
1795
1709
|
* @param {boolean} [il] true if Israel holiday scheme
|
|
1796
1710
|
* @return {Leyning} map of aliyot
|
|
1797
1711
|
*/
|
|
1798
|
-
|
|
1799
1712
|
function getLeyningForHoliday(ev) {
|
|
1800
1713
|
var il = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
1801
|
-
|
|
1802
1714
|
if (_typeof(ev) !== 'object' || !(ev instanceof core.Event)) {
|
|
1803
1715
|
throw new TypeError("Bad event argument: ".concat(ev));
|
|
1804
1716
|
} else if (ev.getFlags() & core.flags.PARSHA_HASHAVUA) {
|
|
@@ -1806,11 +1718,11 @@ function getLeyningForHoliday(ev) {
|
|
|
1806
1718
|
} else if (ev.getFlags() & HOLIDAY_IGNORE_MASK) {
|
|
1807
1719
|
return undefined;
|
|
1808
1720
|
}
|
|
1809
|
-
|
|
1810
1721
|
var key = getLeyningKeyForEvent(ev, il);
|
|
1811
1722
|
var leyning = getLeyningForHolidayKey(key, ev.cholHaMoedDay);
|
|
1812
1723
|
return leyning;
|
|
1813
1724
|
}
|
|
1725
|
+
|
|
1814
1726
|
/**
|
|
1815
1727
|
* Looks up leyning for a given holiday key. Key should be an
|
|
1816
1728
|
* (untranslated) string used in holiday-readings.json. Returns some
|
|
@@ -1819,64 +1731,52 @@ function getLeyningForHoliday(ev) {
|
|
|
1819
1731
|
* @param {number} [cholHaMoedDay]
|
|
1820
1732
|
* @return {Leyning} map of aliyot
|
|
1821
1733
|
*/
|
|
1822
|
-
|
|
1823
1734
|
function getLeyningForHolidayKey(key, cholHaMoedDay) {
|
|
1824
1735
|
if (typeof key !== 'string') {
|
|
1825
1736
|
return undefined;
|
|
1826
1737
|
}
|
|
1827
|
-
|
|
1828
1738
|
var src = lookupFestival(key);
|
|
1829
|
-
|
|
1830
1739
|
if (typeof src === 'undefined') {
|
|
1831
1740
|
return undefined;
|
|
1832
1741
|
}
|
|
1833
|
-
|
|
1834
1742
|
var leyning = {
|
|
1835
1743
|
name: {
|
|
1836
1744
|
en: key,
|
|
1837
1745
|
he: core.Locale.lookupTranslation(key, 'he')
|
|
1838
1746
|
}
|
|
1839
1747
|
};
|
|
1840
|
-
|
|
1841
1748
|
if (src.fullkriyah) {
|
|
1842
1749
|
leyning.fullkriyah = clone(src.fullkriyah);
|
|
1843
|
-
|
|
1844
1750
|
if (key === 'Sukkot Shabbat Chol ha-Moed' && cholHaMoedDay) {
|
|
1845
1751
|
leyning.fullkriyah['M'] = leyning.fullkriyah["M-day".concat(cholHaMoedDay)];
|
|
1846
|
-
|
|
1847
1752
|
for (var day = 1; day <= 5; day++) {
|
|
1848
1753
|
delete leyning.fullkriyah["M-day".concat(day)];
|
|
1849
1754
|
}
|
|
1850
1755
|
}
|
|
1851
|
-
|
|
1852
1756
|
if (_typeof(leyning.fullkriyah['1']) === 'object') {
|
|
1853
1757
|
var parts = makeLeyningParts(leyning.fullkriyah);
|
|
1854
1758
|
leyning.summary = makeSummaryFromParts(parts);
|
|
1855
|
-
|
|
1856
1759
|
if (parts.length > 1) {
|
|
1857
1760
|
leyning.summaryParts = parts;
|
|
1858
1761
|
}
|
|
1859
1762
|
}
|
|
1860
|
-
|
|
1861
1763
|
Object.values(leyning.fullkriyah).map(function (aliyah) {
|
|
1862
1764
|
return calculateNumVerses(aliyah);
|
|
1863
1765
|
});
|
|
1864
1766
|
}
|
|
1865
|
-
|
|
1866
1767
|
if (src.haft) {
|
|
1867
1768
|
var haft = leyning.haft = cloneHaftara(src.haft);
|
|
1868
1769
|
leyning.haftara = makeSummaryFromParts(haft);
|
|
1869
1770
|
leyning.haftaraNumV = sumVerses(haft);
|
|
1870
1771
|
}
|
|
1871
|
-
|
|
1872
1772
|
if (src.seph) {
|
|
1873
1773
|
var seph = leyning.seph = cloneHaftara(src.seph);
|
|
1874
1774
|
leyning.sephardic = makeSummaryFromParts(seph);
|
|
1875
1775
|
leyning.sephardicNumV = sumVerses(seph);
|
|
1876
1776
|
}
|
|
1877
|
-
|
|
1878
1777
|
return leyning;
|
|
1879
1778
|
}
|
|
1779
|
+
|
|
1880
1780
|
/**
|
|
1881
1781
|
* on doubled parshiot, read only the second Haftarah
|
|
1882
1782
|
* except for Nitzavim-Vayelech
|
|
@@ -1884,7 +1784,6 @@ function getLeyningForHolidayKey(key, cholHaMoedDay) {
|
|
|
1884
1784
|
* @param {string[]} parsha
|
|
1885
1785
|
* @return {string}
|
|
1886
1786
|
*/
|
|
1887
|
-
|
|
1888
1787
|
function getHaftaraKey(parsha) {
|
|
1889
1788
|
if (parsha.length == 1 || parsha[0] == 'Nitzavim') {
|
|
1890
1789
|
return parsha[0];
|
|
@@ -1892,20 +1791,17 @@ function getHaftaraKey(parsha) {
|
|
|
1892
1791
|
return parsha[1];
|
|
1893
1792
|
}
|
|
1894
1793
|
}
|
|
1794
|
+
|
|
1895
1795
|
/**
|
|
1896
1796
|
* Looks up regular leyning for a weekly parsha with no special readings
|
|
1897
1797
|
* @param {string|string[]} parsha untranslated name like 'Pinchas' or ['Pinchas'] or ['Matot','Masei']
|
|
1898
1798
|
* @return {Leyning} map of aliyot
|
|
1899
1799
|
*/
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
1800
|
function getLeyningForParsha(parsha) {
|
|
1903
1801
|
var isParshaString = typeof parsha === 'string';
|
|
1904
|
-
|
|
1905
1802
|
if (!isParshaString && (!Array.isArray(parsha) || parsha.length !== 1 && parsha.length !== 2)) {
|
|
1906
1803
|
throw new TypeError("Bad parsha argument: ".concat(parsha));
|
|
1907
1804
|
}
|
|
1908
|
-
|
|
1909
1805
|
var name = isParshaString ? parsha : parshaToString(parsha);
|
|
1910
1806
|
var raw = parshiyotObj[name];
|
|
1911
1807
|
var fullkriyah = {};
|
|
@@ -1926,7 +1822,6 @@ function getLeyningForParsha(parsha) {
|
|
|
1926
1822
|
var parts = makeLeyningParts(fullkriyah);
|
|
1927
1823
|
var summary = makeSummaryFromParts(parts);
|
|
1928
1824
|
/** @type {Leyning} */
|
|
1929
|
-
|
|
1930
1825
|
var result = {
|
|
1931
1826
|
name: {
|
|
1932
1827
|
en: name,
|
|
@@ -1939,28 +1834,22 @@ function getLeyningForParsha(parsha) {
|
|
|
1939
1834
|
summary: summary,
|
|
1940
1835
|
fullkriyah: fullkriyah
|
|
1941
1836
|
};
|
|
1942
|
-
|
|
1943
1837
|
if (parts.length > 1) {
|
|
1944
1838
|
result.summaryParts = parts;
|
|
1945
1839
|
}
|
|
1946
|
-
|
|
1947
1840
|
var hkey = getHaftaraKey(parshaNameArray);
|
|
1948
1841
|
var haft0 = parshiyotObj[hkey].haft;
|
|
1949
|
-
|
|
1950
1842
|
if (haft0) {
|
|
1951
1843
|
var haft = result.haft = cloneHaftara(haft0);
|
|
1952
1844
|
result.haftara = makeSummaryFromParts(haft);
|
|
1953
1845
|
result.haftaraNumV = sumVerses(haft);
|
|
1954
1846
|
}
|
|
1955
|
-
|
|
1956
1847
|
if (raw.seph) {
|
|
1957
1848
|
var seph = result.seph = cloneHaftara(raw.seph);
|
|
1958
1849
|
result.sephardic = makeSummaryFromParts(seph);
|
|
1959
1850
|
result.sephardicNumV = sumVerses(seph);
|
|
1960
1851
|
}
|
|
1961
|
-
|
|
1962
1852
|
var weekdaySrc = raw.weekday || parshiyotObj[parshaNameArray[0]].weekday;
|
|
1963
|
-
|
|
1964
1853
|
if (weekdaySrc) {
|
|
1965
1854
|
var weekday = result.weekday = {};
|
|
1966
1855
|
['1', '2', '3'].forEach(function (num) {
|
|
@@ -1974,9 +1863,9 @@ function getLeyningForParsha(parsha) {
|
|
|
1974
1863
|
weekday[num] = aliyah;
|
|
1975
1864
|
});
|
|
1976
1865
|
}
|
|
1977
|
-
|
|
1978
1866
|
return result;
|
|
1979
1867
|
}
|
|
1868
|
+
|
|
1980
1869
|
/**
|
|
1981
1870
|
* Looks up leyning for a regular Shabbat parsha, including any special
|
|
1982
1871
|
* maftir or Haftara.
|
|
@@ -1984,44 +1873,36 @@ function getLeyningForParsha(parsha) {
|
|
|
1984
1873
|
* @param {boolean} [il] in Israel
|
|
1985
1874
|
* @return {Leyning} map of aliyot
|
|
1986
1875
|
*/
|
|
1987
|
-
|
|
1988
1876
|
function getLeyningForParshaHaShavua(ev) {
|
|
1989
1877
|
var il = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
1990
|
-
|
|
1991
1878
|
if (!ev instanceof core.Event) {
|
|
1992
1879
|
throw new TypeError("Bad event argument: ".concat(ev));
|
|
1993
1880
|
} else if (ev.getFlags() != core.flags.PARSHA_HASHAVUA) {
|
|
1994
1881
|
throw new TypeError("Event must be parsha hashavua: ".concat(ev.getDesc()));
|
|
1995
|
-
}
|
|
1996
|
-
|
|
1997
|
-
|
|
1882
|
+
}
|
|
1883
|
+
// first, collect the default aliyot and haftara
|
|
1998
1884
|
var parsha = ev.parsha;
|
|
1999
1885
|
var result = getLeyningForParsha(parsha);
|
|
2000
1886
|
var reason = {};
|
|
2001
|
-
var hd = ev.getDate();
|
|
2002
|
-
|
|
1887
|
+
var hd = ev.getDate();
|
|
1888
|
+
// Now, check for special maftir or haftara on same date
|
|
2003
1889
|
var specialHaftara = specialReadings(hd, il, result.fullkriyah, reason, parsha, true);
|
|
2004
|
-
|
|
2005
1890
|
if (specialHaftara) {
|
|
2006
1891
|
var haft = result.haft = cloneHaftara(specialHaftara.haft);
|
|
2007
1892
|
result.haftara = makeSummaryFromParts(haft);
|
|
2008
1893
|
result.haftaraNumV = sumVerses(haft);
|
|
2009
|
-
|
|
2010
1894
|
if (specialHaftara.seph) {
|
|
2011
1895
|
var seph = result.seph = cloneHaftara(specialHaftara.seph);
|
|
2012
1896
|
result.sephardic = makeSummaryFromParts(seph);
|
|
2013
1897
|
result.sephardicNumV = sumVerses(seph);
|
|
2014
1898
|
}
|
|
2015
1899
|
}
|
|
2016
|
-
|
|
2017
1900
|
if (reason['7'] || reason['M']) {
|
|
2018
1901
|
var parts = makeLeyningParts(result.fullkriyah);
|
|
2019
1902
|
result.summary = makeSummaryFromParts(parts);
|
|
2020
1903
|
result.summaryParts = parts;
|
|
2021
1904
|
}
|
|
2022
|
-
|
|
2023
1905
|
var reasons = Object.keys(reason);
|
|
2024
|
-
|
|
2025
1906
|
if (reasons.length !== 0) {
|
|
2026
1907
|
result.reason = reason;
|
|
2027
1908
|
reasons.forEach(function (num) {
|
|
@@ -2033,18 +1914,17 @@ function getLeyningForParshaHaShavua(ev) {
|
|
|
2033
1914
|
});
|
|
2034
1915
|
} else {
|
|
2035
1916
|
var aliyah = result.fullkriyah[num];
|
|
2036
|
-
|
|
2037
1917
|
if (_typeof(aliyah) === 'object') {
|
|
2038
1918
|
aliyah.reason = reason[num];
|
|
2039
1919
|
}
|
|
2040
1920
|
}
|
|
2041
1921
|
});
|
|
2042
|
-
}
|
|
2043
|
-
|
|
2044
|
-
|
|
1922
|
+
}
|
|
1923
|
+
// to avoid confusion, don't include Saturday mincha reading here
|
|
2045
1924
|
delete result.weekday;
|
|
2046
1925
|
return result;
|
|
2047
1926
|
}
|
|
1927
|
+
|
|
2048
1928
|
/**
|
|
2049
1929
|
* Looks up leyning for a regular Shabbat, Monday/Thursday weekday or holiday.
|
|
2050
1930
|
*
|
|
@@ -2062,34 +1942,26 @@ function getLeyningForParshaHaShavua(ev) {
|
|
|
2062
1942
|
* @param {boolean} il in Israel
|
|
2063
1943
|
* @return {Leyning} map of aliyot
|
|
2064
1944
|
*/
|
|
2065
|
-
|
|
2066
1945
|
function getLeyningOnDate(hdate, il) {
|
|
2067
1946
|
var dow = hdate.getDay();
|
|
2068
1947
|
var hyear = hdate.getFullYear();
|
|
2069
1948
|
var sedra = core.HebrewCalendar.getSedra(hyear, il);
|
|
2070
1949
|
var parsha = sedra.lookup(hdate);
|
|
2071
|
-
|
|
2072
1950
|
if (dow === 6 && !parsha.chag) {
|
|
2073
1951
|
var parshaEvent = new core.ParshaEvent(hdate, parsha.parsha, il);
|
|
2074
1952
|
return getLeyningForParshaHaShavua(parshaEvent, il);
|
|
2075
1953
|
}
|
|
2076
|
-
|
|
2077
1954
|
var events = core.HebrewCalendar.getHolidaysOnDate(hdate, il) || [];
|
|
2078
|
-
|
|
2079
1955
|
for (var i = 0; i < events.length; i++) {
|
|
2080
1956
|
var reading = getLeyningForHoliday(events[i], il);
|
|
2081
|
-
|
|
2082
1957
|
if (reading) {
|
|
2083
1958
|
return reading;
|
|
2084
1959
|
}
|
|
2085
1960
|
}
|
|
2086
|
-
|
|
2087
1961
|
if (dow === 1 || dow === 4) {
|
|
2088
1962
|
var saturday = hdate.onOrAfter(6);
|
|
2089
1963
|
var parsha2 = findParshaHaShavua(saturday);
|
|
2090
|
-
|
|
2091
1964
|
var _reading = getLeyningForParsha(parsha2.parsha);
|
|
2092
|
-
|
|
2093
1965
|
var result = {
|
|
2094
1966
|
name: _reading.name,
|
|
2095
1967
|
parsha: _reading.parsha,
|
|
@@ -2097,44 +1969,38 @@ function getLeyningOnDate(hdate, il) {
|
|
|
2097
1969
|
weekday: _reading.weekday
|
|
2098
1970
|
};
|
|
2099
1971
|
return result;
|
|
2100
|
-
}
|
|
2101
|
-
|
|
2102
|
-
|
|
1972
|
+
}
|
|
1973
|
+
// no reading today: it's not Shabbat, Mon/Thu, or a Torah-reading holiday
|
|
2103
1974
|
return undefined;
|
|
2104
1975
|
}
|
|
1976
|
+
|
|
2105
1977
|
/**
|
|
2106
1978
|
* @private
|
|
2107
1979
|
* @param {HDate} saturday
|
|
2108
1980
|
* @param {boolean} il
|
|
2109
1981
|
* @return {Leyning}
|
|
2110
1982
|
*/
|
|
2111
|
-
|
|
2112
1983
|
function findParshaHaShavua(saturday, il) {
|
|
2113
1984
|
var hyear = saturday.getFullYear();
|
|
2114
1985
|
var sedra = core.HebrewCalendar.getSedra(hyear, il);
|
|
2115
1986
|
var parsha = sedra.lookup(saturday);
|
|
2116
|
-
|
|
2117
1987
|
if (!parsha.chag) {
|
|
2118
1988
|
return parsha;
|
|
2119
|
-
}
|
|
2120
|
-
|
|
2121
|
-
|
|
1989
|
+
}
|
|
1990
|
+
// Search for next regular parsha, which could even spill into next year
|
|
2122
1991
|
var endOfYear = new core.HDate(1, core.months.TISHREI, hyear + 1).abs() - 1;
|
|
2123
1992
|
var endAbs = endOfYear + 30;
|
|
2124
|
-
|
|
2125
1993
|
for (var sat2 = saturday.abs() + 7; sat2 <= endAbs; sat2 += 7) {
|
|
2126
1994
|
var sedra2 = sat2 > endOfYear ? core.HebrewCalendar.getSedra(hyear + 1, il) : sedra;
|
|
2127
1995
|
var parsha2 = sedra2.lookup(sat2);
|
|
2128
|
-
|
|
2129
1996
|
if (!parsha2.chag) {
|
|
2130
1997
|
return parsha2;
|
|
2131
1998
|
}
|
|
2132
1999
|
}
|
|
2133
2000
|
/* NOTREACHED */
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
2001
|
return null;
|
|
2137
2002
|
}
|
|
2003
|
+
|
|
2138
2004
|
/**
|
|
2139
2005
|
* Parsha metadata
|
|
2140
2006
|
* @typedef {Object} ParshaMeta
|
|
@@ -2153,22 +2019,16 @@ function findParshaHaShavua(saturday, il) {
|
|
|
2153
2019
|
* @param {string|string[]} parsha
|
|
2154
2020
|
* @return {ParshaMeta}
|
|
2155
2021
|
*/
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
2022
|
function lookupParsha(parsha) {
|
|
2159
2023
|
var isParshaString = typeof parsha === 'string';
|
|
2160
|
-
|
|
2161
2024
|
if (!isParshaString && (!Array.isArray(parsha) || parsha.length !== 1 && parsha.length !== 2)) {
|
|
2162
2025
|
throw new TypeError("Bad parsha argument: ".concat(parsha));
|
|
2163
2026
|
}
|
|
2164
|
-
|
|
2165
2027
|
var name = isParshaString ? parsha : parshaToString(parsha);
|
|
2166
2028
|
var raw = parshiyotObj[name];
|
|
2167
|
-
|
|
2168
2029
|
if (_typeof(raw) !== 'object') {
|
|
2169
2030
|
throw new TypeError("Bad parsha argument: ".concat(parsha));
|
|
2170
2031
|
}
|
|
2171
|
-
|
|
2172
2032
|
return raw;
|
|
2173
2033
|
}
|
|
2174
2034
|
|
|
@@ -2177,23 +2037,22 @@ var fmt = new Intl.DateTimeFormat('en-US', {
|
|
|
2177
2037
|
month: 'short',
|
|
2178
2038
|
day: '2-digit'
|
|
2179
2039
|
});
|
|
2040
|
+
|
|
2180
2041
|
/**
|
|
2181
2042
|
* @private
|
|
2182
2043
|
* @param {Date} dt
|
|
2183
2044
|
* @return {string}
|
|
2184
2045
|
*/
|
|
2185
|
-
|
|
2186
2046
|
function fmtDate(dt) {
|
|
2187
2047
|
var s = fmt.format(dt).split(' ');
|
|
2188
2048
|
return s[1].substring(0, 2) + '-' + s[0] + '-' + s[2];
|
|
2189
2049
|
}
|
|
2050
|
+
|
|
2190
2051
|
/**
|
|
2191
2052
|
* @private
|
|
2192
2053
|
* @param {Event[]} events
|
|
2193
2054
|
* @return {Object<string,boolean>}
|
|
2194
2055
|
*/
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
2056
|
function getParshaDates(events) {
|
|
2198
2057
|
var parshaEvents = events.filter(function (ev) {
|
|
2199
2058
|
return ev.getFlags() === core.flags.PARSHA_HASHAVUA;
|
|
@@ -2204,13 +2063,13 @@ function getParshaDates(events) {
|
|
|
2204
2063
|
}, {});
|
|
2205
2064
|
return parshaDates;
|
|
2206
2065
|
}
|
|
2066
|
+
|
|
2207
2067
|
/**
|
|
2208
2068
|
* @private
|
|
2209
2069
|
* @param {fs.WriteStream} stream
|
|
2210
2070
|
* @param {number} hyear
|
|
2211
2071
|
* @param {boolean} il
|
|
2212
2072
|
*/
|
|
2213
|
-
|
|
2214
2073
|
function writeFullKriyahCsv(stream, hyear, il) {
|
|
2215
2074
|
var events0 = core.HebrewCalendar.calendar({
|
|
2216
2075
|
year: hyear,
|
|
@@ -2229,68 +2088,61 @@ function writeFullKriyahCsv(stream, hyear, il) {
|
|
|
2229
2088
|
}
|
|
2230
2089
|
});
|
|
2231
2090
|
}
|
|
2091
|
+
|
|
2232
2092
|
/**
|
|
2233
2093
|
* @private
|
|
2234
2094
|
* @param {Event} ev
|
|
2235
2095
|
* @return {boolean}
|
|
2236
2096
|
*/
|
|
2237
|
-
|
|
2238
2097
|
function ignore(ev) {
|
|
2239
2098
|
var mask = ev.getFlags();
|
|
2240
|
-
|
|
2241
2099
|
if (mask === core.flags.SPECIAL_SHABBAT) {
|
|
2242
2100
|
return true;
|
|
2243
2101
|
}
|
|
2244
|
-
|
|
2245
2102
|
if (mask !== core.flags.ROSH_CHODESH) {
|
|
2246
2103
|
return false;
|
|
2247
2104
|
}
|
|
2248
|
-
|
|
2249
2105
|
return ev.getDate().getDay() === 6;
|
|
2250
2106
|
}
|
|
2107
|
+
|
|
2251
2108
|
/**
|
|
2252
2109
|
* @private
|
|
2253
2110
|
* @param {fs.WriteStream} stream
|
|
2254
2111
|
* @param {Event} ev
|
|
2255
2112
|
* @param {boolean} il
|
|
2256
2113
|
*/
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
2114
|
function writeFullKriyahEvent(stream, ev, il) {
|
|
2260
2115
|
if (ignore(ev)) {
|
|
2261
2116
|
return;
|
|
2262
2117
|
}
|
|
2263
|
-
|
|
2264
2118
|
var mask = ev.getFlags();
|
|
2265
2119
|
var isParsha = mask === core.flags.PARSHA_HASHAVUA;
|
|
2266
2120
|
var reading = isParsha ? getLeyningForParshaHaShavua(ev, il) : getLeyningForHoliday(ev, il);
|
|
2267
|
-
|
|
2268
2121
|
if (reading) {
|
|
2269
2122
|
writeCsvLines(stream, ev, reading, il, isParsha);
|
|
2270
|
-
|
|
2271
2123
|
if (!isParsha) {
|
|
2272
2124
|
writeHolidayMincha(stream, ev, il);
|
|
2273
2125
|
}
|
|
2274
2126
|
}
|
|
2275
2127
|
}
|
|
2128
|
+
|
|
2276
2129
|
/**
|
|
2277
2130
|
* @private
|
|
2278
2131
|
* @param {fs.WriteStream} stream
|
|
2279
2132
|
* @param {Event} ev
|
|
2280
2133
|
* @param {boolean} il
|
|
2281
2134
|
*/
|
|
2282
|
-
|
|
2283
2135
|
function writeHolidayMincha(stream, ev, il) {
|
|
2284
2136
|
var desc = ev.getDesc();
|
|
2285
2137
|
var minchaDesc1 = desc + ' (Mincha)';
|
|
2286
2138
|
var readingMincha1 = getLeyningForHolidayKey(minchaDesc1);
|
|
2287
2139
|
var readingMincha = readingMincha1 || getLeyningForHolidayKey(getLeyningKeyForEvent(ev, il) + ' (Mincha)');
|
|
2288
|
-
|
|
2289
2140
|
if (readingMincha) {
|
|
2290
2141
|
var minchaEv = new core.Event(ev.getDate(), minchaDesc1, core.flags.USER_EVENT);
|
|
2291
2142
|
writeCsvLines(stream, minchaEv, readingMincha, il, false);
|
|
2292
2143
|
}
|
|
2293
2144
|
}
|
|
2145
|
+
|
|
2294
2146
|
/**
|
|
2295
2147
|
* Formats reading for CSV
|
|
2296
2148
|
* @param {fs.WriteStream} stream
|
|
@@ -2299,76 +2151,59 @@ function writeHolidayMincha(stream, ev, il) {
|
|
|
2299
2151
|
* @param {boolean} il
|
|
2300
2152
|
* @param {boolean} isParsha
|
|
2301
2153
|
*/
|
|
2302
|
-
|
|
2303
2154
|
function writeCsvLines(stream, ev, reading, il, isParsha) {
|
|
2304
2155
|
var parsha = isParsha ? ev.basename() : getLeyningKeyForEvent(ev, il) || ev.render();
|
|
2305
2156
|
var date = fmtDate(ev.getDate().greg());
|
|
2306
2157
|
var lines = getFullKriyahLines(reading);
|
|
2307
2158
|
lines.forEach(function (s) {
|
|
2308
2159
|
var code = s[0].charCodeAt(0);
|
|
2309
|
-
|
|
2310
2160
|
if (code < 48 || code > 57) {
|
|
2311
2161
|
s[0] = "\"".concat(s[0], "\"");
|
|
2312
2162
|
}
|
|
2313
|
-
|
|
2314
2163
|
stream.write("".concat(date, ",\"").concat(parsha, "\",").concat(s[0], ",\"").concat(s[1], "\",").concat(s[2], "\r\n"));
|
|
2315
2164
|
});
|
|
2316
2165
|
stream.write('\r\n');
|
|
2317
2166
|
}
|
|
2167
|
+
|
|
2318
2168
|
/**
|
|
2319
2169
|
* @private
|
|
2320
2170
|
* @param {any} reading
|
|
2321
2171
|
* @return {any[]}
|
|
2322
2172
|
*/
|
|
2323
|
-
|
|
2324
2173
|
function getFullKriyahLines(reading) {
|
|
2325
2174
|
var lines = [];
|
|
2326
|
-
|
|
2327
2175
|
if (reading.fullkriyah) {
|
|
2328
2176
|
Object.keys(reading.fullkriyah).forEach(function (num) {
|
|
2329
2177
|
var a = reading.fullkriyah[num];
|
|
2330
|
-
|
|
2331
2178
|
if (typeof a !== 'undefined') {
|
|
2332
2179
|
var _reading$reason;
|
|
2333
|
-
|
|
2334
2180
|
var k = num == 'M' ? 'maf' : num;
|
|
2335
2181
|
var aliyah = formatAliyahWithBook(a);
|
|
2336
|
-
|
|
2337
2182
|
if ((_reading$reason = reading.reason) !== null && _reading$reason !== void 0 && _reading$reason[num]) {
|
|
2338
2183
|
aliyah += ' | ' + reading.reason[num];
|
|
2339
2184
|
}
|
|
2340
|
-
|
|
2341
2185
|
lines.push([k, aliyah, a.v || '']);
|
|
2342
2186
|
}
|
|
2343
2187
|
});
|
|
2344
2188
|
}
|
|
2345
|
-
|
|
2346
2189
|
var specialHaftara = false;
|
|
2347
|
-
|
|
2348
2190
|
if (reading.haftara) {
|
|
2349
2191
|
var _reading$reason2;
|
|
2350
|
-
|
|
2351
2192
|
var haftara = reading.haftara.replace(/,/g, ';');
|
|
2352
|
-
|
|
2353
2193
|
if ((_reading$reason2 = reading.reason) !== null && _reading$reason2 !== void 0 && _reading$reason2.haftara) {
|
|
2354
2194
|
specialHaftara = true;
|
|
2355
2195
|
haftara += ' | ' + reading.reason.haftara;
|
|
2356
2196
|
}
|
|
2357
|
-
|
|
2358
2197
|
lines.push(['Haftara', haftara, reading.haftaraNumV || '']);
|
|
2359
2198
|
}
|
|
2360
|
-
|
|
2361
2199
|
if (reading.sephardic && !specialHaftara) {
|
|
2362
2200
|
var sephardic = reading.sephardic.replace(/,/g, ';');
|
|
2363
2201
|
lines.push(['Haftara for Sephardim', sephardic, reading.sephardicNumV || '']);
|
|
2364
2202
|
}
|
|
2365
|
-
|
|
2366
2203
|
if (reading.triHaftara) {
|
|
2367
2204
|
var _haftara = reading.triHaftara.replace(/,/g, ';');
|
|
2368
|
-
|
|
2369
2205
|
lines.push(['Alternate Haftara', _haftara, reading.triHaftaraNumV || '']);
|
|
2370
2206
|
}
|
|
2371
|
-
|
|
2372
2207
|
return lines;
|
|
2373
2208
|
}
|
|
2374
2209
|
|
|
@@ -2398,8 +2233,6 @@ exports.writeCsvLines = writeCsvLines;
|
|
|
2398
2233
|
exports.writeFullKriyahCsv = writeFullKriyahCsv;
|
|
2399
2234
|
exports.writeHolidayMincha = writeHolidayMincha;
|
|
2400
2235
|
|
|
2401
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
2402
|
-
|
|
2403
2236
|
return exports;
|
|
2404
2237
|
|
|
2405
2238
|
})({}, hebcal);
|