add-to-calendar-button 2.6.19 → 2.6.21

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.
@@ -1,4 +1,3 @@
1
- // eslint-disable-next-line @typescript-eslint/no-var-requires
2
1
  const tzlibActions = require('timezones-ical-library');
3
2
  /*!
4
3
  * @preserve
@@ -7,14 +6,14 @@ const tzlibActions = require('timezones-ical-library');
7
6
  * Add to Calendar Button
8
7
  * ++++++++++++++++++++++
9
8
  *
10
- * Version: 2.6.19
9
+ * Version: 2.6.21
11
10
  * Creator: Jens Kuerschner (https://jekuer.com)
12
11
  * Project: https://github.com/add2cal/add-to-calendar-button
13
12
  * License: Elastic License 2.0 (ELv2) (https://github.com/add2cal/add-to-calendar-button/blob/main/LICENSE.txt)
14
13
  * Note: DO NOT REMOVE THE COPYRIGHT NOTICE ABOVE!
15
14
  *
16
15
  */
17
- const atcbVersion = '2.6.19';
16
+ const atcbVersion = '2.6.21';
18
17
  const atcbCssTemplate = {};
19
18
  const atcbIsBrowser = () => {
20
19
  if (typeof window === 'undefined') {
@@ -58,7 +57,7 @@ const atcbIsAndroid = atcbIsBrowser()
58
57
  };*/
59
58
  const atcbIsSafari = atcbIsBrowser()
60
59
  ? () => {
61
- if (/^((?!chrome|android|crios|fxios).)*safari/i.test(navigator.userAgent)) {
60
+ if (/^(?:(?!chrome|android|crios|fxios).)*safari/i.test(navigator.userAgent)) {
62
61
  return true;
63
62
  } else {
64
63
  return false;
@@ -76,7 +75,7 @@ const atcbIsMobile = () => {
76
75
  };
77
76
  const atcbIsWebView = atcbIsBrowser()
78
77
  ? () => {
79
- if (/(; ?wv|(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari))/i.test(navigator.userAgent)) {
78
+ if (/; ?wv|(?:iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent)) {
80
79
  return true;
81
80
  } else {
82
81
  return false;
@@ -87,7 +86,7 @@ const atcbIsWebView = atcbIsBrowser()
87
86
  };
88
87
  const atcbIsProblematicWebView = atcbIsBrowser()
89
88
  ? () => {
90
- if (/(Instagram)/i.test(navigator.userAgent)) {
89
+ if (/Instagram/i.test(navigator.userAgent)) {
91
90
  return true;
92
91
  } else {
93
92
  return false;
@@ -306,7 +305,7 @@ function atcb_decorate_data_timezone(tz = null) {
306
305
  function atcb_decorate_data_rrule(data) {
307
306
  if (data.recurrence && data.recurrence !== '') {
308
307
  data.recurrence = data.recurrence.replace(/\s+/g, '').toUpperCase();
309
- if (!/^(RRULE:[\w=;,:+-/\\]+|daily|weekly|monthly|yearly)$/im.test(data.recurrence)) {
308
+ if (!/^(?:RRULE:[\w=;,:+\-/\\]+|daily|weekly|monthly|yearly)$/im.test(data.recurrence)) {
310
309
  data.recurrence = '!wrong rrule format!';
311
310
  } else {
312
311
  if (/^RRULE:/i.test(data.recurrence)) {
@@ -549,8 +548,7 @@ function atcb_decorate_data_description(data, i) {
549
548
  description = cleanDescription(description);
550
549
  if (data.customVar) {
551
550
  for (const key in data.customVar) {
552
- const sanitizedKey = key.replace(/[^a-zA-Z0-9\-_.]/g, '');
553
- // eslint-disable-next-line security/detect-non-literal-regexp
551
+ const sanitizedKey = key.replace(/[^\w\-.]/g, '');
554
552
  description = description.replace(new RegExp(`%%${sanitizedKey}%%`, 'g'), data.customVar[`${key}`]);
555
553
  }
556
554
  }
@@ -609,10 +607,8 @@ function atcb_decorate_data_extend(data) {
609
607
  }
610
608
  if (data.customVar) {
611
609
  for (const key in data.customVar) {
612
- const sanitizedKey = key.replace(/[^a-zA-Z0-9\-_.]/g, '');
613
- // eslint-disable-next-line security/detect-non-literal-regexp
610
+ const sanitizedKey = key.replace(/[^\w\-.]/g, '');
614
611
  data.dates[`${i}`].name = data.dates[`${i}`].name.replace(new RegExp(`%%${sanitizedKey}%%`, 'g'), data.customVar[`${key}`]);
615
- // eslint-disable-next-line security/detect-non-literal-regexp
616
612
  data.dates[`${i}`].location = data.dates[`${i}`].location.replace(new RegExp(`%%${sanitizedKey}%%`, 'g'), data.customVar[`${key}`]);
617
613
  }
618
614
  }
@@ -631,7 +627,7 @@ function atcb_date_cleanup(dateTimeData) {
631
627
  }
632
628
  const endpoints = ['start', 'end'];
633
629
  endpoints.forEach(function (point) {
634
- if (!/^(\d{4}-\d{2}-\d{2}T?(?:\d{2}:\d{2}|)Z?|today(?:\+\d{1,4}|))$/i.test(dateTimeData[point + 'Date'])) {
630
+ if (!/^(?:\d{4}-\d{2}-\d{2}T?(?:\d{2}:\d{2})?Z?|today(?:\+\d{1,4})?)$/i.test(dateTimeData[point + 'Date'])) {
635
631
  dateTimeData[point + 'Date'] = 'badly-formed';
636
632
  } else {
637
633
  dateTimeData[point + 'Date'] = atcb_date_calculation(dateTimeData[point + 'Date']);
@@ -836,7 +832,7 @@ async function atcb_validate_buttonStyle(data, msgPrefix) {
836
832
  if (!availableStyles.includes(data.buttonStyle)) {
837
833
  throw new Error(msgPrefix + ' failed: provided buttonStyle invalid');
838
834
  }
839
- if (data.customCss && data.customCss !== '' && (!atcb_secure_url(data.customCss, false) || !/\.css($|\?)/.test(data.customCss))) {
835
+ if (data.customCss && data.customCss !== '' && (!atcb_secure_url(data.customCss, false) || !/\.css(?:$|\?)/.test(data.customCss))) {
840
836
  throw new Error(msgPrefix + ' failed: customCss provided, but no valid url');
841
837
  }
842
838
  if ((!data.customCss || data.customCss === '') && data.buttonStyle === 'custom') {
@@ -915,7 +911,7 @@ async function atcb_validate_availability(data, msgPrefix, i, msgSuffix) {
915
911
  async function atcb_validate_organizer(data, msgPrefix, i, msgSuffix) {
916
912
  if (data.dates[`${i}`].organizer && data.dates[`${i}`].organizer !== '') {
917
913
  const organizerParts = data.dates[`${i}`].organizer.split('|');
918
- if (organizerParts.length !== 2 || organizerParts[0].length > 50 || organizerParts[1].length > 80 || !atcb_validEmail(organizerParts[1])) {
914
+ if (organizerParts.length !== 2 || organizerParts[0].length > 50 || organizerParts[1].length > 100 || !atcb_validEmail(organizerParts[1])) {
919
915
  throw new Error(msgPrefix + ' failed: organizer needs to match the schema "NAME|EMAIL" with a valid email address' + msgSuffix);
920
916
  }
921
917
  }
@@ -930,14 +926,14 @@ async function atcb_validate_attendee(data, msgPrefix, i, msgSuffix) {
930
926
  if (attendeeParts.length === 1 && atcb_validEmail(attendeeParts[0])) {
931
927
  return true;
932
928
  }
933
- if (attendeeParts.length !== 2 || attendeeParts[0].length > 50 || attendeeParts[1].length > 80 || !atcb_validEmail(attendeeParts[1])) {
929
+ if (attendeeParts.length !== 2 || attendeeParts[0].length > 50 || attendeeParts[1].length > 100 || !atcb_validEmail(attendeeParts[1])) {
934
930
  throw new Error(msgPrefix + ' failed: attendee needs to be a valid email address or match the schema "NAME|EMAIL" with EMAIL being a valid email address' + msgSuffix);
935
931
  }
936
932
  }
937
933
  return true;
938
934
  }
939
935
  async function atcb_validate_uid(data, msgPrefix, i, msgSuffix) {
940
- if (!/^(\w|-){1,254}$/.test(data.dates[`${i}`].uid)) {
936
+ if (!/^(?:\w|-){1,254}$/.test(data.dates[`${i}`].uid)) {
941
937
  if (data.debug) {
942
938
  console.warn(msgPrefix + ': UID not valid. May only contain alpha, digits, and dashes; and be less than 255 characters. Falling back to an automated value!' + msgSuffix);
943
939
  }
@@ -1006,7 +1002,7 @@ async function atcb_validate_rrule(data, msgPrefix) {
1006
1002
  if (data.recurrence && data.recurrence !== '' && data.dates.length > 1) {
1007
1003
  throw new Error(msgPrefix + ' failed: RRULE and multi-date set at the same time');
1008
1004
  }
1009
- if (data.recurrence && data.recurrence !== '' && !/^RRULE:[\w=;,:+-/\\]+$/i.test(data.recurrence)) {
1005
+ if (data.recurrence && data.recurrence !== '' && !/^RRULE:[\w=;,:+\-/\\]+$/i.test(data.recurrence)) {
1010
1006
  throw new Error(msgPrefix + ' failed: RRULE data misspelled');
1011
1007
  }
1012
1008
  return true;
@@ -1015,22 +1011,22 @@ async function atcb_validate_rrule_simplyfied(data, msgPrefix) {
1015
1011
  if (data.recurrence_interval && (data.recurrence_interval < 1 || data.recurrence_interval % 1 !== 0)) {
1016
1012
  throw new Error(msgPrefix + ' failed: recurrence data (interval) misspelled');
1017
1013
  }
1018
- if (data.recurrence_until && data.recurrence_until !== '' && !/^(\d|-|:)+$/i.test(data.recurrence_until)) {
1014
+ if (data.recurrence_until && data.recurrence_until !== '' && !/^[\d\-:]+$/.test(data.recurrence_until)) {
1019
1015
  throw new Error(msgPrefix + ' failed: recurrence data (until) misspelled');
1020
1016
  }
1021
1017
  if (data.recurrence_count && (data.recurrence_count < 1 || data.recurrence_count % 1 !== 0)) {
1022
1018
  throw new Error(msgPrefix + ' failed: recurrence data (interval) misspelled');
1023
1019
  }
1024
- if (data.recurrence_byMonth && data.recurrence_byMonth !== '' && !/^(\d|,)+$/.test(data.recurrence_byMonth)) {
1020
+ if (data.recurrence_byMonth && data.recurrence_byMonth !== '' && !/^[\d,]+$/.test(data.recurrence_byMonth)) {
1025
1021
  throw new Error(msgPrefix + ' failed: recurrence data (byMonth) misspelled');
1026
1022
  }
1027
- if (data.recurrence_byMonthDay && data.recurrence_byMonthDay !== '' && !/^(\d|,)+$/.test(data.recurrence_byMonthDay)) {
1023
+ if (data.recurrence_byMonthDay && data.recurrence_byMonthDay !== '' && !/^[\d,]+$/.test(data.recurrence_byMonthDay)) {
1028
1024
  throw new Error(msgPrefix + ' failed: recurrence data (byMonthDay) misspelled');
1029
1025
  }
1030
- if (data.recurrence_byDay && data.recurrence_byDay !== '' && !/^(\d|-|MO|TU|WE|TH|FR|SA|SU|,)+$/im.test(data.recurrence_byDay)) {
1026
+ if (data.recurrence_byDay && data.recurrence_byDay !== '' && !/^(?:[\d,-]|MO|TU|WE|TH|FR|SA|SU)+$/im.test(data.recurrence_byDay)) {
1031
1027
  throw new Error(msgPrefix + ' failed: recurrence data (byDay) misspelled');
1032
1028
  }
1033
- if (data.recurrence_weekstart && data.recurrence_weekstart !== '' && !/^(MO|TU|WE|TH|FR|SA|SU)$/im.test(data.recurrence_weekstart)) {
1029
+ if (data.recurrence_weekstart && data.recurrence_weekstart !== '' && !/^(?:MO|TU|WE|TH|FR|SA|SU)$/im.test(data.recurrence_weekstart)) {
1034
1030
  throw new Error(msgPrefix + ' failed: recurrence data (weekstart) misspelled');
1035
1031
  }
1036
1032
  return true;
@@ -1516,24 +1512,36 @@ function atcb_generate_bg_overlay(host, trigger = '', modal = false, darken = tr
1516
1512
  }
1517
1513
  return bgOverlay;
1518
1514
  }
1519
- function atcb_create_atcbl(host, atList = true, returnEl = false) {
1515
+ /*!
1516
+ * @preserve
1517
+ * PER LICENSE AGREEMENT, YOU ARE NOT ALLOWED TO REMOVE OR CHANGE THIS FUNCTION!
1518
+ */
1519
+ function atcb_create_atcbl(host, atList = true, returnEl = false, licenseNoteOnly = false) {
1520
1520
  const atcbL = document.createElement('div');
1521
1521
  atcbL.id = 'atcb-reference';
1522
- setTimeout(() => {
1523
- const svg =
1524
- '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52.916 2.8305"><path d="M51.446 1.2565c.0708-.2518.293-.4511.5555-.4783.2211-.042.4641.0128.622.18.2474.2472.3045.6146.2916.9503v.8594h-.8307l-.0027-1.0447c-.0079-.1547-.1075-.343-.2868-.3238-.2049.0128-.3115.2421-.295.4257v.9428h-.823l-.0027-1.0435c-.0076-.1569-.1131-.3412-.2918-.3252-.2069.008-.311.2351-.2939.4188v.9499h-.8307V.8237h.8307v.4019c.0906-.2264.2876-.4188.5368-.449.2878-.0533.6071.0705.7509.3331.0279.0465.0509.0959.0699.1468zm-3.9843.5228c-.0102.1874.107.3914.3024.424.1869.0419.3799-.0941.4215-.2776.0535-.1967-.0023-.4493-.2015-.5411-.1767-.0892-.4107.0032-.483.1865-.0297.0649-.0391.1374-.0392.2082zm-.7691 0c.0037-.2984.1395-.5957.3792-.7774.3035-.2327.7168-.2798 1.0829-.2005.3299.0729.6352.3018.7481.6275.1337.3797.0441.8526-.2795 1.1099-.3184.2561-.7624.3092-1.152.2184-.3379-.0788-.6426-.3312-.7369-.6717a1.092 1.092 0 0 1-.0417-.3063zm-.2351-.3308c-.1638-.0482-.3406-.0889-.5104-.0492s-.2742.2154-.2664.3837c-.0082.1705.0998.3468.2712.3876.1657.0389.3389.0016.4979-.0492l.0769.5499c-.2369.1272-.5165.1434-.7791.1149-.3236-.0401-.6353-.2311-.7805-.529-.1237-.2511-.139-.5539-.0485-.8181.108-.3075.3782-.5432.6902-.6287.2064-.058.4286-.0585.6371-.0119.1027.0253.198.0732.2884.1269l-.0769.523zm-2.6877.9806c-.003-.1221.066-.2371.1643-.3062.1303-.0934.3092-.1186.4572-.0533.132.054.2426.1752.2607.3197s-.0575.2836-.1746.3603c-.1633.1093-.3947.1063-.5517-.0135-.0951-.0715-.1577-.187-.1559-.307zm-3.046-1.0111c-.0091-.4276.1794-.8577.5181-1.1231.3714-.2958.8865-.3488 1.3384-.2477.4065.0946.7695.3811.9242.7731.2302.553.1173 1.2562-.3406 1.6606-.4021.3563-.9997.4264-1.5018.273-.4407-.1312-.7876-.5106-.8926-.9564a1.565 1.565 0 0 1-.0458-.3795zm1.4499.6961c.2631.014.4813-.2093.5326-.4557.0785-.3033.0224-.6834-.2491-.8753-.2182-.159-.5514-.1019-.704.1211-.1692.2437-.1902.5756-.088.8501.0775.2087.2816.3661.5085.3597zm-1.631.6458c-.1978.0602-.4078.0938-.6123.0464-.2697-.0443-.5044-.2371-.6009-.4927-.0701-.1852-.1026-.3819-.154-.5728h-.1846v1.0268h-.8614V.0601l1.3192.0034c.3398.0217.7177.1323.9118.434.152.2456.127.584-.0389.8163-.0979.1284-.2387.2162-.3846.2807.0316.1513.0475.3167.1461.4418.1193.1187.3064.1031.4596.0812v.6422zm-.871-1.8651c.0103-.138-.1243-.231-.25-.2384-.1427-.0193-.2871-.0088-.4307-.0115v.5422c.1905-.0038.3947.0138.5678-.0796a.234.234 0 0 0 .1128-.2126zM35.573.0603l1.1424.0047c.3439.0209.7218.1098.9446.3944.2252.2934.2163.7545-.0512 1.0195-.279.2859-.698.3701-1.0838.362-.0329.0105-.1126-.0258-.102.0281v.8987h-.8499V.0603zm1.0192 1.2345c.1672.0054.3805-.0562.4233-.2409.0425-.1434-.0225-.3102-.1619-.3724-.1328-.0705-.2859-.0537-.4306-.0559v.6615c.0561.0073.1128.0073.1692.0077zm-2.5176.2226h1.0576v.4653h-1.0576zM32.3311.8234h.8307v.4019q.0942-.2384.25-.348.1577-.1115.3615-.1115l.1154.6442q-.375 0-.5519.0808-.175.0788-.175.2538v1.023h-.8307zm-1.2257 1.5791c-.0937.2116-.2986.3716-.5319.3897-.3887.0533-.7844-.1743-.9578-.5217-.2044-.381-.1519-.892.1543-1.2049.2461-.2614.6627-.389.9973-.2285.1574.0799.2779.2236.3381.3886V.7662h.8268v2.0017h-.8268v-.3653zm0-.6345c-.0052-.2449-.2747-.4425-.5088-.3585-.217.0615-.3402.3271-.243.5316.0896.2161.3875.3078.5783.1678.1106-.0747.179-.2073.1735-.3408zM27.7118.7662c.2401-.008.4923.1021.6064.3222.0351.0816.045.0806.0397.0023V.1721l.8307-.1231v2.7189h-.8307v-.3653c-.0907.2158-.3003.3744-.5356.39-.3605.0507-.7279-.1432-.9123-.4525-.2569-.3983-.1992-.9693.1456-1.2985.173-.1702.412-.2772.6563-.2754zm.6461 1.0018c-.0048-.2526-.2909-.4519-.5276-.3518-.2324.0782-.3309.3933-.1843.5898.1239.1938.425.2285.5871.0636.0811-.0768.1287-.1897.1248-.3015zM24.139.8233h.7922v.4019c.1006-.2169.2949-.397.5347-.4408.2696-.0572.58.0085.76.2293.2045.2403.2438.5692.2358.8734v.8802h-.8268l-.0022-1.1213c-.004-.1252-.0677-.2748-.2066-.2939-.2045-.0306-.3739.1457-.4412.3226-.0292.0785-.0098.1646-.0154.2467v.8459h-.8306V.8233zm-1.0416 1.4236c.2011-.0002.3981-.0574.5807-.1384l.0961.5288c-.3198.1421-.6806.1894-1.027.145-.3369-.0473-.6587-.2545-.8007-.5699-.1588-.3469-.1132-.7886.1413-1.0788.2741-.3191.7406-.4335 1.1413-.3308.2768.0734.5008.3019.5751.5779.0429.146.0624.3015.043.453l-1.1806.1538c.0368.134.158.2311.2944.2482.0449.0082.0907.0114.1363.0114zm.1461-.7557c-.0268-.1234-.1257-.237-.2578-.244-.143-.0241-.2868.0725-.325.2111-.0103.0527-.0737.2029.0271.1552l.5558-.1223zm-1.4939 1.1721c-.2463.1208-.5356.1686-.805.1092-.227-.0527-.3993-.2481-.4518-.4712-.0545-.2125-.0296-.4333-.0353-.6502V.1714l.8307-.1231.0011 1.9292c.002.1378.1537.1938.2711.1813.0651.0169.1819-.1.162.0152l.0274.4893zm-2.5115-.2609c-.0937.2116-.2986.3716-.5319.3897-.3887.0533-.7844-.1743-.9578-.5217-.2044-.381-.1519-.892.1543-1.2049.2461-.2614.6627-.389.9973-.2285.1574.0799.2779.2236.3381.3886V.7661h.8268v2.0017h-.8268v-.3653zm0-.6345c-.0052-.2449-.2747-.4425-.5088-.3585-.217.0615-.3402.3271-.243.5316.0896.2161.3875.3078.5783.1678.1106-.0747.179-.2073.1735-.3408zm-2.3726.35c.1696.0054.3334-.0479.4884-.1115l.1077.6249c-.5137.3026-1.2229.2625-1.6732-.1399-.2959-.2444-.4693-.6191-.4819-1.0009-.0323-.4791.181-.9792.5853-1.2496.4565-.3128 1.0898-.3142 1.5659-.0438l-.1038.6115c-.2721-.1029-.5957-.168-.8667-.0274-.2291.1239-.3077.4039-.2984.6481-.0043.2465.1061.5161.3427.6212.1037.0495.2198.0676.3339.0676zm-2.923-.6005h1.0576v.4653h-1.0576zm-1.7829.2619c-.0102.1874.107.3914.3024.424.1869.0419.3799-.0941.4215-.2776.0535-.1967-.0023-.4493-.2015-.5411-.1767-.0892-.4107.0032-.4831.1865-.0297.0649-.0391.1374-.0392.2082zm-.7691 0c.0037-.2984.1395-.5957.3792-.7774.3035-.2327.7168-.2798 1.0829-.2005.33.0729.6352.3018.7481.6275.1337.3797.0441.8526-.2795 1.1099-.3184.2561-.7624.3092-1.152.2184-.3379-.0788-.6426-.3312-.7369-.6717a1.092 1.092 0 0 1-.0417-.3063zm-.1976.8841c-.2463.1208-.5356.1686-.805.1092-.227-.0527-.3993-.2481-.4518-.4712-.0557-.2169-.0286-.4422-.0334-.6635l.0019-.3551h-.25V.7943h.3115l.3653-.7461h.4v.7461h.4538v.4884h-.4538l.0011.6943c.0034.1365.1541.1943.2715.1818.0768.006.1848-.0959.1624.0301l.0265.4744zm-2.7861-1.146h1.0575v.4653H8.4068zM6.5412.7662c.2401-.008.4923.1021.6064.3223.0351.0816.045.0806.0397.0023V.172l.8307-.1231v2.7189h-.8307v-.3653c-.0907.2158-.3003.3744-.5356.39-.3605.0507-.7279-.1432-.9123-.4525-.2569-.3983-.1992-.9693.1456-1.2985.173-.1702.412-.2772.6563-.2754zm.6461 1.0018c-.0048-.2526-.2909-.4519-.5276-.3518-.2324.0782-.3308.3933-.1843.5898.1239.1938.425.2285.5871.0636.0811-.0768.1287-.1897.1248-.3015zM3.7956.7662c.2401-.008.4923.1021.6064.3222.0351.0816.045.0806.0397.0023V.172l.8307-.1231v2.7189h-.8307v-.3653c-.0907.2158-.3003.3744-.5356.39-.3605.0507-.7279-.1432-.9123-.4525-.2569-.3983-.1992-.9693.1456-1.2985.173-.1702.4119-.2772.6563-.2754zm.6461 1.0018c-.0048-.2526-.2909-.4519-.5276-.3518-.2324.0782-.3308.3933-.1843.5898.1239.1938.425.2285.5871.0636.0811-.0768.1287-.1897.1248-.3015zM.7498.0603h1.196l.7845 2.7074h-.9268l-.1038-.5192H.9997l-.1115.5192h-.8883zm.8576 1.7037L1.3497.5795 1.0843 1.764z"/></svg>';
1525
- atcbL.innerHTML = '<a href="https://add-to-calendar-pro.com" target="_blank" rel="noopener">' + svg + '</a>';
1526
- }, 500);
1527
- if (atList) {
1528
- host.querySelector('.atcb-initialized .atcb-list-wrapper').append(atcbL);
1529
- } else if (returnEl) {
1530
- return atcbL;
1531
- } else {
1532
- if (window.innerHeight > 1000 || window.innerWidth > 1000) {
1533
- host.append(atcbL);
1534
- atcbL.classList.add('fixed-ref');
1522
+ if (!licenseNoteOnly) {
1523
+ setTimeout(() => {
1524
+ const svg =
1525
+ '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52.916 2.8305"><path d="M51.446 1.2565c.0708-.2518.293-.4511.5555-.4783.2211-.042.4641.0128.622.18.2474.2472.3045.6146.2916.9503v.8594h-.8307l-.0027-1.0447c-.0079-.1547-.1075-.343-.2868-.3238-.2049.0128-.3115.2421-.295.4257v.9428h-.823l-.0027-1.0435c-.0076-.1569-.1131-.3412-.2918-.3252-.2069.008-.311.2351-.2939.4188v.9499h-.8307V.8237h.8307v.4019c.0906-.2264.2876-.4188.5368-.449.2878-.0533.6071.0705.7509.3331.0279.0465.0509.0959.0699.1468zm-3.9843.5228c-.0102.1874.107.3914.3024.424.1869.0419.3799-.0941.4215-.2776.0535-.1967-.0023-.4493-.2015-.5411-.1767-.0892-.4107.0032-.483.1865-.0297.0649-.0391.1374-.0392.2082zm-.7691 0c.0037-.2984.1395-.5957.3792-.7774.3035-.2327.7168-.2798 1.0829-.2005.3299.0729.6352.3018.7481.6275.1337.3797.0441.8526-.2795 1.1099-.3184.2561-.7624.3092-1.152.2184-.3379-.0788-.6426-.3312-.7369-.6717a1.092 1.092 0 0 1-.0417-.3063zm-.2351-.3308c-.1638-.0482-.3406-.0889-.5104-.0492s-.2742.2154-.2664.3837c-.0082.1705.0998.3468.2712.3876.1657.0389.3389.0016.4979-.0492l.0769.5499c-.2369.1272-.5165.1434-.7791.1149-.3236-.0401-.6353-.2311-.7805-.529-.1237-.2511-.139-.5539-.0485-.8181.108-.3075.3782-.5432.6902-.6287.2064-.058.4286-.0585.6371-.0119.1027.0253.198.0732.2884.1269l-.0769.523zm-2.6877.9806c-.003-.1221.066-.2371.1643-.3062.1303-.0934.3092-.1186.4572-.0533.132.054.2426.1752.2607.3197s-.0575.2836-.1746.3603c-.1633.1093-.3947.1063-.5517-.0135-.0951-.0715-.1577-.187-.1559-.307zm-3.046-1.0111c-.0091-.4276.1794-.8577.5181-1.1231.3714-.2958.8865-.3488 1.3384-.2477.4065.0946.7695.3811.9242.7731.2302.553.1173 1.2562-.3406 1.6606-.4021.3563-.9997.4264-1.5018.273-.4407-.1312-.7876-.5106-.8926-.9564a1.565 1.565 0 0 1-.0458-.3795zm1.4499.6961c.2631.014.4813-.2093.5326-.4557.0785-.3033.0224-.6834-.2491-.8753-.2182-.159-.5514-.1019-.704.1211-.1692.2437-.1902.5756-.088.8501.0775.2087.2816.3661.5085.3597zm-1.631.6458c-.1978.0602-.4078.0938-.6123.0464-.2697-.0443-.5044-.2371-.6009-.4927-.0701-.1852-.1026-.3819-.154-.5728h-.1846v1.0268h-.8614V.0601l1.3192.0034c.3398.0217.7177.1323.9118.434.152.2456.127.584-.0389.8163-.0979.1284-.2387.2162-.3846.2807.0316.1513.0475.3167.1461.4418.1193.1187.3064.1031.4596.0812v.6422zm-.871-1.8651c.0103-.138-.1243-.231-.25-.2384-.1427-.0193-.2871-.0088-.4307-.0115v.5422c.1905-.0038.3947.0138.5678-.0796a.234.234 0 0 0 .1128-.2126zM35.573.0603l1.1424.0047c.3439.0209.7218.1098.9446.3944.2252.2934.2163.7545-.0512 1.0195-.279.2859-.698.3701-1.0838.362-.0329.0105-.1126-.0258-.102.0281v.8987h-.8499V.0603zm1.0192 1.2345c.1672.0054.3805-.0562.4233-.2409.0425-.1434-.0225-.3102-.1619-.3724-.1328-.0705-.2859-.0537-.4306-.0559v.6615c.0561.0073.1128.0073.1692.0077zm-2.5176.2226h1.0576v.4653h-1.0576zM32.3311.8234h.8307v.4019q.0942-.2384.25-.348.1577-.1115.3615-.1115l.1154.6442q-.375 0-.5519.0808-.175.0788-.175.2538v1.023h-.8307zm-1.2257 1.5791c-.0937.2116-.2986.3716-.5319.3897-.3887.0533-.7844-.1743-.9578-.5217-.2044-.381-.1519-.892.1543-1.2049.2461-.2614.6627-.389.9973-.2285.1574.0799.2779.2236.3381.3886V.7662h.8268v2.0017h-.8268v-.3653zm0-.6345c-.0052-.2449-.2747-.4425-.5088-.3585-.217.0615-.3402.3271-.243.5316.0896.2161.3875.3078.5783.1678.1106-.0747.179-.2073.1735-.3408zM27.7118.7662c.2401-.008.4923.1021.6064.3222.0351.0816.045.0806.0397.0023V.1721l.8307-.1231v2.7189h-.8307v-.3653c-.0907.2158-.3003.3744-.5356.39-.3605.0507-.7279-.1432-.9123-.4525-.2569-.3983-.1992-.9693.1456-1.2985.173-.1702.412-.2772.6563-.2754zm.6461 1.0018c-.0048-.2526-.2909-.4519-.5276-.3518-.2324.0782-.3309.3933-.1843.5898.1239.1938.425.2285.5871.0636.0811-.0768.1287-.1897.1248-.3015zM24.139.8233h.7922v.4019c.1006-.2169.2949-.397.5347-.4408.2696-.0572.58.0085.76.2293.2045.2403.2438.5692.2358.8734v.8802h-.8268l-.0022-1.1213c-.004-.1252-.0677-.2748-.2066-.2939-.2045-.0306-.3739.1457-.4412.3226-.0292.0785-.0098.1646-.0154.2467v.8459h-.8306V.8233zm-1.0416 1.4236c.2011-.0002.3981-.0574.5807-.1384l.0961.5288c-.3198.1421-.6806.1894-1.027.145-.3369-.0473-.6587-.2545-.8007-.5699-.1588-.3469-.1132-.7886.1413-1.0788.2741-.3191.7406-.4335 1.1413-.3308.2768.0734.5008.3019.5751.5779.0429.146.0624.3015.043.453l-1.1806.1538c.0368.134.158.2311.2944.2482.0449.0082.0907.0114.1363.0114zm.1461-.7557c-.0268-.1234-.1257-.237-.2578-.244-.143-.0241-.2868.0725-.325.2111-.0103.0527-.0737.2029.0271.1552l.5558-.1223zm-1.4939 1.1721c-.2463.1208-.5356.1686-.805.1092-.227-.0527-.3993-.2481-.4518-.4712-.0545-.2125-.0296-.4333-.0353-.6502V.1714l.8307-.1231.0011 1.9292c.002.1378.1537.1938.2711.1813.0651.0169.1819-.1.162.0152l.0274.4893zm-2.5115-.2609c-.0937.2116-.2986.3716-.5319.3897-.3887.0533-.7844-.1743-.9578-.5217-.2044-.381-.1519-.892.1543-1.2049.2461-.2614.6627-.389.9973-.2285.1574.0799.2779.2236.3381.3886V.7661h.8268v2.0017h-.8268v-.3653zm0-.6345c-.0052-.2449-.2747-.4425-.5088-.3585-.217.0615-.3402.3271-.243.5316.0896.2161.3875.3078.5783.1678.1106-.0747.179-.2073.1735-.3408zm-2.3726.35c.1696.0054.3334-.0479.4884-.1115l.1077.6249c-.5137.3026-1.2229.2625-1.6732-.1399-.2959-.2444-.4693-.6191-.4819-1.0009-.0323-.4791.181-.9792.5853-1.2496.4565-.3128 1.0898-.3142 1.5659-.0438l-.1038.6115c-.2721-.1029-.5957-.168-.8667-.0274-.2291.1239-.3077.4039-.2984.6481-.0043.2465.1061.5161.3427.6212.1037.0495.2198.0676.3339.0676zm-2.923-.6005h1.0576v.4653h-1.0576zm-1.7829.2619c-.0102.1874.107.3914.3024.424.1869.0419.3799-.0941.4215-.2776.0535-.1967-.0023-.4493-.2015-.5411-.1767-.0892-.4107.0032-.4831.1865-.0297.0649-.0391.1374-.0392.2082zm-.7691 0c.0037-.2984.1395-.5957.3792-.7774.3035-.2327.7168-.2798 1.0829-.2005.33.0729.6352.3018.7481.6275.1337.3797.0441.8526-.2795 1.1099-.3184.2561-.7624.3092-1.152.2184-.3379-.0788-.6426-.3312-.7369-.6717a1.092 1.092 0 0 1-.0417-.3063zm-.1976.8841c-.2463.1208-.5356.1686-.805.1092-.227-.0527-.3993-.2481-.4518-.4712-.0557-.2169-.0286-.4422-.0334-.6635l.0019-.3551h-.25V.7943h.3115l.3653-.7461h.4v.7461h.4538v.4884h-.4538l.0011.6943c.0034.1365.1541.1943.2715.1818.0768.006.1848-.0959.1624.0301l.0265.4744zm-2.7861-1.146h1.0575v.4653H8.4068zM6.5412.7662c.2401-.008.4923.1021.6064.3223.0351.0816.045.0806.0397.0023V.172l.8307-.1231v2.7189h-.8307v-.3653c-.0907.2158-.3003.3744-.5356.39-.3605.0507-.7279-.1432-.9123-.4525-.2569-.3983-.1992-.9693.1456-1.2985.173-.1702.412-.2772.6563-.2754zm.6461 1.0018c-.0048-.2526-.2909-.4519-.5276-.3518-.2324.0782-.3308.3933-.1843.5898.1239.1938.425.2285.5871.0636.0811-.0768.1287-.1897.1248-.3015zM3.7956.7662c.2401-.008.4923.1021.6064.3222.0351.0816.045.0806.0397.0023V.172l.8307-.1231v2.7189h-.8307v-.3653c-.0907.2158-.3003.3744-.5356.39-.3605.0507-.7279-.1432-.9123-.4525-.2569-.3983-.1992-.9693.1456-1.2985.173-.1702.4119-.2772.6563-.2754zm.6461 1.0018c-.0048-.2526-.2909-.4519-.5276-.3518-.2324.0782-.3308.3933-.1843.5898.1239.1938.425.2285.5871.0636.0811-.0768.1287-.1897.1248-.3015zM.7498.0603h1.196l.7845 2.7074h-.9268l-.1038-.5192H.9997l-.1115.5192h-.8883zm.8576 1.7037L1.3497.5795 1.0843 1.764z"/></svg>';
1526
+ atcbL.innerHTML = '<a href="https://add-to-calendar-pro.com" target="_blank" rel="noopener">' + svg + '</a>';
1527
+ }, 500);
1528
+ if (atList) {
1529
+ host.querySelector('.atcb-initialized .atcb-list-wrapper').append(atcbL);
1530
+ } else if (returnEl) {
1531
+ return atcbL;
1532
+ } else {
1533
+ if (window.innerHeight > 1000 || window.innerWidth > 1000) {
1534
+ host.append(atcbL);
1535
+ atcbL.classList.add('fixed-ref');
1536
+ }
1535
1537
  }
1538
+ } else {
1539
+ atcbL.innerHTML = 'Using the <a href="https://add-to-calendar-pro.com" target="_blank" rel="noopener referrer">Add to Calendar Button</a>, licensed under the Elastic License 2.0 (ELv2).';
1540
+ atcbL.setAttribute('style', 'display:none !important');
1541
+ atcbL.classList.add('atcb-attribution');
1542
+ host.append(atcbL);
1536
1543
  }
1544
+ if (returnEl) return null;
1537
1545
  }
1538
1546
  async function atcb_create_modal(mainHost, data, icon = '', headline, content = '', buttons = [], subEvents = [], keyboardTrigger = false, goto = {}, closable = true) {
1539
1547
  atcbStates['active'] = data.identifier;
@@ -2207,7 +2215,7 @@ function atcb_subscribe_ical(data, fileUrl) {
2207
2215
  function atcb_subscribe_google(data, fileUrl) {
2208
2216
  const baseUrl = 'https://calendar.google.com/calendar/r?cid=';
2209
2217
  const baseUrlApp = 'calendar.google.com/calendar?cid=';
2210
- const fileUrlRegex = /^(https?:\/\/|webcal:\/\/|\/\/)calendar\.google\.com\//;
2218
+ const fileUrlRegex = /^(?:https?:\/\/|webcal:\/\/|\/\/)calendar\.google\.com\//;
2211
2219
  const newFileUrl = (function () {
2212
2220
  if (fileUrlRegex.test(fileUrl)) {
2213
2221
  return fileUrl.replace(/^(.)*\?cid=/, '');
@@ -2242,7 +2250,7 @@ function atcb_generate_google(data, date, subEvent = 'all') {
2242
2250
  urlParts.push('https://calendar.google.com/calendar/render?action=TEMPLATE');
2243
2251
  const formattedDate = atcb_generate_time(date, 'clean', 'google');
2244
2252
  urlParts.push('dates=' + encodeURIComponent(formattedDate.start) + '%2F' + encodeURIComponent(formattedDate.end));
2245
- if (date.timeZone && date.timeZone !== '' && !/(GMT[+|-]\d{1,2}|Etc\/U|Etc\/Zulu|CET|CST6CDT|EET|EST|EST5EDT|MET|MST|MST7MDT|PST8PDT|WET)/i.test(date.timeZone) && !formattedDate.allday) {
2253
+ if (date.timeZone && date.timeZone !== '' && !/GMT[+|-]\d{1,2}|Etc\/U|Etc\/Zulu|CET|CST6CDT|EET|EST|MET|MST|PST8PDT|WET/i.test(date.timeZone) && !formattedDate.allday) {
2246
2254
  urlParts.push('ctz=' + date.timeZone);
2247
2255
  }
2248
2256
  if (date.name && date.name !== '') {
@@ -2393,7 +2401,6 @@ function atcb_open_cal_url(data, type, url, subscribe = false, subEvent = null,
2393
2401
  return;
2394
2402
  }
2395
2403
  }
2396
- // eslint-disable-next-line security/detect-non-literal-fs-filename
2397
2404
  const newTab = window.open(url, target);
2398
2405
  if (newTab) {
2399
2406
  newTab.focus();
@@ -2615,7 +2622,7 @@ function atcb_generate_time(data, style = 'delimiters', targetCal = 'general', a
2615
2622
  }
2616
2623
  return durationHours + ':' + ('0' + durationMinutes).slice(-2);
2617
2624
  })();
2618
- if (targetCal == 'ical' || (targetCal == 'google' && !/(GMT[+|-]\d{1,2}|Etc\/U|Etc\/Zulu|CET|CST6CDT|EET|EST|EST5EDT|MET|MST|MST7MDT|PST8PDT|WET)/i.test(data.timeZone))) {
2625
+ if (targetCal == 'ical' || (targetCal == 'google' && !/GMT[+|-]\d{1,2}|Etc\/U|Etc\/Zulu|CET|CST6CDT|EET|EST|MET|MST|PST8PDT|WET/i.test(data.timeZone))) {
2619
2626
  return {
2620
2627
  start: atcb_format_datetime(newStartDate, 'clean', true, true),
2621
2628
  end: atcb_format_datetime(newEndDate, 'clean', true, true),
@@ -2937,7 +2944,7 @@ function atcb_secure_url(url, throwError = true) {
2937
2944
  }
2938
2945
  }
2939
2946
  function atcb_validEmail(email) {
2940
- if (!/^.{0,70}@.{1,30}\.[a-zA-Z]{2,9}$/.test(email)) {
2947
+ if (!/^.{0,70}@.{1,30}\.[a-z]{2,9}$/i.test(email)) {
2941
2948
  return false;
2942
2949
  }
2943
2950
  return true;
@@ -2955,9 +2962,9 @@ function atcb_rewrite_html_elements(content, clear = false, iCalBreaks = false)
2955
2962
  content = content.replace(/\{url\}(.+?)\{\/url\}/gi, (match, p1) => {
2956
2963
  return p1.split('|')[0];
2957
2964
  });
2958
- content = content.replace(/\[(|\/)(hr|p|b|strong|u|i|em|li|ul|ol|h\d)\]/gi, '');
2959
- content = content.replace(/\{(|\/)(hr|p|b|strong|u|i|em|li|ul|ol|h\d)\}/gi, '');
2960
- content = content.replace(/&[#a-zA-Z0-9]{1,9};/gi, '');
2965
+ content = content.replace(/\[\/?(hr|[pbui]|strong|em|li|ul|ol|h\d)\]/gi, '');
2966
+ content = content.replace(/\{\/?(hr|[pbui]|strong|em|li|ul|ol|h\d)\}/gi, '');
2967
+ content = content.replace(/&[#a-z0-9]{1,9};/gi, '');
2961
2968
  } else {
2962
2969
  content = content.replace(/\[url\]((?:(?!\[\/url\]).)*)\[\/url\]/gi, function (match, p1) {
2963
2970
  return atcb_parse_url_code(p1);
@@ -2965,8 +2972,8 @@ function atcb_rewrite_html_elements(content, clear = false, iCalBreaks = false)
2965
2972
  content = content.replace(/\{url\}((?:(?!\[\/url\]).)*)\{\/url\}/gi, function (match, p1) {
2966
2973
  return atcb_parse_url_code(p1);
2967
2974
  });
2968
- content = content.replace(/\[(\/|)(br|hr|p|b|strong|u|i|em|li|ul|ol|h\d)(\s?\/?)\]/gi, '<$1$2$3>');
2969
- content = content.replace(/\{(\/|)(br|hr|p|b|strong|u|i|em|li|ul|ol|h\d)(\s?\/?)\}/gi, '<$1$2$3>');
2975
+ content = content.replace(/\[(\/)?(br|hr|[pbui]|strong|em|li|ul|ol|h\d)(\s?\/?)\]/gi, '<$1$2$3>');
2976
+ content = content.replace(/\{(\/)?(br|hr|[pbui]|strong|em|li|ul|ol|h\d)(\s?\/?)\}/gi, '<$1$2$3>');
2970
2977
  }
2971
2978
  return content;
2972
2979
  }
@@ -4176,7 +4183,7 @@ if (atcbIsBrowser()) {
4176
4183
  this.data.identifier = this.identifier;
4177
4184
  } else {
4178
4185
  if (this.data.identifier && this.data.identifier !== '') {
4179
- if (!/^[\w\-_]+$/.test(this.data.identifier)) {
4186
+ if (!/^[\w-]+$/.test(this.data.identifier)) {
4180
4187
  this.data.identifier = '';
4181
4188
  if (this.debug) {
4182
4189
  let prefix = 'Add to Calendar Button';
@@ -4195,7 +4202,6 @@ if (atcbIsBrowser()) {
4195
4202
  this.identifier = this.data.identifier;
4196
4203
  }
4197
4204
  this.setAttribute('atcb-button-id', this.data.identifier);
4198
- this.classList.add('add-to-calendar');
4199
4205
  try {
4200
4206
  this.setAttribute('style', 'visibility:visible;opacity:1;position:relative;outline:none !important;');
4201
4207
  await atcb_build_button(this.shadowRoot, this.data);
@@ -4290,6 +4296,7 @@ function atcb_read_attributes(el, params = atcbWcParams) {
4290
4296
  }
4291
4297
  async function atcb_build_button(host, data) {
4292
4298
  try {
4299
+ host.host.classList.add('add-to-calendar');
4293
4300
  data = await atcb_decorate_data(data);
4294
4301
  await atcb_validate(data);
4295
4302
  const rootObj = host.querySelector('.atcb-initialized');
@@ -4314,6 +4321,9 @@ async function atcb_build_button(host, data) {
4314
4321
  }
4315
4322
  }
4316
4323
  atcb_log_event('initialization', data.identifier, data.identifier);
4324
+ if (!data.proKey && data.hideBranding && !document.getElementById('atcb-reference')) {
4325
+ atcb_create_atcbl(document.body, false, false, true);
4326
+ }
4317
4327
  return true;
4318
4328
  } catch (e) {
4319
4329
  throw new Error(e.message);
@@ -4371,7 +4381,7 @@ async function atcb_load_css(host, rootObj = null, data) {
4371
4381
  const cssGlobalContent = document.createElement('style');
4372
4382
  cssGlobalContent.id = 'atcb-global-style';
4373
4383
  const scrollBarWidth = window.innerWidth - document.documentElement.clientWidth;
4374
- cssGlobalContent.innerText = '.atcb-modal-no-scroll{overflow-y:hidden !important;-webkit-overflow-scrolling:touch;} body.atcb-modal-no-scroll{padding-right:' + scrollBarWidth + 'px;}';
4384
+ cssGlobalContent.innerText = '.atcb-modal-no-scroll{overflow-y:hidden !important;-webkit-overflow-scrolling:touch;} body.atcb-modal-no-scroll{padding-right:' + scrollBarWidth + 'px;}.atcb-attribution{display:none;}';
4375
4385
  if (nonceVal) {
4376
4386
  cssGlobalContent.setAttribute('nonce', nonceVal);
4377
4387
  }
@@ -4520,7 +4530,7 @@ async function atcb_action(inputData, triggerElement, keyboardTrigger = false) {
4520
4530
  if (triggerElement.id && triggerElement.id !== '') {
4521
4531
  data.identifier = triggerElement.id;
4522
4532
  } else {
4523
- if (data.identifier && data.identifier != '' && /^[\w\-_]+$/.test(data.identifier)) {
4533
+ if (data.identifier && data.identifier != '' && /^[\w-]+$/.test(data.identifier)) {
4524
4534
  data.identifier = 'atcb-btn-' + data.identifier;
4525
4535
  } else {
4526
4536
  data.identifier = 'atcb-btn-custom';