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.
- package/README.md +1 -0
- package/assets/css/atcb-3d.css +7 -2
- package/assets/css/atcb-3d.min.css +1 -1
- package/assets/css/atcb-date.css +7 -2
- package/assets/css/atcb-date.min.css +1 -1
- package/assets/css/atcb-flat.css +7 -2
- package/assets/css/atcb-flat.min.css +1 -1
- package/assets/css/atcb-neumorphism.css +7 -2
- package/assets/css/atcb-neumorphism.min.css +1 -1
- package/assets/css/atcb-round.css +7 -2
- package/assets/css/atcb-round.min.css +1 -1
- package/assets/css/atcb-text.css +7 -2
- package/assets/css/atcb-text.min.css +1 -1
- package/assets/css/atcb.css +7 -2
- package/assets/css/atcb.min.css +1 -1
- package/dist/atcb-no-pro-unstyle.js +61 -50
- package/dist/atcb-no-pro.js +62 -51
- package/dist/atcb-unstyle.js +62 -51
- package/dist/atcb.js +63 -52
- package/dist/commonjs/index.js +63 -53
- package/dist/commonjs/no-pro/index.js +62 -52
- package/dist/commonjs/no-pro-unstyle/index.js +61 -51
- package/dist/commonjs/unstyle/index.js +62 -52
- package/dist/module/index.js +63 -52
- package/dist/module/no-pro/index.js +62 -51
- package/dist/module/no-pro-unstyle/index.js +61 -50
- package/dist/module/unstyle/index.js +62 -51
- package/package.json +10 -11
- package/test/server-side-init.test.js +0 -3
- package/test/test-prep.js +0 -4
- package/test/wc-tests/wc-load.test.js +0 -3
- package/.eslintrc.json +0 -36
- package/dist/commonjs/.eslintrc.json +0 -1
package/dist/module/index.js
CHANGED
|
@@ -6,15 +6,15 @@ import { tzlib_get_ical_block, tzlib_get_offset, tzlib_get_timezones } from 'tim
|
|
|
6
6
|
* Add to Calendar Button
|
|
7
7
|
* ++++++++++++++++++++++
|
|
8
8
|
*
|
|
9
|
-
* Version: 2.6.
|
|
9
|
+
* Version: 2.6.21
|
|
10
10
|
* Creator: Jens Kuerschner (https://jekuer.com)
|
|
11
11
|
* Project: https://github.com/add2cal/add-to-calendar-button
|
|
12
12
|
* License: Elastic License 2.0 (ELv2) (https://github.com/add2cal/add-to-calendar-button/blob/main/LICENSE.txt)
|
|
13
13
|
* Note: DO NOT REMOVE THE COPYRIGHT NOTICE ABOVE!
|
|
14
14
|
*
|
|
15
15
|
*/
|
|
16
|
-
const atcbVersion = '2.6.
|
|
17
|
-
const atcbCssTemplate = {
|
|
16
|
+
const atcbVersion = '2.6.21';
|
|
17
|
+
const atcbCssTemplate = {
|
|
18
18
|
if (typeof window === 'undefined') {
|
|
19
19
|
return false;
|
|
20
20
|
} else {
|
|
@@ -56,7 +56,7 @@ const atcbIsAndroid = atcbIsBrowser()
|
|
|
56
56
|
};*/
|
|
57
57
|
const atcbIsSafari = atcbIsBrowser()
|
|
58
58
|
? () => {
|
|
59
|
-
if (/^((?!chrome|android|crios|fxios).)*safari/i.test(navigator.userAgent)) {
|
|
59
|
+
if (/^(?:(?!chrome|android|crios|fxios).)*safari/i.test(navigator.userAgent)) {
|
|
60
60
|
return true;
|
|
61
61
|
} else {
|
|
62
62
|
return false;
|
|
@@ -74,7 +74,7 @@ const atcbIsMobile = () => {
|
|
|
74
74
|
};
|
|
75
75
|
const atcbIsWebView = atcbIsBrowser()
|
|
76
76
|
? () => {
|
|
77
|
-
if (
|
|
77
|
+
if (/; ?wv|(?:iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent)) {
|
|
78
78
|
return true;
|
|
79
79
|
} else {
|
|
80
80
|
return false;
|
|
@@ -85,7 +85,7 @@ const atcbIsWebView = atcbIsBrowser()
|
|
|
85
85
|
};
|
|
86
86
|
const atcbIsProblematicWebView = atcbIsBrowser()
|
|
87
87
|
? () => {
|
|
88
|
-
if (/
|
|
88
|
+
if (/Instagram/i.test(navigator.userAgent)) {
|
|
89
89
|
return true;
|
|
90
90
|
} else {
|
|
91
91
|
return false;
|
|
@@ -304,7 +304,7 @@ function atcb_decorate_data_timezone(tz = null) {
|
|
|
304
304
|
function atcb_decorate_data_rrule(data) {
|
|
305
305
|
if (data.recurrence && data.recurrence !== '') {
|
|
306
306
|
data.recurrence = data.recurrence.replace(/\s+/g, '').toUpperCase();
|
|
307
|
-
if (!/^(RRULE:[\w
|
|
307
|
+
if (!/^(?:RRULE:[\w=;,:+\-/\\]+|daily|weekly|monthly|yearly)$/im.test(data.recurrence)) {
|
|
308
308
|
data.recurrence = '!wrong rrule format!';
|
|
309
309
|
} else {
|
|
310
310
|
if (/^RRULE:/i.test(data.recurrence)) {
|
|
@@ -547,8 +547,7 @@ function atcb_decorate_data_description(data, i) {
|
|
|
547
547
|
description = cleanDescription(description);
|
|
548
548
|
if (data.customVar) {
|
|
549
549
|
for (const key in data.customVar) {
|
|
550
|
-
const sanitizedKey = key.replace(/[
|
|
551
|
-
// eslint-disable-next-line security/detect-non-literal-regexp
|
|
550
|
+
const sanitizedKey = key.replace(/[^\w\-.]/g, '');
|
|
552
551
|
description = description.replace(new RegExp(`%%${sanitizedKey}%%`, 'g'), data.customVar[`${key}`]);
|
|
553
552
|
}
|
|
554
553
|
}
|
|
@@ -607,10 +606,8 @@ function atcb_decorate_data_extend(data) {
|
|
|
607
606
|
}
|
|
608
607
|
if (data.customVar) {
|
|
609
608
|
for (const key in data.customVar) {
|
|
610
|
-
const sanitizedKey = key.replace(/[
|
|
611
|
-
// eslint-disable-next-line security/detect-non-literal-regexp
|
|
609
|
+
const sanitizedKey = key.replace(/[^\w\-.]/g, '');
|
|
612
610
|
data.dates[`${i}`].name = data.dates[`${i}`].name.replace(new RegExp(`%%${sanitizedKey}%%`, 'g'), data.customVar[`${key}`]);
|
|
613
|
-
// eslint-disable-next-line security/detect-non-literal-regexp
|
|
614
611
|
data.dates[`${i}`].location = data.dates[`${i}`].location.replace(new RegExp(`%%${sanitizedKey}%%`, 'g'), data.customVar[`${key}`]);
|
|
615
612
|
}
|
|
616
613
|
}
|
|
@@ -629,7 +626,7 @@ function atcb_date_cleanup(dateTimeData) {
|
|
|
629
626
|
}
|
|
630
627
|
const endpoints = ['start', 'end'];
|
|
631
628
|
endpoints.forEach(function (point) {
|
|
632
|
-
if (!/^(
|
|
629
|
+
if (!/^(?:\d{4}-\d{2}-\d{2}T?(?:\d{2}:\d{2})?Z?|today(?:\+\d{1,4})?)$/i.test(dateTimeData[point + 'Date'])) {
|
|
633
630
|
dateTimeData[point + 'Date'] = 'badly-formed';
|
|
634
631
|
} else {
|
|
635
632
|
dateTimeData[point + 'Date'] = atcb_date_calculation(dateTimeData[point + 'Date']);
|
|
@@ -834,7 +831,7 @@ async function atcb_validate_buttonStyle(data, msgPrefix) {
|
|
|
834
831
|
if (!availableStyles.includes(data.buttonStyle)) {
|
|
835
832
|
throw new Error(msgPrefix + ' failed: provided buttonStyle invalid');
|
|
836
833
|
}
|
|
837
|
-
if (data.customCss && data.customCss !== '' && (!atcb_secure_url(data.customCss, false) || !/\.css(
|
|
834
|
+
if (data.customCss && data.customCss !== '' && (!atcb_secure_url(data.customCss, false) || !/\.css(?:$|\?)/.test(data.customCss))) {
|
|
838
835
|
throw new Error(msgPrefix + ' failed: customCss provided, but no valid url');
|
|
839
836
|
}
|
|
840
837
|
if ((!data.customCss || data.customCss === '') && data.buttonStyle === 'custom') {
|
|
@@ -913,7 +910,7 @@ async function atcb_validate_availability(data, msgPrefix, i, msgSuffix) {
|
|
|
913
910
|
async function atcb_validate_organizer(data, msgPrefix, i, msgSuffix) {
|
|
914
911
|
if (data.dates[`${i}`].organizer && data.dates[`${i}`].organizer !== '') {
|
|
915
912
|
const organizerParts = data.dates[`${i}`].organizer.split('|');
|
|
916
|
-
if (organizerParts.length !== 2 || organizerParts[0].length > 50 || organizerParts[1].length >
|
|
913
|
+
if (organizerParts.length !== 2 || organizerParts[0].length > 50 || organizerParts[1].length > 100 || !atcb_validEmail(organizerParts[1])) {
|
|
917
914
|
throw new Error(msgPrefix + ' failed: organizer needs to match the schema "NAME|EMAIL" with a valid email address' + msgSuffix);
|
|
918
915
|
}
|
|
919
916
|
}
|
|
@@ -928,14 +925,14 @@ async function atcb_validate_attendee(data, msgPrefix, i, msgSuffix) {
|
|
|
928
925
|
if (attendeeParts.length === 1 && atcb_validEmail(attendeeParts[0])) {
|
|
929
926
|
return true;
|
|
930
927
|
}
|
|
931
|
-
if (attendeeParts.length !== 2 || attendeeParts[0].length > 50 || attendeeParts[1].length >
|
|
928
|
+
if (attendeeParts.length !== 2 || attendeeParts[0].length > 50 || attendeeParts[1].length > 100 || !atcb_validEmail(attendeeParts[1])) {
|
|
932
929
|
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);
|
|
933
930
|
}
|
|
934
931
|
}
|
|
935
932
|
return true;
|
|
936
933
|
}
|
|
937
934
|
async function atcb_validate_uid(data, msgPrefix, i, msgSuffix) {
|
|
938
|
-
if (!/^(
|
|
935
|
+
if (!/^(?:\w|-){1,254}$/.test(data.dates[`${i}`].uid)) {
|
|
939
936
|
if (data.debug) {
|
|
940
937
|
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);
|
|
941
938
|
}
|
|
@@ -1004,7 +1001,7 @@ async function atcb_validate_rrule(data, msgPrefix) {
|
|
|
1004
1001
|
if (data.recurrence && data.recurrence !== '' && data.dates.length > 1) {
|
|
1005
1002
|
throw new Error(msgPrefix + ' failed: RRULE and multi-date set at the same time');
|
|
1006
1003
|
}
|
|
1007
|
-
if (data.recurrence && data.recurrence !== '' && !/^RRULE:[\w
|
|
1004
|
+
if (data.recurrence && data.recurrence !== '' && !/^RRULE:[\w=;,:+\-/\\]+$/i.test(data.recurrence)) {
|
|
1008
1005
|
throw new Error(msgPrefix + ' failed: RRULE data misspelled');
|
|
1009
1006
|
}
|
|
1010
1007
|
return true;
|
|
@@ -1013,22 +1010,22 @@ async function atcb_validate_rrule_simplyfied(data, msgPrefix) {
|
|
|
1013
1010
|
if (data.recurrence_interval && (data.recurrence_interval < 1 || data.recurrence_interval % 1 !== 0)) {
|
|
1014
1011
|
throw new Error(msgPrefix + ' failed: recurrence data (interval) misspelled');
|
|
1015
1012
|
}
|
|
1016
|
-
if (data.recurrence_until && data.recurrence_until !== '' && !/^
|
|
1013
|
+
if (data.recurrence_until && data.recurrence_until !== '' && !/^[\d\-:]+$/.test(data.recurrence_until)) {
|
|
1017
1014
|
throw new Error(msgPrefix + ' failed: recurrence data (until) misspelled');
|
|
1018
1015
|
}
|
|
1019
1016
|
if (data.recurrence_count && (data.recurrence_count < 1 || data.recurrence_count % 1 !== 0)) {
|
|
1020
1017
|
throw new Error(msgPrefix + ' failed: recurrence data (interval) misspelled');
|
|
1021
1018
|
}
|
|
1022
|
-
if (data.recurrence_byMonth && data.recurrence_byMonth !== '' && !/^
|
|
1019
|
+
if (data.recurrence_byMonth && data.recurrence_byMonth !== '' && !/^[\d,]+$/.test(data.recurrence_byMonth)) {
|
|
1023
1020
|
throw new Error(msgPrefix + ' failed: recurrence data (byMonth) misspelled');
|
|
1024
1021
|
}
|
|
1025
|
-
if (data.recurrence_byMonthDay && data.recurrence_byMonthDay !== '' && !/^
|
|
1022
|
+
if (data.recurrence_byMonthDay && data.recurrence_byMonthDay !== '' && !/^[\d,]+$/.test(data.recurrence_byMonthDay)) {
|
|
1026
1023
|
throw new Error(msgPrefix + ' failed: recurrence data (byMonthDay) misspelled');
|
|
1027
1024
|
}
|
|
1028
|
-
if (data.recurrence_byDay && data.recurrence_byDay !== '' && !/^(\d
|
|
1025
|
+
if (data.recurrence_byDay && data.recurrence_byDay !== '' && !/^(?:[\d,-]|MO|TU|WE|TH|FR|SA|SU)+$/im.test(data.recurrence_byDay)) {
|
|
1029
1026
|
throw new Error(msgPrefix + ' failed: recurrence data (byDay) misspelled');
|
|
1030
1027
|
}
|
|
1031
|
-
if (data.recurrence_weekstart && data.recurrence_weekstart !== '' && !/^(MO|TU|WE|TH|FR|SA|SU)$/im.test(data.recurrence_weekstart)) {
|
|
1028
|
+
if (data.recurrence_weekstart && data.recurrence_weekstart !== '' && !/^(?:MO|TU|WE|TH|FR|SA|SU)$/im.test(data.recurrence_weekstart)) {
|
|
1032
1029
|
throw new Error(msgPrefix + ' failed: recurrence data (weekstart) misspelled');
|
|
1033
1030
|
}
|
|
1034
1031
|
return true;
|
|
@@ -1469,7 +1466,7 @@ async function atcb_generate_rsvp_form(host, data, hostEl, keyboardTrigger = fal
|
|
|
1469
1466
|
} else {
|
|
1470
1467
|
rsvpData.fields = rsvpData.fields.map((field) => {
|
|
1471
1468
|
if (field.name === 'email') {
|
|
1472
|
-
return { ...field, required: true, type: 'email', default: attendee !== ''
|
|
1469
|
+
return { ...field, required: true, type: 'email', default: attendee !== '' ? attendee : field.default };
|
|
1473
1470
|
}
|
|
1474
1471
|
return field;
|
|
1475
1472
|
});
|
|
@@ -2235,24 +2232,36 @@ function atcb_generate_bg_overlay(host, trigger = '', modal = false, darken = tr
|
|
|
2235
2232
|
}
|
|
2236
2233
|
return bgOverlay;
|
|
2237
2234
|
}
|
|
2238
|
-
|
|
2235
|
+
/*!
|
|
2236
|
+
* @preserve
|
|
2237
|
+
* PER LICENSE AGREEMENT, YOU ARE NOT ALLOWED TO REMOVE OR CHANGE THIS FUNCTION!
|
|
2238
|
+
*/
|
|
2239
|
+
function atcb_create_atcbl(host, atList = true, returnEl = false, licenseNoteOnly = false) {
|
|
2239
2240
|
const atcbL = document.createElement('div');
|
|
2240
2241
|
atcbL.id = 'atcb-reference';
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2242
|
+
if (!licenseNoteOnly) {
|
|
2243
|
+
setTimeout(() => {
|
|
2244
|
+
const svg =
|
|
2245
|
+
'<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>';
|
|
2246
|
+
atcbL.innerHTML = '<a href="https://add-to-calendar-pro.com" target="_blank" rel="noopener">' + svg + '</a>';
|
|
2247
|
+
}, 500);
|
|
2248
|
+
if (atList) {
|
|
2249
|
+
host.querySelector('.atcb-initialized .atcb-list-wrapper').append(atcbL);
|
|
2250
|
+
} else if (returnEl) {
|
|
2251
|
+
return atcbL;
|
|
2252
|
+
} else {
|
|
2253
|
+
if (window.innerHeight > 1000 || window.innerWidth > 1000) {
|
|
2254
|
+
host.append(atcbL);
|
|
2255
|
+
atcbL.classList.add('fixed-ref');
|
|
2256
|
+
}
|
|
2254
2257
|
}
|
|
2258
|
+
} else {
|
|
2259
|
+
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).';
|
|
2260
|
+
atcbL.setAttribute('style', 'display:none !important');
|
|
2261
|
+
atcbL.classList.add('atcb-attribution');
|
|
2262
|
+
host.append(atcbL);
|
|
2255
2263
|
}
|
|
2264
|
+
if (returnEl) return null;
|
|
2256
2265
|
}
|
|
2257
2266
|
async function atcb_create_modal(mainHost, data, icon = '', headline, content = '', buttons = [], subEvents = [], keyboardTrigger = false, goto = {}, closable = true) {
|
|
2258
2267
|
atcbStates['active'] = data.identifier;
|
|
@@ -2926,7 +2935,7 @@ function atcb_subscribe_ical(data, fileUrl) {
|
|
|
2926
2935
|
function atcb_subscribe_google(data, fileUrl) {
|
|
2927
2936
|
const baseUrl = 'https://calendar.google.com/calendar/r?cid=';
|
|
2928
2937
|
const baseUrlApp = 'calendar.google.com/calendar?cid=';
|
|
2929
|
-
const fileUrlRegex = /^(https?:\/\/|webcal:\/\/|\/\/)calendar\.google\.com\//;
|
|
2938
|
+
const fileUrlRegex = /^(?:https?:\/\/|webcal:\/\/|\/\/)calendar\.google\.com\//;
|
|
2930
2939
|
const newFileUrl = (function () {
|
|
2931
2940
|
if (fileUrlRegex.test(fileUrl)) {
|
|
2932
2941
|
return fileUrl.replace(/^(.)*\?cid=/, '');
|
|
@@ -2961,7 +2970,7 @@ function atcb_generate_google(data, date, subEvent = 'all') {
|
|
|
2961
2970
|
urlParts.push('https://calendar.google.com/calendar/render?action=TEMPLATE');
|
|
2962
2971
|
const formattedDate = atcb_generate_time(date, 'clean', 'google');
|
|
2963
2972
|
urlParts.push('dates=' + encodeURIComponent(formattedDate.start) + '%2F' + encodeURIComponent(formattedDate.end));
|
|
2964
|
-
if (date.timeZone && date.timeZone !== '' && !/
|
|
2973
|
+
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) {
|
|
2965
2974
|
urlParts.push('ctz=' + date.timeZone);
|
|
2966
2975
|
}
|
|
2967
2976
|
if (date.name && date.name !== '') {
|
|
@@ -3112,7 +3121,6 @@ function atcb_open_cal_url(data, type, url, subscribe = false, subEvent = null,
|
|
|
3112
3121
|
return;
|
|
3113
3122
|
}
|
|
3114
3123
|
}
|
|
3115
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename
|
|
3116
3124
|
const newTab = window.open(url, target);
|
|
3117
3125
|
if (newTab) {
|
|
3118
3126
|
newTab.focus();
|
|
@@ -3334,7 +3342,7 @@ function atcb_generate_time(data, style = 'delimiters', targetCal = 'general', a
|
|
|
3334
3342
|
}
|
|
3335
3343
|
return durationHours + ':' + ('0' + durationMinutes).slice(-2);
|
|
3336
3344
|
})();
|
|
3337
|
-
if (targetCal == 'ical' || (targetCal == 'google' && !/
|
|
3345
|
+
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))) {
|
|
3338
3346
|
return {
|
|
3339
3347
|
start: atcb_format_datetime(newStartDate, 'clean', true, true),
|
|
3340
3348
|
end: atcb_format_datetime(newEndDate, 'clean', true, true),
|
|
@@ -3656,7 +3664,7 @@ function atcb_secure_url(url, throwError = true) {
|
|
|
3656
3664
|
}
|
|
3657
3665
|
}
|
|
3658
3666
|
function atcb_validEmail(email) {
|
|
3659
|
-
if (!/^.{0,70}@.{1,30}\.[a-
|
|
3667
|
+
if (!/^.{0,70}@.{1,30}\.[a-z]{2,9}$/i.test(email)) {
|
|
3660
3668
|
return false;
|
|
3661
3669
|
}
|
|
3662
3670
|
return true;
|
|
@@ -3674,9 +3682,9 @@ function atcb_rewrite_html_elements(content, clear = false, iCalBreaks = false)
|
|
|
3674
3682
|
content = content.replace(/\{url\}(.+?)\{\/url\}/gi, (match, p1) => {
|
|
3675
3683
|
return p1.split('|')[0];
|
|
3676
3684
|
});
|
|
3677
|
-
content = content.replace(/\[(
|
|
3678
|
-
content = content.replace(/\{(
|
|
3679
|
-
content = content.replace(/&[#a-
|
|
3685
|
+
content = content.replace(/\[\/?(hr|[pbui]|strong|em|li|ul|ol|h\d)\]/gi, '');
|
|
3686
|
+
content = content.replace(/\{\/?(hr|[pbui]|strong|em|li|ul|ol|h\d)\}/gi, '');
|
|
3687
|
+
content = content.replace(/&[#a-z0-9]{1,9};/gi, '');
|
|
3680
3688
|
} else {
|
|
3681
3689
|
content = content.replace(/\[url\]((?:(?!\[\/url\]).)*)\[\/url\]/gi, function (match, p1) {
|
|
3682
3690
|
return atcb_parse_url_code(p1);
|
|
@@ -3684,8 +3692,8 @@ function atcb_rewrite_html_elements(content, clear = false, iCalBreaks = false)
|
|
|
3684
3692
|
content = content.replace(/\{url\}((?:(?!\[\/url\]).)*)\{\/url\}/gi, function (match, p1) {
|
|
3685
3693
|
return atcb_parse_url_code(p1);
|
|
3686
3694
|
});
|
|
3687
|
-
content = content.replace(/\[(
|
|
3688
|
-
content = content.replace(/\{(
|
|
3695
|
+
content = content.replace(/\[(\/)?(br|hr|[pbui]|strong|em|li|ul|ol|h\d)(\s?\/?)\]/gi, '<$1$2$3>');
|
|
3696
|
+
content = content.replace(/\{(\/)?(br|hr|[pbui]|strong|em|li|ul|ol|h\d)(\s?\/?)\}/gi, '<$1$2$3>');
|
|
3689
3697
|
}
|
|
3690
3698
|
return content;
|
|
3691
3699
|
}
|
|
@@ -4895,7 +4903,7 @@ if (atcbIsBrowser()) {
|
|
|
4895
4903
|
this.data.identifier = this.identifier;
|
|
4896
4904
|
} else {
|
|
4897
4905
|
if (this.data.identifier && this.data.identifier !== '') {
|
|
4898
|
-
if (!/^[\w
|
|
4906
|
+
if (!/^[\w-]+$/.test(this.data.identifier)) {
|
|
4899
4907
|
this.data.identifier = '';
|
|
4900
4908
|
if (this.debug) {
|
|
4901
4909
|
let prefix = 'Add to Calendar Button';
|
|
@@ -4914,7 +4922,6 @@ if (atcbIsBrowser()) {
|
|
|
4914
4922
|
this.identifier = this.data.identifier;
|
|
4915
4923
|
}
|
|
4916
4924
|
this.setAttribute('atcb-button-id', this.data.identifier);
|
|
4917
|
-
this.classList.add('add-to-calendar');
|
|
4918
4925
|
try {
|
|
4919
4926
|
this.setAttribute('style', 'visibility:visible;opacity:1;position:relative;outline:none !important;');
|
|
4920
4927
|
await atcb_build_button(this.shadowRoot, this.data);
|
|
@@ -5009,6 +5016,7 @@ function atcb_read_attributes(el, params = atcbWcParams) {
|
|
|
5009
5016
|
}
|
|
5010
5017
|
async function atcb_build_button(host, data) {
|
|
5011
5018
|
try {
|
|
5019
|
+
host.host.classList.add('add-to-calendar');
|
|
5012
5020
|
data = await atcb_decorate_data(data);
|
|
5013
5021
|
await atcb_validate(data);
|
|
5014
5022
|
const rootObj = host.querySelector('.atcb-initialized');
|
|
@@ -5033,6 +5041,9 @@ async function atcb_build_button(host, data) {
|
|
|
5033
5041
|
}
|
|
5034
5042
|
}
|
|
5035
5043
|
atcb_log_event('initialization', data.identifier, data.identifier);
|
|
5044
|
+
if (!data.proKey && data.hideBranding && !document.getElementById('atcb-reference')) {
|
|
5045
|
+
atcb_create_atcbl(document.body, false, false, true);
|
|
5046
|
+
}
|
|
5036
5047
|
return true;
|
|
5037
5048
|
} catch (e) {
|
|
5038
5049
|
throw new Error(e.message);
|
|
@@ -5090,7 +5101,7 @@ async function atcb_load_css(host, rootObj = null, data) {
|
|
|
5090
5101
|
const cssGlobalContent = document.createElement('style');
|
|
5091
5102
|
cssGlobalContent.id = 'atcb-global-style';
|
|
5092
5103
|
const scrollBarWidth = window.innerWidth - document.documentElement.clientWidth;
|
|
5093
|
-
cssGlobalContent.innerText = '.atcb-modal-no-scroll{overflow-y:hidden !important;-webkit-overflow-scrolling:touch;} body.atcb-modal-no-scroll{padding-right:' + scrollBarWidth + 'px;}';
|
|
5104
|
+
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;}';
|
|
5094
5105
|
if (nonceVal) {
|
|
5095
5106
|
cssGlobalContent.setAttribute('nonce', nonceVal);
|
|
5096
5107
|
}
|
|
@@ -5239,7 +5250,7 @@ async function atcb_action(inputData, triggerElement, keyboardTrigger = false) {
|
|
|
5239
5250
|
if (triggerElement.id && triggerElement.id !== '') {
|
|
5240
5251
|
data.identifier = triggerElement.id;
|
|
5241
5252
|
} else {
|
|
5242
|
-
if (data.identifier && data.identifier != '' && /^[\w
|
|
5253
|
+
if (data.identifier && data.identifier != '' && /^[\w-]+$/.test(data.identifier)) {
|
|
5243
5254
|
data.identifier = 'atcb-btn-' + data.identifier;
|
|
5244
5255
|
} else {
|
|
5245
5256
|
data.identifier = 'atcb-btn-custom';
|