Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

add-to-calendar-button

Package Overview
Dependencies
Maintainers
1
Versions
153
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

add-to-calendar-button - npm Package Compare versions

Comparing version 1.0.2 to 1.1.1

18

assets/js/atcb.js

@@ -6,3 +6,3 @@ /**

*/
export const atcbVersion = '1.0.1';
const atcbVersion = '1.1.1';
/* Creator: Jens Kuerschner (https://jenskuerschner.de)

@@ -17,3 +17,3 @@ * Project: https://github.com/jekuer/add-to-calendar-button

// INITIALIZE THE SCRIPT AND FUNCTIONALITY
export default function atcb_init() {
function atcb_init() {
// let's get started

@@ -108,3 +108,3 @@ console.log("add-to-calendar button initialized (version " + atcbVersion + ")");

if (!dates.every(function(date) {
dateParts = data[date].split('-');
const dateParts = data[date].split('-');
if (dateParts.length < 3 || dateParts.length > 3) {

@@ -170,3 +170,3 @@ console.log("add-to-calendar button generation failed: date misspelled [" + date + ": " + data[date] + "]");

let buttonTriggerWrapper = document.createElement('div');
buttonTriggerWrapper.id = 'atcb_button_wrapper';
buttonTriggerWrapper.classList.add('atcb_button_wrapper');
button.appendChild(buttonTriggerWrapper);

@@ -193,3 +193,3 @@ // generate the button trigger div

optionsList.style.display = 'none';
button.appendChild(optionsList);
buttonTriggerWrapper.appendChild(optionsList);
// generate the list items

@@ -286,3 +286,3 @@ data['options'].forEach(function(option) {

let list = document.getElementById('atcb_list_' + this.dataset.atcbtn);
list.style.display = 'inline-block';
list.style.display = 'block';
document.getElementById('atcb_bgoverlay').style.display = 'block';

@@ -504,2 +504,6 @@ }

document.addEventListener('DOMContentLoaded', atcb_init, false);
// export default { atcb_init, atcb_check_required, atcb_date_calculation, atcb_validate, atcb_generate, atcb_toggle, atcb_open, atcb_close, atcb_close_all, atcb_generate_google, atcb_generate_yahoo, atcb_generate_microsoft, atcb_generate_ical, atcb_generate_time };
// EXPORT FOR USE IN NODEJS
export { atcb_init };

@@ -1,2 +0,2 @@

export const atcbVersion="1.0.1";export default function atcb_init(){console.log("add-to-calendar button initialized (version 1.0.1)"),console.log("See https://github.com/jekuer/add-to-calendar-button for details");let atcButtons=document.querySelectorAll(".atcb");for(let i=0;i<atcButtons.length;i++){const atcbConfig=JSON.parse(atcButtons[i].innerHTML);if(atcb_check_required(atcbConfig)&&(atcbConfig.dateStart=atcb_date_calculation(atcbConfig.dateStart),atcbConfig.dateEnd=atcb_date_calculation(atcbConfig.dateEnd),atcb_validate(atcbConfig))){atcb_generate(atcButtons[i],i,atcbConfig);let bgOverlay=document.createElement("div");bgOverlay.id="atcb_bgoverlay",bgOverlay.style.display="none",document.body.appendChild(bgOverlay),bgOverlay.addEventListener("click",atcb_close_all,{passive:!0}),bgOverlay.addEventListener("touchstart",atcb_close_all,{passive:!0}),bgOverlay.addEventListener("mouseenter",atcb_close_all,!1)}}}function atcb_check_required(data){if(null==data.options||data.options.length<1)return console.log("add-to-calendar button generation failed: no options set"),!1;const requiredField=["title","dateStart","dateEnd"];return requiredField.every((function(field){return null!=data[field]&&""!=data[field]||(console.log("add-to-calendar button generation failed: required setting missing ["+field+"]"),!1)}))}function atcb_date_calculation(dateString){let today=new Date,todayString=today.getMonth()+1+"-"+today.getDate()+"-"+today.getFullYear();const dateStringParts=(dateString=dateString.replace(/today/gi,todayString)).split("+"),dateParts=dateStringParts[0].split("-");let newDate=new Date(dateParts[2],dateParts[0]-1,dateParts[1]);return null!=dateStringParts[1]&&dateStringParts[1]>0&&newDate.setDate(newDate.getDate()+parseInt(dateStringParts[1])),(newDate.getMonth()+1<10?"0":"")+(newDate.getMonth()+1)+"-"+(newDate.getDate()<10?"0":"")+newDate.getDate()+"-"+newDate.getFullYear()}function atcb_validate(data){const options=["Apple","Google","iCal","Microsoft365","Outlook.com","Yahoo"];if(!data.options.every((function(option){let cleanOption=option.split("|");return!!options.includes(cleanOption[0])||(console.log("add-to-calendar button generation failed: invalid option ["+cleanOption[0]+"]"),!1)})))return!1;const dates=["dateStart","dateEnd"];let newDate=dates;if(!dates.every((function(date){return dateParts=data[date].split("-"),dateParts.length<3||dateParts.length>3?(console.log("add-to-calendar button generation failed: date misspelled ["+date+": "+data[date]+"]"),!1):(newDate[date]=new Date(dateParts[2],dateParts[0]-1,dateParts[1]),!0)})))return!1;const times=["timeStart","timeEnd"];return!!times.every((function(time){if(null!=data[time]){const timeParts=data[time].split(":");if(timeParts.length<2||timeParts.length>2)return console.log("add-to-calendar button generation failed: time misspelled ["+time+": "+data[time]+"]"),!1;if(timeParts[0]>23)return console.log("add-to-calendar button generation failed: time misspelled - hours number too high ["+time+": "+timeParts[0]+"]"),!1;if(timeParts[1]>59)return console.log("add-to-calendar button generation failed: time misspelled - minutes number too high ["+time+": "+timeParts[1]+"]"),!1;"timeStart"==time&&(newDate.dateStart=new Date(newDate.dateStart.getTime()+36e5*timeParts[0]+6e4*timeParts[1])),"timeEnd"==time&&(newDate.dateEnd=new Date(newDate.dateEnd.getTime()+36e5*timeParts[0]+6e4*timeParts[1]))}return!0}))&&(null!=data.timeStart&&null==data.timeEnd||null==data.timeStart&&null!=data.timeEnd?(console.log("add-to-calendar button generation failed: if you set a starting time, you also need to define an end time"),!1):!(newDate.dateEnd<newDate.dateStart)||(console.log("add-to-calendar button generation failed: end date before start date"),!1))}function atcb_generate(button,buttonId,data){button.innerHTML="";let buttonTriggerWrapper=document.createElement("div");buttonTriggerWrapper.id="atcb_button_wrapper",button.appendChild(buttonTriggerWrapper);let buttonTrigger=document.createElement("div");buttonTrigger.id="atcb_button_"+buttonId,buttonTrigger.classList.add("atcb_button"),buttonTrigger.dataset.atcbtn=buttonId,buttonTriggerWrapper.appendChild(buttonTrigger),buttonTrigger.innerHTML='<span class="atcb_icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 122.88 122.88"><path d="M81.61 4.73c0-2.61 2.58-4.73 5.77-4.73s5.77 2.12 5.77 4.73v20.72c0 2.61-2.58 4.73-5.77 4.73s-5.77-2.12-5.77-4.73V4.73h0zm-3.65 76.03c1.83 0 3.32 1.49 3.32 3.32s-1.49 3.32-3.32 3.32l-12.95-.04-.04 12.93c0 1.83-1.49 3.32-3.32 3.32s-3.32-1.49-3.32-3.32l.04-12.94-12.93-.05c-1.83 0-3.32-1.49-3.32-3.32s1.49-3.32 3.32-3.32l12.94.04.04-12.93c0-1.83 1.49-3.32 3.32-3.32s3.32 1.49 3.32 3.32l-.04 12.95 12.94.04h0zM29.61 4.73c0-2.61 2.58-4.73 5.77-4.73s5.77 2.12 5.77 4.73v20.72c0 2.61-2.58 4.73-5.77 4.73s-5.77-2.12-5.77-4.73V4.73h0zM6.4 45.32h110.08V21.47c0-.8-.33-1.53-.86-2.07-.53-.53-1.26-.86-2.07-.86H103c-1.77 0-3.2-1.43-3.2-3.2s1.43-3.2 3.2-3.2h10.55c2.57 0 4.9 1.05 6.59 2.74s2.74 4.02 2.74 6.59v27.06 65.03c0 2.57-1.05 4.9-2.74 6.59s-4.02 2.74-6.59 2.74H9.33c-2.57 0-4.9-1.05-6.59-2.74-1.69-1.7-2.74-4.03-2.74-6.6V48.53 21.47c0-2.57 1.05-4.9 2.74-6.59s4.02-2.74 6.59-2.74H20.6c1.77 0 3.2 1.43 3.2 3.2s-1.43 3.2-3.2 3.2H9.33c-.8 0-1.53.33-2.07.86-.53.53-.86 1.26-.86 2.07v23.85h0zm110.08 6.41H6.4v61.82c0 .8.33 1.53.86 2.07.53.53 1.26.86 2.07.86h104.22c.8 0 1.53-.33 2.07-.86.53-.53.86-1.26.86-2.07V51.73h0zM50.43 18.54c-1.77 0-3.2-1.43-3.2-3.2s1.43-3.2 3.2-3.2h21.49c1.77 0 3.2 1.43 3.2 3.2s-1.43 3.2-3.2 3.2H50.43h0z"/></svg></span>',buttonTrigger.innerHTML+='<span class="atcb_text">'+(data.label||"Add to Calendar")+"</span>","click"==data.trigger?buttonTrigger.addEventListener("click",atcb_toggle,{passive:!0}):(buttonTrigger.addEventListener("touchstart",atcb_toggle,{passive:!0}),buttonTrigger.addEventListener("mouseenter",atcb_open,!1));let optionsList=document.createElement("div");optionsList.id="atcb_list_"+buttonId,optionsList.classList.add("atcb_list"),optionsList.style.display="none",button.appendChild(optionsList),data.options.forEach((function(option){let optionParts=option.split("|"),optionItem=document.createElement("div");switch(optionItem.classList.add("atcb_list_item"),optionsList.appendChild(optionItem),optionParts[0]){case"Apple":optionItem.innerHTML='<span class="atcb_icon"><svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" shape-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" viewBox="0 0 640 640"><path d="M494.782 340.02c-.803-81.025 66.084-119.907 69.072-121.832-37.595-54.993-96.167-62.552-117.037-63.402-49.843-5.032-97.242 29.362-122.565 29.362-25.253 0-64.277-28.607-105.604-27.85-54.32.803-104.4 31.594-132.403 80.245C29.81 334.457 71.81 479.58 126.816 558.976c26.87 38.882 58.914 82.56 100.997 81 40.512-1.594 55.843-26.244 104.848-26.244 48.993 0 62.753 26.245 105.64 25.406 43.606-.803 71.232-39.638 97.925-78.65 30.887-45.12 43.548-88.75 44.316-90.994-.969-.437-85.029-32.634-85.879-129.439l.118-.035zM414.23 102.178C436.553 75.095 451.636 37.5 447.514-.024c-32.162 1.311-71.163 21.437-94.253 48.485-20.729 24.012-38.836 62.28-33.993 99.036 35.918 2.8 72.591-18.248 94.926-45.272l.036-.047z"/></svg></span>',optionItem.innerHTML+='<span class="atcb_text">',optionItem.innerHTML+=optionParts[1]||"Apple",optionItem.innerHTML+="</span>",optionItem.addEventListener("click",(function(){atcb_generate_ical(data),atcb_close_all()}),!1);break;case"Google":optionItem.innerHTML='<span class="atcb_icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 122.88 122.88"><path d="M93.78 29.1H29.1v64.68h64.68V29.1z" fill="#fff"/><path d="M93.78 122.88l29.1-29.1h-29.1v29.1z" fill="#f72a25"/><path d="M122.88 29.1h-29.1v64.68h29.1V29.1z" fill="#fbbc04"/><path d="M93.78 93.78H29.1v29.1h64.68v-29.1z" fill="#34a853"/><path d="M0 93.78v19.4c0 5.36 4.34 9.7 9.7 9.7h19.4v-29.1H0h0z" fill="#188038"/><path d="M122.88 29.1V9.7c0-5.36-4.34-9.7-9.7-9.7h-19.4v29.1h29.1 0z" fill="#1967d2"/><path d="M93.78 0H9.7C4.34 0 0 4.34 0 9.7v84.08h29.1V29.1h64.67V0h.01z" fill="#4285f4"/><path d="M42.37 79.27c-2.42-1.63-4.09-4.02-5-7.17l5.61-2.31c.51 1.94 1.4 3.44 2.67 4.51 1.26 1.07 2.8 1.59 4.59 1.59 1.84 0 3.41-.56 4.73-1.67 1.32-1.12 1.98-2.54 1.98-4.26 0-1.76-.7-3.2-2.09-4.32s-3.14-1.67-5.22-1.67H46.4v-5.55h2.91c1.79 0 3.31-.48 4.54-1.46 1.23-.97 1.84-2.3 1.84-3.99 0-1.5-.55-2.7-1.65-3.6s-2.49-1.35-4.18-1.35c-1.65 0-2.96.44-3.93 1.32s-1.7 2-2.12 3.24l-5.55-2.31c.74-2.09 2.09-3.93 4.07-5.52s4.51-2.39 7.58-2.39c2.27 0 4.32.44 6.13 1.32s3.23 2.1 4.26 3.65c1.03 1.56 1.54 3.31 1.54 5.25 0 1.98-.48 3.65-1.43 5.03-.95 1.37-2.13 2.43-3.52 3.16v.33c1.79.74 3.36 1.96 4.51 3.52 1.17 1.58 1.76 3.46 1.76 5.66s-.56 4.16-1.67 5.88c-1.12 1.72-2.66 3.08-4.62 4.07s-4.17 1.49-6.62 1.49c-2.84 0-5.46-.81-7.88-2.45h0 0zm34.46-27.84l-6.16 4.45-3.08-4.67 11.05-7.97h4.24v37.6h-6.05V51.43h0z" fill="#1a73e8"/></svg></span>',optionItem.innerHTML+='<span class="atcb_text">',optionItem.innerHTML+=optionParts[1]||"Google",optionItem.innerHTML+="</span>",optionItem.addEventListener("click",(function(){atcb_generate_google(data),atcb_close_all()}),!1);break;case"iCal":optionItem.innerHTML='<span class="atcb_icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 122.88 122.88"><path d="M81.61 4.73c0-2.61 2.58-4.73 5.77-4.73s5.77 2.12 5.77 4.73v20.72c0 2.61-2.58 4.73-5.77 4.73s-5.77-2.12-5.77-4.73V4.73h0zm-15.5 99.08c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2H81.9c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H66.11h0zM15.85 67.09c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H15.85h0zm25.13 0c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H40.98h0zm25.13 0c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2H81.9c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H66.11h0zm25.14 0c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H91.25h0zm-75.4 18.36c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H15.85h0zm25.13 0c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H40.98h0zm25.13 0c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2H81.9c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H66.11h0zm25.14 0c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H91.25h0zm-75.4 18.36c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H15.85h0zm25.13 0c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H40.98h0zM29.61 4.73c0-2.61 2.58-4.73 5.77-4.73s5.77 2.12 5.77 4.73v20.72c0 2.61-2.58 4.73-5.77 4.73s-5.77-2.12-5.77-4.73V4.73h0zM6.4 45.32h110.07V21.47c0-.8-.33-1.53-.86-2.07-.53-.53-1.26-.86-2.07-.86H103c-1.77 0-3.2-1.43-3.2-3.2s1.43-3.2 3.2-3.2h10.55c2.57 0 4.9 1.05 6.59 2.74s2.74 4.02 2.74 6.59v27.06 65.03c0 2.57-1.05 4.9-2.74 6.59s-4.02 2.74-6.59 2.74H9.33c-2.57 0-4.9-1.05-6.59-2.74-1.69-1.7-2.74-4.03-2.74-6.6V48.52 21.47c0-2.57 1.05-4.9 2.74-6.59s4.02-2.74 6.59-2.74H20.6c1.77 0 3.2 1.43 3.2 3.2s-1.43 3.2-3.2 3.2H9.33c-.8 0-1.53.33-2.07.86-.53.53-.86 1.26-.86 2.07v23.85h0zm110.08 6.41H6.4v61.82c0 .8.33 1.53.86 2.07.53.53 1.26.86 2.07.86h104.22c.8 0 1.53-.33 2.07-.86.53-.53.86-1.26.86-2.07V51.73h0zM50.43 18.54c-1.77 0-3.2-1.43-3.2-3.2s1.43-3.2 3.2-3.2h21.49c1.77 0 3.2 1.43 3.2 3.2s-1.43 3.2-3.2 3.2H50.43h0z"/></svg></span>',optionItem.innerHTML+='<span class="atcb_text">',optionItem.innerHTML+=optionParts[1]||"iCal File",optionItem.innerHTML+="</span>",optionItem.addEventListener("click",(function(){atcb_generate_ical(data),atcb_close_all()}),!1);break;case"Microsoft365":optionItem.innerHTML='<span class="atcb_icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 278050 333334" shape-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd"><path fill="#ea3e23" d="M278050 305556l-29-16V28627L178807 0 448 66971l-448 87 22 200227 60865-23821V80555l117920-28193-17 239519L122 267285l178668 65976v73l99231-27462v-316z"/></svg></span>',optionItem.innerHTML+='<span class="atcb_text">',optionItem.innerHTML+=optionParts[1]||"Microsoft 365",optionItem.innerHTML+="</span>",optionItem.addEventListener("click",(function(){atcb_generate_microsoft(data,"365"),atcb_close_all()}),!1);break;case"Outlook.com":optionItem.innerHTML='<span class="atcb_icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-0.129793726981 0 33.251996719421 32" width="2500" height="2397"><path d="M28.596 2H11.404A1.404 1.404 0 0 0 10 3.404V5l9.69 3L30 5V3.404A1.404 1.404 0 0 0 28.596 2z" fill="#0364b8"/><path d="M31.65 17.405A11.341 11.341 0 0 0 32 16a.666.666 0 0 0-.333-.576l-.013-.008-.004-.002L20.812 9.24a1.499 1.499 0 0 0-1.479-.083 1.49 1.49 0 0 0-.145.082L8.35 15.415l-.004.002-.012.007A.666.666 0 0 0 8 16a11.344 11.344 0 0 0 .35 1.405l11.492 8.405z" fill="#0a2767"/><path d="M24 5h-7l-2.021 3L17 11l7 6h6v-6z" fill="#28a8ea"/><path d="M10 5h7v6h-7z" fill="#0078d4"/><path d="M24 5h6v6h-6z" fill="#50d9ff"/><path d="M24 17l-7-6h-7v6l7 6 10.832 1.768z" fill="#0364b8"/><path d="M17 11h7v6h-7z" fill="#0078d4"/><path d="M10 17h7v6h-7z" fill="#064a8c"/><path d="M24 17h6v6h-6z" fill="#0078d4"/><path d="M20.19 25.218l-11.793-8.6.495-.87 10.909 6.212a.528.528 0 0 0 .42-.012l10.933-6.23.496.869z" fill="#0a2767" opacity=".5"/><path d="M31.667 16.577l-.014.008-.003.002-10.838 6.174a1.497 1.497 0 0 1-1.46.091l3.774 5.061 8.254 1.797v.004A1.498 1.498 0 0 0 32 28.5V16a.666.666 0 0 1-.333.577z" fill="#1490df"/><path d="M32 28.5v-.738l-9.983-5.688-1.205.687a1.497 1.497 0 0 1-1.46.091l3.774 5.061 8.254 1.797v.004A1.498 1.498 0 0 0 32 28.5z" opacity=".05"/><path d="M31.95 28.883L21.007 22.65l-.195.11a1.497 1.497 0 0 1-1.46.092l3.774 5.061 8.254 1.797v.004a1.501 1.501 0 0 0 .57-.83z" opacity=".1"/><path d="M8.35 16.59v-.01h-.01l-.03-.02A.65.65 0 0 1 8 16v12.5A1.498 1.498 0 0 0 9.5 30h21a1.503 1.503 0 0 0 .37-.05.637.637 0 0 0 .18-.06.142.142 0 0 0 .06-.02 1.048 1.048 0 0 0 .23-.13c.02-.01.03-.01.04-.03z" fill="#28a8ea"/><path d="M18 24.667V8.333A1.337 1.337 0 0 0 16.667 7H10.03v7.456l-1.68.958-.005.002-.012.007A.666.666 0 0 0 8 16v.005V16v10h8.667A1.337 1.337 0 0 0 18 24.667z" opacity=".1"/><path d="M17 25.667V9.333A1.337 1.337 0 0 0 15.667 8H10.03v6.456l-1.68.958-.005.002-.012.007A.666.666 0 0 0 8 16v.005V16v11h7.667A1.337 1.337 0 0 0 17 25.667z" opacity=".2"/><path d="M17 23.667V9.333A1.337 1.337 0 0 0 15.667 8H10.03v6.456l-1.68.958-.005.002-.012.007A.666.666 0 0 0 8 16v.005V16v9h7.667A1.337 1.337 0 0 0 17 23.667z" opacity=".2"/><path d="M16 23.667V9.333A1.337 1.337 0 0 0 14.667 8H10.03v6.456l-1.68.958-.005.002-.012.007A.666.666 0 0 0 8 16v.005V16v9h6.667A1.337 1.337 0 0 0 16 23.667z" opacity=".2"/><path d="M1.333 8h13.334A1.333 1.333 0 0 1 16 9.333v13.334A1.333 1.333 0 0 1 14.667 24H1.333A1.333 1.333 0 0 1 0 22.667V9.333A1.333 1.333 0 0 1 1.333 8z" fill="#0078d4"/><path d="M3.867 13.468a4.181 4.181 0 0 1 1.642-1.814A4.965 4.965 0 0 1 8.119 11a4.617 4.617 0 0 1 2.413.62 4.14 4.14 0 0 1 1.598 1.733 5.597 5.597 0 0 1 .56 2.55 5.901 5.901 0 0 1-.577 2.666 4.239 4.239 0 0 1-1.645 1.794A4.8 4.8 0 0 1 7.963 21a4.729 4.729 0 0 1-2.468-.627 4.204 4.204 0 0 1-1.618-1.736 5.459 5.459 0 0 1-.567-2.519 6.055 6.055 0 0 1 .557-2.65zm1.75 4.258a2.716 2.716 0 0 0 .923 1.194 2.411 2.411 0 0 0 1.443.435 2.533 2.533 0 0 0 1.541-.449 2.603 2.603 0 0 0 .897-1.197 4.626 4.626 0 0 0 .286-1.665 5.063 5.063 0 0 0-.27-1.686 2.669 2.669 0 0 0-.866-1.24 2.387 2.387 0 0 0-1.527-.473 2.493 2.493 0 0 0-1.477.439 2.741 2.741 0 0 0-.944 1.203 4.776 4.776 0 0 0-.007 3.44z" fill="#fff"/></svg></span>',optionItem.innerHTML+='<span class="atcb_text">',optionItem.innerHTML+=optionParts[1]||"Outlook.com",optionItem.innerHTML+="</span>",optionItem.addEventListener("click",(function(){atcb_generate_microsoft(data,"outlook"),atcb_close_all()}),!1);break;case"Yahoo":optionItem.innerHTML='<span class="atcb_icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3386.34 3010.5" shape-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd"><path d="M0 732.88h645.84l376.07 962.1 380.96-962.1h628.76l-946.8 2277.62H451.98l259.19-603.53L.02 732.88zm2763.84 768.75h-704.26L2684.65 0l701.69.03-622.5 1501.6zm-519.78 143.72c216.09 0 391.25 175.17 391.25 391.22 0 216.06-175.16 391.23-391.25 391.23-216.06 0-391.19-175.17-391.19-391.23 0-216.05 175.16-391.22 391.19-391.22z" fill="#5f01d1" fill-rule="nonzero"/></svg></span>',optionItem.innerHTML+='<span class="atcb_text">',optionItem.innerHTML+=optionParts[1]||"Yahoo",optionItem.innerHTML+="</span>",optionItem.addEventListener("click",(function(){atcb_generate_yahoo(data),atcb_close_all()}),!1)}})),button.style.display="block",console.log("add-to-calendar button #"+(buttonId+1)+" created")}function atcb_toggle(){this.classList.contains("active")?atcb_close.call(this):atcb_open.call(this)}function atcb_open(){let list;this.classList.add("active"),document.getElementById("atcb_list_"+this.dataset.atcbtn).style.display="inline-block",document.getElementById("atcb_bgoverlay").style.display="block"}function atcb_close(){let list;this.classList.remove("active"),document.getElementById("atcb_list_"+this.dataset.atcbtn).style.display="none",document.getElementById("atcb_bgoverlay").style.display="none"}function atcb_close_all(){let atcButtons=document.querySelectorAll(".atcb_button");for(let i=0;i<atcButtons.length;i++)atcb_close.call(atcButtons[i])}function atcb_generate_google(data){let url="https://calendar.google.com/calendar/render?action=TEMPLATE",formattedDate=atcb_generate_time(data,"clean","google");url+="&dates="+formattedDate.start+"%2F"+formattedDate.end,null!=data.description&&""!=data.description&&(url+="&details="+encodeURIComponent(data.description)),null!=data.location&&""!=data.location&&(url+="&location="+encodeURIComponent(data.location)),null!=data.title&&""!=data.title&&(url+="&text="+encodeURIComponent(data.title)),window.open(url,"_blank").focus()}function atcb_generate_yahoo(data){let url="https://calendar.yahoo.com/?v=60",formattedDate=atcb_generate_time(data,"clean");url+="&st="+formattedDate.start+"&et="+formattedDate.end,formattedDate.allday&&(url+="&dur=allday"),null!=data.description&&""!=data.description&&(url+="&desc="+encodeURIComponent(data.description)),null!=data.location&&""!=data.location&&(url+="&in_loc="+encodeURIComponent(data.location)),null!=data.title&&""!=data.title&&(url+="&title="+encodeURIComponent(data.title)),window.open(url,"_blank").focus()}function atcb_generate_microsoft(data,type="365"){let url="https://";url+="outlook"==type?"outlook.live.com":"outlook.office.com",url+="/calendar/0/deeplink/compose?path=%2Fcalendar%2Faction%2Fcompose&rru=addevent";let formattedDate=atcb_generate_time(data,"delimiters","microsoft");url+="&startdt="+formattedDate.start+"&enddt="+formattedDate.end,formattedDate.allday&&(url+="&allday=true"),null!=data.description&&""!=data.description&&(url+="&body="+encodeURIComponent(data.description)),null!=data.location&&""!=data.location&&(url+="&location="+encodeURIComponent(data.location)),null!=data.title&&""!=data.title&&(url+="&subject="+encodeURIComponent(data.title)),window.open(url,"_blank").focus()}function atcb_generate_ical(data){this._save=function(fileURL){if(!window.ActiveXObject){let save=document.createElement("a");save.href=fileURL,save.target="_blank",save.download=data.iCalFileName||"event-to-save-in-my-calendar";let evt=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1});save.dispatchEvent(evt),(window.URL||window.webkitURL).revokeObjectURL(save.href)}};let now=new Date;now=now.toISOString().replace(/\-/g,"").replace(/\:/g,"").replace(/\..../g,"");let formattedDate=atcb_generate_time(data,"clean","ical"),timeslot="";formattedDate.allday&&(timeslot=";VALUE=DATE");let ics_lines=["BEGIN:VCALENDAR","VERSION:2.0","CALSCALE:GREGORIAN","BEGIN:VEVENT","DTSTAMP:"+formattedDate.start,"DTSTART"+timeslot+":"+formattedDate.start,"DTEND"+timeslot+":"+formattedDate.end,"DESCRIPTION:"+data.description,"SUMMARY:"+data.title,"LOCATION:"+data.location,"STATUS:CONFIRMED","LAST-MODIFIED:"+now,"SEQUENCE:0","END:VEVENT","END:VCALENDAR"],dlurl="data:text/calendar;base64,"+btoa(ics_lines.join("\r\n"));try{this._save(dlurl)}catch(e){console.log(e)}}function atcb_generate_time(data,style="delimiters",targetCal="general"){let dateStart=data.dateStart.split("-"),dateEnd=data.dateEnd.split("-"),start="",end="",allday=!1,returnObject;if(null!=data.timeStart&&null!=data.timeEnd)if(null!=data.timeZoneOffset&&""!=data.timeZoneOffset)start=new Date(dateStart[2]+"-"+dateStart[0]+"-"+dateStart[1]+"T"+data.timeStart+":00.000"+data.timeZoneOffset),end=new Date(dateEnd[2]+"-"+dateEnd[0]+"-"+dateEnd[1]+"T"+data.timeEnd+":00.000"+data.timeZoneOffset),start=start.toISOString().replace(".000",""),end=end.toISOString().replace(".000",""),"clean"==style&&(start=start.replace(/\-/g,"").replace(/\:/g,""),end=end.replace(/\-/g,"").replace(/\:/g,""));else{if(start=new Date(dateStart[2]+"-"+dateStart[0]+"-"+dateStart[1]+"T"+data.timeStart+":00.000+00:00"),end=new Date(dateEnd[2]+"-"+dateEnd[0]+"-"+dateEnd[1]+"T"+data.timeEnd+":00.000+00:00"),null!=data.timeZone&&""!=data.timeZone){let utcDate=new Date(start.toLocaleString("en-US",{timeZone:"UTC"})),tzDate=new Date(start.toLocaleString("en-US",{timeZone:data.timeZone})),offset=utcDate.getTime()-tzDate.getTime();start.setTime(start.getTime()+offset),end.setTime(end.getTime()+offset)}start=start.toISOString().replace(".000",""),end=end.toISOString().replace(".000",""),"clean"==style&&(start=start.replace(/\-/g,"").replace(/\:/g,""),end=end.replace(/\-/g,"").replace(/\:/g,""))}else{allday=!0,start=new Date(dateStart[2],dateStart[0]-1,dateStart[1]),start.setDate(start.getDate()+1);let breakStart=start.toISOString().split("T");end=new Date(dateEnd[2],dateEnd[0]-1,dateEnd[1]),"google"==targetCal||"microsoft"==targetCal||"ical"==targetCal?end.setDate(end.getDate()+2):end.setDate(end.getDate()+1);let breakEnd=end.toISOString().split("T");"clean"==style&&(breakStart[0]=breakStart[0].replace(/\-/g,""),breakEnd[0]=breakEnd[0].replace(/\-/g,"")),start=breakStart[0],end=breakEnd[0]}return{start:start,end:end,allday:allday}}document.addEventListener("DOMContentLoaded",atcb_init,!1);
const atcbVersion="1.1.1";function atcb_init(){console.log("add-to-calendar button initialized (version 1.1.1)"),console.log("See https://github.com/jekuer/add-to-calendar-button for details");let atcButtons=document.querySelectorAll(".atcb");for(let i=0;i<atcButtons.length;i++){const atcbConfig=JSON.parse(atcButtons[i].innerHTML);if(atcb_check_required(atcbConfig)&&(atcbConfig.dateStart=atcb_date_calculation(atcbConfig.dateStart),atcbConfig.dateEnd=atcb_date_calculation(atcbConfig.dateEnd),atcb_validate(atcbConfig))){atcb_generate(atcButtons[i],i,atcbConfig);let bgOverlay=document.createElement("div");bgOverlay.id="atcb_bgoverlay",bgOverlay.style.display="none",document.body.appendChild(bgOverlay),bgOverlay.addEventListener("click",atcb_close_all,{passive:!0}),bgOverlay.addEventListener("touchstart",atcb_close_all,{passive:!0}),bgOverlay.addEventListener("mouseenter",atcb_close_all,!1)}}}function atcb_check_required(data){if(null==data.options||data.options.length<1)return console.log("add-to-calendar button generation failed: no options set"),!1;const requiredField=["title","dateStart","dateEnd"];return requiredField.every((function(field){return null!=data[field]&&""!=data[field]||(console.log("add-to-calendar button generation failed: required setting missing ["+field+"]"),!1)}))}function atcb_date_calculation(dateString){let today=new Date,todayString=today.getMonth()+1+"-"+today.getDate()+"-"+today.getFullYear();const dateStringParts=(dateString=dateString.replace(/today/gi,todayString)).split("+"),dateParts=dateStringParts[0].split("-");let newDate=new Date(dateParts[2],dateParts[0]-1,dateParts[1]);return null!=dateStringParts[1]&&dateStringParts[1]>0&&newDate.setDate(newDate.getDate()+parseInt(dateStringParts[1])),(newDate.getMonth()+1<10?"0":"")+(newDate.getMonth()+1)+"-"+(newDate.getDate()<10?"0":"")+newDate.getDate()+"-"+newDate.getFullYear()}function atcb_validate(data){const options=["Apple","Google","iCal","Microsoft365","Outlook.com","Yahoo"];if(!data.options.every((function(option){let cleanOption=option.split("|");return!!options.includes(cleanOption[0])||(console.log("add-to-calendar button generation failed: invalid option ["+cleanOption[0]+"]"),!1)})))return!1;const dates=["dateStart","dateEnd"];let newDate=dates;if(!dates.every((function(date){const dateParts=data[date].split("-");return dateParts.length<3||dateParts.length>3?(console.log("add-to-calendar button generation failed: date misspelled ["+date+": "+data[date]+"]"),!1):(newDate[date]=new Date(dateParts[2],dateParts[0]-1,dateParts[1]),!0)})))return!1;const times=["timeStart","timeEnd"];return!!times.every((function(time){if(null!=data[time]){const timeParts=data[time].split(":");if(timeParts.length<2||timeParts.length>2)return console.log("add-to-calendar button generation failed: time misspelled ["+time+": "+data[time]+"]"),!1;if(timeParts[0]>23)return console.log("add-to-calendar button generation failed: time misspelled - hours number too high ["+time+": "+timeParts[0]+"]"),!1;if(timeParts[1]>59)return console.log("add-to-calendar button generation failed: time misspelled - minutes number too high ["+time+": "+timeParts[1]+"]"),!1;"timeStart"==time&&(newDate.dateStart=new Date(newDate.dateStart.getTime()+36e5*timeParts[0]+6e4*timeParts[1])),"timeEnd"==time&&(newDate.dateEnd=new Date(newDate.dateEnd.getTime()+36e5*timeParts[0]+6e4*timeParts[1]))}return!0}))&&(null!=data.timeStart&&null==data.timeEnd||null==data.timeStart&&null!=data.timeEnd?(console.log("add-to-calendar button generation failed: if you set a starting time, you also need to define an end time"),!1):!(newDate.dateEnd<newDate.dateStart)||(console.log("add-to-calendar button generation failed: end date before start date"),!1))}function atcb_generate(button,buttonId,data){button.innerHTML="";let buttonTriggerWrapper=document.createElement("div");buttonTriggerWrapper.classList.add("atcb_button_wrapper"),button.appendChild(buttonTriggerWrapper);let buttonTrigger=document.createElement("div");buttonTrigger.id="atcb_button_"+buttonId,buttonTrigger.classList.add("atcb_button"),buttonTrigger.dataset.atcbtn=buttonId,buttonTriggerWrapper.appendChild(buttonTrigger),buttonTrigger.innerHTML='<span class="atcb_icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 122.88 122.88"><path d="M81.61 4.73c0-2.61 2.58-4.73 5.77-4.73s5.77 2.12 5.77 4.73v20.72c0 2.61-2.58 4.73-5.77 4.73s-5.77-2.12-5.77-4.73V4.73h0zm-3.65 76.03c1.83 0 3.32 1.49 3.32 3.32s-1.49 3.32-3.32 3.32l-12.95-.04-.04 12.93c0 1.83-1.49 3.32-3.32 3.32s-3.32-1.49-3.32-3.32l.04-12.94-12.93-.05c-1.83 0-3.32-1.49-3.32-3.32s1.49-3.32 3.32-3.32l12.94.04.04-12.93c0-1.83 1.49-3.32 3.32-3.32s3.32 1.49 3.32 3.32l-.04 12.95 12.94.04h0zM29.61 4.73c0-2.61 2.58-4.73 5.77-4.73s5.77 2.12 5.77 4.73v20.72c0 2.61-2.58 4.73-5.77 4.73s-5.77-2.12-5.77-4.73V4.73h0zM6.4 45.32h110.08V21.47c0-.8-.33-1.53-.86-2.07-.53-.53-1.26-.86-2.07-.86H103c-1.77 0-3.2-1.43-3.2-3.2s1.43-3.2 3.2-3.2h10.55c2.57 0 4.9 1.05 6.59 2.74s2.74 4.02 2.74 6.59v27.06 65.03c0 2.57-1.05 4.9-2.74 6.59s-4.02 2.74-6.59 2.74H9.33c-2.57 0-4.9-1.05-6.59-2.74-1.69-1.7-2.74-4.03-2.74-6.6V48.53 21.47c0-2.57 1.05-4.9 2.74-6.59s4.02-2.74 6.59-2.74H20.6c1.77 0 3.2 1.43 3.2 3.2s-1.43 3.2-3.2 3.2H9.33c-.8 0-1.53.33-2.07.86-.53.53-.86 1.26-.86 2.07v23.85h0zm110.08 6.41H6.4v61.82c0 .8.33 1.53.86 2.07.53.53 1.26.86 2.07.86h104.22c.8 0 1.53-.33 2.07-.86.53-.53.86-1.26.86-2.07V51.73h0zM50.43 18.54c-1.77 0-3.2-1.43-3.2-3.2s1.43-3.2 3.2-3.2h21.49c1.77 0 3.2 1.43 3.2 3.2s-1.43 3.2-3.2 3.2H50.43h0z"/></svg></span>',buttonTrigger.innerHTML+='<span class="atcb_text">'+(data.label||"Add to Calendar")+"</span>","click"==data.trigger?buttonTrigger.addEventListener("click",atcb_toggle,{passive:!0}):(buttonTrigger.addEventListener("touchstart",atcb_toggle,{passive:!0}),buttonTrigger.addEventListener("mouseenter",atcb_open,!1));let optionsList=document.createElement("div");optionsList.id="atcb_list_"+buttonId,optionsList.classList.add("atcb_list"),optionsList.style.display="none",buttonTriggerWrapper.appendChild(optionsList),data.options.forEach((function(option){let optionParts=option.split("|"),optionItem=document.createElement("div");switch(optionItem.classList.add("atcb_list_item"),optionsList.appendChild(optionItem),optionParts[0]){case"Apple":optionItem.innerHTML='<span class="atcb_icon"><svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" shape-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" viewBox="0 0 640 640"><path d="M494.782 340.02c-.803-81.025 66.084-119.907 69.072-121.832-37.595-54.993-96.167-62.552-117.037-63.402-49.843-5.032-97.242 29.362-122.565 29.362-25.253 0-64.277-28.607-105.604-27.85-54.32.803-104.4 31.594-132.403 80.245C29.81 334.457 71.81 479.58 126.816 558.976c26.87 38.882 58.914 82.56 100.997 81 40.512-1.594 55.843-26.244 104.848-26.244 48.993 0 62.753 26.245 105.64 25.406 43.606-.803 71.232-39.638 97.925-78.65 30.887-45.12 43.548-88.75 44.316-90.994-.969-.437-85.029-32.634-85.879-129.439l.118-.035zM414.23 102.178C436.553 75.095 451.636 37.5 447.514-.024c-32.162 1.311-71.163 21.437-94.253 48.485-20.729 24.012-38.836 62.28-33.993 99.036 35.918 2.8 72.591-18.248 94.926-45.272l.036-.047z"/></svg></span>',optionItem.innerHTML+='<span class="atcb_text">',optionItem.innerHTML+=optionParts[1]||"Apple",optionItem.innerHTML+="</span>",optionItem.addEventListener("click",(function(){atcb_generate_ical(data),atcb_close_all()}),!1);break;case"Google":optionItem.innerHTML='<span class="atcb_icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 122.88 122.88"><path d="M93.78 29.1H29.1v64.68h64.68V29.1z" fill="#fff"/><path d="M93.78 122.88l29.1-29.1h-29.1v29.1z" fill="#f72a25"/><path d="M122.88 29.1h-29.1v64.68h29.1V29.1z" fill="#fbbc04"/><path d="M93.78 93.78H29.1v29.1h64.68v-29.1z" fill="#34a853"/><path d="M0 93.78v19.4c0 5.36 4.34 9.7 9.7 9.7h19.4v-29.1H0h0z" fill="#188038"/><path d="M122.88 29.1V9.7c0-5.36-4.34-9.7-9.7-9.7h-19.4v29.1h29.1 0z" fill="#1967d2"/><path d="M93.78 0H9.7C4.34 0 0 4.34 0 9.7v84.08h29.1V29.1h64.67V0h.01z" fill="#4285f4"/><path d="M42.37 79.27c-2.42-1.63-4.09-4.02-5-7.17l5.61-2.31c.51 1.94 1.4 3.44 2.67 4.51 1.26 1.07 2.8 1.59 4.59 1.59 1.84 0 3.41-.56 4.73-1.67 1.32-1.12 1.98-2.54 1.98-4.26 0-1.76-.7-3.2-2.09-4.32s-3.14-1.67-5.22-1.67H46.4v-5.55h2.91c1.79 0 3.31-.48 4.54-1.46 1.23-.97 1.84-2.3 1.84-3.99 0-1.5-.55-2.7-1.65-3.6s-2.49-1.35-4.18-1.35c-1.65 0-2.96.44-3.93 1.32s-1.7 2-2.12 3.24l-5.55-2.31c.74-2.09 2.09-3.93 4.07-5.52s4.51-2.39 7.58-2.39c2.27 0 4.32.44 6.13 1.32s3.23 2.1 4.26 3.65c1.03 1.56 1.54 3.31 1.54 5.25 0 1.98-.48 3.65-1.43 5.03-.95 1.37-2.13 2.43-3.52 3.16v.33c1.79.74 3.36 1.96 4.51 3.52 1.17 1.58 1.76 3.46 1.76 5.66s-.56 4.16-1.67 5.88c-1.12 1.72-2.66 3.08-4.62 4.07s-4.17 1.49-6.62 1.49c-2.84 0-5.46-.81-7.88-2.45h0 0zm34.46-27.84l-6.16 4.45-3.08-4.67 11.05-7.97h4.24v37.6h-6.05V51.43h0z" fill="#1a73e8"/></svg></span>',optionItem.innerHTML+='<span class="atcb_text">',optionItem.innerHTML+=optionParts[1]||"Google",optionItem.innerHTML+="</span>",optionItem.addEventListener("click",(function(){atcb_generate_google(data),atcb_close_all()}),!1);break;case"iCal":optionItem.innerHTML='<span class="atcb_icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 122.88 122.88"><path d="M81.61 4.73c0-2.61 2.58-4.73 5.77-4.73s5.77 2.12 5.77 4.73v20.72c0 2.61-2.58 4.73-5.77 4.73s-5.77-2.12-5.77-4.73V4.73h0zm-15.5 99.08c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2H81.9c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H66.11h0zM15.85 67.09c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H15.85h0zm25.13 0c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H40.98h0zm25.13 0c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2H81.9c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H66.11h0zm25.14 0c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H91.25h0zm-75.4 18.36c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H15.85h0zm25.13 0c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H40.98h0zm25.13 0c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2H81.9c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H66.11h0zm25.14 0c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H91.25h0zm-75.4 18.36c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H15.85h0zm25.13 0c-.34 0-.61-1.43-.61-3.2s.27-3.2.61-3.2h15.79c.34 0 .61 1.43.61 3.2s-.27 3.2-.61 3.2H40.98h0zM29.61 4.73c0-2.61 2.58-4.73 5.77-4.73s5.77 2.12 5.77 4.73v20.72c0 2.61-2.58 4.73-5.77 4.73s-5.77-2.12-5.77-4.73V4.73h0zM6.4 45.32h110.07V21.47c0-.8-.33-1.53-.86-2.07-.53-.53-1.26-.86-2.07-.86H103c-1.77 0-3.2-1.43-3.2-3.2s1.43-3.2 3.2-3.2h10.55c2.57 0 4.9 1.05 6.59 2.74s2.74 4.02 2.74 6.59v27.06 65.03c0 2.57-1.05 4.9-2.74 6.59s-4.02 2.74-6.59 2.74H9.33c-2.57 0-4.9-1.05-6.59-2.74-1.69-1.7-2.74-4.03-2.74-6.6V48.52 21.47c0-2.57 1.05-4.9 2.74-6.59s4.02-2.74 6.59-2.74H20.6c1.77 0 3.2 1.43 3.2 3.2s-1.43 3.2-3.2 3.2H9.33c-.8 0-1.53.33-2.07.86-.53.53-.86 1.26-.86 2.07v23.85h0zm110.08 6.41H6.4v61.82c0 .8.33 1.53.86 2.07.53.53 1.26.86 2.07.86h104.22c.8 0 1.53-.33 2.07-.86.53-.53.86-1.26.86-2.07V51.73h0zM50.43 18.54c-1.77 0-3.2-1.43-3.2-3.2s1.43-3.2 3.2-3.2h21.49c1.77 0 3.2 1.43 3.2 3.2s-1.43 3.2-3.2 3.2H50.43h0z"/></svg></span>',optionItem.innerHTML+='<span class="atcb_text">',optionItem.innerHTML+=optionParts[1]||"iCal File",optionItem.innerHTML+="</span>",optionItem.addEventListener("click",(function(){atcb_generate_ical(data),atcb_close_all()}),!1);break;case"Microsoft365":optionItem.innerHTML='<span class="atcb_icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 278050 333334" shape-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd"><path fill="#ea3e23" d="M278050 305556l-29-16V28627L178807 0 448 66971l-448 87 22 200227 60865-23821V80555l117920-28193-17 239519L122 267285l178668 65976v73l99231-27462v-316z"/></svg></span>',optionItem.innerHTML+='<span class="atcb_text">',optionItem.innerHTML+=optionParts[1]||"Microsoft 365",optionItem.innerHTML+="</span>",optionItem.addEventListener("click",(function(){atcb_generate_microsoft(data,"365"),atcb_close_all()}),!1);break;case"Outlook.com":optionItem.innerHTML='<span class="atcb_icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-0.129793726981 0 33.251996719421 32" width="2500" height="2397"><path d="M28.596 2H11.404A1.404 1.404 0 0 0 10 3.404V5l9.69 3L30 5V3.404A1.404 1.404 0 0 0 28.596 2z" fill="#0364b8"/><path d="M31.65 17.405A11.341 11.341 0 0 0 32 16a.666.666 0 0 0-.333-.576l-.013-.008-.004-.002L20.812 9.24a1.499 1.499 0 0 0-1.479-.083 1.49 1.49 0 0 0-.145.082L8.35 15.415l-.004.002-.012.007A.666.666 0 0 0 8 16a11.344 11.344 0 0 0 .35 1.405l11.492 8.405z" fill="#0a2767"/><path d="M24 5h-7l-2.021 3L17 11l7 6h6v-6z" fill="#28a8ea"/><path d="M10 5h7v6h-7z" fill="#0078d4"/><path d="M24 5h6v6h-6z" fill="#50d9ff"/><path d="M24 17l-7-6h-7v6l7 6 10.832 1.768z" fill="#0364b8"/><path d="M17 11h7v6h-7z" fill="#0078d4"/><path d="M10 17h7v6h-7z" fill="#064a8c"/><path d="M24 17h6v6h-6z" fill="#0078d4"/><path d="M20.19 25.218l-11.793-8.6.495-.87 10.909 6.212a.528.528 0 0 0 .42-.012l10.933-6.23.496.869z" fill="#0a2767" opacity=".5"/><path d="M31.667 16.577l-.014.008-.003.002-10.838 6.174a1.497 1.497 0 0 1-1.46.091l3.774 5.061 8.254 1.797v.004A1.498 1.498 0 0 0 32 28.5V16a.666.666 0 0 1-.333.577z" fill="#1490df"/><path d="M32 28.5v-.738l-9.983-5.688-1.205.687a1.497 1.497 0 0 1-1.46.091l3.774 5.061 8.254 1.797v.004A1.498 1.498 0 0 0 32 28.5z" opacity=".05"/><path d="M31.95 28.883L21.007 22.65l-.195.11a1.497 1.497 0 0 1-1.46.092l3.774 5.061 8.254 1.797v.004a1.501 1.501 0 0 0 .57-.83z" opacity=".1"/><path d="M8.35 16.59v-.01h-.01l-.03-.02A.65.65 0 0 1 8 16v12.5A1.498 1.498 0 0 0 9.5 30h21a1.503 1.503 0 0 0 .37-.05.637.637 0 0 0 .18-.06.142.142 0 0 0 .06-.02 1.048 1.048 0 0 0 .23-.13c.02-.01.03-.01.04-.03z" fill="#28a8ea"/><path d="M18 24.667V8.333A1.337 1.337 0 0 0 16.667 7H10.03v7.456l-1.68.958-.005.002-.012.007A.666.666 0 0 0 8 16v.005V16v10h8.667A1.337 1.337 0 0 0 18 24.667z" opacity=".1"/><path d="M17 25.667V9.333A1.337 1.337 0 0 0 15.667 8H10.03v6.456l-1.68.958-.005.002-.012.007A.666.666 0 0 0 8 16v.005V16v11h7.667A1.337 1.337 0 0 0 17 25.667z" opacity=".2"/><path d="M17 23.667V9.333A1.337 1.337 0 0 0 15.667 8H10.03v6.456l-1.68.958-.005.002-.012.007A.666.666 0 0 0 8 16v.005V16v9h7.667A1.337 1.337 0 0 0 17 23.667z" opacity=".2"/><path d="M16 23.667V9.333A1.337 1.337 0 0 0 14.667 8H10.03v6.456l-1.68.958-.005.002-.012.007A.666.666 0 0 0 8 16v.005V16v9h6.667A1.337 1.337 0 0 0 16 23.667z" opacity=".2"/><path d="M1.333 8h13.334A1.333 1.333 0 0 1 16 9.333v13.334A1.333 1.333 0 0 1 14.667 24H1.333A1.333 1.333 0 0 1 0 22.667V9.333A1.333 1.333 0 0 1 1.333 8z" fill="#0078d4"/><path d="M3.867 13.468a4.181 4.181 0 0 1 1.642-1.814A4.965 4.965 0 0 1 8.119 11a4.617 4.617 0 0 1 2.413.62 4.14 4.14 0 0 1 1.598 1.733 5.597 5.597 0 0 1 .56 2.55 5.901 5.901 0 0 1-.577 2.666 4.239 4.239 0 0 1-1.645 1.794A4.8 4.8 0 0 1 7.963 21a4.729 4.729 0 0 1-2.468-.627 4.204 4.204 0 0 1-1.618-1.736 5.459 5.459 0 0 1-.567-2.519 6.055 6.055 0 0 1 .557-2.65zm1.75 4.258a2.716 2.716 0 0 0 .923 1.194 2.411 2.411 0 0 0 1.443.435 2.533 2.533 0 0 0 1.541-.449 2.603 2.603 0 0 0 .897-1.197 4.626 4.626 0 0 0 .286-1.665 5.063 5.063 0 0 0-.27-1.686 2.669 2.669 0 0 0-.866-1.24 2.387 2.387 0 0 0-1.527-.473 2.493 2.493 0 0 0-1.477.439 2.741 2.741 0 0 0-.944 1.203 4.776 4.776 0 0 0-.007 3.44z" fill="#fff"/></svg></span>',optionItem.innerHTML+='<span class="atcb_text">',optionItem.innerHTML+=optionParts[1]||"Outlook.com",optionItem.innerHTML+="</span>",optionItem.addEventListener("click",(function(){atcb_generate_microsoft(data,"outlook"),atcb_close_all()}),!1);break;case"Yahoo":optionItem.innerHTML='<span class="atcb_icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3386.34 3010.5" shape-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd"><path d="M0 732.88h645.84l376.07 962.1 380.96-962.1h628.76l-946.8 2277.62H451.98l259.19-603.53L.02 732.88zm2763.84 768.75h-704.26L2684.65 0l701.69.03-622.5 1501.6zm-519.78 143.72c216.09 0 391.25 175.17 391.25 391.22 0 216.06-175.16 391.23-391.25 391.23-216.06 0-391.19-175.17-391.19-391.23 0-216.05 175.16-391.22 391.19-391.22z" fill="#5f01d1" fill-rule="nonzero"/></svg></span>',optionItem.innerHTML+='<span class="atcb_text">',optionItem.innerHTML+=optionParts[1]||"Yahoo",optionItem.innerHTML+="</span>",optionItem.addEventListener("click",(function(){atcb_generate_yahoo(data),atcb_close_all()}),!1)}})),button.style.display="block",console.log("add-to-calendar button #"+(buttonId+1)+" created")}function atcb_toggle(){this.classList.contains("active")?atcb_close.call(this):atcb_open.call(this)}function atcb_open(){let list;this.classList.add("active"),document.getElementById("atcb_list_"+this.dataset.atcbtn).style.display="block",document.getElementById("atcb_bgoverlay").style.display="block"}function atcb_close(){let list;this.classList.remove("active"),document.getElementById("atcb_list_"+this.dataset.atcbtn).style.display="none",document.getElementById("atcb_bgoverlay").style.display="none"}function atcb_close_all(){let atcButtons=document.querySelectorAll(".atcb_button");for(let i=0;i<atcButtons.length;i++)atcb_close.call(atcButtons[i])}function atcb_generate_google(data){let url="https://calendar.google.com/calendar/render?action=TEMPLATE",formattedDate=atcb_generate_time(data,"clean","google");url+="&dates="+formattedDate.start+"%2F"+formattedDate.end,null!=data.description&&""!=data.description&&(url+="&details="+encodeURIComponent(data.description)),null!=data.location&&""!=data.location&&(url+="&location="+encodeURIComponent(data.location)),null!=data.title&&""!=data.title&&(url+="&text="+encodeURIComponent(data.title)),window.open(url,"_blank").focus()}function atcb_generate_yahoo(data){let url="https://calendar.yahoo.com/?v=60",formattedDate=atcb_generate_time(data,"clean");url+="&st="+formattedDate.start+"&et="+formattedDate.end,formattedDate.allday&&(url+="&dur=allday"),null!=data.description&&""!=data.description&&(url+="&desc="+encodeURIComponent(data.description)),null!=data.location&&""!=data.location&&(url+="&in_loc="+encodeURIComponent(data.location)),null!=data.title&&""!=data.title&&(url+="&title="+encodeURIComponent(data.title)),window.open(url,"_blank").focus()}function atcb_generate_microsoft(data,type="365"){let url="https://";url+="outlook"==type?"outlook.live.com":"outlook.office.com",url+="/calendar/0/deeplink/compose?path=%2Fcalendar%2Faction%2Fcompose&rru=addevent";let formattedDate=atcb_generate_time(data,"delimiters","microsoft");url+="&startdt="+formattedDate.start+"&enddt="+formattedDate.end,formattedDate.allday&&(url+="&allday=true"),null!=data.description&&""!=data.description&&(url+="&body="+encodeURIComponent(data.description)),null!=data.location&&""!=data.location&&(url+="&location="+encodeURIComponent(data.location)),null!=data.title&&""!=data.title&&(url+="&subject="+encodeURIComponent(data.title)),window.open(url,"_blank").focus()}function atcb_generate_ical(data){this._save=function(fileURL){if(!window.ActiveXObject){let save=document.createElement("a");save.href=fileURL,save.target="_blank",save.download=data.iCalFileName||"event-to-save-in-my-calendar";let evt=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1});save.dispatchEvent(evt),(window.URL||window.webkitURL).revokeObjectURL(save.href)}};let now=new Date;now=now.toISOString().replace(/\-/g,"").replace(/\:/g,"").replace(/\..../g,"");let formattedDate=atcb_generate_time(data,"clean","ical"),timeslot="";formattedDate.allday&&(timeslot=";VALUE=DATE");let ics_lines=["BEGIN:VCALENDAR","VERSION:2.0","CALSCALE:GREGORIAN","BEGIN:VEVENT","DTSTAMP:"+formattedDate.start,"DTSTART"+timeslot+":"+formattedDate.start,"DTEND"+timeslot+":"+formattedDate.end,"DESCRIPTION:"+data.description,"SUMMARY:"+data.title,"LOCATION:"+data.location,"STATUS:CONFIRMED","LAST-MODIFIED:"+now,"SEQUENCE:0","END:VEVENT","END:VCALENDAR"],dlurl="data:text/calendar;base64,"+btoa(ics_lines.join("\r\n"));try{this._save(dlurl)}catch(e){console.log(e)}}function atcb_generate_time(data,style="delimiters",targetCal="general"){let dateStart=data.dateStart.split("-"),dateEnd=data.dateEnd.split("-"),start="",end="",allday=!1,returnObject;if(null!=data.timeStart&&null!=data.timeEnd)if(null!=data.timeZoneOffset&&""!=data.timeZoneOffset)start=new Date(dateStart[2]+"-"+dateStart[0]+"-"+dateStart[1]+"T"+data.timeStart+":00.000"+data.timeZoneOffset),end=new Date(dateEnd[2]+"-"+dateEnd[0]+"-"+dateEnd[1]+"T"+data.timeEnd+":00.000"+data.timeZoneOffset),start=start.toISOString().replace(".000",""),end=end.toISOString().replace(".000",""),"clean"==style&&(start=start.replace(/\-/g,"").replace(/\:/g,""),end=end.replace(/\-/g,"").replace(/\:/g,""));else{if(start=new Date(dateStart[2]+"-"+dateStart[0]+"-"+dateStart[1]+"T"+data.timeStart+":00.000+00:00"),end=new Date(dateEnd[2]+"-"+dateEnd[0]+"-"+dateEnd[1]+"T"+data.timeEnd+":00.000+00:00"),null!=data.timeZone&&""!=data.timeZone){let utcDate=new Date(start.toLocaleString("en-US",{timeZone:"UTC"})),tzDate=new Date(start.toLocaleString("en-US",{timeZone:data.timeZone})),offset=utcDate.getTime()-tzDate.getTime();start.setTime(start.getTime()+offset),end.setTime(end.getTime()+offset)}start=start.toISOString().replace(".000",""),end=end.toISOString().replace(".000",""),"clean"==style&&(start=start.replace(/\-/g,"").replace(/\:/g,""),end=end.replace(/\-/g,"").replace(/\:/g,""))}else{allday=!0,start=new Date(dateStart[2],dateStart[0]-1,dateStart[1]),start.setDate(start.getDate()+1);let breakStart=start.toISOString().split("T");end=new Date(dateEnd[2],dateEnd[0]-1,dateEnd[1]),"google"==targetCal||"microsoft"==targetCal||"ical"==targetCal?end.setDate(end.getDate()+2):end.setDate(end.getDate()+1);let breakEnd=end.toISOString().split("T");"clean"==style&&(breakStart[0]=breakStart[0].replace(/\-/g,""),breakEnd[0]=breakEnd[0].replace(/\-/g,"")),start=breakStart[0],end=breakEnd[0]}return{start:start,end:end,allday:allday}}document.addEventListener("DOMContentLoaded",atcb_init,!1);export{atcb_init};
//# sourceMappingURL=atcb.min.js.map
declare module 'add-to-calendar-button' {
export function atcb_init();
export function atcb_init(): any;
}

@@ -0,0 +0,0 @@ GNU GENERAL PUBLIC LICENSE

{
"name": "add-to-calendar-button",
"version": "1.0.2",
"version": "1.1.1",
"description": "A convenient JavaScript snippet, which lets you create beautiful buttons, where people can add events to their calendars.",

@@ -5,0 +5,0 @@ "main": "assets/js/atcb.js",

@@ -56,5 +56,6 @@ # Your next Add-to-Calendar Button

2. Copy the css (atcb.min.css) and js (atcb.min.js) files from the assets folders into your project (the **.min.** files are required, but it is recommended to also copy the raw and map files).
3. Include those files in your project. As usual, the css goes into the <head>, the js into the <body> footer. You can also combine them with other files, if you want to.
4. Create your button as can be seen in the "Configuration" section below.
5. That is it. The script takes care of all the rest. :)
3. Include those files in your project. As usual, the css goes into the <head> (`<link rel="stylesheet" href="./assets/css/atcb.min.css">`), the js into the <body> footer (`<script type="module" src="./assets/js/atcb.min.js"></script>`). You can also combine them with other files, if you want to.
4. Mind that when using this in a Vanilla JS style, you need to either include `type="module"` within the script tag **or** remove the last line from the js file (*module.exports*), since this is only relevant for Option 2 and throws a console error otherwise.
5. Create your button as can be seen in the "Configuration" section below.
6. That is it. The script takes care of all the rest. :)

@@ -65,2 +66,7 @@ ### Option 2: NodeJS

2. Rund **`npm install add-tocalendar-button`**.
3. Import the module into your project/component. For example with Angular: `import { atcb_init } from 'add-to-calendar-button';`.
4. Init the js with `atcb_init();`.
5. Include the css. For example with Angular, add the following to the global style.css: `@import 'add-to-calendar-button/assets/css/atcb.min'`;
6. Create your button as can be seen in the "Configuration" section below.
7. That is it. The script takes care of all the rest. :)

@@ -76,3 +82,4 @@

```
Within this placeholder, you can easily configure the button, by placing a respective JSON structure.
Within this placeholder, you can easily configure the button, by placing a respective JSON structure.
Mind that with Angular, you might need to escape the { with `{{ '{' }}` and } with `{{ '}' }}`.

@@ -159,2 +166,3 @@ ### Minimal structure (required)

v1.1.0 : npm functionality
v1.0.0 : initial release

@@ -161,0 +169,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc