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