Changeset 6876 for sandbox/2.4.2-expresso1/prototype/modules/calendar/js
- Timestamp:
- 07/25/12 17:05:36 (12 years ago)
- Location:
- sandbox/2.4.2-expresso1/prototype/modules/calendar/js
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
sandbox/2.4.2-expresso1/prototype/modules/calendar/js/calendar.codecs.js
r6797 r6876 596 596 }); 597 597 598 DataLayer.codec( "schedulable", "task", { 599 600 decoder: function( evtObj ){ 601 Encoder.EncodeType = "entity"; 602 603 if( notArray = $.type(evtObj) !== "array" ) 604 evtObj = [ evtObj ]; 605 606 var pref = User.preferences; 607 608 var res = $.map(evtObj, function( form ){ 609 610 var tzId = form.timezone || Calendar.signatureOf[form.group].calendar.timezone || User.preferences.timezone, 611 612 formatString = pref.dateFormat + " " + pref.hourFormat; 613 614 return DataLayer.merge({ 615 "class": form["class"], 616 startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 617 endTime: Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), //+ (!!form.allDay ? 86400000 : 0) , 618 due: (form.dueDate == '' )? 0 : Date.parseExact(form.dueDate + " "+$.trim(form.dueTime) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 619 allDay: ( !!form.allDay ? 1 : 0 ), 620 status: form.taskStatus, 621 id: form.idTask, 622 location: form.location, 623 type: 2, 624 percentage: form.percentage, 625 priority: form.priority, 626 category: form.category, 627 summary: form.summary, 628 description: form.description, 629 timezone: tzId, 630 attachments: $.map(form.attachment || [], function( attachment, i ){ 631 return { 632 attachment: attachment 633 } 634 }), 635 participants: $.map( form.attendee || [], function( attendee, i ){ 636 637 if( !attendee || attendee === "" ) 638 return( null ); 639 640 var participant = {}; 641 participant.user = (attendee!= User.me.id) ? DataLayer.get('participant', attendee).user : attendee ; 642 643 if( participant.user === User.me.id ){ 644 return DataLayer.merge({ 645 id: attendee, 646 isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 647 alarms: participant.alarms = $.map( form.alarmTime || [], function( alarmTime, i ){ 648 if( alarmTime === "" ) 649 return( null ); 650 return !!form.alarmId[i] ? { 651 type: form.alarmType[i], 652 unit: form.alarmUnit[i], 653 time: form.alarmTime[i], 654 id: form.alarmId[i] 655 }: 656 657 { 658 type: form.alarmType[i], 659 unit: form.alarmUnit[i], 660 time: form.alarmTime[i] 661 }; 662 }), 663 status: !!form.status ? form.status : 3 664 }, (form.delegatedFrom[i] != '0' && form.delegatedFrom[i] != '') ? { 665 delegatedFrom: form.delegatedFrom[i] 666 } : {}); 667 }else{ 668 return { 669 id: attendee, 670 isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 671 isExternal: !!parseInt(form.attendeeType[i]) ? 1 : 0, 672 }; 673 }; 674 }) 675 }, form.lastGroup ? (( form.lastGroup == form.group ) ? {} : {calendar: form.group, lastGroup: form.lastGroup}) : {calendar: form.group}); 676 }); 677 678 return notArray ? res[0] : res; 679 }, 680 681 encoder: function( evtObj ){ 682 683 var notArray = false; 684 685 if( notArray = $.type(evtObj) !== "array" ) 686 evtObj = [ evtObj ]; 687 688 var statusParticipants = {}, isAttendee = false, 689 690 statusLabels = [ '', 'accepted', 'tentative', 'cancelled', 'unanswered', 'delegated' ], 691 692 participantInfo = {}, delegatedFrom = {}, me = DataLayer.copy( User.me ); 693 694 var delegateAttendee = {}; 695 696 for( var i = 0; i < statusLabels.length; i++ ) 697 statusParticipants[ statusLabels[i] ] = 0; 698 699 var res = $.map(evtObj, function( objEvent ){ 700 701 if(!(typeof(objEvent) == 'object')) 702 return (null); 703 704 var limitAttendee = false; 705 706 return { 707 "class": objEvent["class"], 708 id: objEvent.id, 709 location: objEvent.location, 710 category: objEvent.category, 711 taskStatus: objEvent.status, 712 groups: Calendar.groups, 713 group: objEvent.group, 714 summary: objEvent.summary, 715 description: objEvent.description, 716 timezone: objEvent.timezone, 717 timezones: Timezone.timezones, 718 percentage: (objEvent.percentage) ? objEvent.percentage : '0', 719 priority: objEvent.priority, 720 startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 721 startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 722 endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 723 endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 724 dueDate: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : new Date( parseInt(objEvent.due) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 725 dueTime: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.due)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 726 allDay: !!parseInt( objEvent.allDay ), 727 historic: [], 728 attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 729 var attach = DataLayer.get('schedulableToAttachment', attachment, false); 730 //TODO - Verificar na API retorno de id sobre os conceitos em que s?o utilizados tabelas de liga??o 731 if(!attach.name) return(null); 732 733 var ext = attach.name.split('.'); 734 attach.name = attach.name.length < 10 ? attach.name : ( ext.length == 1 ? attach.name.substr(0, 10) : (attach.name.substr(0, 6) + '.' + ext[ext.length -1])); 735 attach.size = formatBytes(attach.size); 736 return attach; 737 }), 738 attendee: $.map(objEvent.participants || [], function( participant, i ){ 739 740 if(delegateAttendee[participant]) 741 return(null); 742 743 var attend = DataLayer.get('participant', (participant.id || participant)); 744 attend.user = DataLayer.get('user', attend.user); 745 746 statusParticipants[ statusLabels[attend.status] ]++; 747 748 if(attend.user.mail == User.me.mail) 749 isAttendee = true; 750 751 if( attend.user.id === me.id ){ 752 participantInfo.user = { 753 id: attend.id, 754 status : attend.status, 755 delegatedFrom: attend.delegatedFrom || '0', 756 acl: attend.acl, 757 receiveNotification : attend.receiveNotification, 758 alarms : $.map(attend.alarms || [], function( alarm ){ 759 var alarm = DataLayer.get('alarm', alarm); 760 return (alarm == "" ? (null) : alarm); 761 }) 762 }; 763 me = attend; 764 return(null); 765 }; 766 767 var person = { 768 id: attend.id, 769 name: attend.user.name != 'false' ? attend.user.name : '', 770 mail: attend.user.mail, 771 status : attend.status, 772 isExternal: attend.isExternal, 773 acl: attend.acl, 774 delegatedFrom: attend.delegatedFrom 775 }; 776 777 if(!!parseInt(attend.delegatedFrom)){ 778 delegatedFrom[attend.delegatedFrom] = DataLayer.copy(person); 779 return(null); 780 } 781 782 if( !!parseInt(attend.isOrganizer)){ 783 participantInfo.organizer = DataLayer.copy(person); 784 return(null); 785 }; 786 787 return (person); 788 }), 789 organizer: participantInfo.organizer || me, 790 alarms: !!participantInfo.user ? participantInfo.user.alarms : [], 791 status: !!participantInfo.user ? participantInfo.user.status : 1, 792 isAttendee: isAttendee, 793 me: me, 794 delegatedFrom: delegatedFrom, 795 statusParticipants: (objEvent.sizeAttendees != "") ? objEvent.statusAttendees : statusParticipants, 796 sizeAttendeeLimit: (objEvent.sizeAttendees != "") ? objEvent.sizeAttendees : false 797 }; 798 }); 799 console.log(res[0]); 800 return (notArray ? res[0] : res); 801 } 802 }); 598 803 599 804 function decodeOwnerCalendar(calendar){ … … 1055 1260 ] 1056 1261 ], 1057 ['IN', 'calendar', Calendar.calendarIds]1262 ['IN', 'calendar', $.merge( Calendar.calendarIds, Calendar.groupIds )] 1058 1263 ], 1059 1264 criteria: { -
sandbox/2.4.2-expresso1/prototype/modules/calendar/js/helpers.js
r6857 r6876 942 942 callbackAttendee(); 943 943 /** 944 945 944 Opções de delegação do participante/organizer 945 */ 946 946 blkAddAtendee.find(".button.participant-delegate").button({ 947 947 icons: { … … 971 971 972 972 UI.dialogs.addEvent.find(".attendee-list-add .add-attendee-input input").Watermark("digite um email para convidar"); 973 /* Trata a edição de um novo participante adicionado974 * 975 973 /* 974 * Trata a edição de um novo participante adicionado 975 */ 976 976 var hasNewAttendee = false; 977 977 … … 1197 1197 } else if (!skipAddNewLine) { 1198 1198 /** 1199 1200 1201 1199 * a) salva como novo usuario externo no banco (apenas com email) e... 1200 * adiciona novo contato externo à lista de convidados 1201 */ 1202 1202 1203 1203 userId = DataLayer.put('user', { … … 1560 1560 } 1561 1561 1562 disponibily(objEvent, path, attendees );1562 disponibily(objEvent, path, attendees, 'event'); 1563 1563 1564 1564 /*Seleciona a agenda padrão para criação de um evento*/ … … 1576 1576 1577 1577 UI.dialogs.addEvent.dialog('open'); 1578 //$('[href="#calendar_addevent_details7"]').trigger('click'); 1579 //$('[href="#calendar_addevent_details2"]').trigger('click'); 1578 1580 1579 } 1581 1580 -
sandbox/2.4.2-expresso1/prototype/modules/calendar/js/init.js
r6857 r6876 247 247 248 248 $('.qtip-active .button.advanced').button().click(function(){ 249 250 $(componente).qtip('destroy'); 251 249 252 250 var startEvent = new Date(); 253 251 var configData = (startEvent.toString('mm') < 30) ? {minutes: (30 - parseInt(startEvent.toString('mm')))} : {hours: 1, minutes: '-'+startEvent.toString('mm')}; … … 255 253 256 254 var componente = $(this); 257 258 taskDetails({ 255 var description = $('div.qtip div.add-simple-task textarea[name="description"]').val(); 256 257 taskDetails({ 258 summary: $('div.qtip div.add-simple-task input[name="summary"]').val(), 259 description: description == 'Descrição' ? '' : description, 259 260 startTime: startEvent.getTime(), 260 261 endTime: dateCalendar.decodeRange(startEvent, (!!User.preferences.defaultCalendar ? ( !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ? 261 262 (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration) : (User.preferences.defaultDuration)) : (User.preferences.defaultDuration))) 262 263 }, true ); 263 264 265 $(componente).qtip('destroy'); 264 266 }); 265 267 … … 450 452 }else{ 451 453 var schedulable = DataLayer.get( "schedulable", evt.id); 452 schedulable. calendar= evt.calendar;454 schedulable.group = evt.calendar; 453 455 eventDetails( schedulable, true); 454 456 } 455 457 } 456 }else 457 alert('Editar Tarefa'); 458 }else{ 459 var task = DataLayer.get( "schedulable", evt.id); 460 task.group = evt.calendar; 461 taskDetails( task, true); 462 } 458 463 }, 459 464 -
sandbox/2.4.2-expresso1/prototype/modules/calendar/js/load.js
r6768 r6876 54 54 } 55 55 56 this.calendarIds = [], this. signatureOf = {}, this.calendars = [], this.calendarOf= {};56 this.calendarIds = [], this.groupIds = [], this.signatureOf = {}, this.calendars = [], this.groups = [], this.calendarOf = {}, this.groupOf= {}; 57 57 58 58 for( var i = 0; i < this.signatures.length; i++ ){ 59 59 if(this.signatures[i].isOwner == "0") 60 60 this.signatures[i].permission = DataLayer.encode('calendarToPermission:detail', this.signatures[i].permission); 61 this.signatureOf[ this.calendarIds[i] = ( this.calendars[ this.calendars.length ] = this.calendarOf[ this.signatures[i].id ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 61 62 if(this.signatures[i].calendar.type == '1') 63 this.signatureOf[ this.groupIds[this.groupIds.length] = ( this.groups[ this.groups.length ] = this.groupOf[ this.signatures[i].id ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 64 else 65 this.signatureOf[ this.calendarIds[ this.calendarIds.length] = ( this.calendars[ this.calendars.length ] = this.calendarOf[ this.signatures[i].id ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 62 66 } 63 67 -
sandbox/2.4.2-expresso1/prototype/modules/calendar/js/map.disponibility.js
r6444 r6876 8 8 9 9 10 function updateMap( data){11 var start_date = $(".new- event-win.active .start-date").val();12 var end_date = $(".new- event-win.active .end-date").val();13 var start_time = $(".new- event-win.active .start-time").val();14 var end_time = $(".new- event-win.active .end-time").val();15 var isAllDay = $('.new- event-win.active input[name="allDay"]').is(':checked');10 function updateMap(viewName){ 11 var start_date = $(".new-"+viewName+"-win.active .start-date").val(); 12 var end_date = $(".new-"+viewName+"-win.active .end-date").val(); 13 var start_time = $(".new-"+viewName+"-win.active .start-time").val(); 14 var end_time = $(".new-"+viewName+"-win.active .end-time").val(); 15 var isAllDay = $('.new-'+viewName+'-win.active input[name="allDay"]').is(':checked'); 16 16 17 17 var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat; … … 21 21 22 22 23 var event = $( "#new_event_map").fullCalendar('clientEvents', 'map')[0];23 var event = $('.new-'+viewName+'-win .map_disponibility').fullCalendar('clientEvents', 'map')[0]; 24 24 25 25 … … 28 28 event.end = endDate; 29 29 event.allDay = isAllDay; 30 $( "#new_event_map").fullCalendar( 'updateEvent', event )30 $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'updateEvent', event ) 31 31 } 32 32 … … 35 35 36 36 37 function disponibily(objEvent, path, attendees ){37 function disponibily(objEvent, path, attendees, viewName){ 38 38 var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat; 39 39 var startDate = Date.parseExact( objEvent.startDate + " " + $.trim(objEvent.startHour) , formatString ); 40 40 var endDate = Date.parseExact( objEvent.endDate + " " + $.trim(objEvent.endHour) , formatString ); 41 42 var dialogName = {event: 'addEvent', task: 'addTask', activity: 'addActivity'} 41 43 42 44 var mapHtml = DataLayer.render( path+'templates/availability_map.ejs', {}); 43 $( "#calendar_addevent_details7").html(mapHtml);44 $( "#new_event_map").fullCalendar(DataLayer.merge({45 $('#calendar_add'+viewName+'_details7').html(mapHtml); 46 $('.new-'+viewName+'-win .map_disponibility').fullCalendar(DataLayer.merge({ 45 47 height : 300, 46 48 timeFormat: User.preferences.hourFormat, … … 77 79 if(!allDay){ 78 80 $('[name="allDay"]').attr("checked", false); 79 UI.dialogs .addEvent.find('.start-time, .end-time').removeClass('hidden');81 UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').removeClass('hidden'); 80 82 81 83 $('[name="startHour"]').val(start.toString(User.preferences.hourFormat)); … … 85 87 }else{ 86 88 $('[name="allDay"]').attr("checked", true); 87 UI.dialogs .addEvent.find('.start-time, .end-time').addClass('hidden');89 UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').addClass('hidden'); 88 90 } 89 91 }, … … 98 100 className : "map-event", 99 101 backgroundColor : "transparent !important", 100 editable : objEvent.acl .write || objEvent.acl.organization102 editable : objEvent.acl ? (objEvent.acl.write || objEvent.acl.organization) : true 101 103 } 102 104 ], … … 104 106 if(event.allDay){ 105 107 $('[name="allDay"]').attr("checked", true); 106 UI.dialogs .addEvent.find('.start-time, .end-time').addClass('hidden');108 UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').addClass('hidden'); 107 109 108 110 $('[name="startDate"]').val(dateCalendar.toString(event.start, User.preferences.dateFormat)); … … 111 113 }else{ 112 114 $('[name="allDay"]').attr("checked", false); 113 UI.dialogs .addEvent.find('.start-time, .end-time').removeClass('hidden');115 UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').removeClass('hidden'); 114 116 115 117 $('[name="startHour"]').val(dateCalendar.formatDate(event.start, User.preferences.hourFormat)); … … 132 134 var eventSource = new Array(); 133 135 var updateMapView = function(){ 134 updateMap( );135 var view = $( "#new_event_map").fullCalendar('getView');136 updateMap(viewName); 137 var view = $('.new-'+viewName+'-win .map_disponibility').fullCalendar('getView'); 136 138 var map = {}; 137 $( "#new_event_map").fullCalendar( 'removeEventSource', eventSource );139 $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'removeEventSource', eventSource ); 138 140 eventSource = new Array(); 139 141 map = {startTime : view.start.getTime(), endTime : view.end.getTime(), attendees: {}, timezone: (objEvent.timezone || User.preferences.timezone)}; … … 167 169 } 168 170 if(eventSource.length) 169 $( "#new_event_map").fullCalendar( 'addEventSource', eventSource );171 $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'addEventSource', eventSource ); 170 172 }; 171 $('[href="#calendar_addevent_details7"]').click(function(eventData, eventObject){ 172 $("#new_event_map").fullCalendar( 'gotoDate', Date.parseExact($('[name="startDate"]').val() + " " + $.trim($('[name="startHour"]').val()), formatString) , formatString); 173 //if(eventObject == undefined) 174 updateMapView(); 173 $('[href="#calendar_add'+viewName+'_details7"]').click(function(eventData, eventObject){ 174 $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'gotoDate', Date.parseExact($('[name="startDate"]').val() + " " + $.trim($('[name="startHour"]').val()), formatString) , formatString); 175 updateMapView(); 175 176 }); 176 $( "#new_event_map").find(".fc-button-prev, .fc-button-next, .fc-button-today").click(function(){177 $('.new-'+viewName+'-win .map_disponibility').find(".fc-button-prev, .fc-button-next, .fc-button-today").click(function(){ 177 178 updateMapView(); 178 179 }); -
sandbox/2.4.2-expresso1/prototype/modules/calendar/js/task.helpers.js
r6815 r6876 1 function taskDetails( objEvent, decoded, path, isMail, repeat){ 1 function taskDetails(objTask, decoded, path, isMail, repeat) { 2 3 $('.qtip.qtip-blue').remove(); 2 4 3 5 attendees = {}; 4 5 if(path == undefined) 6 path = ""; 7 8 if( !decoded ) 9 objEvent = DataLayer.decode( "schedulable:calendar", objEvent ); 10 11 if(!isMail) 12 objEvent = DataLayer.encode( "schedulable:preview", objEvent ); 13 14 if(typeof(objEvent.id) == 'undefined'){ 15 objEvent.alarms = Calendar.signatureOf[User.preferences.defaultCalendar || Calendar.calendarIds[0]].defaultAlarms || false; 16 objEvent.useAlarmDefault = 1; 6 7 if (path == undefined) path = ""; 8 9 if (!decoded) objTask = DataLayer.decode("task:calendar", objTask); 10 11 if (!isMail) objTask = DataLayer.encode("schedulable:task", objTask); 12 13 if (typeof (objTask.id) == 'undefined') { 14 objTask.alarms = Calendar.signatureOf[User.preferences.defaultCalendar || Calendar.calendarIds[0]].defaultAlarms || false; 15 objTask.useAlarmDefault = 1; 17 16 } 18 17 18 19 if(objTask.me.id == User.me.id){ 20 objTask.me.id = DataLayer.put('participant', { 21 user: objTask.me.id, 22 mail: objTask.me.mail 23 }); 24 objTask.organizer.id = objTask.me.id; 25 } 26 27 var dependsDelegate = function(reference, inverse){ 28 if(inverse){ 29 if(reference.find('input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val()) 30 blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 31 }else{ 32 if(blkAddAtendee.find('.me input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val()) 33 blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(reference.find('input[name="attendee[]"]').val()); 34 } 35 }; 36 37 var removeOthers = function(){ 38 var other = blkAddAtendee.find('.delegate.attendee-permissions-change-button'); 39 if(other.lenght) 40 dependsDelegate(other.parents('li'), true); 41 42 blkAddAtendee.find('.delegate').removeClass('attendee-permissions-change-button'); 43 blkAddAtendee.find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change'); 44 45 }; 46 47 var callbackAttendee = function(){ 48 var checked = false; 49 blkAddAtendee.find("li.not-attendee").addClass('hidden'); 50 51 blkAddAtendee.find("li .button").filter(".close.new").button({ 52 icons: { 53 primary: "ui-icon-close" 54 }, 55 text: false 56 }).click(function () { 57 DataLayer.remove('participant', $(this).parents('li').find('[type=checkbox]').val()); 58 if($(this).parent().find('.button.delegate').hasClass('attendee-permissions-change-button')){ 59 removeOthers(); 60 blkAddAtendee.find('.request-update').addClass('hidden'); 61 blkAddAtendee.find('.status option').toggleClass('hidden'); 62 63 blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change'); 64 } 65 66 $(this).parents('li').remove(); 67 68 if(blkAddAtendee.find(".attendee-list li").length == 1) 69 blkAddAtendee.find("li.not-attendee").removeClass('hidden'); 70 }) 71 .addClass('tiny disable ui-button-disabled ui-state-disabled') 72 .removeClass('new').end() 73 74 .filter(".delegate.new").button({ 75 icons: { 76 primary: "ui-icon-transferthick-e-w" 77 }, 78 text: false 79 }).click(function () { 80 var me = $(this).parents('li'); 81 if($(this).hasClass('attendee-permissions-change-button')){ 82 $(this).removeClass('attendee-permissions-change-button') 83 .find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change').end(); 84 85 me.find('input[name="delegatedFrom[]"]').val(''); 86 dependsDelegate(me, true); 87 88 blkAddAtendee.find('.request-update').addClass('hidden'); 89 blkAddAtendee.find('.status option').toggleClass('hidden'); 90 91 blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change'); 92 93 }else{ 94 removeOthers(); 95 96 $(this).addClass('attendee-permissions-change-button') 97 .find('.ui-icon-transferthick-e-w').addClass('attendee-permissions-change').end(); 98 99 me.find('input[name="delegatedFrom[]"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 100 101 dependsDelegate(me, false); 102 103 blkAddAtendee.find('.request-update').removeClass('hidden'); 104 if(blkAddAtendee.find('.status option.hidden').length == 1) 105 blkAddAtendee.find('.status option').toggleClass('hidden'); 106 107 blkAddAtendee.find('option[value=5]').attr('selected','selected').trigger('change'); 108 } 109 }) 110 .addClass('tiny disable ui-button-disabled ui-state-disabled') 111 .removeClass('new').end() 112 113 .filter(".open-delegate.new").click(function(){ 114 if($(this).hasClass('ui-icon-triangle-1-e')){ 115 $(this).removeClass('ui-icon-triangle-1-e').addClass('ui-icon-triangle-1-s'); 116 $(this).parents('li').find('.list-delegates').removeClass('hidden'); 117 }else{ 118 $(this).removeClass('ui-icon-triangle-1-s').addClass('ui-icon-triangle-1-e'); 119 $(this).parents('li').find('.list-delegates').addClass('hidden'); 120 } 121 122 }).removeClass('new'); 123 124 UI.dialogs.addTask.find('.attendees-list li').hover( 125 function () { 126 $(this).addClass("hover-attendee"); 127 $(this).find('.button').removeClass('disable ui-button-disabled ui-state-disabled').end() 128 .find('.attendee-options').addClass('hover-attendee'); 129 }, 130 function () { 131 $(this).removeClass("hover-attendee"); 132 $(this).find('.button').addClass('disable ui-button-disabled ui-state-disabled').end() 133 .find('.attendee-options').removeClass('hover-attendee'); 134 } 135 ); 136 } 137 19 138 /** 20 * canDiscardEventDialog deve ser true se não houver alterações no evento 21 22 canDiscard EventDialog = true;139 * canDiscardTaskDialog deve ser true se não houver alterações no task 140 */ 141 canDiscardTaskDialog = true; 23 142 /** 24 * zebraDiscardEventDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog) 25 * já está aberta na tela, uma vez que não é possivel acessar o evento ESC utilizado para fechá-la 26 */ 27 zebraDiscardEventDialog = false; 28 29 /** 30 ACLs do participant 31 */ 32 acl_names = { 33 'w': 'acl-white', 34 'i': 'acl-invite-guests', 35 'p': 'acl-participation-required' 36 }; 37 38 var dependsDelegate = function(reference, inverse){ 39 if(inverse){ 40 if(reference.find('input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val()) 41 blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 42 }else{ 43 if(blkAddAtendee.find('.me input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val()) 44 blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(reference.find('input[name="attendee[]"]').val()); 45 } 46 47 }; 48 49 var removeOthers = function(){ 50 var other = blkAddAtendee.find('.delegate.attendee-permissions-change-button'); 51 if(other.lenght){ 52 dependsDelegate(other.parents('li'), true); 53 } 54 blkAddAtendee.find('.delegate').removeClass('attendee-permissions-change-button'); 55 blkAddAtendee.find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change'); 56 57 }; 58 59 var html = DataLayer.render( path+'templates/task_add.ejs', { 60 event:objEvent 61 }); 62 63 if (!UI.dialogs.addTask) { 64 65 UI.dialogs.addTask = jQuery('#sandbox').append('<div title="Criar tarefa" class="new-event-win active"> <div>').find('.new-event-win.active').html(html).dialog({ 66 resizable: false, 67 modal:true, 68 autoOpen: false, 69 width:774, 70 position: 'center', 71 close: function(event, ui) { 72 /** 73 * Remove tooltip possivelmente existente 74 */ 75 if ($('.qtip.qtip-blue.qtip-active').length) 76 $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 77 attendees = {}; 78 }, 79 beforeClose: function(event, ui) { 80 81 if (!canDiscardEventDialog && !zebraDiscardEventDialog) { 82 zebraDiscardEventDialog = true; 83 window.setTimeout(function() { 84 $.Zebra_Dialog('Suas alterações no evento não foram salvas. Deseja descartar as alterações?', { 85 'type': 'question', 86 'overlay_opacity': '0.5', 87 'buttons': ['Descartar alterações', 'Continuar editando'], 88 'onClose': function(clicked) { 89 if(clicked == 'Descartar alterações') { 90 canDiscardEventDialog = true; 91 /** 92 *Remoção dos anexos do eventos caso seja cancelado a edição 93 */ 94 DataLayer.rollback(); 95 96 var ids = false; 97 $.each($('.attachment-list input'), function (i, input) { 98 DataLayer.put('attachment', {id: ''+input.value}); 99 DataLayer.remove('attachment', ''+input.value); 100 ids = true; 101 }); 102 if(ids) 103 DataLayer.commit(); 104 105 106 107 UI.dialogs.addTask.dialog('close'); 108 }else{ 109 zebraDiscardEventDialog = false; 110 } 111 112 /** 113 * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la 114 * com ESC, para que o evento ESC não seja propagado para fechamento da 115 * janela de edição de eventos, deve ser setada uma flag indicando que 116 * já existe uma janela de confirmação aberta. 117 */ 118 if (!clicked) { 119 window.setTimeout(function() { 120 zebraDiscardEventDialog = false; 121 }, 200); 122 } 123 } 124 }); 125 126 }, 300); 127 128 } 129 //DataLayer.rollback(); 130 return canDiscardEventDialog; 131 }, 132 dragStart: function(event, ui) { 133 if ($('.qtip.qtip-blue.qtip-active').length) 134 $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 135 } 136 }); 137 138 } else { 139 UI.dialogs.addTask.html(html); 140 } 141 142 var tabs = UI.dialogs.addTask.children('.content').tabs({ 143 select: function(event, ui) { 144 if ($('.qtip.qtip-blue.qtip-active').length) 145 $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 146 } 147 }); 148 var calendar = DataLayer.get('calendar', objEvent.calendar); 149 150 if (calendar.timezone != objEvent.timezone){ 151 UI.dialogs.addTask.find('.calendar-addevent-details-txt-timezone').find('option[value="'+objEvent.timezone+'"]').attr('selected','selected').trigger('change'); 152 UI.dialogs.addTask.find('.calendar_addevent_details_lnk_timezone').addClass('hidden'); 153 $('.calendar-addevent-details-txt-timezone').removeClass('hidden'); 154 143 * zebraDiscardTaskDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog) 144 * já estão aberta na tela, uma vez que não é possivel acessar o task ESC utilizado para fechá-la 145 */ 146 zebraDiscardTaskDialog = false; 147 148 var html = DataLayer.render(path + 'templates/task_add.ejs', { 149 task: objTask 150 }); 151 152 if (!UI.dialogs.addTask) { 153 154 UI.dialogs.addTask = jQuery('#sandbox').append('<div title="Criar tarefa" class="new-task-win active"> <div>').find('.new-task-win.active').html(html).dialog({ 155 resizable: false, 156 modal: true, 157 autoOpen: false, 158 width: 774, 159 position: 'center', 160 close: function (event, ui) { 161 /** 162 * Remove tooltip possivelmente existente 163 */ 164 if ($('.qtip.qtip-blue.qtip-active').length) $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 165 attendees = {}; 166 }, 167 beforeClose: function (event, ui) { 168 169 if (!canDiscardTaskDialog && !zebraDiscardTaskDialog) { 170 zebraDiscardTaskDialog = true; 171 window.setTimeout(function () { 172 $.Zebra_Dialog('Suas alterações na tarefa não foram salvas. Deseja descartar as alterações?', { 173 'type': 'question', 174 'overlay_opacity': '0.5', 175 'buttons': ['Descartar alterações', 'Continuar editando'], 176 'onClose': function (clicked) { 177 if (clicked == 'Descartar alterações') { 178 canDiscardTaskDialog = true; 179 /** 180 *Remoção dos anexos da task caso seja cancelado a ediçãoo 181 */ 182 DataLayer.rollback(); 183 184 var ids = false; 185 $.each($('.attachment-list input'), function (i, input) { 186 DataLayer.put('attachment', { 187 id: '' + input.value 188 }); 189 DataLayer.remove('attachment', '' + input.value); 190 ids = true; 191 }); 192 if (ids) DataLayer.commit(); 193 194 UI.dialogs.addTask.dialog('close'); 195 } else { 196 zebraDiscardTaskDialog = false; 197 } 198 199 /** 200 * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la 201 * com ESC, para que o task ESC nÃo seja propagado para fechamento da 202 * janela de edição de tasks, deve ser setada uma flag indicando que 203 * já existe uma janela de confirmação aberta. 204 */ 205 if (!clicked) { 206 window.setTimeout(function () { 207 zebraDiscardTaskDialog = false; 208 }, 200); 209 } 210 } 211 }); 212 213 }, 300); 214 215 } 216 //DataLayer.rollback(); 217 return canDiscardTaskDialog; 218 }, 219 dragStart: function (task, ui) { 220 if ($('.qtip.qtip-blue.qtip-active').length) $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 221 } 222 }); 223 224 } else { 225 UI.dialogs.addTask.html(html); 226 } 227 228 var tabs = UI.dialogs.addTask.children('.content').tabs({ 229 select: function (task, ui) { 230 if ($('.qtip.qtip-blue.qtip-active').length) $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 231 } 232 }); 233 var group = DataLayer.get('calendar', objTask.group); 234 235 if (group.timezone != objTask.timezone) { 236 UI.dialogs.addTask.find('.calendar-addtask-details-txt-timezone').find('option[value="' + objTask.timezone + '"]').attr('selected', 'selected').trigger('change'); 237 UI.dialogs.addTask.find('.calendar_addtask_details_lnk_timezone').addClass('hidden'); 238 $('.calendar-addtask-details-txt-timezone').removeClass('hidden'); 239 240 } 241 242 UI.dialogs.addTask.find('.calendar_addtask_details_lnk_timezone').click(function (e) { 243 $(this).addClass('hidden'); 244 $('.calendar-addtask-details-txt-timezone').removeClass('hidden'); 245 e.prtaskDefault(); 246 }); 247 248 UI.dialogs.addTask.find('.button.remove').button({ 249 text:false, 250 icons:{ 251 primary:'ui-icon-close' 252 } 253 }).click(function(el){ 254 var id; 255 if( id = $(this).parent().find('input[name="alarmId[]"]').val()) 256 DataLayer.remove('alarm', id); 257 $(this).parent().remove().find('li').is(':empty'); 258 }); 259 260 /*Seleciona a agenda padrão para visualização edição de um task*/ 261 if (objTask.id) UI.dialogs.addTask.find('option[value="' + objTask.group + '"]').attr('selected', 'selected').trigger('change'); 262 263 /* Checkbox allday */ 264 UI.dialogs.addTask.find('input[name="allDay"]').click(function () { 265 $(this).attr("checked") ? UI.dialogs.addTask.find('.start-time, .end-time').addClass('hidden') : UI.dialogs.addTask.find('.start-time, .end-time').removeClass('hidden'); 266 updateMap(true); 267 }); 268 269 UI.dialogs.addTask.find('.button').button(); 270 UI.dialogs.addTask.find('.button.add').button({ 271 icons: { 272 secondary: "ui-icon-plus" 273 } 274 }); 275 276 // ==== validation tasks ==== 277 UI.dialogs.addTask.find(".input-group .h1").Watermark("Tarefa sem título"); 278 if (User.preferences.hourFormat.length == 5) { 279 UI.dialogs.addTask.find(".end-time, .start-time").mask("99:99", { 280 completed: function () { 281 updateMap(); 282 } 283 }); 284 } else { 285 $.mask.definitions['{'] = '[ap]'; 286 $.mask.definitions['}'] = '[m]'; 287 UI.dialogs.addTask.find(".end-time, .start-time").mask("99:99 {}", { 288 completed: function () { 289 $(this).val(date.Calendar.defaultToAmPm($(this).val())); 290 $(this).timepicker("refresh"); 291 $(this).val($(this).val().replace(/[\.]/gi, "")); 292 updateMap(); 293 } 294 }); 295 } 296 UI.dialogs.addTask.find(".number").numeric(); 297 User.preferences.dateFormat.indexOf('-') > 0 ? UI.dialogs.addTask.find(".date").mask("99-99-9999", { 298 completed: function () { 299 updateMap(); 300 } 301 }) : UI.dialogs.addTask.find(".date").mask("99/99/9999", { 302 completed: function () { 303 updateMap(); 304 } 305 }); 306 307 UI.dialogs.addTask.find(".menu-addtask").children(".delete").click(function () { 308 $.Zebra_Dialog('Tem certeza que deseja excluir esta tarefa?', { 309 'type': 'question', 310 'overlay_opacity': '0.5', 311 'buttons': ['Sim', 'Não'], 312 'onClose': function (clicked) { 313 if (clicked == 'Sim') { 314 canDiscardTaskDialog = true; /* Remove por filtro */ 315 DataLayer.removeFilter('schedulable', { 316 filter: ['AND', ['=', 'id', objTask.id], 317 ['=', 'calendar', objTask.group], 318 ['=', 'user', (objTask.me.user ? objTask.me.user.id : objTask.me.id)] 319 ] 320 }); 321 Calendar.rerenderView(true); /********************/ 322 UI.dialogs.addTask.dialog("close"); 323 } 324 } 325 }); 326 }).end() 327 328 .children(".cancel").click(function () { 329 UI.dialogs.addTask.dialog("close"); 330 }).end() 331 332 .children(".save").click(function () { /* Validação */ 333 /*if (msg = validDateTask()) { 334 $(".new-task-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg); 335 return false; 336 }*/ 337 338 UI.dialogs.addTask.children().find('form.form-addtask').submit(); 339 UI.dialogs.addTask.dialog("close"); 340 341 }).end() 342 343 .children(".export").click(function () { 344 UI.dialogs.addTask.children().find(".form-export").submit(); 345 }); 346 347 var attendeeHtml = DataLayer.render(path + 'templates/attendees_task.ejs', { 348 task: objTask 349 }); 350 351 // load template of attendees 352 var blkAddAtendee = UI.dialogs.addTask.find('#calendar_addtask_details6').append(attendeeHtml); 353 354 if(objTask.attendee.length) 355 callbackAttendee(); 356 357 /* 358 * Opções de delegação do participante/organizer 359 */ 360 blkAddAtendee.find(".button.participant-delegate").button({ 361 icons: { 362 primary: "ui-icon-transferthick-e-w" 363 }, 364 text: false 365 }).click(function () { 366 if($(this).hasClass('attendee-permissions-change-button')){ 367 if(!$(this).hasClass('disable')){ 368 $(this).removeClass('attendee-permissions-change-button') 369 .find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change').end(); 370 blkAddAtendee.find('.block-add-attendee.search').addClass('hidden'); 371 blkAddAtendee.find('.block-add-attendee.search dt').html('Adicionar outros contatos'); 372 } 373 }else{ 374 $(this).addClass('attendee-permissions-change-button') 375 .find('.ui-icon-transferthick-e-w').addClass('attendee-permissions-change').end(); 376 blkAddAtendee.find('.block-add-attendee.search dt').html('Delegar participação para'); 377 blkAddAtendee.find('.block-add-attendee.search').removeClass('hidden'); 378 blkAddAtendee.find('.block-add-attendee.search input.search').focus(); 379 } 380 }) 381 .addClass('tiny'); 382 383 var dates = UI.dialogs.addTask.find('input.date').datepicker({ 384 dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'), 385 onSelect: function (selectedDate) { 386 updateMap(); 387 } 388 }); 389 390 UI.dialogs.addTask.find('input.time').timepicker({ 391 closeText: 'Ok', 392 hourGrid: 4, 393 minuteGrid: 10, 394 ampm: ((User.preferences.hourFormat.length > 5) ? true : false), 395 timeFormat: "hh:mm tt", 396 onSelect: function (selectedDateTime) { 397 if (!(User.preferences.hourFormat.length == 5)) $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 398 updateMap(); 399 }, 400 onClose: function (selectedDateTime) { 401 if (!(User.preferences.hourFormat.length == 5)) $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 402 } 403 }); 404 405 blkAddAtendee.find('.add-attendee-search .ui-icon-search').click(function (task) { 406 blkAddAtendee.find('.add-attendee-search input').keydown(); 407 }); 408 409 blkAddAtendee.find('.add-attendee-search input').keydown(function (task) { 410 411 if (task.keyCode == '13' || typeof (task.keyCode) == 'undefined') { 412 var result = DataLayer.get('user', ["*", "name", $(this).val()], true); 413 414 /** 415 * TODO: trocar por template 416 */ 417 blkAddAtendee.find('ul.search-result-list').empty().css('overflow', 'hidden'); 418 if (!result) { 419 blkAddAtendee.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>'); 420 } 421 422 for (i = 0; i < result.length; i++) 423 result[i].enabled = (blkAddAtendee.find('dd.attendee-list ul.attendee-list label.mail[title="' + result[i].mail + '"]').length) ? false : true; 424 425 blkAddAtendee.find('ul.search-result-list').append(DataLayer.render(path + 'templates/participants_search_itemlist.ejs', result)); 426 427 blkAddAtendee.find('ul.search-result-list li').click(function (task, ui) { 428 if ($(task.target).is('input')) { 429 old_item = $(task.target).parents('li'); 430 newAttendeeId = DataLayer.put('participant', { 431 user: old_item.find('.id').html(), 432 isExternal: old_item.find('.isExternal').html() 433 }); 434 435 attendees[old_item.find('.id').html()] = old_item.find('.name').html(); 436 437 blkAddAtendee.find('dd.attendee-list ul.attendee-list').append(DataLayer.render(path + 'templates/participants_add_itemlist.ejs', [{ 438 id: newAttendeeId, 439 name: old_item.find('.name').html(), 440 mail: old_item.find('.mail').html(), 441 isExternal: old_item.find('.isExternal').html(), 442 notEvent: true, 443 isDirty: !! !objTask.id 444 }])).scrollTo('max'); 445 /** 446 * Delegação de participação de um participante com permissão apenas de leitura 447 * 448 */ 449 if (objTask.me.id != objTask.organizer.id) { 450 451 blkAddAtendee.find('.block-add-attendee.search').addClass('hidden'); 452 blkAddAtendee.find('.block-add-attendee.search dt').html('Adicionar outros contatos'); 453 454 blkAddAtendee.find('.status option').toggleClass('hidden'); 455 blkAddAtendee.find('option[value=5]').attr('selected', 'selected').trigger('change'); 456 blkAddAtendee.find('.request-update').removeClass('hidden'); 457 458 blkAddAtendee.find('dd.attendee-list ul.attendee-list li .button.close').parents('li').find('input[name="delegatedFrom[]"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 459 460 blkAddAtendee.find('.me .participant-delegate').addClass('disable ui-button-disabled ui-state-disabled'); 461 blkAddAtendee.find(".button.close").button({ 462 icons: { 463 primary: "ui-icon-close" 464 }, 465 text: false 466 }).click(function () { 467 468 $(this).parents('li').find('input[name="delegatedFrom[]"]').val(''); 469 blkAddAtendee.find('.request-update').addClass('hidden'); 470 blkAddAtendee.find('.status option').toggleClass('hidden'); 471 blkAddAtendee.find('option[value=1]').attr('selected', 'selected').trigger('change'); 472 blkAddAtendee.find('.me .participant-delegate').removeClass('disable ui-button-disabled ui-state-disabled attendee-permissions-change-button').find('.ui-icon-person').removeClass('attendee-permissions-change').end(); 473 474 DataLayer.remove('participant', $(this).parents('li').find('[type=checkbox]').val()); 475 $(this).parents('li').remove(); 476 }).addClass('tiny'); 477 } else { 478 callbackAttendee(); 479 old_item.remove(); 480 } 481 } 482 }); 483 484 event.preventDefault(); 485 } 486 }); 487 488 UI.dialogs.addTask.find('.row.fileupload-buttonbar-task .button').filter('.delete').button({ 489 icons: { 490 primary: "ui-icon-close" 491 }, 492 text: 'Excluir' 493 }).click(function () { 494 $.Zebra_Dialog('Tem certeza que deseja excluir todos anexos?', { 495 'type': 'question', 496 'overlay_opacity': '0.5', 497 'buttons': ['Sim', 'Não'], 498 'onClose': function (clicked) { 499 if (clicked == 'Sim') { 500 501 var ids = []; 502 $.each($('.attachment-list input'), function (i, input) { 503 DataLayer.remove('schedulableToAttachment', { 504 filter: ['=', 'id', '' + input.value] 505 }); 506 }); 507 $('.attachment-list input').remove(); 508 $('.row.fileupload-buttonbar .attachments-list p').remove(); 509 } 510 } 511 }); 512 }).end().filter('.close').button({ 513 icons: { 514 primary: "ui-icon-close" 515 }, 516 text: false 517 }).click(function () { 518 DataLayer.remove('schedulableToAttachment', $(this).parents('p').find('input[name="fileId[]"]').val()); 519 $(this).parents('p').remove(); 520 }).end().filter('.downlaod-archive').button({ 521 icons: { 522 primary: "ui-icon-arrowthickstop-1-s" 523 }, 524 text: false 525 }); 526 var maxSizeFile = 2000000; 527 $('#fileupload').fileupload({ 528 sequentialUploads: true, 529 add: function (e, data) { 530 if (data.files[0].size < maxSizeFile) data.submit(); 531 }, 532 change: function (e, data) { 533 $.each(data.files, function (index, file) { 534 var attach = {}; 535 attach.fileName = file.name; 536 var ext = file.name.split('.'); 537 if (file.name.length > 10) attach.fileName = ext.length == 1 ? file.name.substr(0, 10) : file.name.substr(0, 6) + '.' + ext[ext.length - 1]; 538 attach.fileSize = formatBytes(file.size); 539 if (file.size > maxSizeFile) attach.error = 'Tamanho de arquivo nao permitido!!' 540 541 $('.attachments-list').append(DataLayer.render(path + 'templates/attachment_add_itemlist.ejs', { 542 file: attach 543 })); 544 545 if (file.size < maxSizeFile) { 546 $('.fileinput-button.new').append(data.fileInput[0]).removeClass('new'); 547 $('.attachments-list').find('[type=file]').addClass('hidden'); 548 549 } else $('.fileinput-button.new').removeClass('new'); 550 551 552 $('.attachments-list').find('.button.close').button({ 553 icons: { 554 primary: "ui-icon-close" 555 }, 556 text: false 557 }).click(function () { 558 var idAttach = $(this).parent().find('input[name="fileId[]"]').val(); 559 $('.attachment-list').find('input[value="' + idAttach + '"]') 560 $(this).parent().remove(); 561 }); 562 563 }) 564 }, 565 done: function (e, data) { 566 var currentUpload = $('.progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide(); 567 568 if ( !! data.result && data.result != "[]") { 569 var newAttach = (attch = jQuery.parseJSON(data.result)) ? attch : jQuery.parseJSON(data.result[0].activeElement.childNodes[0].data); 570 $('.attachment-list').append('<input tyepe="hidden" name="attachment[]" value="' + newAttach['attachment'][0][0].id + '"/>'); 571 currentUpload.removeClass('on-complete').parents('p').append('<input type="hidden" name="fileId[]" value="' + newAttach['attachment'][0][0].id + '"/>').find('.status-upload').addClass('ui-icon ui-icon-check'); 572 } else currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel'); 573 } 574 }); 575 $('.attachments-list .button').button(); 576 577 if ( !! window.FormData) $('#fileupload').bind('fileuploadstart', function () { 578 var widget = $(this), 579 progressElement = $('#fileupload-progress').fadeIn(), 580 interval = 500, 581 total = 0, 582 loaded = 0, 583 loadedBefore = 0, 584 progressTimer, progressHandler = function (e, data) { 585 loaded = data.loaded; 586 total = data.total; 587 }, 588 stopHandler = function () { 589 widget.unbind('fileuploadprogressall', progressHandler).unbind('fileuploadstop', stopHandler); 590 window.clearInterval(progressTimer); 591 progressElement.fadeOut(function () { 592 progressElement.html(''); 593 }); 594 }, 595 formatTime = function (seconds) { 596 var date = new Date(seconds * 1000); 597 return ('0' + date.getUTCHours()).slice(-2) + ':' + ('0' + date.getUTCMinutes()).slice(-2) + ':' + ('0' + date.getUTCSeconds()).slice(-2); 598 }, 599 600 formatPercentage = function (floatValue) { 601 return (floatValue * 100).toFixed(2) + ' %'; 602 }, 603 updateProgressElement = function (loaded, total, bps) { 604 progressElement.html( 605 formatBytes(bps) + 'ps | ' + formatTime((total - loaded) / bps) + ' | ' + formatPercentage(loaded / total) + ' | ' + formatBytes(loaded) + ' / ' + formatBytes(total)); 606 }, 607 intervalHandler = function () { 608 var diff = loaded - loadedBefore; 609 if (!diff) { 610 return; 611 } 612 loadedBefore = loaded; 613 updateProgressElement( 614 loaded, total, diff * (1000 / interval)); 615 }; 616 widget.bind('fileuploadprogressall', progressHandler).bind('fileuploadstop', stopHandler); 617 progressTimer = window.setInterval(intervalHandler, interval); 618 }); 619 620 disponibily(objTask, path, attendees, 'task'); 621 622 UI.dialogs.addTask.find('.button-add-alarms').click(function () { 623 var li_attach = DataLayer.render(path + 'templates/alarms_add_itemlist.ejs', { 624 type: 1 625 }); 626 627 jQuery('.task-alarms-list').append(li_attach).find('.button.remove').button({ 628 text: false, 629 icons: { 630 primary: 'ui-icon-close' 631 } 632 }).click(function (el) { 633 $(this).parent().remove().find('li').is(':empty') 634 }); 635 // valicacao de campos numericos 636 $('.number').numeric(); 637 }); 638 639 640 UI.dialogs.addTask.dialog('open'); 155 641 } 156 157 UI.dialogs.addTask.find('.calendar_addevent_details_lnk_timezone').click(function(e){158 $(this).addClass('hidden');159 $('.calendar-addtask-details-txt-timezone').removeClass('hidden');160 e.preventDefault();161 });162 163 /*Seleciona a agenda padrão para visualização/edição de um evento*/164 if(objEvent.id)165 UI.dialogs.addTask.find('option[value="'+objEvent.calendar+'"]').attr('selected','selected').trigger('change');166 167 /* Checkbox allday */168 169 UI.dialogs.addTask.find('input[name="allDay"]').click(function(){170 $(this).attr("checked") ?171 UI.dialogs.addTask.find('.start-time, .end-time').addClass('hidden') :172 UI.dialogs.addTask.find('.start-time, .end-time').removeClass('hidden');173 updateMap(true);174 });175 176 UI.dialogs.addTask.find('.button').button();177 UI.dialogs.addTask.find('.button.add').button({178 icons: {179 secondary: "ui-icon-plus"180 }181 });182 183 // ==== validation events ====184 UI.dialogs.addTask.find(".input-group .h1").Watermark("Tarefa sem título");185 if(User.preferences.hourFormat.length == 5) {186 UI.dialogs.addTask.find(".end-time, .start-time").mask("99:99", {187 completed: function(){188 updateMap();189 }190 });191 } else {192 $.mask.definitions['{']='[ap]';193 $.mask.definitions['}']='[m]';194 UI.dialogs.addTask.find(".end-time, .start-time").mask("99:99 {}", {195 completed:function(){196 $(this).val(date.Calendar.defaultToAmPm($(this).val()));197 $(this).timepicker("refresh");198 $(this).val($(this).val().replace(/[\.]/gi, ""));199 updateMap();200 }201 });202 }203 UI.dialogs.addTask.find(".number").numeric();204 User.preferences.dateFormat.indexOf('-') > 0 ?205 UI.dialogs.addTask.find(".date").mask("99-99-9999", {206 completed:function(){207 updateMap();208 }209 }) :210 UI.dialogs.addTask.find(".date").mask("99/99/9999", {211 completed:function(){212 updateMap();213 }214 });215 216 UI.dialogs.addTask.find(".menu-addtask")217 .children(".delete").click(function(){218 $.Zebra_Dialog('Tem certeza que deseja excluir o evento?', {219 'type': 'question',220 'overlay_opacity': '0.5',221 'buttons': ['Sim', 'Não'],222 'onClose': function(clicked) {223 if(clicked == 'Sim'){224 canDiscardEventDialog = true;225 /* Remove por filtro */226 DataLayer.removeFilter('schedulable', {filter: ['AND', ['=', 'id', objEvent.id], ['=', 'calendar', objEvent.calendar], ['=','user',(objEvent.me.user ? objEvent.me.user.id : objEvent.me.id)]]});227 Calendar.rerenderView(true);228 /********************/229 UI.dialogs.addTask.dialog("close");230 }231 }232 });233 }).end()234 235 .children(".cancel").click(function(){236 UI.dialogs.addTask.dialog("close");237 }).end()238 239 .children(".save").click(function(){240 /* Validação */241 var msg = false;242 if(msg = validDateEvent()){243 $(".new-event-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg);244 return false;245 }246 247 canDiscardEventDialog = true;248 249 var exit = function(event){250 if(event)251 DataLayer.remove('schedulable', event, false);252 253 UI.dialogs.addTask.children().find('form.form-addevent').submit();254 UI.dialogs.addTask.dialog("close"); }255 256 if(repeat){257 DataLayer.remove('repeat', false);258 DataLayer.put('repeat', repeat);259 DataLayer.commit('repeat', false, exit(repeat.schedulable));260 }else261 exit();262 }).end()263 264 .children(".export").click(function(){265 UI.dialogs.addTask.children().find(".form-export").submit();266 });267 268 var attendeeHtml = DataLayer.render( path+'templates/attendee_add.ejs', {269 event:objEvent270 });271 272 // load template of attendees273 var blkAddAtendee = UI.dialogs.addTask.find('#calendar_addtask_details6').append(attendeeHtml);274 275 var dates = UI.dialogs.addTask.find('input.date').datepicker({276 dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'),277 onSelect : function( selectedDate ){278 updateMap();279 }280 });281 282 UI.dialogs.addTask.find('input.time').timepicker({283 closeText: 'Ok',284 hourGrid: 4,285 minuteGrid: 10,286 ampm : ((User.preferences.hourFormat.length > 5) ? true: false),287 timeFormat: "hh:mm tt",288 onSelect: function (selectedDateTime){289 if(!(User.preferences.hourFormat.length == 5))290 $(this).val(selectedDateTime.replace(/[\.]/gi, ""));291 updateMap();292 },293 onClose : function (selectedDateTime){294 if(!(User.preferences.hourFormat.length == 5))295 $(this).val(selectedDateTime.replace(/[\.]/gi, ""));296 }297 298 299 });300 301 blkAddAtendee.find('.add-attendee-search .ui-icon-search').click(function(event) {302 blkAddAtendee.find('.add-attendee-search input').keydown();303 });304 305 306 blkAddAtendee.find('.add-attendee-search input').keydown(function(event) {307 308 if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') {309 var result = DataLayer.get('user', ["*", "name", $(this).val()], true);310 311 /**312 * TODO: trocar por template313 */314 blkAddAtendee.find('ul.search-result-list').empty().css('overflow', 'hidden');315 if (!result) {316 blkAddAtendee.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>');317 }318 319 for(i=0; i<result.length; i++)320 result[i].enabled = (blkAddAtendee.find('dd.attendee-list ul.attendee-list label.mail[title="' + result[i].mail + '"]').length) ? false : true;321 322 blkAddAtendee.find('ul.search-result-list').append(DataLayer.render( path+'templates/participants_search_itemlist.ejs', result));323 324 blkAddAtendee.find('ul.search-result-list li').click(function(event, ui){325 if ($(event.target).is('input')) {326 old_item = $(event.target).parents('li');327 newAttendeeId = DataLayer.put('participant', {328 user: old_item.find('.id').html(),329 isExternal: old_item.find('.isExternal').html()330 });331 332 attendees[old_item.find('.id').html()] = old_item.find('.name').html();333 334 blkAddAtendee.find('dd.attendee-list ul.attendee-list')335 .append(DataLayer.render(path+'templates/participants_add_itemlist.ejs', [{336 id: newAttendeeId,337 name: old_item.find('.name').html(),338 mail: old_item.find('.mail').html(),339 isExternal: old_item.find('.isExternal').html(),340 acl: objEvent.acl,341 isDirty: !!!objEvent.id342 }]))343 .scrollTo('max');344 /**345 * Delegação de participação de um participante com permissão apenas de leitura346 *347 */348 if(!objEvent.acl.organization && !objEvent.acl.write && !objEvent.acl.inviteGuests && objEvent.acl.read ){349 350 blkAddAtendee.find('.block-add-attendee.search').addClass('hidden');351 blkAddAtendee.find('.block-add-attendee.search dt').html('Adicionar outros contatos');352 353 blkAddAtendee.find('.status option').toggleClass('hidden');354 blkAddAtendee.find('option[value=5]').attr('selected','selected').trigger('change');355 blkAddAtendee.find('.request-update').removeClass('hidden');356 357 blkAddAtendee.find('dd.attendee-list ul.attendee-list li .button.close').parents('li').find('input[name="delegatedFrom[]"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val());358 359 blkAddAtendee.find('.me .participant-delegate').addClass('disable ui-button-disabled ui-state-disabled');360 blkAddAtendee.find(".button.close").button({361 icons: {362 primary: "ui-icon-close"363 },364 text: false365 }).click(function () {366 367 $(this).parents('li').find('input[name="delegatedFrom[]"]').val('');368 blkAddAtendee.find('.request-update').addClass('hidden');369 blkAddAtendee.find('.status option').toggleClass('hidden');370 blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change');371 blkAddAtendee.find('.me .participant-delegate').removeClass('disable ui-button-disabled ui-state-disabled attendee-permissions-change-button')372 .find('.ui-icon-person').removeClass('attendee-permissions-change').end();373 374 DataLayer.remove('participant', $(this).parents('li').find('[type=checkbox]').val());375 $(this).parents('li').remove();376 })377 .addClass('tiny');378 }else{379 callbackAttendee();380 old_item.remove();381 }382 }383 });384 385 event.preventDefault();386 }387 });388 389 UI.dialogs.addTask.find('.row.fileupload-buttonbar .button').filter('.delete').button({390 icons: {391 primary: "ui-icon-close"392 },393 text: 'Excluir'394 }).click(function () {395 $.Zebra_Dialog('Tem certeza que deseja excluir todos anexos?', {396 'type': 'question',397 'overlay_opacity': '0.5',398 'buttons': ['Sim', 'Não'],399 'onClose': function(clicked) {400 if(clicked == 'Sim'){401 402 var ids = [];403 $.each($('.attachment-list input'), function (i, input) {404 DataLayer.remove('schedulableToAttachment', {405 filter: ['=', 'id', ''+input.value]406 });407 });408 $('.attachment-list input').remove();409 $('.row.fileupload-buttonbar .attachments-list p').remove();410 }411 }});412 }).end()413 .filter('.close').button({414 icons: {415 primary: "ui-icon-close"416 },417 text: false418 }).click(function () {419 DataLayer.remove('schedulableToAttachment', $(this).parents('p').find('input[name="fileId[]"]').val());420 $(this).parents('p').remove();421 }).end()422 .filter('.downlaod-archive').button({423 icons: {424 primary: "ui-icon-arrowthickstop-1-s"425 },426 text: false427 });428 var maxSizeFile = 2000000;429 $('#fileupload').fileupload({430 sequentialUploads: true,431 add: function (e, data) {432 if(data.files[0].size < maxSizeFile)433 data.submit();434 },435 change: function (e, data) {436 $.each(data.files, function (index, file) {437 var attach = {};438 attach.fileName = file.name;439 var ext = file.name.split('.');440 if(file.name.length > 10)441 attach.fileName = ext.length == 1 ? file.name.substr(0, 10) : file.name.substr(0, 6) + '.' + ext[ext.length -1];442 attach.fileSize = formatBytes(file.size);443 if(file.size > maxSizeFile)444 attach.error = 'Tamanho de arquivo nao permitido!!'445 446 $('.attachments-list').append(DataLayer.render(path+'templates/attachment_add_itemlist.ejs', {447 file : attach448 }));449 450 if(file.size < maxSizeFile){451 $('.fileinput-button.new').append(data.fileInput[0]).removeClass('new');452 $('.attachments-list').find('[type=file]').addClass('hidden');453 454 }else455 $('.fileinput-button.new').removeClass('new');456 457 458 $('.attachments-list').find('.button.close').button({459 icons: {460 primary: "ui-icon-close"461 },462 text: false463 }).click(function(){464 var idAttach = $(this).parent().find('input[name="fileId[]"]').val();465 $('.attachment-list').find('input[value="'+idAttach+'"]')466 $(this).parent().remove();467 });468 469 })470 },471 done: function(e, data){472 var currentUpload = $('.progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide();473 474 if(!!data.result && data.result != "[]"){475 var newAttach = (attch = jQuery.parseJSON(data.result)) ? attch : jQuery.parseJSON(data.result[0].activeElement.childNodes[0].data);476 $('.attachment-list').append('<input tyepe="hidden" name="attachment[]" value="'+newAttach['attachment'][0][0].id+'"/>');477 currentUpload.removeClass('on-complete').parents('p')478 .append('<input type="hidden" name="fileId[]" value="'+newAttach['attachment'][0][0].id+'"/>')479 .find('.status-upload').addClass('ui-icon ui-icon-check');480 }else481 currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel');482 }483 });484 $('.attachments-list .button').button();485 486 if(!!window.FormData)487 $('#fileupload').bind('fileuploadstart', function () {488 var widget = $(this),489 progressElement = $('#fileupload-progress').fadeIn(),490 interval = 500,491 total = 0,492 loaded = 0,493 loadedBefore = 0,494 progressTimer,495 progressHandler = function (e, data) {496 loaded = data.loaded;497 total = data.total;498 },499 stopHandler = function () {500 widget501 .unbind('fileuploadprogressall', progressHandler)502 .unbind('fileuploadstop', stopHandler);503 window.clearInterval(progressTimer);504 progressElement.fadeOut(function () {505 progressElement.html('');506 });507 },508 formatTime = function (seconds) {509 var date = new Date(seconds * 1000);510 return ('0' + date.getUTCHours()).slice(-2) + ':' +511 ('0' + date.getUTCMinutes()).slice(-2) + ':' +512 ('0' + date.getUTCSeconds()).slice(-2);513 },514 /* formatBytes = function (bytes) {515 if (bytes >= 1000000000) {516 return (bytes / 1000000000).toFixed(2) + ' GB';517 }518 if (bytes >= 1000000) {519 return (bytes / 1000000).toFixed(2) + ' MB';520 }521 if (bytes >= 1000) {522 return (bytes / 1000).toFixed(2) + ' KB';523 }524 return bytes + ' B';525 },*/526 formatPercentage = function (floatValue) {527 return (floatValue * 100).toFixed(2) + ' %';528 },529 updateProgressElement = function (loaded, total, bps) {530 progressElement.html(531 formatBytes(bps) + 'ps | ' +532 formatTime((total - loaded) / bps) + ' | ' +533 formatPercentage(loaded / total) + ' | ' +534 formatBytes(loaded) + ' / ' + formatBytes(total)535 );536 },537 intervalHandler = function () {538 var diff = loaded - loadedBefore;539 if (!diff) {540 return;541 }542 loadedBefore = loaded;543 updateProgressElement(544 loaded,545 total,546 diff * (1000 / interval)547 );548 };549 widget550 .bind('fileuploadprogressall', progressHandler)551 .bind('fileuploadstop', stopHandler);552 progressTimer = window.setInterval(intervalHandler, interval);553 });554 555 if(objEvent.isShared){556 557 var acls = Calendar.signatureOf[objEvent.calendar].permission.acl;558 559 if(!acls.write){560 UI.dialogs.addTask.find(':input').attr('disabled', 'disabled');561 UI.dialogs.addTask.find('.button').hide();562 }563 564 if(acls.remove)565 UI.dialogs.addTask.find('.button.remove').show();566 567 UI.dialogs.addTask.find('.button.cancel').show();568 }569 570 disponibily(objEvent, path, attendees);571 572 UI.dialogs.addTask.find('.button-add-alarms').click(function(){573 var li_attach = DataLayer.render(path+'templates/alarms_add_itemlist.ejs', {type: 1});574 575 jQuery('.task-alarms-list').append(li_attach).find('.button.remove').button({576 text:false,577 icons:{578 primary:'ui-icon-close'579 }580 }).click(function(el) {581 $(this).parent().remove().find('li').is(':empty')582 });583 // valicacao de campos numericos584 $('.number').numeric();585 });586 587 588 UI.dialogs.addTask.dialog('open');589 }
Note: See TracChangeset
for help on using the changeset viewer.