forked from commonpike/add-to-calendar-buttons
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathadd-to-calendar.min.js
1 lines (1 loc) · 14.1 KB
/
add-to-calendar.min.js
1
!function(e){var t={selector:".add-to-calendar",duration:60,texts:{label:"Add to Calendar",title:"New event",download:"Calendar-event.ics",google:"Google Calendar",yahoo:"Yahoo! Calendar",off365:"Office 365",ical:"Download iCal",outlook:"Download Outlook",ienoblob:"Sorry, your browser does not support downloading Calendar events."}};"undefined"!=typeof ADDTOCAL_CONFIG&&(t=ADDTOCAL_CONFIG);var a="msSaveOrOpenBlob"in window.navigator,A=/\b(MSIE |Trident.*?rv:|Edge\/)(\d+)/.exec(navigator.userAgent),o={google:function(e){var a,A,o,n;e.allday?(a=d(e.tzstart),A=d(l(e.tzstart,1440)),a=r(a),A=r(A)):e.timezone?(o=new Date(e.start.getTime()-6e4*e.start.getTimezoneOffset()),e.end&&(n=new Date(e.end.getTime()-6e4*e.end.getTimezoneOffset())),a=d(o),A=d(n),a=a.substring(0,a.length-1),A=A.substring(0,A.length-1)):(a=d(e.start),A=d(e.end));return'<a class="icon-google" target="_blank" href="'+encodeURI(["https://www.google.com/calendar/render","?action=TEMPLATE","&text="+(e.title||""),"&dates="+(a||""),"/"+(A||""),e.timezone?"&ctz="+e.timezone:"","&details="+(e.description||""),"&location="+(e.address||""),"&sprop=&sprop=name:"].join(""))+'">'+t.texts.google+"</a>"},yahoo:function(e){if(e.allday)var a="allday";else{var A=e.tzend?(e.tzend.getTime()-e.tzstart.getTime())/6e4:e.duration;a=(A<600?"0"+Math.floor(A/60):Math.floor(A/60)+"")+(A%60<10?"0"+A%60:A%60+"")}var o=d(e.tzstart)||"";return'<a class="icon-yahoo" target="_blank" href="'+encodeURI(["http://calendar.yahoo.com/?v=60&view=d&type=20","&title="+(e.title||""),"&st="+o,"&dur="+(a||""),"&desc="+(e.description||""),"&in_loc="+(e.address||"")].join(""))+'">'+t.texts.yahoo+"</a>"},off365:function(e){var a=e.tzstart.toISOString(),A=e.tzend.toISOString();return'<a class="icon-off365" target="_blank" href="'+encodeURI(["https://outlook.office365.com/owa/","?path=/calendar/action/compose","&rru=addevent","&subject="+(e.title||""),"&startdt="+(a||""),"&enddt="+(A||""),"&body="+(e.description||""),"&location="+(e.address||""),(e.allday,"true")].join(""))+'">'+t.texts.off365+"</a>"},ics:function(e,a,o){var n,l;e.allday?(n=d(e.tzstart),l=n=r(n)+"T000000"):(n=d(e.tzstart),l=d(e.tzend));var c=["BEGIN:VCALENDAR","VERSION:2.0","BEGIN:VEVENT","URL:"+document.URL,"DTSTART:"+(n||""),"DTEND:"+(l||""),"SUMMARY:"+(e.title||""),"DESCRIPTION:"+(e.description||""),"LOCATION:"+(e.address||""),"UID:"+(e.id||"")+"-"+document.URL,"END:VEVENT","END:VCALENDAR"].join("\n");if(A)return'<a class="'+a+'" onclick="ieDownloadCalendar(\''+i(c)+"')\">"+o+"</a>";var s=encodeURI("data:text/calendar;charset=utf8,"+c);return'<a class="'+a+'" download="'+t.texts.download+'" href="'+s+'">'+o+"</a>"},ical:function(e){return this.ics(e,"icon-ical",t.texts.ical)},outlook:function(e){return this.ics(e,"icon-outlook",t.texts.outlook)}},n=function(e,t){if(e){if(t){var a=new Date(e.toLocaleString("en-US",{timeZone:t})),A=e.getTime()-a.getTime();return new Date(e.getTime()+A)}return e}},d=function(e){return e?e.toISOString().replace(/-|:|\.\d+/g,""):""},l=function(e,t){return new Date(e.getTime()+6e4*t)},r=function(e){return e.substr(0,e.indexOf("T"))},i=function(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/\"/g,""").replace(/\'/g,"\\'").replace(/(\r?\n|\r)/gm,"\\n")},c=function(e){return{google:o.google(e),yahoo:o.yahoo(e),off365:o.off365(e),ical:o.ical(e),outlook:o.outlook(e)}},s=function(){document.getElementById("add-to-calendar-css")||document.getElementsByTagName("head")[0].appendChild(W())},W=function(){var e=document.createElement("style");return e.id="add-to-calendar-css",e.innerHTML=".add-to-calendar{position:relative;text-align:left}.add-to-calendar>*{display:none}.add-to-calendar>.add-to-calendar-widget{display:block}.add-to-calendar-label{cursor:pointer}.add-to-calendar-checkbox+div.add-to-calendar-dropdown{display:none;margin-left:20px}.add-to-calendar-checkbox:checked+div.add-to-calendar-dropdown{display:block}input[type=checkbox].add-to-calendar-checkbox{position:absolute;visibility:hidden}.add-to-calendar-checkbox+div.add-to-calendar-dropdown a{cursor:pointer;display:block}.add-to-calendar-checkbox+div.add-to-calendar-dropdown a:before{width:16px;height:16px;display:inline-block;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFQAAAAQCAYAAACIoli7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0MzJCRDU2NUE1MDIxMUUyOTY1Q0EwNTkxNEJDOUIwNCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0MzJCRDU2NkE1MDIxMUUyOTY1Q0EwNTkxNEJDOUIwNCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjQzMkJENTYzQTUwMjExRTI5NjVDQTA1OTE0QkM5QjA0IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjQzMkJENTY0QTUwMjExRTI5NjVDQTA1OTE0QkM5QjA0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+1Gcb3QAACh1JREFUeNrEWAtwVNUZ/u7d9yvZJBtMIC8eBhIKMkQIhqIBKirWwpSW0dahCir1gQhWg2XKjNRqR7AjQ6QjglBFRIW20KmC0KRYjRYMCZGHGEjIY0Oy2U32lX3d3Xv6nxuSbEJCQNvpn/n33POfxz33u9//uBGaBQFcMhgrpGYC6ddk+zfiZKgxsvOG4buJMGATNtzcq4l+WStbsGgpvOiELpgBWetGQGNCstSGkKwH1Ek04oVNFUZQsEAjedCg0iBRVivrP737CL+H8Na7f7lpRFa2cOfMqdUn9n3ARGc7NLEYJj62Qle6Z3/ZlATt82mINV4QVPV33HVXmK/1bRgPvst60vzXgJzZZ84UlOfnV1L/YvwhBxk7Q7quZ3zZLrvSivRy+PtR0Y8oUit2P7+aWm5TifxahErVPWfd/JRBQaNVjA2CIhsecEwIubHzB3+CQWNDNBCCyuiEC6NgpV3agkCszYWknBTInjAMFh20HAo1/QQFVM7Kw9aly7D1ze2iJEemhbu8Mzf++rkVNGMkaS7puKadb0yubGscp/Wa3rc0nNXVJ6RsJvsaUhmXt5oyZv36e4o//hi1tbUonjWrYNTs2QXxhywuL+8bmzevoG7dOu3gj8Po2MIVZGIcAw6TcPma0YV4JfXYEBiy/rbeqZcv+i1tEbIgagzgOAWMerT5MvDuXgfOH6vAsRoRgVAqHOp2TMrX4dYfFmLhVAHTRqtgkn0QQ3W0anZK+UsvzJe/qflxi2d04a3u9iJWdngUHd/I33KEyJEoqBE2mqCxGBCqq//p8idWvPh66Wa35ZlzUIcAnez3w+n14uwDD8CalYWo293vYePH+Fy+Jn58289HKu2rpbux9KF7EY4yfHroAHKL5iv2w/v2Ye7CBfBHBLRWHYJ54rzrCQcsDtx+YA4MAbyTqjsHLfLIrWWcChjwu/XHUVnuxrGDC2G2AdwnnKQNXwOLHnwFH4da8VnZBpg0ZqgcOgJMfKa+oqJkTDQMX3or3GF/khgJQ9TroDInQENq9rjItaNwqUWkeDoy0wtmTKYt/8XPpg4wZpADARTt2YOJx45Bo9PBlZEBy86dvQedPGkSxmZnw5SQAD6Xrxns6XWmYO+1x3e+n52D2WM3Y96w6F0F1F4wBwsBprBEv+0wIQO7Xj2HC0ercLbiEdi0zYgyAk1OgFUQccONwP5dyxELNMCQ5Cfq0YZpekgCpMZgENPvmIc5KckEm4gL7+9BrL0d1rFjYSGGGkePgyWX4qU1CQW3zVG5ztV+n25aQRpVGBojkFpWroTBaAQ/TpD6eput3xOZzWaKEjL43IEM3frHLZD8XtyQasXhdzbDbNTCJjN89tftvfaW8jd67fPyzP3jRBzThGGYKgwxrcceM2eyYDQNG9+8iAMfHsaRXY/AouV4qRAS9NCrmmkjKxBKwOQsM8X0iQhQkpK1IUiiBxq1+oLfaPJJXo8lEOyCJtGKScsfhTYpGYItFTUXG9DY2oqQw4UnFi5SGF/2zfkialQcUJ66V7PrFL5mQhwgXGRZZjv+8ALzBGPM4YuyA9s3sFMtIUW5/Xx7hNU0+RU7X7OM5bFlJxSQ2ODR+ArlIUy5HDjW04y+t5UrC9J5Vm5tYxkz/s5YF3WiESYzP2MRmbmp6+EH9vuZxM9N9iBz0ViUHbclsPuX/GJ2SUnJeX+LnUW6/MqzHTp6lL29dy9rtLewx598kpWsWcPuu+8+Fo1GlfG9+/bZn1q1Kk1JzHQSlUxHjBL7rkX5XL5mMBQks7WvY0vvZ3d4pW63j7Nfo/QDfYCbs3iGa6UORYMUP/92qhoYE4VsdNCoDEEyUYqnhBIDEmJ8hZYenKdmETH6468pWa3GJbvdHpKiTWpio4YSz7Hjx7Hu2Wdx9KOPkDkyHaWbNiE/Lw+LFy+makWlHCInOyc9MyOTJ3JRzcEhnCHHYtf0dCJtwrrp3Suvv/UGvO4uWBLN2L9/N7xeFzyedrS43+q1F401DQdaP+8Vrg1ppcRS3t+DDVQe9dhFqF3JiHTaIYaTyL2jYIld8IsGWCQRTB+GoCcgiU5q2QCD6KNFdQjrM1FVXeUYd+PYxg6nE+np6ZiYn48dO3Zg7dq1iEQi0Gq1KKeqh1h82T2BURkZQlpa2kzqHuJ1qEph3zCAPnVyDao8X6EgeQowANDlSx7mfo9t772NBQt+pmT5T468jgmFS5TxiqPvdderLO+Kfcnte2X71G9VzCvjulhfZaJFFjJSrCj7/DjCqgh0VN6EvSIsCUAXndxPvDxf1w5t4gjoY1qEnAYUfI8SpuokOlyIBIPhC06nSwHUZDIhNzcXoVAIRF7k5OQoLc83/E1eutSKpuYmRKToLZs3l6Zzhqo5QyPR6FVPfcJZg2lFN6Py80q+kbp2WzLwUEe/OZ2Ovr4YU11przqL/5XoRH3fvakwmjFdQtlH4/FC6VdY/dRNVKEYeMqAUR3EiSo9Vj56As2+MKwGMx68fySm5o+HSeDh6FLM7/fVu1zO3v24axcUFJDneZX+SkrgXq8PlZUnEKKKwGpNgM/rmaLT66Z1uzwxVBoC0JKqtTjpPtVd8sQ8YJKM+g3W5Ze/HpZ3f9r0kahk5aq41b/st1c8A3uYOQQrr0uyFwep+ujrG6HHip/YsPvlTmz+7dcovnMGZk4gt6cYKXQFMWuyAV98+iOcpfB6e9HzFBvvoS87J9XfynKZWFnfbLfzbwOlmpEkCauffhpejxenvjqF7KxsdPF6PByCz+PH6dOnKVRUW8eMGX1LN0MJ0MgQLl/dVgNb8YjuAj/qRFJhMmYVzkkv/3NZAV6jJPS4W/gWGLDr/Ua/mkQMzQM2T4dN58Q/DxbizuIKLLjtHax7bhqWPJaLVJMWPsXpzah3SWj3n6GQMKf7/wAmP6/65fq6uubGpsaOFntLuqPdARe5v4fY2emi1uej/OBmjjan3+V2tfi8voZYLFoXlaJnjQZDhZoJgi7GXX4IQPNN+Th9sJuhmKuCWM5w5pvqNiSLlfg/yhcLx2PEqA+QqhR/wX5jHirrdbIJI24A/lG9Gqt/U45NWz7Ey9s/BzQ3QpUQQajdjMS0NixdtQhFxTfTGzVQDc6rFJ/85Zdfem6ePr29dMuWdGKi5PV6Ov2BQFMoFL5INXqtx+upd3d21rXY7Y5AIMBvTp8FCJeXl/nVBKNFRa7Ag+xgsnH2K0p79+474Ix1IJWy5qgXuw40MPb8dwFkOFfngA0nY9zqQe1WnrQtzQRSBgwGEXs2zqUHmXvFvCCFLwP/Lw6PdhQLjVqFVIwSkCRFIgdPVp+sI66d7ury1Xrc7saGhkZ7OBziAEpxGotXYYQg/J4CReZwh3fdriqM2IQkrZN1mg/H9joY+4DMvSyt+eQlTL71uf8a+65VfvVw5nDh5Jpl58NHMK5FCT88diaSGi4DFYnTHvDkgTUyl/8IMABtKh8piZwIuwAAAABJRU5ErkJggg==);margin-right:.5em;content:' '}.icon-ical:before{background-position:-68px 0}.icon-yahoo:before{background-position:-36px +4px}.icon-google:before{background-position:-52px 0}.add-to-calendar-widget{font-family:sans-serif;margin:1em 0;position:relative}.add-to-calendar-label{display:inline-block;background-color:#fff;background-image:url(data:image/vndmicrosofticon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/wAAAAAAAAAAVlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/AAAAAFZWVv9WVlb///////////9WVlb///////////9WVlb///////////9WVlb///////////9WVlb/VlZW/wAAAABWVlb/VlZW////////////VlZW////////////VlZW////////////VlZW////////////VlZW/1ZWVv8AAAAAVlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/AAAAAFZWVv9WVlb///////////9WVlb///////////9WVlb///////////9WVlb///////////9WVlb/VlZW/wAAAABWVlb/VlZW////////////VlZW////////////VlZW////////////VlZW////////////VlZW/1ZWVv8AAAAAVlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/AAAAAFZWVv9WVlb///////////9WVlb///////////9WVlb///////////9WVlb///////////9WVlb/VlZW/wAAAABWVlb/VlZW////////////VlZW////////////VlZW////////////VlZW////////////VlZW/1ZWVv8AAAAAVlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/AAAAAFZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/wAAAAAAAAAAVlZW/1ZWVv///////////1ZWVv9WVlb/VlZW/1ZWVv9WVlb///////////9WVlb/VlZW/wAAAAAAAAAAAAAAAAAAAABWVlb///////////9WVlb/AAAAAAAAAAAAAAAAVlZW////////////VlZW/wAAAAAAAAAAAAAAAAAAAAAAAAAAVlZW/1ZWVv9WVlb/VlZW/wAAAAAAAAAAAAAAAFZWVv9WVlb/VlZW/1ZWVv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==);background-position:10px 45%;background-repeat:no-repeat;padding:1em 1em 1em 40px;background-size:20px 20px;border-radius:3px;box-shadow:0 0 0 .5px rgba(50,50,93,.17),0 2px 5px 0 rgba(50,50,93,.1),0 1px 1.5px 0 rgba(0,0,0,.07),0 1px 2px 0 rgba(0,0,0,.08),0 0 0 0 transparent!important}.add-to-calendar-dropdown{position:absolute;z-index:99;background-color:#fff;top:0;left:0;padding:1em;margin:0!important;border-radius:3px;box-shadow:0 0 0 .5px rgba(50,50,93,.17),0 2px 5px 0 rgba(50,50,93,.1),0 1px 1.5px 0 rgba(0,0,0,.07),0 1px 2px 0 rgba(0,0,0,.08),0 0 0 0 transparent!important}.add-to-calendar-dropdown a{display:block;line-height:1.75em;text-decoration:none;color:inherit;opacity:.7}.add-to-calendar-dropdown a:hover{opacity:1}",e},V=function(e){e.options||(e.options={}),e.options.id||(e.options.id=Math.floor(1e6*Math.random())),e.options.class||(e.options.class=""),e.data||(e.data={}),e.data.start||(e.data.start=new Date),e.data.allday&&(delete e.data.end,delete e.data.duration),e.data.end?delete e.data.duration:e.data.duration||(e.data.duration=t.duration),e.data.duration&&(e.data.end=l(e.data.start,e.data.duration)),e.data.timezone?(e.data.tzstart=n(e.data.start,e.data.timezone),e.data.tzend=n(e.data.end,e.data.timezone)):(e.data.tzstart=e.data.start,e.data.tzend=e.data.end),e.data.title||(e.data.title=t.texts.title)},u=function(e){return void 0!==e.data&&void 0!==e.data.start&&(void 0!==e.data.end||void 0!==e.data.allday)};e.ieDownloadCalendar=function(e){if(a){var A=new Blob([e],{type:"text/calendar"});window.navigator.msSaveOrOpenBlob(A,t.texts.download)}else alert(t.texts.ienoblob)},e.closeCalenderOnMouseDown=function(e){var t=function(){setTimeout((function(){e.checked=!1}),750),document.removeEventListener("mousedown",t)};document.addEventListener("mousedown",t)},e.addToCalendarData=function(e){if(e||(e={}),V(e),u(e))return c(e.data);console.error("Event details missing.")},e.createCalendar=function(e){return addToCalendar(e)},e.addToCalendar=function(e){if(e||(e={}),e instanceof HTMLElement)return o={},(A=(a=e).querySelector(".start"))&&(o.start=new Date(A.textContent)),(A=a.querySelector(".end"))&&(o.end=new Date(A.textContent)),(A=a.querySelector(".duration"))&&(o.duration=1*A.textContent),(A=a.querySelector(".allday"))&&(o.allday=!0),(A=a.querySelector(".title"))&&(o.title=A.textContent),(A=a.querySelector(".description"))&&(o.description=A.textContent),(A=a.querySelector(".address"))&&(o.address=A.textContent),o.address||(A=a.querySelector(".location"))&&(o.address=A.textContent),(A=a.querySelector(".timezone"))&&(o.timezone=A.textContent),cal=createCalendar({data:o}),cal&&a.appendChild(cal),cal;var a,A,o;if(e instanceof NodeList){var n=e.length>0;return Array.prototype.forEach.call(e,(function(e){n=n&&addToCalendar(e)})),n}if(V(e),u(e))return function(e,a,A){var o=document.createElement("div");o.innerHTML='<label for="checkbox-for-'+A+'" class="add-to-calendar-label">'+t.texts.label+"</label>",o.innerHTML+='<input name="add-to-calendar-checkbox" class="add-to-calendar-checkbox" id="checkbox-for-'+A+'" type="checkbox" onclick="closeCalenderOnMouseDown(this)">';var n=document.createElement("div");return n.className="add-to-calendar-dropdown",Object.keys(e).forEach((function(t){n.innerHTML+=e[t]})),o.appendChild(n),o.className="add-to-calendar-widget",void 0!==a&&(o.className+=" "+a),s(),o.id=A,o}(c(e.data),e.options.class,e.options.id);console.error("Event details missing.")},document.addEventListener("DOMContentLoaded",(function(e){addToCalendar(document.querySelectorAll(t.selector))}))}(this);