Enregistrer l’événement sous ICalendar en utilisant Javascript

Salut les gars, quelqu’un d’entre vous sait comment enregistrer un événement en tant que calendrier Google ou ICal? Le scénario est que j’ai les dates de début et de fin et le titre de l’événement. Si je clique sur le bouton, il devrait enregistrer ou ouvrir un navigateur via Google Agenda et enregistrer cet événement. J’ai essayé le jquery.icalendar mais pas de chance ce n’est que pour Jquery V1.1.1. En ce moment, j’utilise jQuery v3.2.1. N’importe qui d’entre vous a une idée de la procédure à suivre sans utiliser si possible jquery.icalendar, qui est déjà dépassé.

Edit: Voudrais obtenir un résultat similaire à celui que je l’utilise actuellement, mais existe-t-il un moyen de créer mon propre code sans ce plugin?

Cela semblait être un défi intéressant, alors je passe une grande partie de la journée à voir ce que je pouvais faire. Je suggère fortement d’utiliser une bibliothèque ou PHP pour que tous les formats et tels conservés correctement.

Voici une façon d’essayer:

Exemple de code: https://jsfiddle.net/Twisty/6sye1f75/

JavaScript

var eventData = { "title": "ebay live auction test", "desc": "this is a live auction test \n testing new line.", "location": "my house", "url": "http://www.ebay.com", "time": { "start": "March 12, 2014 14:00:00", "end": "march 13, 2014 15:30:00", "zone": "-07:00", "allday": false }, }; $(function() { function adjustToUTC(dateObj, zone) { var dateOut = new Date(dateObj), hours, mins; if (isNaN(dateOut.getTime())) { return new Date(); } // adjust to UTC hours = zone.subssortingng(1, 3); mins = zone.subssortingng(4, 6); if (zone.subssortingng(0, 1) === '-') { dateOut.setHours(dateOut.getHours() + (hours - 0)); dateOut.setMinutes(dateOut.getMinutes() + (mins - 0)); } else { dateOut.setHours(dateOut.getHours() - hours); dateOut.setMinutes(dateOut.getMinutes() - mins); } return dateOut; } function getDatePart(part, digits) { part = part.toSsortingng(); while (part.length < digits) { part = '0' + part; } return part; } function getUTCTime(dateObj) { var newDateObj = adjustToUTC(dateObj, eventData.time.zone); return getDatePart(newDateObj.getFullYear(), 4) + getDatePart(newDateObj.getMonth() + 1, 2) + getDatePart(newDateObj.getDate(), 2) + 'T' + getDatePart(newDateObj.getHours(), 2) + getDatePart(newDateObj.getMinutes(), 2) + getDatePart(newDateObj.getSeconds(), 2) + 'Z'; } function prepareEvent(data) { var tData = ""; tData += "BEGIN:VCALANDER\r\n"; tData += "VERSION:2.0\r\n"; tData += "METHOD:PUBLISH\r\n"; tData += "BEGIN:VEVENT\r\n"; tData += "SUMMARY:" + data.title + "\r\n"; tData += "DESCRIPTION:" + data.desc + "\r\n"; tData += "LOCATION:" + data.location + "\r\n"; tData += "URL:" + data.url + "\r\n"; tData += "UID:00" + Math.floor(Math.random() * 10000000) + "-Custom@test\r\n"; tData += "SEQUENCE:0\r\n"; tData += "DTSTAMP:" + getUTCTime(data.time.start) + "\r\n"; tData += "DTSTART:" + getUTCTime(data.time.start) + "\r\n"; tData += "DTEND:" + getUTCTime(data.time.end) + "\r\n"; tData += "END:VEVENT\r\n"; tData += "END:VCALENDAR\r\n"; return tData; } $(".show-event.ics pre").html(prepareEvent(eventData)); $.each(eventData, function(k, v) { var item = $("
  • "); if (k !== "time") { item.append($("
  • Faire référence à:

    1. Créer un fichier en mémoire que l’utilisateur peut télécharger, pas par le serveur
    2. Comment créer un fichier dynamic + lien de téléchargement en Javascript?

    J’ai également exploité quelques-unes des fonctions d’ici: des démonstrations de plug-in AddCalEvent jQuery .

    Cela n’a pas pu être testé dans jsfiddle à cause de la façon dont cela fonctionne. Je peux déplacer ceci à un plnkr ou à un codepen pour voir si cela fonctionne là.