README.md 14.3 KB
Newer Older
Sebastian Pekarek's avatar
Sebastian Pekarek committed
1
2
# ical-generator

Sebastian Pekarek's avatar
Sebastian Pekarek committed
3
[![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](LICENSE)
Mark Stenglein's avatar
Mark Stenglein committed
4
[![Build Status](https://travis-ci.org/srct/ical-generator.svg?branch=master)](https://travis-ci.org/srct/ical-generator)
Sebastian Pekarek's avatar
Sebastian Pekarek committed
5

Sebastian Pekarek's avatar
Sebastian Pekarek committed
6
7
ical-generator is a small piece of code which generates ical calendar files. I use this to generate subscriptionable
calendar feeds.
Sebastian Pekarek's avatar
Sebastian Pekarek committed
8

9

Sebastian Pekarek's avatar
Sebastian Pekarek committed
10
11
12
13
## Installation

	npm install ical-generator

14

Sebastian Pekarek's avatar
Sebastian Pekarek committed
15
16
17
18
19
20
21
22
23
24
## Upgrade from 0.1.x

ical-generator 0.2.0 introduces a completely new API, but because you guys used 0.1.x a lot, the old API still works. So
you should be able to upgrade from ical-generator 0.1.x to 0.2.0 without any code changes. In case you need the old API
docs, you can find the deprecated documentation [here](https://github.com/sebbo2002/ical-generator/blob/0.1.10/README.md).

In case you have any issues with the new API, feel free to [create an issue](https://github.com/sebbo2002/ical-generator/issues/new).


## Quick Start
Sebastian Pekarek's avatar
Sebastian Pekarek committed
25
26
27
28

```javascript
var ical = require('ical-generator'),
	http = require('http'),
Sebastian Pekarek's avatar
Sebastian Pekarek committed
29
	cal = ical({domain: 'github.com', name: 'my first iCal'});
Sebastian Pekarek's avatar
Sebastian Pekarek committed
30

Sebastian Pekarek's avatar
Sebastian Pekarek committed
31
32
// overwrite domain
cal.domain('sebbo.net');
33

Sebastian Pekarek's avatar
Sebastian Pekarek committed
34
cal.createEvent({
Sebastian Pekarek's avatar
Sebastian Pekarek committed
35
36
37
38
	start: new Date(),
	end: new Date(new Date().getTime() + 3600000),
	summary: 'Example Event',
	description: 'It works ;)',
Sebastian Pekarek's avatar
Sebastian Pekarek committed
39
	location: 'my room',
Sebastian Pekarek's avatar
Sebastian Pekarek committed
40
41
42
43
44
	url: 'http://sebbo.net/'
});

http.createServer(function(req, res) {
	cal.serve(res);
Sebastian Pekarek's avatar
Sebastian Pekarek committed
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
}).listen(3000, '127.0.0.1', function() {
    console.log('Server running at http://127.0.0.1:3000/');
});
```


## Just another example

```javascript
var ical = require('ical-generator'),

    // Create new Calendar and set optional fields
    cal = ical({
        domain: 'sebbo.net',
        prodId: {company: 'superman-industries.com', product: 'ical-generator'},
        name: 'My Testfeed',
        timezone: 'Europe/Berlin'
    });

// You can also set values like this…
cal.domain('sebbo.net');

// … or get values
cal.domain(); // --> "sebbo.net"

// create a new event
var event = cal.createEvent({
    start: new Date(),
    end: new Date(new Date().getTime() + 3600000),
    timestamp: new Date(),
    summary: 'My Event',
    organizer: 'Sebastian Pekarek <mail@example.com>'
});

// like above, you can also set/change values like this…
event.summary('My Super Mega Awesome Event');

// get the iCal string
cal.toString(); // --> "BEGIN:VCALENDAR…"


// You can also create events directly with ical()
cal = ical({
    domain: 'sebbo.net',
    prodId: '//superman-industries.com//ical-generator//EN',
    events: [
        {
            start: new Date(),
            end: new Date(new Date().getTime() + 3600000),
            timestamp: new Date(),
            summary: 'My Event',
            organizer: 'Sebastian Pekarek <mail@example.com>'
        }
    ]
}).toString();
100
101
102
103
104
105
```



## API

Sebastian Pekarek's avatar
Sebastian Pekarek committed
106
### ical-generator
107

Sebastian Pekarek's avatar
Sebastian Pekarek committed
108
#### ical([_Object_ options])
109

Sebastian Pekarek's avatar
Sebastian Pekarek committed
110
Creates a new [Calendar](#calendar) ([`ICalCalendar`](#calendar)).
111

Sebastian Pekarek's avatar
Sebastian Pekarek committed
112
113
114
115
116
117
118
119
120
121
```javascript
var ical = require('ical-generator'),
    cal = ical();
```

You can pass options to setup your calendar or use setters to do this.

```javascript
var ical = require('ical-generator'),
    cal = ical({domain: 'sebbo.net'});
Sebastian Pekarek's avatar
Sebastian Pekarek committed
122

Sebastian Pekarek's avatar
Sebastian Pekarek committed
123
// is the same as
Sebastian Pekarek's avatar
Sebastian Pekarek committed
124

Sebastian Pekarek's avatar
Sebastian Pekarek committed
125
cal = ical().domain('sebbo.net');
Sebastian Pekarek's avatar
Sebastian Pekarek committed
126

Sebastian Pekarek's avatar
Sebastian Pekarek committed
127
// is the same as
lee's avatar
lee committed
128

Sebastian Pekarek's avatar
Sebastian Pekarek committed
129
130
131
132
133
134
135
cal = ical();
cal.domain('sebbo.net');
```


### Calendar

Sebastian Pekarek's avatar
Sebastian Pekarek committed
136
#### domain([_String_ domain])
lee's avatar
lee committed
137

Sebastian Pekarek's avatar
Sebastian Pekarek committed
138
139
Use this method to set your server's hostname. It will be used to generate the feed's UID. Default hostname is your
server's one (`require('os').hostname()`).
lee's avatar
lee committed
140

141

Sebastian Pekarek's avatar
Sebastian Pekarek committed
142
#### prodId([_String_|_Object_ prodId])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
143
144
145

Use this method to overwrite the default Product Identifier (`//sebbo.net//ical-generator//EN`). `prodId` can be ether
a valid Product Identifier or an object:
146
147

```javascript
Sebastian Pekarek's avatar
Sebastian Pekarek committed
148
cal.prodId({
149
150
	company: 'My Company',
	product: 'My Product',
Sebastian Pekarek's avatar
Sebastian Pekarek committed
151
	language: 'EN' // optional, defaults to EN
152
});
Sebastian Pekarek's avatar
Sebastian Pekarek committed
153
154
155
156

// OR

cal.prodId('//My Company//My Product//EN');
157
158
159
```


Sebastian Pekarek's avatar
Sebastian Pekarek committed
160
#### name([_String_ name])
161

Sebastian's avatar
Sebastian committed
162
Use this method to set your feed's name. Is used to fill `NAME` and `X-WR-CALNAME` in your iCal file.
163
164


Sebastian's avatar
Sebastian committed
165
166
167
168
169
170
171
172
173
#### url([_String_ url])

Use this method to set your feed's URL.

```javascript
var cal = ical().url('https://example.com/calendar.ical');
```


Sebastian Pekarek's avatar
Sebastian Pekarek committed
174
#### timezone([_String_ timezone])
175

Sebastian's avatar
Sebastian committed
176
Use this method to set your feed's timezone. Is used to fill `TIMEZONE-ID` and `X-WR-TIMEZONE` in your iCal.
177
178

```javascript
Sebastian Pekarek's avatar
Sebastian Pekarek committed
179
180
181
var cal = ical().timezone('Europe/Berlin');
```

182
183
184
185
#### method([_String_ method])

Calendar method. May be any of the following: `publish`, `request`, `reply`, `add`, `cancel`, `refresh`, `counter`, `declinecounter`.

Sebastian Pekarek's avatar
Sebastian Pekarek committed
186

Sebastian's avatar
Sebastian committed
187
188
189
190
191
192
193
194
195
#### ttl([_Number_ ttl])

Use this method to set your feed's time to live. Is used to fill `REFRESH-INTERVAL` and `X-PUBLISHED-TTL` in your iCal.

```javascript
var cal = ical().ttl(60 * 60 * 24);
```


Sebastian Pekarek's avatar
Sebastian Pekarek committed
196
#### createEvent([_Object_ options])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
197
198
199
200
201
202
203
204
205
206
207

Creates a new [Event](#event) ([`ICalEvent`](#event)) and returns it. Use options to prefill the event's attributes.
Calling this method without options will create an empty event.

```javascript
var ical = require('ical-generator'),
    cal = ical(),
    event = cal.createEvent({summary: 'My Event'});

// overwrite event summary
event.summary('Your Event');
208
209
```

Sebastian Pekarek's avatar
Sebastian Pekarek committed
210

Sebastian Pekarek's avatar
Sebastian Pekarek committed
211
#### events([_Object_ events])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230

Add Events to calendar or return all attached events.

```javascript
var cal = ical();
cal.events([
    {
        start: new Date(),
        end: new Date(new Date().getTime() + 3600000),
        summary: 'Example Event',
        description: 'It works ;)',
        url: 'http://sebbo.net/'
    }
]);

cal.events(); // --> [ICalEvent]
```


Sebastian Pekarek's avatar
Sebastian Pekarek committed
231
#### save(**_String_ file**[, _Function_ cb])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
232
233
234
235

Save Calendar to disk asynchronously using [fs.writeFile](http://nodejs.org/api/fs.html#fs_fs_writefile_filename_data_options_callback).


Sebastian Pekarek's avatar
Sebastian Pekarek committed
236
#### saveSync(**_String_ file**)
Sebastian Pekarek's avatar
Sebastian Pekarek committed
237
238
239
240

Save Calendar to disk synchronously using [fs.writeFileSync](http://nodejs.org/api/fs.html#fs_fs_writefilesync_filename_data_options).


Sebastian Pekarek's avatar
Sebastian Pekarek committed
241
#### serve(**_http.ServerResponse_ response**)
Sebastian Pekarek's avatar
Sebastian Pekarek committed
242
243
244
245
246
247
248
249
250

Send Calendar to the User when using HTTP. See Quick Start above.


#### toString()

Return Calendar as a String.


Sebastian Pekarek's avatar
Sebastian Pekarek committed
251
252
253
254
255
256
#### toJSON()

Return a shallow copy of the calendar's options for JSON stringification. Can be used for persistance.
```javascript
var cal = ical(),
    json = JSON.stringify(cal);
Sebastian's avatar
Sebastian committed
257
258
259
    
// later
cal = ical(json);
Sebastian Pekarek's avatar
Sebastian Pekarek committed
260
261
```

Sebastian Pekarek's avatar
Sebastian Pekarek committed
262
263
264
265
266
267
268
269
270
271
272
273
274
#### length()

Returns the ammount of events in the calendar.


#### clear()

Empty the Calender.



### Event

Sebastian Pekarek's avatar
Sebastian Pekarek committed
275
#### uid([_String_|_Number_ uid]) or id([_String_|_Number_ id])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
276

Andi Sidwell's avatar
Andi Sidwell committed
277
Use this method to set the event's ID. If not set, an UID will be generated randomly.  When output, the ID will be suffixed with '@' + your calendar's domain.
Sebastian Pekarek's avatar
Sebastian Pekarek committed
278
279


280
#### sequence([_Number_ sequence])
281
282
283
284
285

Use this method to set the event's revision sequence number of the
calendar component within a sequence of revisions.


Sebastian Pekarek's avatar
Sebastian Pekarek committed
286
#### start([_Date_ start])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
287
288
289
290

Appointment date of beginning as Date object. This is required for all events!


Sebastian Pekarek's avatar
Sebastian Pekarek committed
291
#### end([_Date_ end])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
292

Sebastian's avatar
Sebastian committed
293
Appointment date of end as Date object.
Sebastian Pekarek's avatar
Sebastian Pekarek committed
294
295


Andi Sidwell's avatar
Andi Sidwell committed
296
297
298
299
300
301
302
#### timezone([_String_ timezone])

Use this method to set your event's timezone using the TZID property parameter on start and end dates, as per [date-time form #3 in section 3.3.5 of RFC 554](https://tools.ietf.org/html/rfc5545#section-3.3.5).

This and the 'floating' flag (see below) are mutually exclusive, and setting a timezone will unset the 'floating' flag.  If neither 'timezone' nor 'floating' are set, the date will be output with in UTC format (see [date-time form #2 in section 3.3.5 of RFC 554](https://tools.ietf.org/html/rfc5545#section-3.3.5)).


Sebastian Pekarek's avatar
Sebastian Pekarek committed
303
#### timestamp([_Date_ stamp]) or stamp([_Date_ stamp])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
304
305
306
307

Appointment date of creation as Date object. Default to `new Date()`.


Sebastian Pekarek's avatar
Sebastian Pekarek committed
308
#### allDay([_Boolean_ allDay])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
309
310
311
312

When allDay == true -> appointment is for the whole day


Sebastian Pekarek's avatar
Sebastian Pekarek committed
313
#### floating([_Boolean_ floating])
Andi Sidwell's avatar
Andi Sidwell committed
314

315
316
317
318
319
320
321
322
323
324
Appointment is a "floating" time. From [section 3.3.12 of RFC 554](https://tools.ietf.org/html/rfc5545#section-3.3.12):

> Time values of this type are said to be "floating" and are not
> bound to any time zone in particular.  They are used to represent
> the same hour, minute, and second value regardless of which time
> zone is currently being observed.  For example, an event can be
> defined that indicates that an individual will be busy from 11:00
> AM to 1:00 PM every day, no matter which time zone the person is
> in.  In these cases, a local time can be specified.

Andi Sidwell's avatar
Andi Sidwell committed
325
326
This and the 'timezone' setting (see above) are mutually exclusive, and setting the floating flag will unset the 'timezone'.  If neither 'timezone' nor 'floating' are set, the date will be output with in UTC format (see [date-time form #2 in section 3.3.5 of RFC 554](https://tools.ietf.org/html/rfc5545#section-3.3.5)).

327

Sebastian Pekarek's avatar
Sebastian Pekarek committed
328
#### repeating([_Object_ repeating])
Andi Sidwell's avatar
Andi Sidwell committed
329

Sebastian Pekarek's avatar
Sebastian Pekarek committed
330
331
332
Appointment is a repeating event

```javascript
Sebastian Pekarek's avatar
Sebastian Pekarek committed
333
event.repeating({
Sebastian Pekarek's avatar
Sebastian Pekarek committed
334
335
336
    freq: 'MONTHLY', // required
    count: 5,
    interval: 2,
337
338
339
340
    until: new Date('Jan 01 2014 00:00:00 UTC'),
    byDay: ['su', 'mo'], // repeat only sunday and monday
    byMonth: [1, 2], // repeat only in january und february,
    byMonthDay: [1, 15] // repeat only on the 1st and 15th
Sebastian Pekarek's avatar
Sebastian Pekarek committed
341
342
343
344
});
```


Sebastian Pekarek's avatar
Sebastian Pekarek committed
345
#### summary([_String_ summary])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
346

Sebastian Pekarek's avatar
Sebastian Pekarek committed
347
Appointment summary, defaults to empty string.
Sebastian Pekarek's avatar
Sebastian Pekarek committed
348
349


Sebastian Pekarek's avatar
Sebastian Pekarek committed
350
#### description([_String_ description])
351
352
353

Appointment description

Sebastian Pekarek's avatar
Sebastian Pekarek committed
354

Sebastian Pekarek's avatar
Sebastian Pekarek committed
355
#### location([_String_ location])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
356

Sebastian Pekarek's avatar
Sebastian Pekarek committed
357
358
Appointment location

Sebastian Pekarek's avatar
Sebastian Pekarek committed
359

Sebastian Pekarek's avatar
Sebastian Pekarek committed
360
#### organizer([_String_|Object organizer])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
361

362
363
364
Appointment organizer

```javascript
Sebastian Pekarek's avatar
Sebastian Pekarek committed
365
366
367
cal.organizer({
    name: 'Organizer\'s Name',
    email: 'organizer@example.com'
368
369
});

Sebastian Pekarek's avatar
Sebastian Pekarek committed
370
// OR
Lisa Övermyr's avatar
Lisa Övermyr committed
371

Sebastian Pekarek's avatar
Sebastian Pekarek committed
372
373
cal.organizer('Organizer\'s Name <organizer@example.com>');
```
Lisa Övermyr's avatar
Lisa Övermyr committed
374

375

Sebastian Pekarek's avatar
Sebastian Pekarek committed
376
#### createAttendee([_Object_ options])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394

Creates a new [Attendee](#attendee) ([`ICalAttendee`](#attendee)) and returns it. Use options to prefill the attendee's attributes.
Calling this method without options will create an empty attendee.

```javascript
var ical = require('ical-generator'),
    cal = ical(),
    event = cal.createEvent(),
    attendee = event.createAttendee({email: 'hui@example.com', 'name': 'Hui'});

// overwrite attendee's email address
attendee.email('hui@example.net');

// add another attendee
event.createAttendee('Buh <buh@example.net>');
```


Sebastian Pekarek's avatar
Sebastian Pekarek committed
395
#### attendees([_Object_ attendees])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
396
397
398
399
400
401
402
403
404
405
406
407
408
409

Add Attendees to the event or return all attached attendees.

```javascript
var event = ical().createEvent();
cal.attendees([
    {email: 'a@example.com', name: 'Person A'},
    {email: 'b@example.com', name: 'Person B'}
]);

cal.attendees(); // --> [ICalAttendee, ICalAttendee]
```


Sebastian Pekarek's avatar
Sebastian Pekarek committed
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
#### createAlarm([_Object_ options])

Creates a new [Alarm](#alarm) ([`ICalAlarm`](#alarm)) and returns it. Use options to prefill the alarm's attributes.
Calling this method without options will create an empty alarm.

```javascript
var ical = require('ical-generator'),
    cal = ical(),
    event = cal.createEvent(),
    alarm = event.createAlarm({type: 'display', trigger: 300});

// add another alarm
event.createAlarm({
    type: 'audio',
    trigger: 300, // 5min before event
});
```


#### alarms([_Object_ alarms])

Add alarms to the event or return all attached alarms.

```javascript
var event = ical().createEvent();
cal.alarms([
    {type: 'display', trigger: 600},
    {type: 'audio', trigger: 300}
]);

cal.attendees(); // --> [ICalAlarm, ICalAlarm]
```


Sebastian Pekarek's avatar
Sebastian Pekarek committed
444
#### url([_String_ url])
445

Sebastian Pekarek's avatar
Sebastian Pekarek committed
446
Appointment URL
447
448


Sebastian Pekarek's avatar
Sebastian Pekarek committed
449
#### status([_String_ status])
450

Sebastian Pekarek's avatar
Sebastian Pekarek committed
451
Appointment status. May be any of the following: `confirmed`, `tenative`, `cancelled`.
Sebastian Pekarek's avatar
Sebastian Pekarek committed
452

Sebastian Pekarek's avatar
Sebastian Pekarek committed
453
454


Sebastian Pekarek's avatar
Sebastian Pekarek committed
455
456
### Attendee

Sebastian Pekarek's avatar
Sebastian Pekarek committed
457
#### name([_String_ name])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
458
459
460
461

Use this method to set the attendee's name.


Sebastian Pekarek's avatar
Sebastian Pekarek committed
462
#### email([_String_ email])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
463
464
465
466

The attendee's email address. An email address is required for every attendee!


Sebastian Pekarek's avatar
Sebastian Pekarek committed
467
#### role([_String_ role])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
468

Sebastian Pekarek's avatar
Sebastian Pekarek committed
469
Set the attendee's role, defaults to `REQ-PARTICIPANT`. May be one of the following: `req-participant`, `non-participant`
Sebastian Pekarek's avatar
Sebastian Pekarek committed
470
471


Sebastian Pekarek's avatar
Sebastian Pekarek committed
472
#### status([_String_ status])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
473

Sebastian Pekarek's avatar
Sebastian Pekarek committed
474
Set the attendee's status. May be one of the following: `accepted`, `tentative`, `declined`
Sebastian Pekarek's avatar
Sebastian Pekarek committed
475
476


477
478
#### type([_String_ type])

Sebastian Pekarek's avatar
Sebastian Pekarek committed
479
Set the attendee's type. May be one of the following: `individual`, `group`, `resource`, `room`, `unknown` (See [Section 4.2.3](https://tools.ietf.org/html/rfc2445#section-4.2.3))
480
481
482



Sebastian Pekarek's avatar
Sebastian Pekarek committed
483
#### delegatesTo(**_ICalAttendee_|_Object_ attendee**)
Sebastian Pekarek's avatar
Sebastian Pekarek committed
484
485
486
487
488
489
490
491
492
493
494
495

Creates a new Attendee if passed object is not already an attendee. Will set the delegatedTo and delegatedFrom attributes.

```javascript
var cal = ical(),
    event = cal.createEvent(),
    attendee = cal.createAttendee();

attendee.delegatesTo({email: 'foo@bar.com', name: 'Foo'});
```


Sebastian Pekarek's avatar
Sebastian Pekarek committed
496
#### delegatesFrom(**_ICalAttendee_|_Object_ attendee**)
Sebastian Pekarek's avatar
Sebastian Pekarek committed
497
498
499
500
501
502
503
504
505
506
507
508
509

Creates a new Attendee if passed object is not already an attendee. Will set the delegatedTo and delegatedFrom attributes.

```javascript
var cal = ical(),
    event = cal.createEvent(),
    attendee = cal.createAttendee();

attendee.delegatesFrom({email: 'foo@bar.com', name: 'Foo'});
```



Sebastian Pekarek's avatar
Sebastian Pekarek committed
510
511
512
513
514
515
516
### Alarm

#### type([_String_ type])

Use this method to set the alarm type. Right now, `audio` and `display` is supported.


Sebastian Pekarek's avatar
Sebastian Pekarek committed
517
#### trigger([_Number_|_Date_ trigger]) / triggerBefore([_Number_|_Date_ trigger])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
518
519
520
521
522
523
524
525
526
527
528
529
530

Use this method to set the alarm time.

```javascript
var cal = ical(),
    event = cal.createEvent(),
    alarm = cal.createAlarm();

alarm.trigger(600); // -> 10 minutes before event starts
alarm.trigger(new Date()); // -> now
```


Sebastian Pekarek's avatar
Sebastian Pekarek committed
531
#### triggerAfter([_Number_|_Date_ trigger])
Sebastian Pekarek's avatar
Sebastian Pekarek committed
532
533
534
535
536
537
538
539

Use this method to set the alarm time.

```javascript
var cal = ical(),
    event = cal.createEvent(),
    alarm = cal.createAlarm();

Tobias Mersmann's avatar
Tobias Mersmann committed
540
541
alarm.triggerAfter(600); // -> 10 minutes after the event finishes
alarm.triggerAfter(new Date()); // -> now
Sebastian Pekarek's avatar
Sebastian Pekarek committed
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
```


#### repeat([_Number_ repeat])

Use this method to repeat the alarm.

```javascript
var cal = ical(),
    event = cal.createEvent(),

// repeat the alarm 4 times every 5 minutes…
cal.createAlarm({
    repeat: 4,
    interval: 300
});
```


#### interval([_Number_ interval])

Use this method to set the alarm's interval.

```javascript
var cal = ical(),
    event = cal.createEvent(),

// repeat the alarm 4 times every 5 minutes…
cal.createAlarm({
    repeat: 4,
    interval: 300
});
```


#### attach([_String_|_Object_ attach])

Alarm attachment; used to set the alarm sound if type = audio. Defaults to "Basso".

```javascript
var cal = ical(),
    event = cal.createEvent(),

event.createAlarm({
    attach: 'https://example.com/notification.aud'
});

// OR

event.createAlarm({
    attach: {
        uri: 'https://example.com/notification.aud',
        mime: 'audio/basic'
    }
});
```


#### description([_String_| description])

Alarm description; used to set the alarm message if type = display. Defaults to the event's summary.




Sebastian Pekarek's avatar
Sebastian Pekarek committed
607
608
## Tests

Sebastian Pekarek's avatar
Sebastian Pekarek committed
609
```
Sebastian Pekarek's avatar
Sebastian Pekarek committed
610
npm test
611
612
613
614
615
```


## Copyright and license

Sebastian Pekarek's avatar
Sebastian Pekarek committed
616
Copyright (c) Sebastian Pekarek under the [MIT license](LICENSE).