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
|
@@ -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.
|
|
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.
|
|
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 (
|
|
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 (/
|
|
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
|
|
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(/[
|
|
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(/[
|
|
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 (!/^(
|
|
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(
|
|
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 >
|
|
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 >
|
|
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 (!/^(
|
|
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
|
|
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 !== '' && !/^
|
|
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 !== '' && !/^
|
|
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 !== '' && !/^
|
|
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
|
|
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;
|
|
@@ -1471,7 +1467,7 @@ async function atcb_generate_rsvp_form(host, data, hostEl, keyboardTrigger = fal
|
|
|
1471
1467
|
} else {
|
|
1472
1468
|
rsvpData.fields = rsvpData.fields.map((field) => {
|
|
1473
1469
|
if (field.name === 'email') {
|
|
1474
|
-
return { ...field, required: true, type: 'email', default: attendee !== ''
|
|
1470
|
+
return { ...field, required: true, type: 'email', default: attendee !== '' ? attendee : field.default };
|
|
1475
1471
|
}
|
|
1476
1472
|
return field;
|
|
1477
1473
|
});
|
|
@@ -2237,24 +2233,36 @@ function atcb_generate_bg_overlay(host, trigger = '', modal = false, darken = tr
|
|
|
2237
2233
|
}
|
|
2238
2234
|
return bgOverlay;
|
|
2239
2235
|
}
|
|
2240
|
-
|
|
2236
|
+
/*!
|
|
2237
|
+
* @preserve
|
|
2238
|
+
* PER LICENSE AGREEMENT, YOU ARE NOT ALLOWED TO REMOVE OR CHANGE THIS FUNCTION!
|
|
2239
|
+
*/
|
|
2240
|
+
function atcb_create_atcbl(host, atList = true, returnEl = false, licenseNoteOnly = false) {
|
|
2241
2241
|
const atcbL = document.createElement('div');
|
|
2242
2242
|
atcbL.id = 'atcb-reference';
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2243
|
+
if (!licenseNoteOnly) {
|
|
2244
|
+
setTimeout(() => {
|
|
2245
|
+
const svg =
|
|
2246
|
+
'<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>';
|
|
2247
|
+
atcbL.innerHTML = '<a href="https://add-to-calendar-pro.com" target="_blank" rel="noopener">' + svg + '</a>';
|
|
2248
|
+
}, 500);
|
|
2249
|
+
if (atList) {
|
|
2250
|
+
host.querySelector('.atcb-initialized .atcb-list-wrapper').append(atcbL);
|
|
2251
|
+
} else if (returnEl) {
|
|
2252
|
+
return atcbL;
|
|
2253
|
+
} else {
|
|
2254
|
+
if (window.innerHeight > 1000 || window.innerWidth > 1000) {
|
|
2255
|
+
host.append(atcbL);
|
|
2256
|
+
atcbL.classList.add('fixed-ref');
|
|
2257
|
+
}
|
|
2256
2258
|
}
|
|
2259
|
+
} else {
|
|
2260
|
+
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).';
|
|
2261
|
+
atcbL.setAttribute('style', 'display:none !important');
|
|
2262
|
+
atcbL.classList.add('atcb-attribution');
|
|
2263
|
+
host.append(atcbL);
|
|
2257
2264
|
}
|
|
2265
|
+
if (returnEl) return null;
|
|
2258
2266
|
}
|
|
2259
2267
|
async function atcb_create_modal(mainHost, data, icon = '', headline, content = '', buttons = [], subEvents = [], keyboardTrigger = false, goto = {}, closable = true) {
|
|
2260
2268
|
atcbStates['active'] = data.identifier;
|
|
@@ -2928,7 +2936,7 @@ function atcb_subscribe_ical(data, fileUrl) {
|
|
|
2928
2936
|
function atcb_subscribe_google(data, fileUrl) {
|
|
2929
2937
|
const baseUrl = 'https://calendar.google.com/calendar/r?cid=';
|
|
2930
2938
|
const baseUrlApp = 'calendar.google.com/calendar?cid=';
|
|
2931
|
-
const fileUrlRegex = /^(https?:\/\/|webcal:\/\/|\/\/)calendar\.google\.com\//;
|
|
2939
|
+
const fileUrlRegex = /^(?:https?:\/\/|webcal:\/\/|\/\/)calendar\.google\.com\//;
|
|
2932
2940
|
const newFileUrl = (function () {
|
|
2933
2941
|
if (fileUrlRegex.test(fileUrl)) {
|
|
2934
2942
|
return fileUrl.replace(/^(.)*\?cid=/, '');
|
|
@@ -2963,7 +2971,7 @@ function atcb_generate_google(data, date, subEvent = 'all') {
|
|
|
2963
2971
|
urlParts.push('https://calendar.google.com/calendar/render?action=TEMPLATE');
|
|
2964
2972
|
const formattedDate = atcb_generate_time(date, 'clean', 'google');
|
|
2965
2973
|
urlParts.push('dates=' + encodeURIComponent(formattedDate.start) + '%2F' + encodeURIComponent(formattedDate.end));
|
|
2966
|
-
if (date.timeZone && date.timeZone !== '' && !/
|
|
2974
|
+
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) {
|
|
2967
2975
|
urlParts.push('ctz=' + date.timeZone);
|
|
2968
2976
|
}
|
|
2969
2977
|
if (date.name && date.name !== '') {
|
|
@@ -3114,7 +3122,6 @@ function atcb_open_cal_url(data, type, url, subscribe = false, subEvent = null,
|
|
|
3114
3122
|
return;
|
|
3115
3123
|
}
|
|
3116
3124
|
}
|
|
3117
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename
|
|
3118
3125
|
const newTab = window.open(url, target);
|
|
3119
3126
|
if (newTab) {
|
|
3120
3127
|
newTab.focus();
|
|
@@ -3336,7 +3343,7 @@ function atcb_generate_time(data, style = 'delimiters', targetCal = 'general', a
|
|
|
3336
3343
|
}
|
|
3337
3344
|
return durationHours + ':' + ('0' + durationMinutes).slice(-2);
|
|
3338
3345
|
})();
|
|
3339
|
-
if (targetCal == 'ical' || (targetCal == 'google' && !/
|
|
3346
|
+
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))) {
|
|
3340
3347
|
return {
|
|
3341
3348
|
start: atcb_format_datetime(newStartDate, 'clean', true, true),
|
|
3342
3349
|
end: atcb_format_datetime(newEndDate, 'clean', true, true),
|
|
@@ -3658,7 +3665,7 @@ function atcb_secure_url(url, throwError = true) {
|
|
|
3658
3665
|
}
|
|
3659
3666
|
}
|
|
3660
3667
|
function atcb_validEmail(email) {
|
|
3661
|
-
if (!/^.{0,70}@.{1,30}\.[a-
|
|
3668
|
+
if (!/^.{0,70}@.{1,30}\.[a-z]{2,9}$/i.test(email)) {
|
|
3662
3669
|
return false;
|
|
3663
3670
|
}
|
|
3664
3671
|
return true;
|
|
@@ -3676,9 +3683,9 @@ function atcb_rewrite_html_elements(content, clear = false, iCalBreaks = false)
|
|
|
3676
3683
|
content = content.replace(/\{url\}(.+?)\{\/url\}/gi, (match, p1) => {
|
|
3677
3684
|
return p1.split('|')[0];
|
|
3678
3685
|
});
|
|
3679
|
-
content = content.replace(/\[(
|
|
3680
|
-
content = content.replace(/\{(
|
|
3681
|
-
content = content.replace(/&[#a-
|
|
3686
|
+
content = content.replace(/\[\/?(hr|[pbui]|strong|em|li|ul|ol|h\d)\]/gi, '');
|
|
3687
|
+
content = content.replace(/\{\/?(hr|[pbui]|strong|em|li|ul|ol|h\d)\}/gi, '');
|
|
3688
|
+
content = content.replace(/&[#a-z0-9]{1,9};/gi, '');
|
|
3682
3689
|
} else {
|
|
3683
3690
|
content = content.replace(/\[url\]((?:(?!\[\/url\]).)*)\[\/url\]/gi, function (match, p1) {
|
|
3684
3691
|
return atcb_parse_url_code(p1);
|
|
@@ -3686,8 +3693,8 @@ function atcb_rewrite_html_elements(content, clear = false, iCalBreaks = false)
|
|
|
3686
3693
|
content = content.replace(/\{url\}((?:(?!\[\/url\]).)*)\{\/url\}/gi, function (match, p1) {
|
|
3687
3694
|
return atcb_parse_url_code(p1);
|
|
3688
3695
|
});
|
|
3689
|
-
content = content.replace(/\[(
|
|
3690
|
-
content = content.replace(/\{(
|
|
3696
|
+
content = content.replace(/\[(\/)?(br|hr|[pbui]|strong|em|li|ul|ol|h\d)(\s?\/?)\]/gi, '<$1$2$3>');
|
|
3697
|
+
content = content.replace(/\{(\/)?(br|hr|[pbui]|strong|em|li|ul|ol|h\d)(\s?\/?)\}/gi, '<$1$2$3>');
|
|
3691
3698
|
}
|
|
3692
3699
|
return content;
|
|
3693
3700
|
}
|
|
@@ -4897,7 +4904,7 @@ if (atcbIsBrowser()) {
|
|
|
4897
4904
|
this.data.identifier = this.identifier;
|
|
4898
4905
|
} else {
|
|
4899
4906
|
if (this.data.identifier && this.data.identifier !== '') {
|
|
4900
|
-
if (!/^[\w
|
|
4907
|
+
if (!/^[\w-]+$/.test(this.data.identifier)) {
|
|
4901
4908
|
this.data.identifier = '';
|
|
4902
4909
|
if (this.debug) {
|
|
4903
4910
|
let prefix = 'Add to Calendar Button';
|
|
@@ -4916,7 +4923,6 @@ if (atcbIsBrowser()) {
|
|
|
4916
4923
|
this.identifier = this.data.identifier;
|
|
4917
4924
|
}
|
|
4918
4925
|
this.setAttribute('atcb-button-id', this.data.identifier);
|
|
4919
|
-
this.classList.add('add-to-calendar');
|
|
4920
4926
|
try {
|
|
4921
4927
|
this.setAttribute('style', 'visibility:visible;opacity:1;position:relative;outline:none !important;');
|
|
4922
4928
|
await atcb_build_button(this.shadowRoot, this.data);
|
|
@@ -5011,6 +5017,7 @@ function atcb_read_attributes(el, params = atcbWcParams) {
|
|
|
5011
5017
|
}
|
|
5012
5018
|
async function atcb_build_button(host, data) {
|
|
5013
5019
|
try {
|
|
5020
|
+
host.host.classList.add('add-to-calendar');
|
|
5014
5021
|
data = await atcb_decorate_data(data);
|
|
5015
5022
|
await atcb_validate(data);
|
|
5016
5023
|
const rootObj = host.querySelector('.atcb-initialized');
|
|
@@ -5035,6 +5042,9 @@ async function atcb_build_button(host, data) {
|
|
|
5035
5042
|
}
|
|
5036
5043
|
}
|
|
5037
5044
|
atcb_log_event('initialization', data.identifier, data.identifier);
|
|
5045
|
+
if (!data.proKey && data.hideBranding && !document.getElementById('atcb-reference')) {
|
|
5046
|
+
atcb_create_atcbl(document.body, false, false, true);
|
|
5047
|
+
}
|
|
5038
5048
|
return true;
|
|
5039
5049
|
} catch (e) {
|
|
5040
5050
|
throw new Error(e.message);
|
|
@@ -5092,7 +5102,7 @@ async function atcb_load_css(host, rootObj = null, data) {
|
|
|
5092
5102
|
const cssGlobalContent = document.createElement('style');
|
|
5093
5103
|
cssGlobalContent.id = 'atcb-global-style';
|
|
5094
5104
|
const scrollBarWidth = window.innerWidth - document.documentElement.clientWidth;
|
|
5095
|
-
cssGlobalContent.innerText = '.atcb-modal-no-scroll{overflow-y:hidden !important;-webkit-overflow-scrolling:touch;} body.atcb-modal-no-scroll{padding-right:' + scrollBarWidth + 'px;}';
|
|
5105
|
+
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;}';
|
|
5096
5106
|
if (nonceVal) {
|
|
5097
5107
|
cssGlobalContent.setAttribute('nonce', nonceVal);
|
|
5098
5108
|
}
|
|
@@ -5241,7 +5251,7 @@ async function atcb_action(inputData, triggerElement, keyboardTrigger = false) {
|
|
|
5241
5251
|
if (triggerElement.id && triggerElement.id !== '') {
|
|
5242
5252
|
data.identifier = triggerElement.id;
|
|
5243
5253
|
} else {
|
|
5244
|
-
if (data.identifier && data.identifier != '' && /^[\w
|
|
5254
|
+
if (data.identifier && data.identifier != '' && /^[\w-]+$/.test(data.identifier)) {
|
|
5245
5255
|
data.identifier = 'atcb-btn-' + data.identifier;
|
|
5246
5256
|
} else {
|
|
5247
5257
|
data.identifier = 'atcb-btn-custom';
|