@@ -17,6 +17,14 @@ const eventBegin: ContentLine = ['BEGIN', 'VEVENT'];
1717
1818const eventEnd : ContentLine = [ 'END' , 'VEVENT' ] ;
1919
20+ const parseGeo = ( geo ?: { lat : number , lon : number } ) => {
21+ return geo ? `${ geo . lat } ;${ geo . lon } ` : undefined ;
22+ }
23+
24+ const parseOrganizer = ( organizer ?: { name : string , email : string } ) => {
25+ return organizer ? `CN=${ organizer . name } :mailto:${ organizer . email } ` : undefined
26+ }
27+
2028export class Event {
2129 constructor ( protected config : EventConfig ) {
2230 if ( config . duration !== undefined ) {
@@ -39,7 +47,7 @@ export class Event {
3947
4048 toLines ( ) : ContentLine [ ] {
4149 const uid = crypto . randomUUID ( ) ;
42- const { title, desc, rrule, alarm } = this . config ;
50+ const { title, desc, rrule, alarm, location , url , organizer , geo , htmlContent } = this . config ;
4351
4452 const result = [
4553 eventBegin ,
@@ -49,7 +57,11 @@ export class Event {
4957 [ 'DTEND' , parseDate ( this . config . endDate ! ) ] ,
5058 [ 'SUMMARY' , title ] ,
5159 [ 'DESCRIPTION' , desc ] ,
60+ [ 'LOCATION' , location ] ,
61+ [ 'URL' , url ] ,
62+ [ 'GEO' , parseGeo ( geo ) ] ,
5263 [ 'RRULE' , parseRRule ( rrule ) ] ,
64+ [ 'ORGANIZER' , parseOrganizer ( organizer ) ] ,
5365 ...parseAlarm ( alarm ) ,
5466 eventEnd ,
5567 ] . filter ( line => line [ 1 ] !== undefined ) as ContentLine [ ] ;
@@ -80,6 +92,11 @@ export interface EventConfig {
8092 desc ?: string ;
8193 rrule ?: RecurrenceRule ;
8294 alarm ?: AlarmConfig ;
95+ location ?: string ;
96+ url ?: string ;
97+ organizer ?: { name : string ; email : string ; dir ?: string ; } ;
98+ geo ?: { lat : number ; lon : number ; } ;
99+ htmlContent ?: string ;
83100}
84101
85102export interface AlarmConfig {
0 commit comments