Changeset 5715 for trunk/prototype/modules/calendar/js
- Timestamp:
- 03/13/12 18:23:02 (12 years ago)
- Location:
- trunk/prototype/modules/calendar/js
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/prototype/modules/calendar/js
- Property svn:ignore
-
old new 2 2 ._init.js 3 3 ._calendar.date.js 4 .calendar.codecs.js.kate-swp
-
- Property svn:ignore
-
trunk/prototype/modules/calendar/js/calendar.codecs.js
r5652 r5715 2 2 3 3 init: function(){ 4 this.moduleName = 'expressoCalendar'; 4 this.moduleName = 'expressoCalendar'; 5 5 this.me = DataLayer.dispatch( "me" ); 6 6 … … 9 9 this.isDaylightSaving = Timezone.daylightSaving; 10 10 this.load(); 11 }, 11 }, 12 12 13 13 load: function(){ … … 564 564 return returns; 565 565 }; 566 566 567 567 return { 568 568 "class": objEvent["class"], 569 569 id: objEvent.id, 570 repeat: encodeRepeat( objEvent.repeat ), 570 571 location: objEvent.location, 571 572 category: objEvent.category, … … 605 606 receiveNotification : attend.receiveNotification, 606 607 alarms : $.map(attend.alarms || [], function( alarm ){ 607 //TODO - Atualizar cach cliente em conceito aninhados de camada 2 608 var alarmEvent = DataLayer.get('alarm', alarm) 609 return !!alarmEvent ? alarmEvent: (null); 608 return DataLayer.get('alarm', alarm); 610 609 }) 611 610 }; … … 643 642 me: !!participantInfo.user ? DataLayer.merge(participantInfo.user, me) : DataLayer.merge(this.isShared ? this.organizer : me, {acl: !this.isShared ? 'rowi' : Calendar.signatureOf[objEvent.calendar].permission.aclValues, delegatedFrom: 0, receiveNotification: 1}), 644 643 delegatedFrom: delegatedFrom, 644 645 645 statusParticipants: statusParticipants 646 646 }; … … 650 650 }); 651 651 652 652 function decodeRepeat ( form ) { 653 654 var patati = {}; 655 656 if( form.repeatId ) 657 patati['id'] = form.repeatId; 658 659 patati['frequency'] = form.frequency; 660 661 patati['bymonthday'] = patati['byyearday'] = patati['byday'] = ''; 662 663 patati['interval'] = patati['endTime'] = patati['count'] = patati['startTime'] = 0; 664 665 if( form.frequency === 'none' ) 666 return( patati ); 667 668 var day = []; 669 670 $("input[type=checkbox][name='repeatweekly[]']:checked").each(function() { 671 day[ day.length ] = $(this).val(); 672 }); 673 674 patati['byday'] = day.join(','); 675 676 var formatString = ( typeof form.allDay !== "undefined" && !!form.allDay )? User.preferences.dateFormat+" HH:mm" : User.preferences.dateFormat + " " + User.preferences.hourFormat; 677 678 var date = Date.parseExact( form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).add( { days: 1 } ).toString('yyyy-MM-dd HH:mm:00'); 679 680 patati['startTime'] = date.toString('yyyy-MM-dd HH:mm:00'); 681 682 if( !patati['byday'] ) 683 switch(form.frequency) { 684 case 'weekly': 685 break; 686 case 'daily': 687 break; 688 case 'monthly': 689 patati['bymonthday'] = date.getDate(); 690 break; 691 case 'yearly': 692 patati['byyearday'] = date.getDayOfYear(); 693 break; 694 default : 695 return patati; 696 } 697 698 if (($(".endRepeat").val() == 'occurrences')) 699 patati['count'] = $(".occurrencesEnd").val(); 700 701 if (($(".endRepeat").val() == 'customDate')) 702 patati['endTime'] = Date.parseExact( $(".customDateEnd").val() + (!!form.allDay ? " 00:00": " "+$.trim(form.endHour)) , formatString ).toString('yyyy-MM-dd HH:mm:00'); 703 704 patati['interval'] = $(".eventInterval").val(); 705 706 /** 707 wkst = [ 'MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU' ] 708 weekno = number 709 minute = number 710 second = number 711 yearday = number 712 monthday = number 713 setpos = number 714 day = number 715 hour = number 716 interval = number 717 frequency = [ 'monthly', 'daily', 'weekly', 'yearly', 'hourly', 'minutely', 'secondly' ] 718 endTime = milliseconds 719 */ 720 return( patati ); 721 722 } 723 724 725 726 function encodeRepeat( repeat ){ 727 728 if( !repeat ) 729 return( false ); 730 731 return DataLayer.get( 'repeat', repeat ); 732 } 653 733 654 734 DataLayer.codec( "schedulable", "detail", { … … 674 754 startTime: Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).toString('yyyy-MM-dd HH:mm:00'), 675 755 endTime: Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ).toString('yyyy-MM-dd HH:mm:00'), //+ (!!form.allDay ? 86400000 : 0) , 676 allDay: ( !!form.allDay ? 1 : 0 ), 756 allDay: ( !!form.allDay ? 1 : 0 ), 677 757 id: form.idEvent, 678 758 location: form.location, … … 685 765 return {attachment: attachment} 686 766 }), 767 repeat: this.decodeRepeat( form ), 687 768 participants: $.map( form.attendee || [], function( attendee, i ){ 688 769 … … 722 803 }, 723 804 805 724 806 encoder: function( evtObj ){ 725 807 726 if(!(!!evtObj)) 727 return undefined; 728 729 var notArray = false; 730 731 if( notArray = $.type(evtObj) !== "array" ) 732 evtObj = [ evtObj ]; 733 734 var pref = User.preferences; 735 736 var res = DataLayer.encode('schedulable:preview', evtObj); 737 738 if( !notArray ){ 739 var dates = {}; 740 741 for (var i=0; i < res.length; i++) { 742 743 var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 744 var endDate = Date.parseExact( res[i]['endDate'], User.preferences.dateFormat ); 745 746 var counter = startDate.clone(); 747 748 while (counter.compareTo(startDate) == 0) { 749 750 if (!dates[counter.toString(User.preferences.dateFormat)]) 751 dates[counter.toString(User.preferences.dateFormat)] = { startDate:false, events:[] }; 752 if (!dates[counter.toString(User.preferences.dateFormat)].startDate) 753 dates[counter.toString(User.preferences.dateFormat)].startDate = counter.toString(User.preferences.dateFormat); 754 755 dates[counter.toString(User.preferences.dateFormat)].events.push(res[i]); 756 counter.addDays(-1); 757 } 758 } 759 res = { events_list: dates, 760 count : res.length 761 }; 762 } 763 764 return notArray ? res[0] : res; 808 if(!(!!evtObj)) 809 return undefined; 810 811 var notArray = false; 812 813 if( notArray = $.type(evtObj) !== "array" ) 814 evtObj = [ evtObj ]; 815 816 var pref = User.preferences; 817 818 var res = DataLayer.encode('schedulable:preview', evtObj); 819 820 if( !notArray ){ 821 var dates = {}; 822 823 for (var i=0; i < res.length; i++) { 824 825 var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 826 var endDate = Date.parseExact( res[i]['endDate'], User.preferences.dateFormat ); 827 828 var duration = parseInt( endDate.getTime() ) - parseInt( startDate.getTime() ); 829 830 var occurrences = [ startDate.getTime() ]; 831 832 if( res[i].occurrences ) 833 { 834 occurrences = res[i].occurrences; 835 } 836 837 for( var ii = 0; ii < occurrences.length; ii++ ) 838 { 839 var currentDate = new Date( occurrences[ii] ); 840 var counter = currentDate.clone(); 841 842 var res2 = $.extend( {}, res[i], {'startDate': currentDate.toString( User.preferences.dateFormat ), 'endDate': new Date( occurrences[ii] + duration ).toString( User.preferences.dateFormat ) } ); 843 844 while (counter.compareTo( currentDate ) == 0) { 845 846 if (!dates[counter.toString(User.preferences.dateFormat)]) 847 dates[counter.toString(User.preferences.dateFormat)] = { startDate:false, events:[] }; 848 if (!dates[counter.toString(User.preferences.dateFormat)].startDate) 849 dates[counter.toString(User.preferences.dateFormat)].startDate = counter.toString(User.preferences.dateFormat); 850 851 dates[counter.toString(User.preferences.dateFormat)].events.push(res2); 852 counter.addDays(-1); 853 } 854 } 855 } 856 res = { events_list: dates, 857 count : res.length 858 }; 859 } 860 861 return notArray ? res[0] : res; 765 862 } 766 863 … … 823 920 return( false ); 824 921 825 // if( notArray = $.type(evtObj) !== "array" )826 // evtObj = [ evtObj ];827 // alert( evtObj );828 922 var filtered = evtObj; 829 830 // repeat:{831 // frequency: "weekly",832 // endTime: Date.parse("+10 days").getTime(),833 // interval: 3,834 // byday: 3,835 // bysecond: 3,836 // byminute: 3,837 // bymonthday: 3,838 // byyearday: 3,839 // byweekno: 3,840 // bysetpos: 3,841 // wkst: "monday"/*,842 // duration: true*/843 // }844 845 // $.each(evtObj, function( index, evt ){846 847 // alert( dump(!!evt.repeat) );848 849 // if( evt && !!evt.repeat && (evt.startTime < filter.end || (evt.repeat.endTime || 0) > filter.start ) )850 // {851 // // var interval = evt.repeat.interval;852 923 // 853 // var current = new Date( evt.startTime );854 // var begin = new Date( filter.start );855 // var end = new Date( filter.end );856 // var offset = evt.endTime - evt.startTime;857 //858 // var ocurrence = [];859 //860 // while( Date.compare( current, begin ) !== 1 )861 // current = current.parse( "+" + evt.repeat.interval + " " + frequency + "s" );862 //863 // while( current.before( end ) && (ocurrence[ ocurrence.length ] = current) )864 // current = current.parse( "+" + evt.repeat.interval + " " + frequency + "s" );865 //866 // for( var i = 0; i < ocurrences.length; i++ )867 // filtered[ filtered.length ] = { URI: evt.URI,868 // summary: evt.summary,869 // start: new Date( ocurrences[i] ),870 // end: new Date( ocurrences[i] + offset ),871 // allDay: evt.allDay };872 //873 // // switch( evt.repeat.frequency )874 // // {875 // // case "yearly": interval *= 12;876 // // case "monthly": interval *= 30; //TODO: get the month variant877 // // case "weekly": interval *= 7;878 // // case "daily": interval *= 24;879 // // case "hourly": interval *= 60;880 // // case "minutely": interval *= 60;881 // // case "secondly": interval *= 1000;882 // // }883 // //884 // // var rest = ( filter.start - evt.startTime ) % interval;885 // //886 // // var offset = evt.endTime - evt.startTime;887 // //888 // // if( rest < offset )889 // // {890 // // var freq = Math.floor( offset - rest / interval );891 // //892 // //893 // //894 // // for( var i = 0; i < freq; i++ )895 // // {896 // // var ocurrence = filter.start + rest + ( interval * i );897 // //898 // //899 // // }900 // //901 // //902 // // }903 // }904 905 // if( parseInt( evt.endTime ) > filter[1][0][2] || parseInt( evt.startTime ) < filter[1][1][2] )906 // filtered[ filtered.length ] = evt;907 //908 // });909 910 924 var grouped = {}; 911 925 … … 922 936 var calendar = DataLayer.get('calendar', evt.calendar); 923 937 924 var eventEditable = function(idEvent ){938 var eventEditable = function(idEvent, isRecurrence){ 925 939 if(Calendar.signatureOf[calendar.id].isOwner == "1"){ 926 940 var attendee = {}; … … 928 942 attendee = DataLayer.get('participant', evt.participants[i]); 929 943 if(attendee.user == User.me.id) 930 return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ? {selectable: true, className: 'fullcalendar-context-menu event-id-'+idEvent } : {editable: false, selectable: true ,className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent};944 return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ? {selectable: true, className: 'fullcalendar-context-menu event-id-'+idEvent, editable: !isRecurrence} : { editable: false, selectable: true ,className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent}; 931 945 } 932 return {editable: false, className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent, selectable: true };946 return {editable: false, className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent, selectable: true, disableDragging: isRecurrence }; 933 947 } 934 948 else{ … … 943 957 } 944 958 return DataLayer.merge({ 945 editable: aclSignature.acl['write'] ,959 editable: aclSignature.acl['write'] && !isRecurrence, 946 960 disableResizing : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true : false), 947 961 disableDragging : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true: false), … … 951 965 952 966 } 967 968 var duration = parseInt( evt.endTime ) - parseInt( evt.startTime ), isRepeat = false; 969 970 var occurrences = [ evt.startTime ]; 971 972 if( evt.occurrences ) 973 { 974 isRepeat = true; 975 occurrences = evt.occurrences; 976 } 953 977 954 grouped[ evt.calendar ].push( DataLayer.merge({ id: evt.URI || evt.id, 955 title: Encoder.htmlDecode(evt.summary), 956 start: Timezone.getDateCalendar(new Date(parseInt( evt.startTime )), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 957 end: Timezone.getDateCalendar(new Date(parseInt( evt.endTime ) - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 958 allDay: parseInt( evt.allDay ) }, eventEditable(evt.id) ) ); 978 for( var i = 0; i < occurrences.length; i++ ) 979 grouped[ evt.calendar ].push( DataLayer.merge({ id: evt.URI || evt.id, 980 title: Encoder.htmlDecode(evt.summary), 981 start: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) ), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 982 end: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) + duration - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 983 allDay: parseInt( evt.allDay ) }, eventEditable(evt.id, isRepeat ) ) ); 959 984 }); 960 985 -
trunk/prototype/modules/calendar/js/helpers.js
r5641 r5715 361 361 362 362 } 363 363 364 DataLayer.render( 'templates/event_repeat.ejs', {event:objEvent}, function( repeatHtml ){ 365 366 UI.dialogs.addEvent.find('#calendar_addevent_details3').html(repeatHtml); 367 $(".date").datepicker(); 368 369 if(objEvent.repeat) 370 { 371 if( objEvent.repeat['id'] ) 372 { 373 $("[name='repeatId']:last").val( objEvent.repeat['id'] ); 374 } 375 376 if( objEvent.repeat['frequency'] !== 'none' ) 377 { 378 if( objEvent.repeat['startTime'] && objEvent.repeat['startTime'] !== "0" ) 379 { 380 $("[name='startOptions'] [value='customDate']:last").attr( 'selected', 'selected' ); 381 $("[name='start']:last").val(new Date( parseInt(objEvent.repeat['startTime']) ).toString( User.preferences.dateFormat ) ); 382 } 383 else 384 { 385 $("[name='start']:last").val($("[name='startDate']:last").val()); 386 $("[name='start']:last").readOnly=true; 387 $("[name='start']:last").datepicker("disable"); 388 } 389 390 $(".finish_event").removeClass("hidden"); 391 392 if(objEvent.repeat['endTime'] && objEvent.repeat['endTime'] !== "0" ) 393 { 394 //$("[name='occurrences']").addClass("hidden"); 395 $(".customDateEnd").removeClass("hidden"); 396 $(".endRepeat option[value='customDate']").attr('selected', 'selected') 397 $(".customDateEnd").val( new Date( parseInt(objEvent.repeat['endTime']) )/*.setTimezoneOffset( Timezone.timezone( objEvent.timezone ) )*/.toString( User.preferences.dateFormat ) ); 398 } 399 else if (objEvent.repeat['count'] && objEvent.repeat['count'] !== "0" ) { 400 $(".endRepeat option[value='occurrences']").attr('selected', 'selected'); 401 $(".occurrencesEnd").removeClass("hidden"); 402 $(".occurrencesEnd").val(objEvent.repeat['count']); 403 } 404 405 switch ( objEvent.repeat['frequency'] ) 406 { 407 case "daily": 408 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Dia(s)"); 409 $(".frequency option[value='daily']").attr('selected', 'selected'); 410 break; 411 case "weekly": 412 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Semana(s)"); 413 $(".frequency option[value='weekly']").attr('selected', 'selected'); 414 objEvent.repeat['interval'] ? $(".event-repeat-container:last").find(".repeat-in").find(".eventInterval").val(objEvent.repeat['interval']) : $(".event-repeat-container:last").find(".repeat-in").find(".eventInterval").val("0"); 415 416 $(".event-repeat-weekly").removeClass("hidden"); 417 418 var day = []; 419 420 if( objEvent.repeat.byday ) 421 day = objEvent.repeat.byday.split(','); 422 423 for(i=0; i<day.length; i++) 424 $(".event-repeat-weekly [value='" + day[i] + "']").attr("checked","checked"); 425 426 break; 427 case "monthly": 428 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Mes(s)"); 429 $(".frequency option[value='monthly']").attr('selected', 'selected') 430 $(".event-repeat-monthly:last").removeClass("hidden").find("input[type=radio][name=repeatmonthyType]").click(function(){ 431 if($("input[type=radio][name=repeatmonthyType]:checked").val() == "1") 432 $(".event-repeat-weekly:last").removeClass("hidden"); 433 else 434 $(".event-repeat-weekly:last").addClass("hidden"); 435 }); 436 if($("input[type=radio][name=repeatmonthyType]:checked").val() == "1") 437 $(".event-repeat-weekly:last").removeClass("hidden"); 438 else 439 $(".event-repeat-weekly:last").addClass("hidden"); 440 break; 441 case "yearly": 442 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Ano(s)"); 443 $(".frequency option[value='yearly']").attr('selected', 'selected') 444 break; 445 } 446 } 447 } 448 else { 449 $(".endRepeat option[value='never']").attr('selected', 'selected'); 450 } 451 452 453 $(".event-repeat-container:last").find(".repeat-in").find("[name=startOptions]").change(function(){ 454 455 if($(this).find("option:selected").val() == "Today"){ 456 $("[name='start']:last").val($("[name='startDate']:last").val()); 457 $("[name='start']:last").readOnly=true; 458 $("[name='start']:last").datepicker("disable"); 459 } 460 else{ 461 $("[name='start']:last").readOnly=false; 462 $("[name='start']:last").datepicker("enable"); 463 } 464 }); 465 $(".event-repeat-container:last").find(".repeat-in").find("[name=endOptions]").change(function(){ 466 if($(this).find("option:selected").val() == "never"){ 467 $("[name='occurrences']").addClass("hidden"); 468 $("[name='end']:last").addClass("hidden"); 469 } 470 else if($(this).find("option:selected").val() == "customDate"){ 471 $("[name='occurrences']").addClass("hidden"); 472 $("[name='end']:last").removeClass("hidden"); 473 } 474 else{ 475 $("[name='end']:last").addClass("hidden"); 476 $("[name='occurrences']").removeClass("hidden"); 477 } 478 }); 479 480 $("[name='frequency']:last").change(function () { 481 $(".frequency-option").addClass("hidden"); 482 if($(this).val() == "none"){ 483 $(".repeat-in").addClass("hidden"); 484 return; 485 }else{ 486 $(".repeat-in").removeClass("hidden"); 487 $("[name='start']:last").val($("[name='startDate']:last").val()); 488 } 489 490 491 switch($(this).val()){ 492 case "daily": 493 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Dia(s)"); 494 break; 495 case "weekly": 496 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Semana(s)"); 497 $(".event-repeat-weekly:last").removeClass("hidden"); 498 break; 499 case "monthly": 500 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Mes(s)"); 501 $(".event-repeat-monthly:last").removeClass("hidden").find("input[type=radio][name=repeatmonthyType]").click(function(){ 502 if($("input[type=radio][name=repeatmonthyType]:checked").val() == "1") 503 $(".event-repeat-weekly:last").removeClass("hidden"); 504 else 505 $(".event-repeat-weekly:last").addClass("hidden"); 506 }); 507 if($("input[type=radio][name=repeatmonthyType]:checked").val() == "1") 508 $(".event-repeat-weekly:last").removeClass("hidden"); 509 else 510 $(".event-repeat-weekly:last").addClass("hidden"); 511 break; 512 default: 513 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Ano(s)"); 514 break; 515 } 516 517 }); 518 }); 519 364 520 UI.dialogs.addEvent.find('.calendar_addevent_details_lnk_timezone').click(function(e){ 365 521 $(this).addClass('hidden'); … … 627 783 var user = DataLayer.get('user', ["=", "mail", $(this).val()]); 628 784 if(!!user && user[0].id) 629 attendees[user[0].id] .name = user[0].name;785 attendees[user[0].id] = { name: user[0].name }; 630 786 631 787 /**
Note: See TracChangeset
for help on using the changeset viewer.