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.
@@ -974,14 +974,14 @@ function tzlib_get_timezones(jsonType = false) {
974
974
  * Add to Calendar Button
975
975
  * ++++++++++++++++++++++
976
976
  *
977
- * Version: 2.6.19
977
+ * Version: 2.6.21
978
978
  * Creator: Jens Kuerschner (https://jekuer.com)
979
979
  * Project: https://github.com/add2cal/add-to-calendar-button
980
980
  * License: Elastic License 2.0 (ELv2) (https://github.com/add2cal/add-to-calendar-button/blob/main/LICENSE.txt)
981
981
  * Note: DO NOT REMOVE THE COPYRIGHT NOTICE ABOVE!
982
982
  *
983
983
  */
984
- const atcbVersion = '2.6.19';
984
+ const atcbVersion = '2.6.21';
985
985
  const atcbCssTemplate = {};
986
986
  const atcbIsBrowser = () => {
987
987
  if (typeof window === 'undefined') {
@@ -1025,7 +1025,7 @@ const atcbIsAndroid = atcbIsBrowser()
1025
1025
  };*/
1026
1026
  const atcbIsSafari = atcbIsBrowser()
1027
1027
  ? () => {
1028
- if (/^((?!chrome|android|crios|fxios).)*safari/i.test(navigator.userAgent)) {
1028
+ if (/^(?:(?!chrome|android|crios|fxios).)*safari/i.test(navigator.userAgent)) {
1029
1029
  return true;
1030
1030
  } else {
1031
1031
  return false;
@@ -1043,7 +1043,7 @@ const atcbIsMobile = () => {
1043
1043
  };
1044
1044
  const atcbIsWebView = atcbIsBrowser()
1045
1045
  ? () => {
1046
- if (/(; ?wv|(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari))/i.test(navigator.userAgent)) {
1046
+ if (/; ?wv|(?:iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent)) {
1047
1047
  return true;
1048
1048
  } else {
1049
1049
  return false;
@@ -1054,7 +1054,7 @@ const atcbIsWebView = atcbIsBrowser()
1054
1054
  };
1055
1055
  const atcbIsProblematicWebView = atcbIsBrowser()
1056
1056
  ? () => {
1057
- if (/(Instagram)/i.test(navigator.userAgent)) {
1057
+ if (/Instagram/i.test(navigator.userAgent)) {
1058
1058
  return true;
1059
1059
  } else {
1060
1060
  return false;
@@ -1273,7 +1273,7 @@ function atcb_decorate_data_timezone(tz = null) {
1273
1273
  function atcb_decorate_data_rrule(data) {
1274
1274
  if (data.recurrence && data.recurrence !== '') {
1275
1275
  data.recurrence = data.recurrence.replace(/\s+/g, '').toUpperCase();
1276
- if (!/^(RRULE:[\w=;,:+-/\\]+|daily|weekly|monthly|yearly)$/im.test(data.recurrence)) {
1276
+ if (!/^(?:RRULE:[\w=;,:+\-/\\]+|daily|weekly|monthly|yearly)$/im.test(data.recurrence)) {
1277
1277
  data.recurrence = '!wrong rrule format!';
1278
1278
  } else {
1279
1279
  if (/^RRULE:/i.test(data.recurrence)) {
@@ -1516,8 +1516,7 @@ function atcb_decorate_data_description(data, i) {
1516
1516
  description = cleanDescription(description);
1517
1517
  if (data.customVar) {
1518
1518
  for (const key in data.customVar) {
1519
- const sanitizedKey = key.replace(/[^a-zA-Z0-9\-_.]/g, '');
1520
- // eslint-disable-next-line security/detect-non-literal-regexp
1519
+ const sanitizedKey = key.replace(/[^\w\-.]/g, '');
1521
1520
  description = description.replace(new RegExp(`%%${sanitizedKey}%%`, 'g'), data.customVar[`${key}`]);
1522
1521
  }
1523
1522
  }
@@ -1576,10 +1575,8 @@ function atcb_decorate_data_extend(data) {
1576
1575
  }
1577
1576
  if (data.customVar) {
1578
1577
  for (const key in data.customVar) {
1579
- const sanitizedKey = key.replace(/[^a-zA-Z0-9\-_.]/g, '');
1580
- // eslint-disable-next-line security/detect-non-literal-regexp
1578
+ const sanitizedKey = key.replace(/[^\w\-.]/g, '');
1581
1579
  data.dates[`${i}`].name = data.dates[`${i}`].name.replace(new RegExp(`%%${sanitizedKey}%%`, 'g'), data.customVar[`${key}`]);
1582
- // eslint-disable-next-line security/detect-non-literal-regexp
1583
1580
  data.dates[`${i}`].location = data.dates[`${i}`].location.replace(new RegExp(`%%${sanitizedKey}%%`, 'g'), data.customVar[`${key}`]);
1584
1581
  }
1585
1582
  }
@@ -1598,7 +1595,7 @@ function atcb_date_cleanup(dateTimeData) {
1598
1595
  }
1599
1596
  const endpoints = ['start', 'end'];
1600
1597
  endpoints.forEach(function (point) {
1601
- if (!/^(\d{4}-\d{2}-\d{2}T?(?:\d{2}:\d{2}|)Z?|today(?:\+\d{1,4}|))$/i.test(dateTimeData[point + 'Date'])) {
1598
+ if (!/^(?:\d{4}-\d{2}-\d{2}T?(?:\d{2}:\d{2})?Z?|today(?:\+\d{1,4})?)$/i.test(dateTimeData[point + 'Date'])) {
1602
1599
  dateTimeData[point + 'Date'] = 'badly-formed';
1603
1600
  } else {
1604
1601
  dateTimeData[point + 'Date'] = atcb_date_calculation(dateTimeData[point + 'Date']);
@@ -1803,7 +1800,7 @@ async function atcb_validate_buttonStyle(data, msgPrefix) {
1803
1800
  if (!availableStyles.includes(data.buttonStyle)) {
1804
1801
  throw new Error(msgPrefix + ' failed: provided buttonStyle invalid');
1805
1802
  }
1806
- if (data.customCss && data.customCss !== '' && (!atcb_secure_url(data.customCss, false) || !/\.css($|\?)/.test(data.customCss))) {
1803
+ if (data.customCss && data.customCss !== '' && (!atcb_secure_url(data.customCss, false) || !/\.css(?:$|\?)/.test(data.customCss))) {
1807
1804
  throw new Error(msgPrefix + ' failed: customCss provided, but no valid url');
1808
1805
  }
1809
1806
  if ((!data.customCss || data.customCss === '') && data.buttonStyle === 'custom') {
@@ -1882,7 +1879,7 @@ async function atcb_validate_availability(data, msgPrefix, i, msgSuffix) {
1882
1879
  async function atcb_validate_organizer(data, msgPrefix, i, msgSuffix) {
1883
1880
  if (data.dates[`${i}`].organizer && data.dates[`${i}`].organizer !== '') {
1884
1881
  const organizerParts = data.dates[`${i}`].organizer.split('|');
1885
- if (organizerParts.length !== 2 || organizerParts[0].length > 50 || organizerParts[1].length > 80 || !atcb_validEmail(organizerParts[1])) {
1882
+ if (organizerParts.length !== 2 || organizerParts[0].length > 50 || organizerParts[1].length > 100 || !atcb_validEmail(organizerParts[1])) {
1886
1883
  throw new Error(msgPrefix + ' failed: organizer needs to match the schema "NAME|EMAIL" with a valid email address' + msgSuffix);
1887
1884
  }
1888
1885
  }
@@ -1897,14 +1894,14 @@ async function atcb_validate_attendee(data, msgPrefix, i, msgSuffix) {
1897
1894
  if (attendeeParts.length === 1 && atcb_validEmail(attendeeParts[0])) {
1898
1895
  return true;
1899
1896
  }
1900
- if (attendeeParts.length !== 2 || attendeeParts[0].length > 50 || attendeeParts[1].length > 80 || !atcb_validEmail(attendeeParts[1])) {
1897
+ if (attendeeParts.length !== 2 || attendeeParts[0].length > 50 || attendeeParts[1].length > 100 || !atcb_validEmail(attendeeParts[1])) {
1901
1898
  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);
1902
1899
  }
1903
1900
  }
1904
1901
  return true;
1905
1902
  }
1906
1903
  async function atcb_validate_uid(data, msgPrefix, i, msgSuffix) {
1907
- if (!/^(\w|-){1,254}$/.test(data.dates[`${i}`].uid)) {
1904
+ if (!/^(?:\w|-){1,254}$/.test(data.dates[`${i}`].uid)) {
1908
1905
  if (data.debug) {
1909
1906
  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);
1910
1907
  }
@@ -1973,7 +1970,7 @@ async function atcb_validate_rrule(data, msgPrefix) {
1973
1970
  if (data.recurrence && data.recurrence !== '' && data.dates.length > 1) {
1974
1971
  throw new Error(msgPrefix + ' failed: RRULE and multi-date set at the same time');
1975
1972
  }
1976
- if (data.recurrence && data.recurrence !== '' && !/^RRULE:[\w=;,:+-/\\]+$/i.test(data.recurrence)) {
1973
+ if (data.recurrence && data.recurrence !== '' && !/^RRULE:[\w=;,:+\-/\\]+$/i.test(data.recurrence)) {
1977
1974
  throw new Error(msgPrefix + ' failed: RRULE data misspelled');
1978
1975
  }
1979
1976
  return true;
@@ -1982,22 +1979,22 @@ async function atcb_validate_rrule_simplyfied(data, msgPrefix) {
1982
1979
  if (data.recurrence_interval && (data.recurrence_interval < 1 || data.recurrence_interval % 1 !== 0)) {
1983
1980
  throw new Error(msgPrefix + ' failed: recurrence data (interval) misspelled');
1984
1981
  }
1985
- if (data.recurrence_until && data.recurrence_until !== '' && !/^(\d|-|:)+$/i.test(data.recurrence_until)) {
1982
+ if (data.recurrence_until && data.recurrence_until !== '' && !/^[\d\-:]+$/.test(data.recurrence_until)) {
1986
1983
  throw new Error(msgPrefix + ' failed: recurrence data (until) misspelled');
1987
1984
  }
1988
1985
  if (data.recurrence_count && (data.recurrence_count < 1 || data.recurrence_count % 1 !== 0)) {
1989
1986
  throw new Error(msgPrefix + ' failed: recurrence data (interval) misspelled');
1990
1987
  }
1991
- if (data.recurrence_byMonth && data.recurrence_byMonth !== '' && !/^(\d|,)+$/.test(data.recurrence_byMonth)) {
1988
+ if (data.recurrence_byMonth && data.recurrence_byMonth !== '' && !/^[\d,]+$/.test(data.recurrence_byMonth)) {
1992
1989
  throw new Error(msgPrefix + ' failed: recurrence data (byMonth) misspelled');
1993
1990
  }
1994
- if (data.recurrence_byMonthDay && data.recurrence_byMonthDay !== '' && !/^(\d|,)+$/.test(data.recurrence_byMonthDay)) {
1991
+ if (data.recurrence_byMonthDay && data.recurrence_byMonthDay !== '' && !/^[\d,]+$/.test(data.recurrence_byMonthDay)) {
1995
1992
  throw new Error(msgPrefix + ' failed: recurrence data (byMonthDay) misspelled');
1996
1993
  }
1997
- if (data.recurrence_byDay && data.recurrence_byDay !== '' && !/^(\d|-|MO|TU|WE|TH|FR|SA|SU|,)+$/im.test(data.recurrence_byDay)) {
1994
+ if (data.recurrence_byDay && data.recurrence_byDay !== '' && !/^(?:[\d,-]|MO|TU|WE|TH|FR|SA|SU)+$/im.test(data.recurrence_byDay)) {
1998
1995
  throw new Error(msgPrefix + ' failed: recurrence data (byDay) misspelled');
1999
1996
  }
2000
- if (data.recurrence_weekstart && data.recurrence_weekstart !== '' && !/^(MO|TU|WE|TH|FR|SA|SU)$/im.test(data.recurrence_weekstart)) {
1997
+ if (data.recurrence_weekstart && data.recurrence_weekstart !== '' && !/^(?:MO|TU|WE|TH|FR|SA|SU)$/im.test(data.recurrence_weekstart)) {
2001
1998
  throw new Error(msgPrefix + ' failed: recurrence data (weekstart) misspelled');
2002
1999
  }
2003
2000
  return true;
@@ -2438,7 +2435,7 @@ async function atcb_generate_rsvp_form(host, data, hostEl, keyboardTrigger = fal
2438
2435
  } else {
2439
2436
  rsvpData.fields = rsvpData.fields.map((field) => {
2440
2437
  if (field.name === 'email') {
2441
- return { ...field, required: true, type: 'email', default: attendee !== '' && attendee || field.default };
2438
+ return { ...field, required: true, type: 'email', default: attendee !== '' ? attendee : field.default };
2442
2439
  }
2443
2440
  return field;
2444
2441
  });
@@ -3204,24 +3201,36 @@ function atcb_generate_bg_overlay(host, trigger = '', modal = false, darken = tr
3204
3201
  }
3205
3202
  return bgOverlay;
3206
3203
  }
3207
- function atcb_create_atcbl(host, atList = true, returnEl = false) {
3204
+ /*!
3205
+ * @preserve
3206
+ * PER LICENSE AGREEMENT, YOU ARE NOT ALLOWED TO REMOVE OR CHANGE THIS FUNCTION!
3207
+ */
3208
+ function atcb_create_atcbl(host, atList = true, returnEl = false, licenseNoteOnly = false) {
3208
3209
  const atcbL = document.createElement('div');
3209
3210
  atcbL.id = 'atcb-reference';
3210
- setTimeout(() => {
3211
- const svg =
3212
- '<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>';
3213
- atcbL.innerHTML = '<a href="https://add-to-calendar-pro.com" target="_blank" rel="noopener">' + svg + '</a>';
3214
- }, 500);
3215
- if (atList) {
3216
- host.querySelector('.atcb-initialized .atcb-list-wrapper').append(atcbL);
3217
- } else if (returnEl) {
3218
- return atcbL;
3219
- } else {
3220
- if (window.innerHeight > 1000 || window.innerWidth > 1000) {
3221
- host.append(atcbL);
3222
- atcbL.classList.add('fixed-ref');
3211
+ if (!licenseNoteOnly) {
3212
+ setTimeout(() => {
3213
+ const svg =
3214
+ '<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>';
3215
+ atcbL.innerHTML = '<a href="https://add-to-calendar-pro.com" target="_blank" rel="noopener">' + svg + '</a>';
3216
+ }, 500);
3217
+ if (atList) {
3218
+ host.querySelector('.atcb-initialized .atcb-list-wrapper').append(atcbL);
3219
+ } else if (returnEl) {
3220
+ return atcbL;
3221
+ } else {
3222
+ if (window.innerHeight > 1000 || window.innerWidth > 1000) {
3223
+ host.append(atcbL);
3224
+ atcbL.classList.add('fixed-ref');
3225
+ }
3223
3226
  }
3227
+ } else {
3228
+ 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).';
3229
+ atcbL.setAttribute('style', 'display:none !important');
3230
+ atcbL.classList.add('atcb-attribution');
3231
+ host.append(atcbL);
3224
3232
  }
3233
+ if (returnEl) return null;
3225
3234
  }
3226
3235
  async function atcb_create_modal(mainHost, data, icon = '', headline, content = '', buttons = [], subEvents = [], keyboardTrigger = false, goto = {}, closable = true) {
3227
3236
  atcbStates['active'] = data.identifier;
@@ -3895,7 +3904,7 @@ function atcb_subscribe_ical(data, fileUrl) {
3895
3904
  function atcb_subscribe_google(data, fileUrl) {
3896
3905
  const baseUrl = 'https://calendar.google.com/calendar/r?cid=';
3897
3906
  const baseUrlApp = 'calendar.google.com/calendar?cid=';
3898
- const fileUrlRegex = /^(https?:\/\/|webcal:\/\/|\/\/)calendar\.google\.com\//;
3907
+ const fileUrlRegex = /^(?:https?:\/\/|webcal:\/\/|\/\/)calendar\.google\.com\//;
3899
3908
  const newFileUrl = (function () {
3900
3909
  if (fileUrlRegex.test(fileUrl)) {
3901
3910
  return fileUrl.replace(/^(.)*\?cid=/, '');
@@ -3930,7 +3939,7 @@ function atcb_generate_google(data, date, subEvent = 'all') {
3930
3939
  urlParts.push('https://calendar.google.com/calendar/render?action=TEMPLATE');
3931
3940
  const formattedDate = atcb_generate_time(date, 'clean', 'google');
3932
3941
  urlParts.push('dates=' + encodeURIComponent(formattedDate.start) + '%2F' + encodeURIComponent(formattedDate.end));
3933
- 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) {
3942
+ 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) {
3934
3943
  urlParts.push('ctz=' + date.timeZone);
3935
3944
  }
3936
3945
  if (date.name && date.name !== '') {
@@ -4081,7 +4090,6 @@ function atcb_open_cal_url(data, type, url, subscribe = false, subEvent = null,
4081
4090
  return;
4082
4091
  }
4083
4092
  }
4084
- // eslint-disable-next-line security/detect-non-literal-fs-filename
4085
4093
  const newTab = window.open(url, target);
4086
4094
  if (newTab) {
4087
4095
  newTab.focus();
@@ -4303,7 +4311,7 @@ function atcb_generate_time(data, style = 'delimiters', targetCal = 'general', a
4303
4311
  }
4304
4312
  return durationHours + ':' + ('0' + durationMinutes).slice(-2);
4305
4313
  })();
4306
- 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))) {
4314
+ 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))) {
4307
4315
  return {
4308
4316
  start: atcb_format_datetime(newStartDate, 'clean', true, true),
4309
4317
  end: atcb_format_datetime(newEndDate, 'clean', true, true),
@@ -4625,7 +4633,7 @@ function atcb_secure_url(url, throwError = true) {
4625
4633
  }
4626
4634
  }
4627
4635
  function atcb_validEmail(email) {
4628
- if (!/^.{0,70}@.{1,30}\.[a-zA-Z]{2,9}$/.test(email)) {
4636
+ if (!/^.{0,70}@.{1,30}\.[a-z]{2,9}$/i.test(email)) {
4629
4637
  return false;
4630
4638
  }
4631
4639
  return true;
@@ -4643,9 +4651,9 @@ function atcb_rewrite_html_elements(content, clear = false, iCalBreaks = false)
4643
4651
  content = content.replace(/\{url\}(.+?)\{\/url\}/gi, (match, p1) => {
4644
4652
  return p1.split('|')[0];
4645
4653
  });
4646
- content = content.replace(/\[(|\/)(hr|p|b|strong|u|i|em|li|ul|ol|h\d)\]/gi, '');
4647
- content = content.replace(/\{(|\/)(hr|p|b|strong|u|i|em|li|ul|ol|h\d)\}/gi, '');
4648
- content = content.replace(/&[#a-zA-Z0-9]{1,9};/gi, '');
4654
+ content = content.replace(/\[\/?(hr|[pbui]|strong|em|li|ul|ol|h\d)\]/gi, '');
4655
+ content = content.replace(/\{\/?(hr|[pbui]|strong|em|li|ul|ol|h\d)\}/gi, '');
4656
+ content = content.replace(/&[#a-z0-9]{1,9};/gi, '');
4649
4657
  } else {
4650
4658
  content = content.replace(/\[url\]((?:(?!\[\/url\]).)*)\[\/url\]/gi, function (match, p1) {
4651
4659
  return atcb_parse_url_code(p1);
@@ -4653,8 +4661,8 @@ function atcb_rewrite_html_elements(content, clear = false, iCalBreaks = false)
4653
4661
  content = content.replace(/\{url\}((?:(?!\[\/url\]).)*)\{\/url\}/gi, function (match, p1) {
4654
4662
  return atcb_parse_url_code(p1);
4655
4663
  });
4656
- content = content.replace(/\[(\/|)(br|hr|p|b|strong|u|i|em|li|ul|ol|h\d)(\s?\/?)\]/gi, '<$1$2$3>');
4657
- content = content.replace(/\{(\/|)(br|hr|p|b|strong|u|i|em|li|ul|ol|h\d)(\s?\/?)\}/gi, '<$1$2$3>');
4664
+ content = content.replace(/\[(\/)?(br|hr|[pbui]|strong|em|li|ul|ol|h\d)(\s?\/?)\]/gi, '<$1$2$3>');
4665
+ content = content.replace(/\{(\/)?(br|hr|[pbui]|strong|em|li|ul|ol|h\d)(\s?\/?)\}/gi, '<$1$2$3>');
4658
4666
  }
4659
4667
  return content;
4660
4668
  }
@@ -5864,7 +5872,7 @@ if (atcbIsBrowser()) {
5864
5872
  this.data.identifier = this.identifier;
5865
5873
  } else {
5866
5874
  if (this.data.identifier && this.data.identifier !== '') {
5867
- if (!/^[\w\-_]+$/.test(this.data.identifier)) {
5875
+ if (!/^[\w-]+$/.test(this.data.identifier)) {
5868
5876
  this.data.identifier = '';
5869
5877
  if (this.debug) {
5870
5878
  let prefix = 'Add to Calendar Button';
@@ -5883,7 +5891,6 @@ if (atcbIsBrowser()) {
5883
5891
  this.identifier = this.data.identifier;
5884
5892
  }
5885
5893
  this.setAttribute('atcb-button-id', this.data.identifier);
5886
- this.classList.add('add-to-calendar');
5887
5894
  try {
5888
5895
  this.setAttribute('style', 'visibility:visible;opacity:1;position:relative;outline:none !important;');
5889
5896
  await atcb_build_button(this.shadowRoot, this.data);
@@ -5978,6 +5985,7 @@ function atcb_read_attributes(el, params = atcbWcParams) {
5978
5985
  }
5979
5986
  async function atcb_build_button(host, data) {
5980
5987
  try {
5988
+ host.host.classList.add('add-to-calendar');
5981
5989
  data = await atcb_decorate_data(data);
5982
5990
  await atcb_validate(data);
5983
5991
  const rootObj = host.querySelector('.atcb-initialized');
@@ -6002,6 +6010,9 @@ async function atcb_build_button(host, data) {
6002
6010
  }
6003
6011
  }
6004
6012
  atcb_log_event('initialization', data.identifier, data.identifier);
6013
+ if (!data.proKey && data.hideBranding && !document.getElementById('atcb-reference')) {
6014
+ atcb_create_atcbl(document.body, false, false, true);
6015
+ }
6005
6016
  return true;
6006
6017
  } catch (e) {
6007
6018
  throw new Error(e.message);
@@ -6059,7 +6070,7 @@ async function atcb_load_css(host, rootObj = null, data) {
6059
6070
  const cssGlobalContent = document.createElement('style');
6060
6071
  cssGlobalContent.id = 'atcb-global-style';
6061
6072
  const scrollBarWidth = window.innerWidth - document.documentElement.clientWidth;
6062
- cssGlobalContent.innerText = '.atcb-modal-no-scroll{overflow-y:hidden !important;-webkit-overflow-scrolling:touch;} body.atcb-modal-no-scroll{padding-right:' + scrollBarWidth + 'px;}';
6073
+ 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;}';
6063
6074
  if (nonceVal) {
6064
6075
  cssGlobalContent.setAttribute('nonce', nonceVal);
6065
6076
  }
@@ -6208,7 +6219,7 @@ async function atcb_action(inputData, triggerElement, keyboardTrigger = false) {
6208
6219
  if (triggerElement.id && triggerElement.id !== '') {
6209
6220
  data.identifier = triggerElement.id;
6210
6221
  } else {
6211
- if (data.identifier && data.identifier != '' && /^[\w\-_]+$/.test(data.identifier)) {
6222
+ if (data.identifier && data.identifier != '' && /^[\w-]+$/.test(data.identifier)) {
6212
6223
  data.identifier = 'atcb-btn-' + data.identifier;
6213
6224
  } else {
6214
6225
  data.identifier = 'atcb-btn-custom';