[4001] | 1 | scheduler.ical={
|
---|
| 2 | parse:function(str){
|
---|
| 3 | var data = str.match(RegExp(this.c_start+"[^\f]*"+this.c_end,""));
|
---|
| 4 | if (!data.length) return;
|
---|
| 5 |
|
---|
| 6 | //unfolding
|
---|
| 7 | data[0]=data[0].replace(/[\r\n]+(?=[a-z \t])/g," ");
|
---|
| 8 | //drop property
|
---|
| 9 | data[0]=data[0].replace(/\;[^:\r\n]*/g,"");
|
---|
| 10 |
|
---|
| 11 |
|
---|
| 12 | var incoming=[];
|
---|
| 13 | var match;
|
---|
| 14 | var event_r = RegExp("(?:"+this.e_start+")([^\f]*?)(?:"+this.e_end+")","g");
|
---|
| 15 | while (match=event_r.exec(data)){
|
---|
| 16 | var e={};
|
---|
| 17 | var param;
|
---|
| 18 | var param_r = /[^\r\n]+[\r\n]+/g;
|
---|
| 19 | while (param=param_r.exec(match[1]))
|
---|
| 20 | this.parse_param(param.toString(),e);
|
---|
| 21 | if (e.uid && !e.id) e.id = e.uid; //fallback to UID, when ID is not defined
|
---|
| 22 | incoming.push(e);
|
---|
| 23 | }
|
---|
| 24 | return incoming;
|
---|
| 25 | },
|
---|
| 26 | parse_param:function(str,obj){
|
---|
| 27 | var d = str.indexOf(":");
|
---|
| 28 | if (d==-1) return;
|
---|
| 29 |
|
---|
| 30 | var name = str.substr(0,d).toLowerCase();
|
---|
| 31 | var value = str.substr(d+1).replace(/\\\,/g,",").replace(/[\r\n]+$/,"");
|
---|
| 32 | if (name=="summary")
|
---|
| 33 | name="text";
|
---|
| 34 | else if (name=="dtstart"){
|
---|
| 35 | name = "start_date";
|
---|
| 36 | value = this.parse_date(value,0,0);
|
---|
| 37 | }
|
---|
| 38 | else if (name=="dtend"){
|
---|
| 39 | name = "end_date";
|
---|
| 40 | if (obj.start_date && obj.start_date.getHours()==0)
|
---|
| 41 | value = this.parse_date(value,24,00);
|
---|
| 42 | else
|
---|
| 43 | value = this.parse_date(value,23,59);
|
---|
| 44 | }
|
---|
| 45 | obj[name]=value;
|
---|
| 46 | },
|
---|
| 47 | parse_date:function(value,dh,dm){
|
---|
| 48 | var t = value.split("T");
|
---|
| 49 | if (t[1]){
|
---|
| 50 | dh=t[1].substr(0,2);
|
---|
| 51 | dm=t[1].substr(2,2);
|
---|
| 52 | }
|
---|
| 53 | var dy = t[0].substr(0,4);
|
---|
| 54 | var dn = parseInt(t[0].substr(4,2),10)-1;
|
---|
| 55 | var dd = t[0].substr(6,2);
|
---|
| 56 | if (scheduler.config.server_utc && !t[1]) { // if no hours/minutes were specified == full day event
|
---|
| 57 | return new Date(Date.UTC(dy,dn,dd,dh,dm)) ;
|
---|
| 58 | }
|
---|
| 59 | return new Date(dy,dn,dd,dh,dm);
|
---|
| 60 | },
|
---|
| 61 | c_start:"BEGIN:VCALENDAR",
|
---|
| 62 | e_start:"BEGIN:VEVENT",
|
---|
| 63 | e_end:"END:VEVENT",
|
---|
| 64 | c_end:"END:VCALENDAR"
|
---|
| 65 | }; |
---|