Changeset 6044
- Timestamp:
- 04/26/12 15:19:28 (12 years ago)
- Location:
- trunk/prototype/modules/calendar
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/prototype/modules/calendar/js/helpers.js
r5947 r6044 1 1 function formatBytes(bytes) { 2 3 4 5 6 7 8 9 10 11 2 if (bytes >= 1000000000) { 3 return (bytes / 1000000000).toFixed(2) + ' GB'; 4 } 5 if (bytes >= 1000000) { 6 return (bytes / 1000000).toFixed(2) + ' MB'; 7 } 8 if (bytes >= 1000) { 9 return (bytes / 1000).toFixed(2) + ' KB'; 10 } 11 return bytes + ' B'; 12 12 }; 13 13 14 14 function validDateEvent(){ 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 15 var start_date = $(".new-event-win.active .start-date").val(); 16 var end_date = $(".new-event-win.active .end-date").val(); 17 var start_time = $(".new-event-win.active .start-time").val(); 18 var end_time = $(".new-event-win.active .end-time").val(); 19 var isAllDay = $('.new-event-win.active input[name="allDay"]').is(':checked'); 20 21 if(start_date == "") 22 return 'Por favor, informe uma data inicial'; 23 else if(end_date == "") 24 return 'Por favor, informe uma data final'; 25 else if(!isAllDay && start_time == "") 26 return 'Por favor, informe uma hora inicial'; 27 else if(!isAllDay && end_time == "") 28 return 'Por favor, informe uma hora final'; 29 30 var formatString = (isAllDay)? User.preferences.dateFormat+" HH:mm" : User.preferences.dateFormat + " " + User.preferences.hourFormat; 31 32 var startDate = Date.parseExact( isAllDay ? start_date+ " 00:00": start_date + " " + $.trim(start_time) , formatString ); 33 var endDate = Date.parseExact( isAllDay ? end_date+ " 00:00": end_date + " " + $.trim(end_time) , formatString ); 34 35 if(startDate == null || startDate.getTime() < 0 ) 36 return 'Data inicial inválida'; 37 if(endDate == null || endDate.getTime() < 0) 38 return 'Data final inválida'; 39 40 if((endDate.compareTo(startDate) != 1) && !((endDate.compareTo(startDate) == 0) && (isAllDay))){ 41 return (start_date == end_date) ? 42 ((end_time == start_time) ? 'Hora inicial igual a final' : 'Hora final menor que a inicial') : 43 'Data final menor que a inicial'; 44 } 45 return false; 46 46 } 47 47 … … 67 67 function eventDetails( objEvent, decoded, path, isMail, repeat) 68 68 { 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 69 attendees = {}; 70 71 if(path == undefined) 72 path = ""; 73 74 if( !decoded ) 75 objEvent = DataLayer.decode( "schedulable:calendar", objEvent ); 76 77 if(!isMail) 78 objEvent = DataLayer.encode( "schedulable:preview", objEvent ); 79 80 if(typeof(objEvent.id) == 'undefined'){ 81 objEvent.alarms = Calendar.signatureOf[User.preferences.defaultCalendar || Calendar.calendarIds[0]].defaultAlarms || false; 82 objEvent.useAlarmDefault = 1; 83 } 84 85 /** 86 86 * canDiscardEventDialog deve ser true se não houver alterações no evento 87 87 */ 88 89 88 canDiscardEventDialog = true; 89 /** 90 90 * zebraDiscardEventDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog) 91 91 * já está aberta na tela, uma vez que não é possivel acessar o evento ESC utilizado para fechá-la 92 92 */ 93 94 95 93 zebraDiscardEventDialog = false; 94 95 /** 96 96 ACLs do participant 97 97 */ 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 98 acl_names = { 99 'w': 'acl-white', 100 'i': 'acl-invite-guests', 101 'p': 'acl-participation-required' 102 }; 103 104 var callbackAttendee = function(){ 105 //Cria qtip de permissões pelo click do checkbox 106 var checked = false; 107 blkAddAtendee.find("li.not-attendee").addClass('hidden'); 108 109 blkAddAtendee.find("li .button").filter(".close.new").button({ 110 icons: { 111 primary: "ui-icon-close" 112 }, 113 text: false 114 }).click(function () { 115 DataLayer.remove('participant', $(this).parents('li').find('[type=checkbox]').val()); 116 if($(this).parent().find('.button.delegate').hasClass('attendee-permissions-change-button')){ 117 117 118 119 118 blkAddAtendee.find('.request-update').addClass('hidden'); 119 blkAddAtendee.find('.status option').toggleClass('hidden'); 120 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 121 blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change'); 122 } 123 124 $(this).parents('li').remove(); 125 126 if(blkAddAtendee.find(".attendee-list li").length == 1) 127 blkAddAtendee.find("li.not-attendee").removeClass('hidden'); 128 }) 129 .addClass('tiny disable ui-button-disabled ui-state-disabled') 130 .removeClass('new').end() 131 132 .filter(".delegate.new").button({ 133 icons: { 134 primary: "ui-icon-transferthick-e-w" 135 }, 136 text: false 137 }).click(function () { 138 138 139 140 141 139 if($(this).hasClass('attendee-permissions-change-button')){ 140 $(this).removeClass('attendee-permissions-change-button') 141 .find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change').end(); 142 142 143 143 $(this).parents('li').find('input[name="delegatedFrom[]"]').val(''); 144 144 145 146 145 blkAddAtendee.find('.request-update').addClass('hidden'); 146 blkAddAtendee.find('.status option').toggleClass('hidden'); 147 147 148 148 149 149 blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change'); 150 150 151 }else{ 152 blkAddAtendee.find('.delegate').removeClass('attendee-permissions-change-button'); 153 blkAddAtendee.find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change'); 154 155 $(this).addClass('attendee-permissions-change-button') 156 .find('.ui-icon-transferthick-e-w').addClass('attendee-permissions-change').end(); 157 $(this).parents('li').find('input[name="delegatedFrom[]"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 158 159 blkAddAtendee.find('.request-update').removeClass('hidden'); 160 if(blkAddAtendee.find('.status option.hidden').length == 1) 161 blkAddAtendee.find('.status option').toggleClass('hidden'); 162 163 blkAddAtendee.find('option[value=5]').attr('selected','selected').trigger('change'); 164 } 165 }) 166 .addClass('tiny disable ui-button-disabled ui-state-disabled') 167 .removeClass('new').end() 168 169 .filter(".edit.new").button({ 170 icons: { 171 primary: "ui-icon-key" 172 }, 173 text: false 174 }).click(function() { 175 176 if(!!!checked) 177 $(this).parents('li').find('[type=checkbox]').attr('checked', (!$(this).parent().find('[type=checkbox]').is(':checked'))).end(); 178 179 var aclsParticipant = $(this).parents('li').find('input[name="attendeeAcl[]"]').val(); 180 checked = false; 181 182 if( $('.qtip.qtip-blue.qtip-active').val() !== ''){ 183 blkAddAtendee.find('dd.attendee-list').qtip({ 184 show: {ready: true, solo: true, when: {event: 'click'}}, 185 hide: false, 186 content: { 187 text: $('<div></div>').html( DataLayer.render( 'templates/attendee_permissions.ejs', {} ) ), 188 title: { 189 text:'Permissões', 190 button: '<a class="button close" href="#">close</a>' 191 } 192 }, 193 style: {name: 'blue', tip: {corner: 'leftMiddle'}, border: {width: 4, radius: 8}, width: {min: 230, max:230}}, 194 position: { 195 corner: { 196 target: 'rightMiddle', 197 tooltip: 'leftMiddle' 198 }, 199 adjust: {x:0, y:0} 200 } 201 }) 202 .qtip("api").onShow = function(arg0) { 203 $('.qtip-active .button.close').button({ 204 icons: {primary: "ui-icon-close"}, 205 text: false 206 }) 207 .click(function(){ 208 blkAddAtendee.find('dd.attendee-list').qtip('destroy'); 209 }); 151 }else{ 152 blkAddAtendee.find('.delegate').removeClass('attendee-permissions-change-button'); 153 blkAddAtendee.find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change'); 154 155 $(this).addClass('attendee-permissions-change-button') 156 .find('.ui-icon-transferthick-e-w').addClass('attendee-permissions-change').end(); 157 $(this).parents('li').find('input[name="delegatedFrom[]"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 158 159 blkAddAtendee.find('.request-update').removeClass('hidden'); 160 if(blkAddAtendee.find('.status option.hidden').length == 1) 161 blkAddAtendee.find('.status option').toggleClass('hidden'); 162 163 blkAddAtendee.find('option[value=5]').attr('selected','selected').trigger('change'); 164 } 165 }) 166 .addClass('tiny disable ui-button-disabled ui-state-disabled') 167 .removeClass('new').end() 168 169 .filter(".edit.new").button({ 170 icons: { 171 primary: "ui-icon-key" 172 }, 173 text: false 174 }).click(function() { 175 176 if(!!!checked) 177 $(this).parents('li').find('[type=checkbox]').attr('checked', (!$(this).parent().find('[type=checkbox]').is(':checked'))).end(); 178 179 var aclsParticipant = $(this).parents('li').find('input[name="attendeeAcl[]"]').val(); 180 checked = false; 181 182 if( $('.qtip.qtip-blue.qtip-active').val() !== ''){ 183 blkAddAtendee.find('dd.attendee-list').qtip({ 184 show: { 185 ready: true, 186 solo: true, 187 when: { 188 event: 'click' 189 } 190 }, 191 hide: false, 192 content: { 193 text: $('<div></div>').html( DataLayer.render( 'templates/attendee_permissions.ejs', {} ) ), 194 title: { 195 text:'Permissões', 196 button: '<a class="button close" href="#">close</a>' 197 } 198 }, 199 style: { 200 name: 'blue', 201 tip: { 202 corner: 'leftMiddle' 203 }, 204 border: { 205 width: 4, 206 radius: 8 207 }, 208 width: { 209 min: 230, 210 max:230 211 } 212 }, 213 position: { 214 corner: { 215 target: 'rightMiddle', 216 tooltip: 'leftMiddle' 217 }, 218 adjust: { 219 x:0, 220 y:0 221 } 222 } 223 }) 224 .qtip("api").onShow = function(arg0) { 225 $('.qtip-active .button.close').button({ 226 icons: { 227 primary: "ui-icon-close" 228 }, 229 text: false 230 }) 231 .click(function(){ 232 blkAddAtendee.find('dd.attendee-list').qtip('destroy'); 233 }); 210 234 211 235 $('.qtip-active .button.save').button().click(function(){ 212 236 213 214 215 216 217 218 219 220 221 237 var acl = ''; 238 $('.qtip-active').find('[type=checkbox]:checked').each(function(i, obj) { 239 acl+= obj.value; 240 }); 241 242 blkAddAtendee.find('dd.attendee-list [type=checkbox]:checked').siblings('input[name="attendeeAcl[]"]').each(function(i, obj) { 243 obj.value = 'r'+acl; 244 }).parents('li').find('.button.edit').addClass('attendee-permissions-change-button') 245 .find('.ui-icon-key').addClass('attendee-permissions-change'); 222 246 223 247 blkAddAtendee.find('dd.attendee-list [type=checkbox]').attr('checked', false); 224 248 225 249 blkAddAtendee.find('dd.attendee-list').qtip('destroy'); 226 250 227 228 229 230 231 251 }); 252 $('.qtip-active .button.cancel').button().click(function(){ 253 blkAddAtendee.find('dd.attendee-list [type=checkbox]').attr('checked', false); 254 blkAddAtendee.find('dd.attendee-list').qtip('destroy'); 255 }); 232 256 233 234 235 236 257 if(aclsParticipant) 258 for(var i = 1; i < aclsParticipant.length; i++){ 259 $('.qtip-active').find('input[name="'+acl_names[aclsParticipant.charAt(i)]+'"]').attr('checked', true); 260 } 237 261 238 262 239 263 $('.button').button(); 240 264 241 }; 242 }else{ 243 if(!$('.new-event-win dd.attendee-list').find('[type=checkbox]:checked').length){ 244 blkAddAtendee.find('dd.attendee-list').qtip('destroy'); 245 }else{ 246 $('.qtip-active .button.save .ui-button-text').html('Aplicar a todos') 247 } 248 249 }; 250 }) 251 .addClass('tiny disable ui-button-disabled ui-state-disabled') 252 .removeClass('new').end() 253 254 .filter(".open-delegate.new").click(function(){ 255 if($(this).hasClass('ui-icon-triangle-1-e')){ 256 $(this).removeClass('ui-icon-triangle-1-e').addClass('ui-icon-triangle-1-s'); 257 $(this).parents('li').find('.list-delegates').removeClass('hidden'); 258 }else{ 259 $(this).removeClass('ui-icon-triangle-1-s').addClass('ui-icon-triangle-1-e'); 260 $(this).parents('li').find('.list-delegates').addClass('hidden'); 261 } 262 263 }).removeClass('new'); 264 265 266 blkAddAtendee.find("li input[type=checkbox].new").click(function(){ 267 if(!$('.new-event-win dd.attendee-list').find('[type=checkbox]:checked').length){ 268 blkAddAtendee.find('dd.attendee-list').qtip('destroy'); 269 }else{ 270 checked = true; 271 $(this).parents('li').find('.button.edit').click(); 272 } 273 }).removeClass('new'); 274 275 UI.dialogs.addEvent.find('.attendees-list li').hover( 276 function () { 277 $(this).addClass("hover-attendee"); 278 $(this).find('.button').removeClass('disable ui-button-disabled ui-state-disabled').end() 279 .find('.attendee-options').addClass('hover-attendee'); 280 }, 281 function () { 282 $(this).removeClass("hover-attendee"); 283 $(this).find('.button').addClass('disable ui-button-disabled ui-state-disabled').end() 284 .find('.attendee-options').removeClass('hover-attendee');; 285 } 286 ); 287 288 289 } 290 291 var html = DataLayer.render( path+'templates/event_add.ejs', {event:objEvent}); 292 293 if (!UI.dialogs.addEvent) { 294 UI.dialogs.addEvent = jQuery('#sandbox').append('<div title="Criar Evento" class="new-event-win active"> <div>').find('.new-event-win.active').html(html).dialog({ 295 resizable: false, 296 modal:true, 297 autoOpen: false, 298 width:700, 299 position: 'center', 300 close: function(event, ui) { 301 /** 265 }; 266 }else{ 267 if(!$('.new-event-win dd.attendee-list').find('[type=checkbox]:checked').length){ 268 blkAddAtendee.find('dd.attendee-list').qtip('destroy'); 269 }else{ 270 $('.qtip-active .button.save .ui-button-text').html('Aplicar a todos') 271 } 272 273 }; 274 }) 275 .addClass('tiny disable ui-button-disabled ui-state-disabled') 276 .removeClass('new').end() 277 278 .filter(".open-delegate.new").click(function(){ 279 if($(this).hasClass('ui-icon-triangle-1-e')){ 280 $(this).removeClass('ui-icon-triangle-1-e').addClass('ui-icon-triangle-1-s'); 281 $(this).parents('li').find('.list-delegates').removeClass('hidden'); 282 }else{ 283 $(this).removeClass('ui-icon-triangle-1-s').addClass('ui-icon-triangle-1-e'); 284 $(this).parents('li').find('.list-delegates').addClass('hidden'); 285 } 286 287 }).removeClass('new'); 288 289 290 blkAddAtendee.find("li input[type=checkbox].new").click(function(){ 291 if(!$('.new-event-win dd.attendee-list').find('[type=checkbox]:checked').length){ 292 blkAddAtendee.find('dd.attendee-list').qtip('destroy'); 293 }else{ 294 checked = true; 295 $(this).parents('li').find('.button.edit').click(); 296 } 297 }).removeClass('new'); 298 299 UI.dialogs.addEvent.find('.attendees-list li').hover( 300 function () { 301 $(this).addClass("hover-attendee"); 302 $(this).find('.button').removeClass('disable ui-button-disabled ui-state-disabled').end() 303 .find('.attendee-options').addClass('hover-attendee'); 304 }, 305 function () { 306 $(this).removeClass("hover-attendee"); 307 $(this).find('.button').addClass('disable ui-button-disabled ui-state-disabled').end() 308 .find('.attendee-options').removeClass('hover-attendee');; 309 } 310 ); 311 312 313 } 314 315 var html = DataLayer.render( path+'templates/event_add.ejs', { 316 event:objEvent 317 }); 318 319 if (!UI.dialogs.addEvent) { 320 UI.dialogs.addEvent = jQuery('#sandbox').append('<div title="Criar Evento" class="new-event-win active"> <div>').find('.new-event-win.active').html(html).dialog({ 321 resizable: false, 322 modal:true, 323 autoOpen: false, 324 width:700, 325 position: 'center', 326 close: function(event, ui) { 327 /** 302 328 * Remove tooltip possivelmente existente 303 329 */ 304 305 330 if ($('dd.attendee-list li:last').data('qtip')) 331 $('dd.attendee-list li:last').qtip('destroy'); 306 332 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 333 attendees = {}; 334 335 }, 336 beforeClose: function(event, ui) { 337 338 if (!canDiscardEventDialog && !zebraDiscardEventDialog) { 339 zebraDiscardEventDialog = true; 340 window.setTimeout(function() { 341 $.Zebra_Dialog('Suas alterações no evento não foram salvas. Deseja descartar as alterações?', { 342 'type': 'question', 343 'overlay_opacity': '0.5', 344 'buttons': ['Descartar alterações', 'Continuar editando'], 345 'onClose': function(clicked) { 346 if(clicked == 'Descartar alterações') { 347 canDiscardEventDialog = true; 348 /** 323 349 *Remoção dos anexos do eventos caso seja cancelado a edição 324 350 */ 325 var ids = []; 326 $.each($('.attachment-list input'), function (i, input) {ids.push(input.value);}); 327 if(ids.length > 0) 328 DataLayer.remove('attachment', {filter: ['IN', 'id', ids]}); 351 var ids = []; 352 $.each($('.attachment-list input'), function (i, input) { 353 ids.push(input.value); 354 }); 355 if(ids.length > 0) 356 DataLayer.remove('attachment', { 357 filter: ['IN', 'id', ids] 358 }); 329 359 330 360 DataLayer.rollback(); 331 361 332 333 334 335 362 UI.dialogs.addEvent.dialog('close'); 363 }else{ 364 zebraDiscardEventDialog = false; 365 } 336 366 337 367 /** 338 368 * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la 339 369 * com ESC, para que o evento ESC não seja propagado para fechamento da … … 341 371 * já existe uma janela de confirmação aberta. 342 372 */ 343 if (!clicked) { 344 window.setTimeout(function() { 345 zebraDiscardEventDialog = false; 346 }, 200); 347 } 348 } 349 }); 350 351 }, 300); 352 353 } 354 return canDiscardEventDialog; 355 } 356 }); 357 358 } else { 359 UI.dialogs.addEvent.html(html); 360 } 361 362 var tabs = UI.dialogs.addEvent.children('.content').tabs(); 363 var calendar = DataLayer.get('calendar', objEvent.calendar); 364 365 if (calendar.timezone != objEvent.timezone){ 366 UI.dialogs.addEvent.find('.calendar-addevent-details-txt-timezone').find('option[value="'+objEvent.timezone+'"]').attr('selected','selected').trigger('change'); 367 UI.dialogs.addEvent.find('.calendar_addevent_details_lnk_timezone').addClass('hidden'); 368 $('.calendar-addevent-details-txt-timezone').removeClass('hidden'); 369 370 } 371 372 DataLayer.render( path+'templates/event_repeat.ejs', {event:objEvent}, function( repeatHtml ){ 373 374 UI.dialogs.addEvent.find('#calendar_addevent_details3').html(repeatHtml); 375 $(".date").datepicker(); 376 377 if(objEvent.repeat) 378 { 379 if( objEvent.repeat['id'] ) 380 { 381 $("[name='repeatId']:last").val( objEvent.repeat['id'] ); 382 } 383 384 if( objEvent.repeat['frequency'] !== 'none' ) 385 { 386 if( objEvent.repeat['startTime'] && objEvent.repeat['startTime'] !== "0" ) 387 { 388 $("[name='startOptions'] [value='customDate']:last").attr( 'selected', 'selected' ); 389 $("[name='start']:last").val(new Date( parseInt(objEvent.repeat['startTime']) ).toString( User.preferences.dateFormat ) ); 390 } 391 else 392 { 393 $("[name='start']:last").val($("[name='startDate']:last").val()); 394 $("[name='start']:last").readOnly=true; 395 $("[name='start']:last").datepicker("disable"); 396 } 397 398 $(".finish_event").removeClass("hidden"); 399 400 if(objEvent.repeat['endTime'] && objEvent.repeat['endTime'] !== "0" ) 401 { 402 //$("[name='occurrences']").addClass("hidden"); 403 $(".customDateEnd").removeClass("hidden"); 404 $(".endRepeat option[value='customDate']").attr('selected', 'selected') 405 $(".customDateEnd").val( new Date( parseInt(objEvent.repeat['endTime']) )/*.setTimezoneOffset( Timezone.timezone( objEvent.timezone ) )*/.toString( User.preferences.dateFormat ) ); 406 } 407 else if (objEvent.repeat['count'] && objEvent.repeat['count'] !== "0" ) { 408 $(".endRepeat option[value='occurrences']").attr('selected', 'selected'); 409 $(".occurrencesEnd").removeClass("hidden"); 410 $(".occurrencesEnd").val(objEvent.repeat['count']); 411 } 412 413 switch ( objEvent.repeat['frequency'] ) 414 { 415 case "daily": 416 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Dia(s)"); 417 $(".frequency option[value='daily']").attr('selected', 'selected'); 418 break; 419 case "weekly": 420 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Semana(s)"); 421 $(".frequency option[value='weekly']").attr('selected', 'selected'); 422 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"); 423 424 $(".event-repeat-weekly").removeClass("hidden"); 425 426 var day = []; 427 428 if( objEvent.repeat.byday ) 429 day = objEvent.repeat.byday.split(','); 430 431 for(i=0; i<day.length; i++) 432 $(".event-repeat-weekly [value='" + day[i] + "']").attr("checked","checked"); 433 434 break; 435 case "monthly": 436 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Mes(s)"); 437 $(".frequency option[value='monthly']").attr('selected', 'selected') 438 $(".event-repeat-monthly:last").removeClass("hidden").find("input[type=radio][name=repeatmonthyType]").click(function(){ 439 if($("input[type=radio][name=repeatmonthyType]:checked").val() == "1") 440 $(".event-repeat-weekly:last").removeClass("hidden"); 441 else 442 $(".event-repeat-weekly:last").addClass("hidden"); 443 }); 444 if($("input[type=radio][name=repeatmonthyType]:checked").val() == "1") 445 $(".event-repeat-weekly:last").removeClass("hidden"); 446 else 447 $(".event-repeat-weekly:last").addClass("hidden"); 448 break; 449 case "yearly": 450 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Ano(s)"); 451 $(".frequency option[value='yearly']").attr('selected', 'selected') 452 break; 453 } 373 if (!clicked) { 374 window.setTimeout(function() { 375 zebraDiscardEventDialog = false; 376 }, 200); 454 377 } 455 378 } 456 else { 457 $(".endRepeat option[value='never']").attr('selected', 'selected'); 458 } 459 460 461 $(".event-repeat-container:last").find(".repeat-in").find("[name=startOptions]").change(function(){ 462 463 if($(this).find("option:selected").val() == "Today"){ 464 $("[name='start']:last").val($("[name='startDate']:last").val()); 465 $("[name='start']:last").readOnly=true; 466 $("[name='start']:last").datepicker("disable"); 467 } 468 else{ 469 $("[name='start']:last").readOnly=false; 470 $("[name='start']:last").datepicker("enable"); 471 } 472 }); 473 $(".event-repeat-container:last").find(".repeat-in").find("[name=endOptions]").change(function(){ 474 if($(this).find("option:selected").val() == "never"){ 475 $("[name='occurrences']").addClass("hidden"); 476 $("[name='end']:last").addClass("hidden"); 477 } 478 else if($(this).find("option:selected").val() == "customDate"){ 479 $("[name='occurrences']").addClass("hidden"); 480 $("[name='end']:last").removeClass("hidden"); 481 } 482 else{ 483 $("[name='end']:last").addClass("hidden"); 484 $("[name='occurrences']").removeClass("hidden"); 485 } 486 }); 379 }); 380 381 }, 300); 382 383 } 384 return canDiscardEventDialog; 385 } 386 }); 387 388 } else { 389 UI.dialogs.addEvent.html(html); 390 } 391 392 var tabs = UI.dialogs.addEvent.children('.content').tabs(); 393 var calendar = DataLayer.get('calendar', objEvent.calendar); 394 395 if (calendar.timezone != objEvent.timezone){ 396 UI.dialogs.addEvent.find('.calendar-addevent-details-txt-timezone').find('option[value="'+objEvent.timezone+'"]').attr('selected','selected').trigger('change'); 397 UI.dialogs.addEvent.find('.calendar_addevent_details_lnk_timezone').addClass('hidden'); 398 $('.calendar-addevent-details-txt-timezone').removeClass('hidden'); 399 400 } 401 402 DataLayer.render( path+'templates/event_repeat.ejs', { 403 event:objEvent 404 }, function( repeatHtml ){ 405 406 UI.dialogs.addEvent.find('#calendar_addevent_details3').html(repeatHtml); 407 $(".date").datepicker(); 408 409 if(objEvent.repeat) 410 { 411 if( objEvent.repeat['id'] ) 412 { 413 $("[name='repeatId']:last").val( objEvent.repeat['id'] ); 414 } 415 416 if( objEvent.repeat['frequency'] !== 'none' ) 417 { 418 if( objEvent.repeat['startTime'] && objEvent.repeat['startTime'] !== "0" ) 419 { 420 $("[name='startOptions'] [value='customDate']:last").attr( 'selected', 'selected' ); 421 $("[name='start']:last").val(new Date( parseInt(objEvent.repeat['startTime']) ).toString( User.preferences.dateFormat ) ); 422 } 423 else 424 { 425 $("[name='start']:last").val($("[name='startDate']:last").val()); 426 $("[name='start']:last").readOnly=true; 427 $("[name='start']:last").datepicker("disable"); 428 } 429 430 $(".finish_event").removeClass("hidden"); 431 432 if(objEvent.repeat['endTime'] && objEvent.repeat['endTime'] !== "0" ) 433 { 434 //$("[name='occurrences']").addClass("hidden"); 435 $(".customDateEnd").removeClass("hidden"); 436 $(".endRepeat option[value='customDate']").attr('selected', 'selected') 437 $(".customDateEnd").val( new Date( parseInt(objEvent.repeat['endTime']) )/*.setTimezoneOffset( Timezone.timezone( objEvent.timezone ) )*/.toString( User.preferences.dateFormat ) ); 438 } 439 else if (objEvent.repeat['count'] && objEvent.repeat['count'] !== "0" ) { 440 $(".endRepeat option[value='occurrences']").attr('selected', 'selected'); 441 $(".occurrencesEnd").removeClass("hidden"); 442 $(".occurrencesEnd").val(objEvent.repeat['count']); 443 } 444 445 switch ( objEvent.repeat['frequency'] ) 446 { 447 case "daily": 448 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Dia(s)"); 449 $(".frequency option[value='daily']").attr('selected', 'selected'); 450 break; 451 case "weekly": 452 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Semana(s)"); 453 $(".frequency option[value='weekly']").attr('selected', 'selected'); 454 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"); 455 456 $(".event-repeat-weekly").removeClass("hidden"); 457 458 var day = []; 459 460 if( objEvent.repeat.byday ) 461 day = objEvent.repeat.byday.split(','); 462 463 for(i=0; i<day.length; i++) 464 $(".event-repeat-weekly [value='" + day[i] + "']").attr("checked","checked"); 465 466 break; 467 case "monthly": 468 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Mes(s)"); 469 $(".frequency option[value='monthly']").attr('selected', 'selected') 470 $(".event-repeat-monthly:last").removeClass("hidden").find("input[type=radio][name=repeatmonthyType]").click(function(){ 471 if($("input[type=radio][name=repeatmonthyType]:checked").val() == "1") 472 $(".event-repeat-weekly:last").removeClass("hidden"); 473 else 474 $(".event-repeat-weekly:last").addClass("hidden"); 475 }); 476 if($("input[type=radio][name=repeatmonthyType]:checked").val() == "1") 477 $(".event-repeat-weekly:last").removeClass("hidden"); 478 else 479 $(".event-repeat-weekly:last").addClass("hidden"); 480 break; 481 case "yearly": 482 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Ano(s)"); 483 $(".frequency option[value='yearly']").attr('selected', 'selected') 484 break; 485 } 486 } 487 } 488 else { 489 $(".endRepeat option[value='never']").attr('selected', 'selected'); 490 } 491 492 493 $(".event-repeat-container:last").find(".repeat-in").find("[name=startOptions]").change(function(){ 494 495 if($(this).find("option:selected").val() == "Today"){ 496 $("[name='start']:last").val($("[name='startDate']:last").val()); 497 $("[name='start']:last").readOnly=true; 498 $("[name='start']:last").datepicker("disable"); 499 } 500 else{ 501 $("[name='start']:last").readOnly=false; 502 $("[name='start']:last").datepicker("enable"); 503 } 504 }); 505 $(".event-repeat-container:last").find(".repeat-in").find("[name=endOptions]").change(function(){ 506 if($(this).find("option:selected").val() == "never"){ 507 $("[name='occurrences']").addClass("hidden"); 508 $("[name='end']:last").addClass("hidden"); 509 } 510 else if($(this).find("option:selected").val() == "customDate"){ 511 $("[name='occurrences']").addClass("hidden"); 512 $("[name='end']:last").removeClass("hidden"); 513 } 514 else{ 515 $("[name='end']:last").addClass("hidden"); 516 $("[name='occurrences']").removeClass("hidden"); 517 } 518 }); 487 519 488 489 490 491 492 493 494 495 496 520 $("[name='frequency']:last").change(function () { 521 $(".frequency-option").addClass("hidden"); 522 if($(this).val() == "none"){ 523 $(".repeat-in").addClass("hidden"); 524 return; 525 }else{ 526 $(".repeat-in").removeClass("hidden"); 527 $("[name='start']:last").val($("[name='startDate']:last").val()); 528 } 497 529 498 530 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 531 switch($(this).val()){ 532 case "daily": 533 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Dia(s)"); 534 break; 535 case "weekly": 536 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Semana(s)"); 537 $(".event-repeat-weekly:last").removeClass("hidden"); 538 break; 539 case "monthly": 540 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Mes(s)"); 541 $(".event-repeat-monthly:last").removeClass("hidden").find("input[type=radio][name=repeatmonthyType]").click(function(){ 542 if($("input[type=radio][name=repeatmonthyType]:checked").val() == "1") 543 $(".event-repeat-weekly:last").removeClass("hidden"); 544 else 545 $(".event-repeat-weekly:last").addClass("hidden"); 546 }); 547 if($("input[type=radio][name=repeatmonthyType]:checked").val() == "1") 548 $(".event-repeat-weekly:last").removeClass("hidden"); 549 else 550 $(".event-repeat-weekly:last").addClass("hidden"); 551 break; 552 default: 553 $(".event-repeat-container:last").find(".repeat-in").find(".interval").html("Ano(s)"); 554 break; 555 } 524 556 525 }); 526 }); 527 528 UI.dialogs.addEvent.find('.calendar_addevent_details_lnk_timezone').click(function(e){ 529 $(this).addClass('hidden'); 530 $('.calendar-addevent-details-txt-timezone').removeClass('hidden'); 531 e.preventDefault(); 557 }); 558 }); 559 560 UI.dialogs.addEvent.find('.calendar_addevent_details_lnk_timezone').click(function(e){ 561 $(this).addClass('hidden'); 562 $('.calendar-addevent-details-txt-timezone').removeClass('hidden'); 563 e.preventDefault(); 564 }); 565 566 UI.dialogs.addEvent.find('.button.remove').button({ 567 text:false, 568 icons:{ 569 primary:'ui-icon-close' 570 } 571 }).click(function(el){ 572 var id; 573 if( id = $(this).parent().find('input[name="alarmId[]"]').val()) 574 DataLayer.remove('alarm', id); 575 $(this).parent().remove().find('li').is(':empty'); 576 }); 577 578 /*Seleciona a agenda padrão para criação de um evento*/ 579 580 if(objEvent.calendar != undefined) 581 var selectedCalendar = objEvent.calendar; 582 else 583 var selectedCalendar = User.preferences.defaultCalendar; 584 585 UI.dialogs.addEvent.find('option[value="'+selectedCalendar+'"]').attr('selected','selected').trigger('change'); 586 587 /*Adicionar alarms padrões, quando alterado a agenda do usuário*/ 588 UI.dialogs.addEvent.find('select[name="calendar"]').change(function(){ 589 if((typeof($('input[name = "idEvent"]').val()) == 'undefined') || (!!!$('input[name = "idEvent"]').val())) { 590 $('input[name = "isDefaultAlarm[]"]').parent().remove(); 591 UI.dialogs.addEvent.find('input[name="defaultAlarm"]').parent().removeClass('hidden'); 592 var calendarSelected = Calendar.signatureOf[$(this).val()]; 593 calendarSelected.useAlarmDefault = 1; 594 if(calendarSelected.defaultAlarms != ""){ 595 var li_attach = DataLayer.render(path+'templates/alarms_add_itemlist.ejs', { 596 alarm:calendarSelected 532 597 }); 533 534 UI.dialogs.addEvent.find('.button.remove').button({text:false, icons:{primary:'ui-icon-close'}}).click(function(el){ 535 var id; 536 if( id = $(this).parent().find('input[name="alarmId[]"]').val()) 537 DataLayer.remove('alarm', id); 538 $(this).parent().remove().find('li').is(':empty'); 539 }); 540 541 /*Seleciona a agenda padrão para criação de um evento*/ 542 543 if(objEvent.calendar != undefined) 544 var selectedCalendar = objEvent.calendar; 545 else 546 var selectedCalendar = User.preferences.defaultCalendar; 547 548 UI.dialogs.addEvent.find('option[value="'+selectedCalendar+'"]').attr('selected','selected').trigger('change'); 549 550 /*Adicionar alarms padrões, quando alterado a agenda do usuário*/ 551 UI.dialogs.addEvent.find('select[name="calendar"]').change(function(){ 552 if((typeof($('input[name = "idEvent"]').val()) == 'undefined') || (!!!$('input[name = "idEvent"]').val())) { 553 $('input[name = "isDefaultAlarm[]"]').parent().remove(); 554 UI.dialogs.addEvent.find('input[name="defaultAlarm"]').parent().removeClass('hidden'); 555 var calendarSelected = Calendar.signatureOf[$(this).val()]; 556 calendarSelected.useAlarmDefault = 1; 557 if(calendarSelected.defaultAlarms != ""){ 558 var li_attach = DataLayer.render(path+'templates/alarms_add_itemlist.ejs', {alarm:calendarSelected}); 559 jQuery('.event-alarms-list').append(li_attach).find('.button.remove').button({text:false, icons:{primary:'ui-icon-close'}}).click(function(el) { 560 $(this).parent().remove().find('li').is(':empty'); 561 }); 562 }else{ 563 UI.dialogs.addEvent.find('input[name="defaultAlarm"]').parent().addClass('hidden'); 564 } 565 } 566 567 var participant = UI.dialogs.addEvent.find('dd.me input[name="attendee[]"]').val(); 568 if( !parseInt(Calendar.signatureOf[$(this).val()].isOwner) ){ 569 var signature = Calendar.signatureOf[$(this).val()]; 570 var organizer = DataLayer.get('calendarSignature', {filter: ['AND', ['=','calendar',signature.calendar.id], ['=','isOwner','1']], criteria: {deepness: 2}}); 598 jQuery('.event-alarms-list').append(li_attach).find('.button.remove').button({ 599 text:false, 600 icons:{ 601 primary:'ui-icon-close' 602 } 603 }).click(function(el) { 604 $(this).parent().remove().find('li').is(':empty'); 605 }); 606 }else{ 607 UI.dialogs.addEvent.find('input[name="defaultAlarm"]').parent().addClass('hidden'); 608 } 609 } 610 611 var participant = UI.dialogs.addEvent.find('dd.me input[name="attendee[]"]').val(); 612 if( !parseInt(Calendar.signatureOf[$(this).val()].isOwner) ){ 613 var signature = Calendar.signatureOf[$(this).val()]; 614 var organizer = DataLayer.get('calendarSignature', { 615 filter: ['AND', ['=','calendar',signature.calendar.id], ['=','isOwner','1']], 616 criteria: { 617 deepness: 2 618 } 619 }); 571 620 572 if($.isArray(organizer)) 573 organizer = organizer[0]; 574 DataLayer.put('participant', {id: participant, user: organizer.user.id, mail: organizer.user.mail}); 621 if($.isArray(organizer)) 622 organizer = organizer[0]; 623 DataLayer.put('participant', { 624 id: participant, 625 user: organizer.user.id, 626 mail: organizer.user.mail 627 }); 575 628 576 UI.dialogs.addEvent.find('dt.me').html(organizer.user.name); 577 UI.dialogs.addEvent.find('li.organizer input[name="attendee_organizer"]').val(participant); 578 UI.dialogs.addEvent.find('li.organizer label').filter('.name').html(organizer.user.name).end() 579 .filter('.mail').html(organizer.user.mail).attr('title',organizer.user.mail); 580 581 }else{ 582 UI.dialogs.addEvent.find('dt.me').html(User.me.name); 583 DataLayer.put('participant', {id: participant, user: User.me.id, mail: User.me.mail}); 584 UI.dialogs.addEvent.find('li.organizer input[name="attendee_organizer"]').val(participant); 585 UI.dialogs.addEvent.find('li.organizer label').filter('.name').html(User.me.name).end() 586 .filter('.mail').html(User.me.mail).attr('title',User.me.mail); 587 } 588 589 590 591 629 UI.dialogs.addEvent.find('dt.me').html(organizer.user.name); 630 UI.dialogs.addEvent.find('li.organizer input[name="attendee_organizer"]').val(participant); 631 UI.dialogs.addEvent.find('li.organizer label').filter('.name').html(organizer.user.name).end() 632 .filter('.mail').html(organizer.user.mail).attr('title',organizer.user.mail); 633 634 }else{ 635 UI.dialogs.addEvent.find('dt.me').html(User.me.name); 636 DataLayer.put('participant', { 637 id: participant, 638 user: User.me.id, 639 mail: User.me.mail 640 }); 641 UI.dialogs.addEvent.find('li.organizer input[name="attendee_organizer"]').val(participant); 642 UI.dialogs.addEvent.find('li.organizer label').filter('.name').html(User.me.name).end() 643 .filter('.mail').html(User.me.mail).attr('title',User.me.mail); 644 } 645 646 647 648 649 }); 650 651 /*Checkbox adicionar alarms padrões*/ 652 UI.dialogs.addEvent.find('input[name="defaultAlarm"]').click(function(){ 653 if($(this).attr("checked")){ 654 $('input[name="isDefaultAlarm[]"]').parent().remove(); 655 var calendarSelected = Calendar.signatureOf[$('select[name="calendar"]').val()]; 656 calendarSelected.useAlarmDefault = 1; 657 if(calendarSelected.defaultAlarms != ""){ 658 var li_attach = DataLayer.render(path+'templates/alarms_add_itemlist.ejs', { 659 alarm:calendarSelected 592 660 }); 593 594 /*Checkbox adicionar alarms padrões*/ 595 UI.dialogs.addEvent.find('input[name="defaultAlarm"]').click(function(){ 596 if($(this).attr("checked")){ 597 $('input[name="isDefaultAlarm[]"]').parent().remove(); 598 var calendarSelected = Calendar.signatureOf[$('select[name="calendar"]').val()]; 599 calendarSelected.useAlarmDefault = 1; 600 if(calendarSelected.defaultAlarms != ""){ 601 var li_attach = DataLayer.render(path+'templates/alarms_add_itemlist.ejs', {alarm:calendarSelected}); 602 jQuery('.event-alarms-list').append(li_attach).find('.button.remove').button({text:false, icons:{primary:'ui-icon-close'}}).click(function(el) { 603 var id; 604 if( id = $(this).parent().find('input[name="alarmId[]"]').val()) 605 DataLayer.remove('alarm', id); 606 $(this).parent().remove().find('li').is(':empty') 607 }); 608 } 609 } else { 610 $('input[name="isDefaultAlarm[]"]').parent().remove(); 611 } 612 }); 613 /* Checkbox allday */ 614 UI.dialogs.addEvent.find('input[name="allDay"]').click(function(){ 615 $(this).attr("checked") ? 616 UI.dialogs.addEvent.find('.start-time, .end-time').addClass('hidden') : 617 UI.dialogs.addEvent.find('.start-time, .end-time').removeClass('hidden'); 618 updateMap(true); 619 }); 620 621 UI.dialogs.addEvent.find('.button').button(); 622 UI.dialogs.addEvent.find('.button.add').button({ 623 icons: { 624 secondary: "ui-icon-plus" 625 } 626 }); 627 628 // ==== validation events ==== 629 UI.dialogs.addEvent.find(".input-group .h1").Watermark("Evento sem título"); 630 if(User.preferences.hourFormat.length == 5) { 631 UI.dialogs.addEvent.find(".end-time, .start-time").mask("99:99", { 632 completed: function(){ 633 updateMap(); 634 } 635 }); 636 } else { 637 $.mask.definitions['{']='[ap]'; 638 $.mask.definitions['}']='[m]'; 639 UI.dialogs.addEvent.find(".end-time, .start-time").mask("99:99 {}", { 640 completed:function(){ 641 $(this).val(date.Calendar.defaultToAmPm($(this).val())); 642 $(this).timepicker("refresh"); 643 $(this).val($(this).val().replace(/[\.]/gi, "")); 644 updateMap(); 645 } 646 }); 661 jQuery('.event-alarms-list').append(li_attach).find('.button.remove').button({ 662 text:false, 663 icons:{ 664 primary:'ui-icon-close' 647 665 } 648 UI.dialogs.addEvent.find(".number").numeric(); 649 User.preferences.dateFormat.indexOf('-') > 0 ? 650 UI.dialogs.addEvent.find(".date").mask("99-99-9999", { 651 completed:function(){ 652 updateMap(); 653 } 654 }) : 655 UI.dialogs.addEvent.find(".date").mask("99/99/9999", { 656 completed:function(){ 657 updateMap(); 658 } 659 }); 660 661 UI.dialogs.addEvent.find(".menu-addevent") 662 .children(".delete").click(function(){ 663 $.Zebra_Dialog('Tem certeza que deseja excluir o evento?', { 664 'type': 'question', 665 'overlay_opacity': '0.5', 666 'buttons': ['Sim', 'Não'], 667 'onClose': function(clicked) { 668 if(clicked == 'Sim'){ 669 canDiscardEventDialog = true; 670 DataLayer.remove( "schedulable", UI.dialogs.addEvent.find(".id-event").val() ); 671 UI.dialogs.addEvent.dialog("close"); 672 } 673 } 674 }); 675 }).end() 666 }).click(function(el) { 667 var id; 668 if( id = $(this).parent().find('input[name="alarmId[]"]').val()) 669 DataLayer.remove('alarm', id); 670 $(this).parent().remove().find('li').is(':empty') 671 }); 672 } 673 } else { 674 $('input[name="isDefaultAlarm[]"]').parent().remove(); 675 } 676 }); 677 /* Checkbox allday */ 678 UI.dialogs.addEvent.find('input[name="allDay"]').click(function(){ 679 $(this).attr("checked") ? 680 UI.dialogs.addEvent.find('.start-time, .end-time').addClass('hidden') : 681 UI.dialogs.addEvent.find('.start-time, .end-time').removeClass('hidden'); 682 updateMap(true); 683 }); 684 685 UI.dialogs.addEvent.find('.button').button(); 686 UI.dialogs.addEvent.find('.button.add').button({ 687 icons: { 688 secondary: "ui-icon-plus" 689 } 690 }); 691 692 // ==== validation events ==== 693 UI.dialogs.addEvent.find(".input-group .h1").Watermark("Evento sem título"); 694 if(User.preferences.hourFormat.length == 5) { 695 UI.dialogs.addEvent.find(".end-time, .start-time").mask("99:99", { 696 completed: function(){ 697 updateMap(); 698 } 699 }); 700 } else { 701 $.mask.definitions['{']='[ap]'; 702 $.mask.definitions['}']='[m]'; 703 UI.dialogs.addEvent.find(".end-time, .start-time").mask("99:99 {}", { 704 completed:function(){ 705 $(this).val(date.Calendar.defaultToAmPm($(this).val())); 706 $(this).timepicker("refresh"); 707 $(this).val($(this).val().replace(/[\.]/gi, "")); 708 updateMap(); 709 } 710 }); 711 } 712 UI.dialogs.addEvent.find(".number").numeric(); 713 User.preferences.dateFormat.indexOf('-') > 0 ? 714 UI.dialogs.addEvent.find(".date").mask("99-99-9999", { 715 completed:function(){ 716 updateMap(); 717 } 718 }) : 719 UI.dialogs.addEvent.find(".date").mask("99/99/9999", { 720 completed:function(){ 721 updateMap(); 722 } 723 }); 724 725 UI.dialogs.addEvent.find(".menu-addevent") 726 .children(".delete").click(function(){ 727 $.Zebra_Dialog('Tem certeza que deseja excluir o evento?', { 728 'type': 'question', 729 'overlay_opacity': '0.5', 730 'buttons': ['Sim', 'Não'], 731 'onClose': function(clicked) { 732 if(clicked == 'Sim'){ 733 canDiscardEventDialog = true; 734 DataLayer.remove( "schedulable", UI.dialogs.addEvent.find(".id-event").val() ); 735 UI.dialogs.addEvent.dialog("close"); 736 } 737 } 738 }); 739 }).end() 676 740 677 678 679 680 741 .children(".cancel").click(function(){ 742 DataLayer.rollback('participant'); 743 UI.dialogs.addEvent.dialog("close"); 744 }).end() 681 745 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 746 .children(".save").click(function(){ 747 /* Validação */ 748 var msg = false; 749 if(msg = validDateEvent()){ 750 $(".new-event-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg); 751 return false; 752 } 753 754 canDiscardEventDialog = true; 755 756 var exit = function(event){ 757 if(event) 758 DataLayer.remove('schedulable', event, false); 759 760 UI.dialogs.addEvent.children().find('form.form-addevent').submit(); 761 UI.dialogs.addEvent.dialog("close"); 762 } 699 763 700 if(repeat){ 701 DataLayer.remove('repeat', false); 702 DataLayer.put('repeat', repeat); 703 DataLayer.commit('repeat', false, exit(repeat.schedulable)); 704 }else 705 exit(); 706 }).end() 707 708 .children(".export").click(function(){ 709 UI.dialogs.addEvent.children().find(".form-export").submit(); 710 }); 711 712 var dates = UI.dialogs.addEvent.find('input.date').datepicker({ 713 dateFormat: 'dd/mm/yy', 714 onSelect : function( selectedDate ){ 715 updateMap(); 716 } 717 }); 718 //if(path == ""){ 719 UI.dialogs.addEvent.find('input.time').timepicker({ 720 closeText: 'Ok', 721 hourGrid: 4, 722 minuteGrid: 10, 723 ampm : ((User.preferences.hourFormat.length > 5) ? true: false), 724 timeFormat: "hh:mm tt", 725 onSelect: function (selectedDateTime){ 726 if(!(User.preferences.hourFormat.length == 5)) 727 $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 728 updateMap(); 729 }, 730 onClose : function (selectedDateTime){ 731 if(!(User.preferences.hourFormat.length == 5)) 732 $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 733 } 734 }); 735 //} 736 737 UI.dialogs.addEvent.find('.button-add-alarms').click(function(){ 738 var li_attach = DataLayer.render(path+'templates/alarms_add_itemlist.ejs', {}); 739 740 jQuery('.event-alarms-list').append(li_attach).find('.button.remove').button({text:false, icons:{primary:'ui-icon-close'}}).click(function(el) { 741 $(this).parent().remove().find('li').is(':empty') 742 }); 743 // valicacao de campos numericos 744 $('.number').numeric(); 745 }); 764 if(repeat){ 765 DataLayer.remove('repeat', false); 766 DataLayer.put('repeat', repeat); 767 DataLayer.commit('repeat', false, exit(repeat.schedulable)); 768 }else 769 exit(); 770 }).end() 771 772 .children(".export").click(function(){ 773 UI.dialogs.addEvent.children().find(".form-export").submit(); 774 }); 775 776 var dates = UI.dialogs.addEvent.find('input.date').datepicker({ 777 dateFormat: 'dd/mm/yy', 778 onSelect : function( selectedDate ){ 779 updateMap(); 780 } 781 }); 782 //if(path == ""){ 783 UI.dialogs.addEvent.find('input.time').timepicker({ 784 closeText: 'Ok', 785 hourGrid: 4, 786 minuteGrid: 10, 787 ampm : ((User.preferences.hourFormat.length > 5) ? true: false), 788 timeFormat: "hh:mm tt", 789 onSelect: function (selectedDateTime){ 790 if(!(User.preferences.hourFormat.length == 5)) 791 $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 792 updateMap(); 793 }, 794 onClose : function (selectedDateTime){ 795 if(!(User.preferences.hourFormat.length == 5)) 796 $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 797 } 798 }); 799 //} 800 801 UI.dialogs.addEvent.find('.button-add-alarms').click(function(){ 802 var li_attach = DataLayer.render(path+'templates/alarms_add_itemlist.ejs', {}); 803 804 jQuery('.event-alarms-list').append(li_attach).find('.button.remove').button({ 805 text:false, 806 icons:{ 807 primary:'ui-icon-close' 808 } 809 }).click(function(el) { 810 $(this).parent().remove().find('li').is(':empty') 811 }); 812 // valicacao de campos numericos 813 $('.number').numeric(); 814 }); 746 815 747 816 748 UI.dialogs.addEvent.find('.button.suggestion-hours').button({ 749 icons: { 750 primary: "ui-icon-clock" 751 }, 752 text: 'Sugerir horário' 753 }).click(function () { 754 $(this).siblings('input').removeAttr('disabled') 755 .end().parents().find('input[name="allDay"]').removeAttr('disabled'); 756 }); 757 758 759 if(!repeat) 760 if(objEvent.me.id == User.me.id){ 761 objEvent.me.id = DataLayer.put('participant', {user: objEvent.me.id, mail: objEvent.me.mail}); 762 objEvent.organizer.id = objEvent.me.id; 763 } 764 765 var attendeeHtml = DataLayer.render( path+'templates/attendee_add.ejs', {event:objEvent}); 766 767 // load template of attendees 768 var blkAddAtendee = UI.dialogs.addEvent.find('#calendar_addevent_details6').append(attendeeHtml); 769 if(objEvent.attendee.length) 770 callbackAttendee(); 771 /** 817 UI.dialogs.addEvent.find('.button.suggestion-hours').button({ 818 icons: { 819 primary: "ui-icon-clock" 820 }, 821 text: 'Sugerir horário' 822 }).click(function () { 823 $(this).siblings('input').removeAttr('disabled') 824 .end().parents().find('input[name="allDay"]').removeAttr('disabled'); 825 }); 826 827 828 if(!repeat) 829 if(objEvent.me.id == User.me.id){ 830 objEvent.me.id = DataLayer.put('participant', { 831 user: objEvent.me.id, 832 mail: objEvent.me.mail 833 }); 834 objEvent.organizer.id = objEvent.me.id; 835 } 836 837 var attendeeHtml = DataLayer.render( path+'templates/attendee_add.ejs', { 838 event:objEvent 839 }); 840 841 // load template of attendees 842 var blkAddAtendee = UI.dialogs.addEvent.find('#calendar_addevent_details6').append(attendeeHtml); 843 if(objEvent.attendee.length) 844 callbackAttendee(); 845 /** 772 846 Opções de delegação do participante/organizer 773 847 */ 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 848 blkAddAtendee.find(".button.participant-delegate").button({ 849 icons: { 850 primary: "ui-icon-transferthick-e-w" 851 }, 852 text: false 853 }).click(function () { 854 if($(this).hasClass('attendee-permissions-change-button')){ 855 if(!$(this).hasClass('disable')){ 856 $(this).removeClass('attendee-permissions-change-button') 857 .find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change').end(); 858 blkAddAtendee.find('.block-add-attendee.search').addClass('hidden'); 859 blkAddAtendee.find('.block-add-attendee.search dt').html('Adicionar outros contatos'); 860 } 861 }else{ 862 $(this).addClass('attendee-permissions-change-button') 863 .find('.ui-icon-transferthick-e-w').addClass('attendee-permissions-change').end(); 864 blkAddAtendee.find('.block-add-attendee.search dt').html('Delegar participação para'); 865 blkAddAtendee.find('.block-add-attendee.search').removeClass('hidden'); 866 blkAddAtendee.find('.block-add-attendee.search input.search').focus(); 867 } 868 }) 869 .addClass('tiny'); 870 871 //show or hidden permissions attendees 872 //blkAddAtendee.find('.block-attendee-list #attendees-users li').click(show_permissions_attendees); 873 874 UI.dialogs.addEvent.find(".attendee-list-add .add-attendee-input input").Watermark("digite um email para convidar"); 875 /* Trata a edição de um novo participante adicionado 802 876 * 803 877 */ 804 805 806 807 808 809 810 878 var hasNewAttendee = false; 879 880 blkAddAtendee.find('.attendee-list-add .add-attendee-input span').click(function(data){ 881 blkAddAtendee.find('.attendee-list-add .add-attendee-input input').keydown(); 882 }); 883 884 blkAddAtendee.find('.attendee-list-add .add-attendee-input input').keydown(function(event) { 811 885 812 813 814 886 if (event.keyCode == '13' && $(this).val() != '' || (event.keyCode == undefined && $(this).val() != '')) { 887 Encoder.EncodeType = "entity"; 888 $(this).val(Encoder.htmlEncode($(this).val())); 815 889 816 817 818 819 820 821 822 890 newAttendeeEmail = false; 891 newAttendeeName = false; 892 skipAddNewLine = false; 893 894 var info = $(this).val(); 895 896 /** 823 897 * email válido? 824 898 */ 825 826 827 828 899 info.match(/^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/) ? 900 newAttendeeEmail = info : newAttendeeName = info; 901 902 /** 829 903 * 1) busca no banco para saber se o usuário já existe 830 904 * 1.1) se existe, atualiza as info na lista de participantes e nao abre o tooltip … … 836 910 */ 837 911 838 var user = DataLayer.get('user', ["=", "mail", $(this).val()]); 839 if(!!user && user[0].id) 840 attendees[user[0].id] = {name: user[0].name}; 912 var user = DataLayer.get('user', ["=", "mail", $(this).val()]); 913 if(!!user && user[0].id) 914 attendees[user[0].id] = { 915 name: user[0].name 916 }; 841 917 842 918 /** 843 919 * guarda o último tooltip aberto referente à lista de participantes 844 920 */ 845 846 847 921 lastEditAttendeeToolTip = []; 922 923 /** 848 924 * Valida email e salva um participante externo 849 925 */ 850 var saveContact = function() { 851 Encoder.EncodeType = "entity"; 852 853 var currentTip = $('.qtip-active'); 854 newAttendeeName = currentTip.find('input[name="name"]').val(); 855 newAttendeeEmail = currentTip.find('input[name="mail"]').val(); 856 857 if (!(!!newAttendeeEmail.match(/^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/))) { 858 currentTip.find('.messages').removeClass('hidden').find('.message label').html('Email inválido.'); 859 return false; 860 } 861 862 DataLayer.put('user', {id:userId, name:newAttendeeName, mail:newAttendeeEmail, isExternal:isExternal}); 863 864 lastEditAttendeeToolTip.find('label') 865 .filter('.name').html(Encoder.htmlEncode(newAttendeeName)).attr('title', Encoder.htmlEncode(newAttendeeName)).end() 866 .filter('.mail').html(Encoder.htmlEncode(newAttendeeEmail)).attr('title', Encoder.htmlEncode(newAttendeeEmail)); 867 868 blkAddAtendee.find('.attendee-list-add .add-attendee-input input').val(''); 869 return true; 870 } 926 var saveContact = function() { 927 Encoder.EncodeType = "entity"; 928 929 var currentTip = $('.qtip-active'); 930 newAttendeeName = currentTip.find('input[name="name"]').val(); 931 newAttendeeEmail = currentTip.find('input[name="mail"]').val(); 932 933 if (!(!!newAttendeeEmail.match(/^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/))) { 934 currentTip.find('.messages').removeClass('hidden').find('.message label').html('Email inválido.'); 935 return false; 936 } 937 938 DataLayer.put('user', { 939 id:userId, 940 name:newAttendeeName, 941 mail:newAttendeeEmail, 942 isExternal:isExternal 943 }); 944 945 lastEditAttendeeToolTip.find('label') 946 .filter('.name').html(Encoder.htmlEncode(newAttendeeName)).attr('title', Encoder.htmlEncode(newAttendeeName)).end() 947 .filter('.mail').html(Encoder.htmlEncode(newAttendeeEmail)).attr('title', Encoder.htmlEncode(newAttendeeEmail)); 948 949 blkAddAtendee.find('.attendee-list-add .add-attendee-input input').val(''); 950 return true; 951 } 871 952 872 953 /** 873 954 * Formata e adequa um tootip abert para edição de um participante na lista 874 955 */ 875 var onShowToolTip = function(arg0) { 876 $('.qtip-active .button.close').button({ 877 icons: {primary: "ui-icon-close"}, 878 text: false 879 }); 880 $('.qtip-active .button').button() 881 .filter('.save').click(function(event, ui) { 882 if(saveContact()) 883 lastEditAttendeeToolTip.qtip("destroy"); 884 else 885 return false; 886 }).end() 887 .filter('.cancel').click(function(event, ui) { 888 lastEditAttendeeToolTip.qtip("destroy"); 889 }) 890 891 /** 956 var onShowToolTip = function(arg0) { 957 $('.qtip-active .button.close').button({ 958 icons: { 959 primary: "ui-icon-close" 960 }, 961 text: false 962 }); 963 $('.qtip-active .button').button() 964 .filter('.save').click(function(event, ui) { 965 if(saveContact()) 966 lastEditAttendeeToolTip.qtip("destroy"); 967 else 968 return false; 969 }).end() 970 .filter('.cancel').click(function(event, ui) { 971 lastEditAttendeeToolTip.qtip("destroy"); 972 }) 973 974 /** 892 975 * Trata o ENTER no campo da tooltip, equivalente a salvar 893 976 * o novo convidado. 894 977 */ 895 896 897 898 899 900 901 902 903 904 905 906 978 $('.qtip-active input').keydown(function(event) { 979 if (event.keyCode == '13') { 980 if (saveContact()) 981 lastEditAttendeeToolTip.qtip("destroy"); 982 983 lastEditAttendeeToolTip.qtip("destroy"); 984 event.preventDefault(); 985 } 986 }) 987 .filter('[name="name"]').Watermark("informe o nome do contato").end() 988 .filter('[name="mail"]').Watermark("informe o email do contato"); 989 } 907 990 908 991 /** 909 992 * Se o email digitado já foi adicionado na lista, 910 993 * o usuário deve ser avisado e um botão de edição deve ser exibido 911 994 */ 912 913 914 915 916 917 918 919 995 if(blkAddAtendee.find('label.mail[title="' + newAttendeeEmail + '"]').length) { 996 hasNewAttendee = false; 997 newAttendeeName = blkAddAtendee.find('label.mail[title="' + newAttendeeEmail + '"]').parents('li').find('label.name').attr('title'); 998 999 blkAddAtendee.find('.email-validation').removeClass('hidden') 1000 .find('.message label').html("O usuário acima já foi adicionado! <a class=\"small button\">Editar</a>") 1001 .find(".button").button().click(function () { 1002 /** 920 1003 * Se o usuário optar por editar o participante anteriormente adicionado, 921 1004 * uma tooltip deve ser aberta para este participante, viabilizando a edição 922 1005 */ 923 924 1006 blkAddAtendee.find("ul.attendee-list").scrollTo('label.mail[title="' + newAttendeeEmail + '"]'); 1007 /** 925 1008 * Remove tooltip possivelmente existente 926 1009 */ 927 928 1010 if (lastEditAttendeeToolTip.length && lastEditAttendeeToolTip.data('qtip')) 1011 lastEditAttendeeToolTip.qtip('destroy'); 929 1012 930 lastEditAttendeeToolTip = blkAddAtendee.find('label.mail[title="' + newAttendeeEmail + '"]').parents('li'); 931 lastEditAttendeeToolTip.qtip({ 932 show: {ready: true, solo: true, when: {event: 'click'}}, 933 hide: false, 934 content: { 935 text: $('<div></div>').html( DataLayer.render( path+'templates/attendee_quick_edit.ejs', {attendee:{name:newAttendeeName, mail:newAttendeeEmail}} ) ), 936 title: { 937 text:'Detalhes do participante', 938 button: '<a class="button close" href="#">close</a>' 939 } 940 }, 941 style: {name: 'blue', tip: {corner: 'leftMiddle'}, border: {width: 4, radius: 8}, width: {min: 230, max:230}}, 942 position: { 943 corner: { 944 target: 'rightMiddle', 945 tooltip: 'leftMiddle' 946 }, 947 adjust: {x:0, y:0} 948 } 949 }); 950 lastEditAttendeeToolTip.qtip("api").onShow = onShowToolTip; 951 }); 952 skipAddNewLine = true; 953 } else { 954 hasNewAttendee = true; 955 blkAddAtendee.find('.email-validation').addClass('hidden'); 956 } 1013 lastEditAttendeeToolTip = blkAddAtendee.find('label.mail[title="' + newAttendeeEmail + '"]').parents('li'); 1014 lastEditAttendeeToolTip.qtip({ 1015 show: { 1016 ready: true, 1017 solo: true, 1018 when: { 1019 event: 'click' 1020 } 1021 }, 1022 hide: false, 1023 content: { 1024 text: $('<div></div>').html( DataLayer.render( path+'templates/attendee_quick_edit.ejs', { 1025 attendee:{ 1026 name:newAttendeeName, 1027 mail:newAttendeeEmail 1028 } 1029 } ) ), 1030 title: { 1031 text:'Detalhes do participante', 1032 button: '<a class="button close" href="#">close</a>' 1033 } 1034 }, 1035 style: { 1036 name: 'blue', 1037 tip: { 1038 corner: 'leftMiddle' 1039 }, 1040 border: { 1041 width: 4, 1042 radius: 8 1043 }, 1044 width: { 1045 min: 230, 1046 max:230 1047 } 1048 }, 1049 position: { 1050 corner: { 1051 target: 'rightMiddle', 1052 tooltip: 'leftMiddle' 1053 }, 1054 adjust: { 1055 x:0, 1056 y:0 1057 } 1058 } 1059 }); 1060 lastEditAttendeeToolTip.qtip("api").onShow = onShowToolTip; 1061 }); 1062 skipAddNewLine = true; 1063 } else { 1064 hasNewAttendee = true; 1065 blkAddAtendee.find('.email-validation').addClass('hidden'); 1066 } 957 1067 958 1068 959 960 961 1069 var isExternal = (!!user && !(!!user.isExternal)) ? 0 : 1; 1070 1071 /** 962 1072 * Remove tooltip possivelmente existente 963 1073 */ 964 if (lastEditAttendeeToolTip.length && lastEditAttendeeToolTip.data('qtip')) 965 lastEditAttendeeToolTip.qtip('destroy'); 966 967 userId = ''; 968 var newAttendeeId = ''; 969 970 if (user){ 971 if (!skipAddNewLine) { 972 user[0].id = DataLayer.put('participant', {user: user[0].id, isExternal: isExternal, acl: 'r'}); 973 user[0].acl = objEvent.acl 974 975 blkAddAtendee.find('dd.attendee-list ul.attendee-list').append( 976 DataLayer.render(path+'templates/participants_add_itemlist.ejs', user) 977 ) 978 .scrollTo('max'); 979 callbackAttendee(); 980 } 1074 if (lastEditAttendeeToolTip.length && lastEditAttendeeToolTip.data('qtip')) 1075 lastEditAttendeeToolTip.qtip('destroy'); 1076 1077 userId = ''; 1078 var newAttendeeId = ''; 1079 1080 if (user){ 1081 if (!skipAddNewLine) { 1082 user[0].id = DataLayer.put('participant', { 1083 user: user[0].id, 1084 isExternal: isExternal, 1085 acl: 'r' 1086 }); 1087 user[0].acl = objEvent.acl 1088 1089 blkAddAtendee.find('dd.attendee-list ul.attendee-list').append( 1090 DataLayer.render(path+'templates/participants_add_itemlist.ejs', user) 1091 ) 1092 .scrollTo('max'); 1093 callbackAttendee(); 1094 } 981 1095 982 983 984 985 1096 $(this).val(''); 1097 1098 } else if (!skipAddNewLine) { 1099 /** 986 1100 * a) salva como novo usuario externo no banco (apenas com email) e... 987 1101 * adiciona novo contato externo à lista de convidados 988 1102 */ 989 1103 990 userId = DataLayer.put('user', {name: newAttendeeName, mail: newAttendeeEmail, isExternal: isExternal}); 991 newAttendeeId = DataLayer.put('participant', {user: userId, isExternal: isExternal}); 1104 userId = DataLayer.put('user', { 1105 name: newAttendeeName, 1106 mail: newAttendeeEmail, 1107 isExternal: isExternal 1108 }); 1109 newAttendeeId = DataLayer.put('participant', { 1110 user: userId, 1111 isExternal: isExternal 1112 }); 992 1113 993 1114 994 blkAddAtendee.find('dd.attendee-list ul.attendee-list').append( 995 DataLayer.render(path+'templates/participants_add_itemlist.ejs', [{id:newAttendeeId, name: newAttendeeName, mail: newAttendeeEmail, isExternal: 1, acl: objEvent.acl}]) 996 ).scrollTo('max'); 997 callbackAttendee(); 998 999 /** 1115 blkAddAtendee.find('dd.attendee-list ul.attendee-list').append( 1116 DataLayer.render(path+'templates/participants_add_itemlist.ejs', [{ 1117 id:newAttendeeId, 1118 name: newAttendeeName, 1119 mail: newAttendeeEmail, 1120 isExternal: 1, 1121 acl: objEvent.acl 1122 }]) 1123 ).scrollTo('max'); 1124 callbackAttendee(); 1125 1126 /** 1000 1127 * Adiciona tootip para atualização dos dados do contato externo 1001 1128 * recém adicionado. 1002 1129 */ 1003 lastEditAttendeeToolTip = blkAddAtendee.find('dd.attendee-list li:last'); 1004 lastEditAttendeeToolTip.qtip({ 1005 show: {ready: true, solo: true, when: {event: 'click'}}, 1006 hide: false, 1007 content: { 1008 text: $('<div></div>').html( DataLayer.render( path+'templates/attendee_quick_edit.ejs', {attendee:{name:newAttendeeName, mail:newAttendeeEmail}} ) ), 1009 title: { 1010 text:'Detalhes do participante', 1011 button: '<a class="button close" href="#">close</a>' 1012 } 1013 }, 1014 style: {name: 'blue', tip: {corner: 'leftMiddle'}, border: {width: 4, radius: 8}, width: {min: 230, max:230}}, 1015 position: { 1016 corner: { 1017 target: 'rightMiddle', 1018 tooltip: 'leftMiddle' 1019 }, 1020 adjust: {x:0, y:0} 1021 } 1022 }); 1023 1024 lastEditAttendeeToolTip.qtip("api").onShow = onShowToolTip; 1025 1026 $(this).val(''); 1130 lastEditAttendeeToolTip = blkAddAtendee.find('dd.attendee-list li:last'); 1131 lastEditAttendeeToolTip.qtip({ 1132 show: { 1133 ready: true, 1134 solo: true, 1135 when: { 1136 event: 'click' 1137 } 1138 }, 1139 hide: false, 1140 content: { 1141 text: $('<div></div>').html( DataLayer.render( path+'templates/attendee_quick_edit.ejs', { 1142 attendee:{ 1143 name:newAttendeeName, 1144 mail:newAttendeeEmail 1145 } 1146 } ) ), 1147 title: { 1148 text:'Detalhes do participante', 1149 button: '<a class="button close" href="#">close</a>' 1150 } 1151 }, 1152 style: { 1153 name: 'blue', 1154 tip: { 1155 corner: 'leftMiddle' 1156 }, 1157 border: { 1158 width: 4, 1159 radius: 8 1160 }, 1161 width: { 1162 min: 230, 1163 max:230 1164 } 1165 }, 1166 position: { 1167 corner: { 1168 target: 'rightMiddle', 1169 tooltip: 'leftMiddle' 1170 }, 1171 adjust: { 1172 x:0, 1173 y:0 1174 } 1175 } 1176 }); 1177 1178 lastEditAttendeeToolTip.qtip("api").onShow = onShowToolTip; 1179 1180 $(this).val(''); 1027 1181 1028 1182 1029 1030 1031 1183 } 1184 event.preventDefault(); 1185 } 1032 1186 1033 1034 1035 1187 }); 1188 1189 /** 1036 1190 * Trata a busca de usuários para adição de participantes 1037 1191 */ 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1192 blkAddAtendee.find('.add-attendee-search .ui-icon-search').click(function(event) { 1193 blkAddAtendee.find('.add-attendee-search input').keydown(); 1194 }); 1195 1196 1197 blkAddAtendee.find('.add-attendee-search input').keydown(function(event) { 1198 1199 if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') { 1200 var result = DataLayer.get('user', ["*", "name", $(this).val()], true); 1201 1202 /** 1049 1203 * TODO: trocar por template 1050 1204 */ 1051 1052 1053 1054 1055 1056 1057 1205 blkAddAtendee.find('ul.search-result-list').empty().css('overflow', 'hidden'); 1206 if (!result) { 1207 blkAddAtendee.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>'); 1208 } 1209 1210 for(i=0; i<result.length; i++) 1211 result[i].enabled = (blkAddAtendee.find('dd.attendee-list ul.attendee-list label.mail[title="' + result[i].mail + '"]').length) ? false : true; 1058 1212 1059 blkAddAtendee.find('ul.search-result-list').append(DataLayer.render( path+'templates/participants_search_itemlist.ejs', result)); 1060 1061 blkAddAtendee.find('ul.search-result-list li').click(function(event, ui){ 1062 if ($(event.target).is('input')) { 1063 old_item = $(event.target).parents('li'); 1064 newAttendeeId = DataLayer.put('participant', {user: old_item.find('.id').html(), isExternal: 0}); 1213 blkAddAtendee.find('ul.search-result-list').append(DataLayer.render( path+'templates/participants_search_itemlist.ejs', result)); 1214 1215 blkAddAtendee.find('ul.search-result-list li').click(function(event, ui){ 1216 if ($(event.target).is('input')) { 1217 old_item = $(event.target).parents('li'); 1218 newAttendeeId = DataLayer.put('participant', { 1219 user: old_item.find('.id').html(), 1220 isExternal: 0 1221 }); 1065 1222 1066 1223 attendees[old_item.find('.id').html()] = old_item.find('.name').html(); 1067 1224 1068 blkAddAtendee.find('dd.attendee-list ul.attendee-list') 1069 .append(DataLayer.render(path+'templates/participants_add_itemlist.ejs', [{id: newAttendeeId, name: old_item.find('.name').html(), mail: old_item.find('.mail').html(), isExternal: 0, acl: objEvent.acl}])) 1070 .scrollTo('max'); 1071 /** 1225 blkAddAtendee.find('dd.attendee-list ul.attendee-list') 1226 .append(DataLayer.render(path+'templates/participants_add_itemlist.ejs', [{ 1227 id: newAttendeeId, 1228 name: old_item.find('.name').html(), 1229 mail: old_item.find('.mail').html(), 1230 isExternal: 0, 1231 acl: objEvent.acl 1232 }])) 1233 .scrollTo('max'); 1234 /** 1072 1235 * Delegação de participação de um participante com permissão apenas de leitura 1073 1236 * 1074 1237 */ 1075 1238 if(!objEvent.acl.organization && !objEvent.acl.write && !objEvent.acl.inviteGuests && objEvent.acl.read ){ 1076 1239 1077 1078 1240 blkAddAtendee.find('.block-add-attendee.search').addClass('hidden'); 1241 blkAddAtendee.find('.block-add-attendee.search dt').html('Adicionar outros contatos'); 1079 1242 1080 1081 1082 1083 1084 1243 blkAddAtendee.find('.status option').toggleClass('hidden'); 1244 blkAddAtendee.find('option[value=5]').attr('selected','selected').trigger('change'); 1245 blkAddAtendee.find('.request-update').removeClass('hidden'); 1246 1247 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()); 1085 1248 1086 1087 1088 1089 1090 1091 1092 1249 blkAddAtendee.find('.me .participant-delegate').addClass('disable ui-button-disabled ui-state-disabled'); 1250 blkAddAtendee.find(".button.close").button({ 1251 icons: { 1252 primary: "ui-icon-close" 1253 }, 1254 text: false 1255 }).click(function () { 1093 1256 1094 1095 1096 1097 1098 1099 1257 $(this).parents('li').find('input[name="delegatedFrom[]"]').val(''); 1258 blkAddAtendee.find('.request-update').addClass('hidden'); 1259 blkAddAtendee.find('.status option').toggleClass('hidden'); 1260 blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change'); 1261 blkAddAtendee.find('.me .participant-delegate').removeClass('disable ui-button-disabled ui-state-disabled attendee-permissions-change-button') 1262 .find('.ui-icon-person').removeClass('attendee-permissions-change').end(); 1100 1263 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1264 DataLayer.remove('participant', $(this).parents('li').find('[type=checkbox]').val()); 1265 $(this).parents('li').remove(); 1266 }) 1267 .addClass('tiny'); 1268 }else{ 1269 callbackAttendee(); 1270 old_item.remove(); 1271 } 1272 } 1273 }); 1274 1275 event.preventDefault(); 1276 } 1277 }); 1278 //$('.block-add-attendee .search-result-list').selectable(); 1279 1280 UI.dialogs.addEvent.find('.row.fileupload-buttonbar .button').filter('.delete').button({ 1281 icons: { 1282 primary: "ui-icon-close" 1283 }, 1284 text: 'Excluir' 1285 }).click(function () { 1286 $('.row.fileupload-buttonbar .attachments-list p').remove(); 1124 1287 1125 var ids = []; 1126 $.each($('.attachment-list input'), function (i, input) {ids.push(input.value);}); 1127 if(ids.length > 0){ 1128 DataLayer.remove('attachment', {filter: ['IN', 'id', ids]}); 1129 $('.attachment-list input').remove(); 1130 } 1131 }).end() 1132 .filter('.close').button({ 1133 icons: { 1134 primary: "ui-icon-close" 1135 }, 1136 text: false 1137 }).click(function () { 1138 DataLayer.remove('attachment', $(this).parents('p').find('input[name="fileId[]"]').val()); 1139 $(this).parents('p').remove(); 1140 }).end() 1141 .filter('.downlaod-archive').button({ 1142 icons: { 1143 primary: "ui-icon-arrowthickstop-1-s" 1144 }, 1145 text: false 1146 }); 1147 var maxSizeFile = 2000000; 1148 $('#fileupload').fileupload({ 1149 sequentialUploads: true, 1150 add: function (e, data) { 1151 if(data.files[0].size < maxSizeFile) 1152 data.submit(); 1153 }, 1154 change: function (e, data) { 1155 $.each(data.files, function (index, file) { 1156 var attach = {}; 1157 attach.fileName = file.name; 1158 var ext = file.name.split('.'); 1159 if(file.name.length > 10) 1160 attach.fileName = ext.length == 1 ? file.name.substr(0, 10) : file.name.substr(0, 6) + '.' + ext[ext.length -1]; 1161 attach.fileSize = formatBytes(file.size); 1162 if(file.size > maxSizeFile) 1163 attach.error = 'Tamanho de arquivo nao permitido!!' 1288 var ids = []; 1289 $.each($('.attachment-list input'), function (i, input) { 1290 ids.push(input.value); 1291 }); 1292 if(ids.length > 0){ 1293 DataLayer.remove('attachment', { 1294 filter: ['IN', 'id', ids] 1295 }); 1296 $('.attachment-list input').remove(); 1297 } 1298 }).end() 1299 .filter('.close').button({ 1300 icons: { 1301 primary: "ui-icon-close" 1302 }, 1303 text: false 1304 }).click(function () { 1305 DataLayer.remove('attachment', $(this).parents('p').find('input[name="fileId[]"]').val()); 1306 $(this).parents('p').remove(); 1307 }).end() 1308 .filter('.downlaod-archive').button({ 1309 icons: { 1310 primary: "ui-icon-arrowthickstop-1-s" 1311 }, 1312 text: false 1313 }); 1314 var maxSizeFile = 2000000; 1315 $('#fileupload').fileupload({ 1316 sequentialUploads: true, 1317 add: function (e, data) { 1318 if(data.files[0].size < maxSizeFile) 1319 data.submit(); 1320 }, 1321 change: function (e, data) { 1322 $.each(data.files, function (index, file) { 1323 var attach = {}; 1324 attach.fileName = file.name; 1325 var ext = file.name.split('.'); 1326 if(file.name.length > 10) 1327 attach.fileName = ext.length == 1 ? file.name.substr(0, 10) : file.name.substr(0, 6) + '.' + ext[ext.length -1]; 1328 attach.fileSize = formatBytes(file.size); 1329 if(file.size > maxSizeFile) 1330 attach.error = 'Tamanho de arquivo nao permitido!!' 1164 1331 1165 $('.attachments-list').append(DataLayer.render(path+'templates/attachment_add_itemlist.ejs', {file : attach})); 1332 $('.attachments-list').append(DataLayer.render(path+'templates/attachment_add_itemlist.ejs', { 1333 file : attach 1334 })); 1166 1335 1167 1168 1169 1336 if(file.size < maxSizeFile){ 1337 $('.fileinput-button.new').append(data.fileInput[0]).removeClass('new'); 1338 $('.attachments-list').find('[type=file]').addClass('hidden'); 1170 1339 1171 1172 1340 }else 1341 $('.fileinput-button.new').removeClass('new'); 1173 1342 1174 1343 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1344 $('.attachments-list').find('.button.close').button({ 1345 icons: { 1346 primary: "ui-icon-close" 1347 }, 1348 text: false 1349 }).click(function(){ 1350 var idAttach = $(this).parent().find('input[name="fileId[]"]').val(); 1351 $('.attachment-list').find('input[value="'+idAttach+'"]') 1352 $(this).parent().remove(); 1353 }); 1185 1354 1186 })}, 1187 progress: function(e, data){ 1188 var value = parseInt(data.loaded / data.total * 100, 10); 1189 $('.progress.in-progress:first').removeClass('hidden') 1190 $('.progress.in-progress:first').progressbar({ 1191 value: value 1192 }); 1193 1194 if(value == 100){ 1195 $('.progress.in-progress:first').removeClass('in-progress').addClass('on-complete').fadeOut('slow'); 1196 } 1197 1198 }, 1199 done: function(e, data){ 1200 if(!!data.result && data.result != "[]"){ 1201 var newAttach = jQuery.parseJSON(data.result); 1202 $('.attachment-list').append('<input tyepe="hidden" name="attachment[]" value="'+newAttach['attachment'][0][0].id+'"/>'); 1203 $('.progress.on-complete:first').removeClass('on-complete').parents('p') 1204 .append('<input type="hidden" name="fileId[]" value="'+newAttach['attachment'][0][0].id+'"/>') 1205 .find('.status-upload').addClass('ui-icon ui-icon-check'); 1206 }else 1207 $('.progress.on-complete:first').removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel'); 1208 } 1355 }) 1356 }, 1357 done: function(e, data){ 1358 var currentUpload = $('.progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide(); 1359 1360 if(!!data.result && data.result != "[]"){ 1361 var newAttach = jQuery.parseJSON(data.result); 1362 $('.attachment-list').append('<input tyepe="hidden" name="attachment[]" value="'+newAttach['attachment'][0][0].id+'"/>'); 1363 currentUpload.removeClass('on-complete').parents('p') 1364 .append('<input type="hidden" name="fileId[]" value="'+newAttach['attachment'][0][0].id+'"/>') 1365 .find('.status-upload').addClass('ui-icon ui-icon-check'); 1366 }else 1367 currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel'); 1368 } 1369 }); 1370 $('.attachments-list .button').button(); 1371 1372 $('#fileupload').bind('fileuploadstart', function () { 1373 var widget = $(this), 1374 progressElement = $('#fileupload-progress').fadeIn(), 1375 interval = 500, 1376 total = 0, 1377 loaded = 0, 1378 loadedBefore = 0, 1379 progressTimer, 1380 progressHandler = function (e, data) { 1381 loaded = data.loaded; 1382 total = data.total; 1383 }, 1384 stopHandler = function () { 1385 widget 1386 .unbind('fileuploadprogressall', progressHandler) 1387 .unbind('fileuploadstop', stopHandler); 1388 window.clearInterval(progressTimer); 1389 progressElement.fadeOut(function () { 1390 progressElement.html(''); 1209 1391 }); 1210 $('.attachments-list .button').button(); 1211 1212 $('#fileupload').bind('fileuploadstart', function () { 1213 var widget = $(this), 1214 progressElement = $('#fileupload-progress').fadeIn(), 1215 interval = 500, 1216 total = 0, 1217 loaded = 0, 1218 loadedBefore = 0, 1219 progressTimer, 1220 progressHandler = function (e, data) { 1221 loaded = data.loaded; 1222 total = data.total; 1223 }, 1224 stopHandler = function () { 1225 widget 1226 .unbind('fileuploadprogressall', progressHandler) 1227 .unbind('fileuploadstop', stopHandler); 1228 window.clearInterval(progressTimer); 1229 progressElement.fadeOut(function () { 1230 progressElement.html(''); 1231 }); 1232 }, 1233 formatTime = function (seconds) { 1234 var date = new Date(seconds * 1000); 1235 return ('0' + date.getUTCHours()).slice(-2) + ':' + 1236 ('0' + date.getUTCMinutes()).slice(-2) + ':' + 1237 ('0' + date.getUTCSeconds()).slice(-2); 1238 }, 1239 /* formatBytes = function (bytes) { 1392 }, 1393 formatTime = function (seconds) { 1394 var date = new Date(seconds * 1000); 1395 return ('0' + date.getUTCHours()).slice(-2) + ':' + 1396 ('0' + date.getUTCMinutes()).slice(-2) + ':' + 1397 ('0' + date.getUTCSeconds()).slice(-2); 1398 }, 1399 /* formatBytes = function (bytes) { 1240 1400 if (bytes >= 1000000000) { 1241 1401 return (bytes / 1000000000).toFixed(2) + ' GB'; … … 1249 1409 return bytes + ' B'; 1250 1410 },*/ 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1411 formatPercentage = function (floatValue) { 1412 return (floatValue * 100).toFixed(2) + ' %'; 1413 }, 1414 updateProgressElement = function (loaded, total, bps) { 1415 progressElement.html( 1416 formatBytes(bps) + 'ps | ' + 1417 formatTime((total - loaded) / bps) + ' | ' + 1418 formatPercentage(loaded / total) + ' | ' + 1419 formatBytes(loaded) + ' / ' + formatBytes(total) 1420 ); 1421 }, 1422 intervalHandler = function () { 1423 var diff = loaded - loadedBefore; 1424 if (!diff) { 1425 return; 1426 } 1427 loadedBefore = loaded; 1428 updateProgressElement( 1429 loaded, 1430 total, 1431 diff * (1000 / interval) 1432 ); 1433 }; 1434 widget 1435 .bind('fileuploadprogressall', progressHandler) 1436 .bind('fileuploadstop', stopHandler); 1437 progressTimer = window.setInterval(intervalHandler, interval); 1438 }); 1439 1440 if(objEvent.isShared){ 1441 1442 var acls = Calendar.signatureOf[objEvent.calendar].permission.acl; 1443 1444 if(!acls.write){ 1445 UI.dialogs.addEvent.find(':input').attr('disabled', 'disabled'); 1446 UI.dialogs.addEvent.find('.button').hide(); 1447 } 1448 1449 if(acls.remove) 1450 UI.dialogs.addEvent.find('.button.remove').show(); 1451 1452 UI.dialogs.addEvent.find('.button.cancel').show(); 1453 1454 1455 } 1456 1457 disponibily(objEvent, path, attendees); 1298 1458 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1459 UI.dialogs.addEvent.find(':input').change(function(event){ 1460 if (event.keyCode != '27' && event.keyCode != '13') 1461 canDiscardEventDialog = false; 1462 }).keydown(function(event){ 1463 if (event.keyCode != '27' && event.keyCode != '13') 1464 canDiscardEventDialog = false; 1465 }); 1466 1467 UI.dialogs.addEvent.dialog('open'); 1468 //$('[href="#calendar_addevent_details7"]').trigger('click'); 1469 //$('[href="#calendar_addevent_details2"]').trigger('click'); 1310 1470 } 1311 1471 … … 1314 1474 function add_tab_preferences() 1315 1475 { 1316 1317 1318 1319 1320 1321 1476 if(!(document.getElementById('preference_tab'))) 1477 { 1478 var tab_title = "Preferencias"; 1479 $tabs.tabs( "add", "#preference_tab", tab_title ); 1480 1481 /* 1322 1482 DataLayer.render( 'templates/timezone_list.ejs', {}, function( timezones_options ){ 1323 1483 tabPrefCalendar.find('select[name="timezone"]').html(timezones_options).find('option[value="'+User.preferences.timezone+'"]').attr('selected','selected').trigger('change'); 1324 1484 }); 1325 1485 */ 1326 DataLayer.render( 'templates/preferences_calendar.ejs', {preferences:User.preferences, calendars: Calendar.calendars}, function( template ){ 1327 var tabPrefCalendar = jQuery('#preference_tab').html( template ).find('.preferences-win'); 1328 1329 tabPrefCalendar.find('option[value="'+User.preferences.defaultCalendar+'"]').attr('selected','selected').trigger('change'); 1330 1331 DataLayer.render( 'templates/timezone_list.ejs', {}, function( timezones_options ){ 1332 tabPrefCalendar.find('select[name="timezone"]').html(timezones_options).find('option[value="'+User.preferences.timezone+'"]').attr('selected','selected').trigger('change'); 1486 DataLayer.render( 'templates/preferences_calendar.ejs', { 1487 preferences:User.preferences, 1488 calendars: Calendar.calendars 1489 }, function( template ){ 1490 var tabPrefCalendar = jQuery('#preference_tab').html( template ).find('.preferences-win'); 1491 1492 tabPrefCalendar.find('option[value="'+User.preferences.defaultCalendar+'"]').attr('selected','selected').trigger('change'); 1493 1494 DataLayer.render( 'templates/timezone_list.ejs', {}, function( timezones_options ){ 1495 tabPrefCalendar.find('select[name="timezone"]').html(timezones_options).find('option[value="'+User.preferences.timezone+'"]').attr('selected','selected').trigger('change'); 1496 }); 1497 1498 tabPrefCalendar.find('.button').button() 1499 .filter('.save').click(function(evt){ 1500 tabPrefCalendar.find('form').submit(); 1501 $('#calendar').fullCalendar('render'); 1502 $('.block-vertical-toolbox .mini-calendar').datepicker( "refresh" ); 1503 $tabs.tabs( "remove", "#preference_tab"); 1504 }).end().filter('.cancel').click(function(evt){ 1505 $tabs.tabs( "remove", "#preference_tab"); 1506 }); 1507 1508 tabPrefCalendar.find('.number').numeric(); 1509 1510 tabPrefCalendar.find('input.time').timepicker({ 1511 closeText: 'Ok', 1512 hourGrid: 4, 1513 minuteGrid: 10, 1514 ampm : (parseInt($("select[name=hourFormat] option:selected").val().length) > 5 ? true : false), //((User.preferences.hourFormat.length > 5) ? true: false), 1515 timeFormat: "hh:mm tt", 1516 onSelect: function (selectedDateTime){ 1517 if(!(User.preferences.hourFormat.length == 5)) { 1518 $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 1519 } 1520 }, 1521 onClose : function (selectedDateTime){ 1522 if(!(User.preferences.hourFormat.length == 5)) { 1523 $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 1524 } 1525 } 1526 }); 1527 1528 $.mask.definitions['{']='[ap]'; 1529 $.mask.definitions['}']='[m]'; 1530 tabPrefCalendar.find("input.time").mask( ((User.preferences.hourFormat.length > 5) ? "99:99 {}" : "99:99"), { 1531 completed:function(){ 1532 $(this).val(dateCalendar.defaultToAmPm($(this).val())); 1533 $(this).timepicker("refresh"); 1534 $(this).val($(this).val().replace(/[\.]/gi, "")); 1535 } 1536 }); 1537 1538 tabPrefCalendar.find("select[name=hourFormat]").change( function() { // evento ao selecionar formato de hora 1539 1540 tabPrefCalendar.find("input.time").timepicker("destroy"); 1541 1542 tabPrefCalendar.find('input.time').timepicker({ 1543 closeText: 'Ok', 1544 hourGrid: 4, 1545 minuteGrid: 10, 1546 ampm : (parseInt($("select[name=hourFormat] option:selected").val().length) > 5 ? true : false), 1547 timeFormat: "hh:mm tt", 1548 onSelect: function (selectedDateTime){ 1549 if(!(User.preferences.hourFormat.length == 5)) { 1550 $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 1551 } 1552 }, 1553 onClose : function (selectedDateTime){ 1554 if(!(User.preferences.hourFormat.length == 5)) { 1555 $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 1556 } 1557 } 1333 1558 }); 1334 1335 tabPrefCalendar.find('.button').button()1336 .filter('.save').click(function(evt){1337 tabPrefCalendar.find('form').submit();1338 $('#calendar').fullCalendar('render');1339 $('.block-vertical-toolbox .mini-calendar').datepicker( "refresh" );1340 $tabs.tabs( "remove", "#preference_tab");1341 }).end().filter('.cancel').click(function(evt){1342 $tabs.tabs( "remove", "#preference_tab");1343 });1344 1345 tabPrefCalendar.find('.number').numeric();1346 1347 tabPrefCalendar.find('input.time').timepicker({1348 closeText: 'Ok',1349 hourGrid: 4,1350 minuteGrid: 10,1351 ampm : (parseInt($("select[name=hourFormat] option:selected").val().length) > 5 ? true : false), //((User.preferences.hourFormat.length > 5) ? true: false),1352 timeFormat: "hh:mm tt",1353 onSelect: function (selectedDateTime){1354 if(!(User.preferences.hourFormat.length == 5)) {1355 $(this).val(selectedDateTime.replace(/[\.]/gi, ""));1356 }1357 },1358 onClose : function (selectedDateTime){1359 if(!(User.preferences.hourFormat.length == 5)) {1360 $(this).val(selectedDateTime.replace(/[\.]/gi, ""));1361 }1362 }1363 });1364 1365 $.mask.definitions['{']='[ap]';1366 $.mask.definitions['}']='[m]';1367 tabPrefCalendar.find("input.time").mask( ((User.preferences.hourFormat.length > 5) ? "99:99 {}" : "99:99"), {1368 completed:function(){1369 $(this).val(dateCalendar.defaultToAmPm($(this).val()));1370 $(this).timepicker("refresh");1371 $(this).val($(this).val().replace(/[\.]/gi, ""));1372 }1373 });1374 1375 tabPrefCalendar.find("select[name=hourFormat]").change( function() { // evento ao selecionar formato de hora1376 1377 tabPrefCalendar.find("input.time").timepicker("destroy");1378 1379 tabPrefCalendar.find('input.time').timepicker({1380 closeText: 'Ok',1381 hourGrid: 4,1382 minuteGrid: 10,1383 ampm : (parseInt($("select[name=hourFormat] option:selected").val().length) > 5 ? true : false),1384 timeFormat: "hh:mm tt",1385 onSelect: function (selectedDateTime){1386 if(!(User.preferences.hourFormat.length == 5)) {1387 $(this).val(selectedDateTime.replace(/[\.]/gi, ""));1388 }1389 },1390 onClose : function (selectedDateTime){1391 if(!(User.preferences.hourFormat.length == 5)) {1392 $(this).val(selectedDateTime.replace(/[\.]/gi, ""));1393 }1394 }1395 });1396 1559 1397 1398 1560 var defaultStartHour = tabPrefCalendar.find("input[name=defaultStartHour]").val().trim(); 1561 var defaultEndHour = tabPrefCalendar.find("input[name=defaultEndHour]").val().trim(); 1399 1562 1400 1563 tabPrefCalendar.find("input.time").mask( (($("select[name=hourFormat] option:selected").val().trim().length > 5) ? "99:99 {}" : "99:99") ); 1401 1564 1402 1403 1404 1565 if (parseInt($("select[name=hourFormat] option:selected").val().length) > 5) { // am/pm 1566 tabPrefCalendar.find("input[name=defaultStartHour]").val(dateCalendar.defaultToAmPm(defaultStartHour)); 1567 tabPrefCalendar.find("input[name=defaultEndHour]").val(dateCalendar.defaultToAmPm(defaultEndHour)) 1405 1568 1406 1407 1408 1409 1410 1569 } else { //24h 1570 tabPrefCalendar.find("input[name=defaultStartHour]").val(dateCalendar.AmPmTo24(defaultStartHour)); 1571 tabPrefCalendar.find("input[name=defaultEndHour]").val(dateCalendar.AmPmTo24(defaultEndHour)); 1572 } 1573 }); 1411 1574 1412 1575 1413 1576 1414 1415 1416 1417 1418 1419 1577 }); 1578 } else { 1579 $tabs.tabs("select", "#preference_tab"); 1580 1581 return true; 1582 } 1420 1583 } 1421 1584 … … 1423 1586 function add_tab_configure_calendar(calendar) 1424 1587 { 1425 var calendars = []; 1426 var signatures = []; 1427 var previewActiveCalendarConf = 0; 1428 1429 for (var i=0; i<Calendar.signatures.length; i++) { 1430 calendars[i] = Calendar.signatures[i].calendar; 1431 signatures[i] = Calendar.signatures[i]; 1432 signatures[i].numberDefaultAlarm = signatures[i].defaultAlarms != '' ? signatures[i].defaultAlarms.length: 0; 1433 if (calendar && calendars[i].id == calendar) 1434 previewActiveCalendarConf = i; 1435 } 1436 1437 if(!(document.getElementById('configure_tab'))) 1438 { 1439 $('.positionHelper').css('display', 'none'); 1440 var tab_title = "Configurações de agendas"; 1441 $tabs.tabs( "add", "#configure_tab", tab_title ); 1442 1443 var dataColorPicker = { 1444 colorsSuggestions: colors_suggestions() 1445 }; 1446 1447 1448 1449 var populateAccordionOnActive = function(event, ui) { 1450 var nowActive = (typeof(event) == 'number') ? event : $(event.target).accordion( "option", "active" ); 1451 dataColorPicker.colorsDefined = { 1452 border: '#'+signatures[nowActive].borderColor, 1453 font:'#'+signatures[nowActive].fontColor, 1454 background:'#'+signatures[nowActive].backgroundColor 1455 }; 1456 if (!jQuery('.accordion-user-calendars .ui-accordion-content').eq(nowActive).has('form')) { 1457 return true; 1458 } 1459 1460 DataLayer.render( 'templates/configure_calendars_itemlist.ejs', {user:User, calendar:calendars[nowActive], signature:signatures[nowActive]}, function( form_template ){ 1461 var form_content = jQuery('.accordion-user-calendars .ui-accordion-content').eq(nowActive).html( form_template ).find('form'); 1462 form_content.find('.preferences-alarms-list .button').button({text:false, icons:{primary:'ui-icon-close'}}); 1463 form_content.find('.button').button(); 1588 var calendars = []; 1589 var signatures = []; 1590 var previewActiveCalendarConf = 0; 1591 1592 for (var i=0; i<Calendar.signatures.length; i++) { 1593 calendars[i] = Calendar.signatures[i].calendar; 1594 signatures[i] = Calendar.signatures[i]; 1595 signatures[i].numberDefaultAlarm = signatures[i].defaultAlarms != '' ? signatures[i].defaultAlarms.length: 0; 1596 if (calendar && calendars[i].id == calendar) 1597 previewActiveCalendarConf = i; 1598 } 1599 1600 if(!(document.getElementById('configure_tab'))) 1601 { 1602 $('.positionHelper').css('display', 'none'); 1603 var tab_title = "Configurações de agendas"; 1604 $tabs.tabs( "add", "#configure_tab", tab_title ); 1605 1606 var dataColorPicker = { 1607 colorsSuggestions: colors_suggestions() 1608 }; 1609 1610 1611 1612 var populateAccordionOnActive = function(event, ui) { 1613 var nowActive = (typeof(event) == 'number') ? event : $(event.target).accordion( "option", "active" ); 1614 dataColorPicker.colorsDefined = { 1615 border: '#'+signatures[nowActive].borderColor, 1616 font:'#'+signatures[nowActive].fontColor, 1617 background:'#'+signatures[nowActive].backgroundColor 1618 }; 1619 if (!jQuery('.accordion-user-calendars .ui-accordion-content').eq(nowActive).has('form')) { 1620 return true; 1621 } 1622 1623 DataLayer.render( 'templates/configure_calendars_itemlist.ejs', { 1624 user:User, 1625 calendar:calendars[nowActive], 1626 signature:signatures[nowActive] 1627 }, function( form_template ){ 1628 var form_content = jQuery('.accordion-user-calendars .ui-accordion-content').eq(nowActive).html( form_template ).find('form'); 1629 form_content.find('.preferences-alarms-list .button').button({ 1630 text:false, 1631 icons:{ 1632 primary:'ui-icon-close' 1633 } 1634 }); 1635 form_content.find('.button').button(); 1464 1636 1465 DataLayer.render( 'templates/timezone_list.ejs', {}, function( timezones_options ){ 1466 var valueTimeZone = calendars[nowActive].timezone; 1467 form_content.find('select[name="timezone"]').html(timezones_options).find('option[value="'+valueTimeZone+'"]').attr('selected','selected').trigger('change'); 1468 }); 1469 1470 form_content.find('.button-add-alarms').click(function(){ 1471 DataLayer.render( 'templates/alarms_add_itemlist.ejs', {}, function( template ){ 1472 jQuery('.preferences-alarms-list').append(template) 1473 .find('li:last label:eq(0)').remove().end() 1474 .find('.number').numeric().end() 1475 .find('.button.remove').button({text:false, icons:{primary:'ui-icon-close'}}).click(function(el) { 1476 $(this).parent().remove(); 1477 }); 1478 }); 1479 }); 1480 1481 1482 /** 1637 DataLayer.render( 'templates/timezone_list.ejs', {}, function( timezones_options ){ 1638 var valueTimeZone = calendars[nowActive].timezone; 1639 form_content.find('select[name="timezone"]').html(timezones_options).find('option[value="'+valueTimeZone+'"]').attr('selected','selected').trigger('change'); 1640 }); 1641 1642 form_content.find('.button-add-alarms').click(function(){ 1643 DataLayer.render( 'templates/alarms_add_itemlist.ejs', {}, function( template ){ 1644 jQuery('.preferences-alarms-list').append(template) 1645 .find('li:last label:eq(0)').remove().end() 1646 .find('.number').numeric().end() 1647 .find('.button.remove').button({ 1648 text:false, 1649 icons:{ 1650 primary:'ui-icon-close' 1651 } 1652 }).click(function(el) { 1653 $(this).parent().remove(); 1654 }); 1655 }); 1656 }); 1657 1658 1659 /** 1483 1660 * Set color picker 1484 1661 */ 1485 1486 1487 1488 1489 1490 1662 DataLayer.render( 'templates/calendar_colorpicker.ejs', dataColorPicker, function( template ){ 1663 form_content.find('.calendar-colorpicker').html( template ); 1664 1665 var f = $.farbtastic(form_content.find('.colorpicker'), colorpickerPreviewChange); 1666 var selected; 1667 var colorpicker = form_content.find('.calendar-colorpicker'); 1491 1668 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1669 var colorpickerPreviewChange = function(color) { 1670 var pickedup = form_content.find('.colorwell-selected').val(color).css('background-color', color); 1671 1672 var colorpicker = form_content.find('.calendar-colorpicker'); 1673 1674 if (pickedup.is('input[name="backgroundColor"]')) { 1675 colorpicker.find('.fc-event-skin').css('background-color',color); 1676 } else if (pickedup.is('input[name="fontColor"]')) { 1677 colorpicker.find('.fc-event-skin').css('color',color); 1678 } else if (pickedup.is('input[name="borderColor"]')) { 1679 colorpicker.find('.fc-event-skin').css('border-color',color); 1680 } 1681 } 1505 1682 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1683 form_content.find('.colorwell').each(function () { 1684 f.linkTo(this); 1685 1686 if ($(this).is('input[name="backgroundColor"]')) { 1687 colorpicker.find('.fc-event-skin').css('background-color', $(this).val()); 1688 } else if ($(this).is('input[name="fontColor"]')) { 1689 colorpicker.find('.fc-event-skin').css('color', $(this).val()); 1690 } else if ($(this).is('input[name="borderColor"]')) { 1691 colorpicker.find('.fc-event-skin').css('border-color', $(this).val()); 1692 } 1693 }) 1694 .focus(function() { 1695 if (selected) { 1696 $(selected).removeClass('colorwell-selected'); 1697 } 1698 1699 $(selected = this).addClass('colorwell-selected'); 1700 f.linkTo(this, colorpickerPreviewChange); 1701 f.linkTo(colorpickerPreviewChange); 1702 1703 }); 1704 1705 form_content.find('select.color-suggestions').change(function() { 1706 var colors; 1707 1708 if(colors = dataColorPicker.colorsSuggestions[$(this).val()]) { 1709 colorpicker 1710 .find('input[name="fontColor"]').val(colors.font).focus().end() 1711 .find('input[name="backgroundColor"]').val(colors.background).focus().end() 1712 .find('input[name="borderColor"]').val(colors.border).focus().end() 1713 1714 .find('.fc-event-skin').css({ 1715 'background-color':dataColorPicker.colorsSuggestions[$(this).val()].background, 1716 'border-color':dataColorPicker.colorsSuggestions[$(this).val()].border, 1717 'color':dataColorPicker.colorsSuggestions[$(this).val()].font 1718 }); 1719 } 1720 }); 1721 1722 /** 1546 1723 * Trata a mudança dos valores dos campos de cores. 1547 1724 * Se mudar um conjunto de cores sugerido, 1548 1725 * este vira um conjunto de cores personalizado. 1549 1726 */ 1550 form_content.find('.colorwell').change(function (element, ui) { 1551 if (true) { 1552 form_content.find('select.color-suggestions') 1553 .find('option:selected').removeAttr('selected').end() 1554 .find('option[value="custom"]').attr('selected', 'selected').trigger('change'); 1555 } 1556 }); 1557 }); //END set colorpicker 1558 1559 form_content.find('.phone').mask("+99 (99) 9999-9999"); 1560 form_content.find('.number').numeric(); 1561 1562 }); //END DataLayer.render( 'templates/configure_calendars_itemlist.ejs' ... 1563 1564 // === validations preferences ==== 1565 1566 1567 } //END populateAccordionOnActive(event, ui) 1568 1569 1570 DataLayer.render( 'templates/configure_calendars.ejs', {user:User, calendars:calendars, signatures:signatures}, function( template ){ 1571 var template_content = jQuery('#configure_tab').html( template ).find('.configure-calendars-win'); 1572 template_content.find('.button').button().filter('.save').click(function(evt){ 1573 template_content.find('form').submit(); 1574 $tabs.tabs( "remove", "#configure_tab"); 1575 DataLayer.commit( false, false, function( received ){ 1576 delete Calendar.currentViewKey; 1577 Calendar.load(); 1578 refresh_calendars(); 1579 }); 1580 }).end().filter('.cancel').click(function(evt){ 1581 $tabs.tabs( "remove", "#configure_tab"); 1582 }); 1583 1584 /** 1727 form_content.find('.colorwell').change(function (element, ui) { 1728 if (true) { 1729 form_content.find('select.color-suggestions') 1730 .find('option:selected').removeAttr('selected').end() 1731 .find('option[value="custom"]').attr('selected', 'selected').trigger('change'); 1732 } 1733 }); 1734 }); //END set colorpicker 1735 1736 form_content.find('.phone').mask("+99 (99) 9999-9999"); 1737 form_content.find('.number').numeric(); 1738 1739 }); //END DataLayer.render( 'templates/configure_calendars_itemlist.ejs' ... 1740 1741 // === validations preferences ==== 1742 1743 1744 } //END populateAccordionOnActive(event, ui) 1745 1746 1747 DataLayer.render( 'templates/configure_calendars.ejs', { 1748 user:User, 1749 calendars:calendars, 1750 signatures:signatures 1751 }, function( template ){ 1752 var template_content = jQuery('#configure_tab').html( template ).find('.configure-calendars-win'); 1753 template_content.find('.button').button().filter('.save').click(function(evt){ 1754 template_content.find('form').submit(); 1755 $tabs.tabs( "remove", "#configure_tab"); 1756 DataLayer.commit( false, false, function( received ){ 1757 delete Calendar.currentViewKey; 1758 Calendar.load(); 1759 refresh_calendars(); 1760 }); 1761 }).end().filter('.cancel').click(function(evt){ 1762 $tabs.tabs( "remove", "#configure_tab"); 1763 }); 1764 1765 /** 1585 1766 * Muda a estrutura do template para a aplicação do plugin accordion 1586 1767 */ 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1768 template_content.find('.header-menu-container').after('<div class="accordion-user-calendars"></div>').end().find('.accordion-user-calendars') 1769 .append(template_content.children('fieldset')); 1770 1771 template_content.find('.accordion-user-calendars').children('fieldset').each(function(index) { 1772 $(this).before($('<h3></h3>').html($(this).children('legend'))); 1773 }); 1774 1775 template_content.find('.accordion-user-calendars').accordion({ 1776 autoHeight: false, 1777 collapsible: true, 1778 clearStyle: true, 1779 active: previewActiveCalendarConf, 1780 changestart: populateAccordionOnActive 1781 }); 1782 populateAccordionOnActive(previewActiveCalendarConf); 1783 }); 1784 1785 } else { 1786 1787 $tabs.tabs("select", "#configure_tab"); 1788 $('.accordion-user-calendars').accordion( "activate" , previewActiveCalendarConf ); 1789 1790 return true; 1791 } 1611 1792 1612 1793 } 1613 1794 1614 1795 function getSelectedCalendars( reverse ){ 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1796 var selecteds = {}; 1797 var cont = 0; 1798 jQuery(function() { 1799 jQuery(".my-calendars .calendar-view").each(function(i, obj) { 1800 var check_box = obj; 1801 if( reverse ? !check_box.checked : check_box.checked ) { 1802 selecteds[cont] = obj.value; 1803 cont++; 1804 }; 1805 }); 1806 }); 1807 if (!cont) 1808 return false; 1809 1810 selecteds.length = cont; 1811 return $.makeArray( selecteds ); 1631 1812 } 1632 1813 … … 1635 1816 */ 1636 1817 function colors_suggestions(){ 1637 return [ 1638 {name:'Padrão', border:'#3366cc', font:'#ffffff', background:'#3366cc'}, 1639 {name:'Coala', border:'#123456', font:'#ffffff', background:'#385c80'}, 1640 {name:'Tomate', border:'#d5130b', font:'#111111', background:'#e36d76'}, 1641 {name:'Limão', border:'#32ed21', font:'#1f3f1c', background:'#b2f1ac'}, 1642 {name:'Alto contraste', border:'#000000', font:'#ffffff', background:'#222222'} 1643 ] 1818 return [ 1819 { 1820 name:'Padrão', 1821 border:'#3366cc', 1822 font:'#ffffff', 1823 background:'#3366cc' 1824 }, 1825 1826 { 1827 name:'Coala', 1828 border:'#123456', 1829 font:'#ffffff', 1830 background:'#385c80' 1831 }, 1832 1833 { 1834 name:'Tomate', 1835 border:'#d5130b', 1836 font:'#111111', 1837 background:'#e36d76' 1838 }, 1839 1840 { 1841 name:'Limão', 1842 border:'#32ed21', 1843 font:'#1f3f1c', 1844 background:'#b2f1ac' 1845 }, 1846 1847 { 1848 name:'Alto contraste', 1849 border:'#000000', 1850 font:'#ffffff', 1851 background:'#222222' 1852 } 1853 ] 1644 1854 } 1645 1855 1646 1856 function remove_event(eventId){ 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1857 $.Zebra_Dialog('Tem certeza que deseja excluir o evento?', { 1858 'type': 'question', 1859 'overlay_opacity': '0.5', 1860 'buttons': ['Sim', 'Não'], 1861 'onClose': function(clicked) { 1862 if(clicked == 'Sim'){ 1863 DataLayer.remove('schedulable', ''+eventId); 1864 DataLayer.commit(); 1865 } 1866 } 1867 }); 1658 1868 } 1659 1869 … … 1661 1871 1662 1872 var schedulable = DataLayer.get('schedulable', ''+eventID); 1663 var edit = {repeat: (DataLayer.get('repeat', schedulable.repeat))}; 1873 var edit = { 1874 repeat: (DataLayer.get('repeat', schedulable.repeat)) 1875 }; 1664 1876 1665 1877 edit.repeat.startTime = new Date(parseInt(edit.repeat.startTime)).toString('yyyy-MM-dd HH:mm:00'); … … 1673 1885 1674 1886 function remove_ocurrence(eventId, idRecurrence){ 1675 $.Zebra_Dialog('Tem certeza que deseja excluir esta ocorrência?', { 1676 'type': 'question', 1677 'overlay_opacity': '0.5', 1678 'buttons': ['Sim', 'Não'], 1679 'onClose': function(clicked) { 1680 if(clicked == 'Sim'){ 1681 var repeat = mount_exception(eventId, idRecurrence); 1682 DataLayer.remove('repeat', false); 1683 DataLayer.put('repeat', repeat); 1684 DataLayer.commit(false, false, function(data){ 1685 Calendar.rerenderView(true); 1686 }); 1687 } 1887 $.Zebra_Dialog('Tem certeza que deseja excluir esta ocorrência?', { 1888 'type': 'question', 1889 'overlay_opacity': '0.5', 1890 'buttons': ['Sim', 'Não'], 1891 'onClose': function(clicked) { 1892 if(clicked == 'Sim'){ 1893 var repeat = mount_exception(eventId, idRecurrence); 1894 DataLayer.remove('repeat', false); 1895 DataLayer.put('repeat', repeat); 1896 DataLayer.commit(false, false, function(data){ 1897 Calendar.rerenderView(true); 1898 }); 1899 } 1900 } 1901 }); 1902 } 1903 1904 1905 function remove_calendar(){ 1906 /* Pode ser assim $('.cal-list-options-btn.ui-state-active').attr('class').replace(/[a-zA-Z-]+/g, ''); */ 1907 $.Zebra_Dialog('Todos os eventos desta agenda serão removidos. Deseja prosseguir com a operação?', { 1908 'type': 'question', 1909 'overlay_opacity': '0.5', 1910 'buttons': ['Sim', 'Não'], 1911 'onClose': function(clicked) { 1912 if(clicked == 'Sim'){ 1913 var idCalendar = $('.cal-list-options-btn.ui-state-active').attr('class').match(/[0-9]+/g); 1914 1915 DataLayer.remove('calendarSignature', Calendar.signatureOf[idCalendar[0]].id ); 1916 1917 if(idCalendar == User.preferences.defaultCalendar) 1918 DataLayer.remove( 'modulePreference', User.preferenceIds['defaultCalendar']); 1919 1920 DataLayer.commit( false, false, function( received ){ 1921 delete Calendar.currentViewKey; 1922 Calendar.load(); 1923 refresh_calendars(); 1924 }); 1925 } 1926 $('.positionHelper').css('display', 'none'); 1927 1928 } 1929 }); 1930 } 1931 1932 function refresh_calendars(){ 1933 1934 var colorsSuggestions = colors_suggestions(); 1935 var buttons_colors = ""; 1936 for(var i = 0; i < colorsSuggestions.length; i++){ 1937 buttons_colors += "<a class=\"cal-colors-options-btn ui-icon ui-button-icon-primary signed-cal-colors-options-btn-"+i+"\" style=\"background-color:"+colorsSuggestions[i]['background']+"; border-color:"+colorsSuggestions[i]['border']+"; color:"+colorsSuggestions[i]['font']+"\">•</a>"; 1938 } 1939 1940 //DataLayer.render( 'templates/calendar_list.ejs', 'calendar:list', ["IN", "id", Calendar.calendarIds], function( html ){ 1941 DataLayer.render( 'templates/calendar_list.ejs', Calendar, function( html ){ 1942 1943 var meu_container = $(".calendars-list").html( html ); 1944 1945 $('ul.list-calendars .cal-list-options-btn').each(function(){ 1946 $(this).menu({ 1947 content: $(this).next().html(), 1948 width: '120', 1949 positionOpts: { 1950 posX: 'left', 1951 posY: 'bottom', 1952 offsetX: 0, 1953 offsetY: 0, 1954 directionH: 'right', 1955 directionV: 'down', 1956 detectH: true, // do horizontal collision detection 1957 detectV: true, // do vertical collision detection 1958 linkToFront: false 1959 }, 1960 flyOut: true, 1961 showSpeed: 100, 1962 crumbDefaultText: '>' 1963 }); 1964 }); 1965 1966 meu_container.find(".button.new-calendar").button({ 1967 icons: { 1968 primary: "ui-icon-plus" 1969 }, 1970 text: false 1971 }).click(function () { 1972 1973 if( $('.qtip.qtip-blue.qtip-active').val() !== ''){ 1974 $(this).qtip({ 1975 show: { 1976 ready: true, 1977 solo: true, 1978 when: { 1979 event: 'click' 1980 } 1981 }, 1982 hide: false, 1983 content: { 1984 text: $('<div></div>').html( DataLayer.render( 'templates/calendar_quick_add.ejs', {} ) ), 1985 title: { 1986 text:'Nova Agenda', 1987 button: '<a class="button close" href="#">close</a>' 1688 1988 } 1689 }); 1690 } 1691 1692 1693 function remove_calendar(){ 1694 /* Pode ser assim $('.cal-list-options-btn.ui-state-active').attr('class').replace(/[a-zA-Z-]+/g, ''); */ 1695 $.Zebra_Dialog('Todos os eventos desta agenda serão removidos. Deseja prosseguir com a operação?', { 1696 'type': 'question', 1697 'overlay_opacity': '0.5', 1698 'buttons': ['Sim', 'Não'], 1699 'onClose': function(clicked) { 1700 if(clicked == 'Sim'){ 1701 var idCalendar = $('.cal-list-options-btn.ui-state-active').attr('class').match(/[0-9]+/g); 1989 }, 1990 style: { 1991 name: 'blue', 1992 tip: { 1993 corner: 'leftMiddle' 1994 }, 1995 border: { 1996 width: 4, 1997 radius: 8 1998 }, 1999 width: { 2000 min: 230, 2001 max:230 2002 } 2003 }, 2004 position: { 2005 corner: { 2006 target: 'rightMiddle', 2007 tooltip: 'leftMiddle' 2008 }, 2009 adjust: { 2010 x:0, 2011 y:-12 2012 } 2013 } 2014 }) 2015 .qtip("api").onShow = function(arg0) { 2016 $('.qtip-active .button.close').button({ 2017 icons: { 2018 primary: "ui-icon-close" 2019 }, 2020 text: false 2021 }) 2022 .click(function(){ 2023 meu_container.find(".button.new-calendar").qtip('destroy'); 2024 }); 2025 //TODO emplementar tratamento de duplicação de valores no location 2026 $('.qtip-active .button.save').button().click(function(){ 2027 for(var i = 0; i < Calendar.calendars.length; i++){ 2028 if(Calendar.calendars[i].location == $('.qtip-active input').val()){ 2029 $.Zebra_Dialog('O nome desta agenda já está sendo utilizada em uma Url de outra agenda. Por favor, informe outro nome para agenda.',{ 2030 'overlay_opacity': '0.5', 2031 'type': 'warning' 2032 }); 2033 meu_container.find(".button.new").qtip('destroy'); 2034 return; 2035 } 2036 } 1702 2037 1703 DataLayer.remove('calendarSignature', Calendar.signatureOf[idCalendar[0]].id ); 1704 1705 if(idCalendar == User.preferences.defaultCalendar) 1706 DataLayer.remove( 'modulePreference', User.preferenceIds['defaultCalendar']); 1707 1708 DataLayer.commit( false, false, function( received ){ 1709 delete Calendar.currentViewKey; 1710 Calendar.load(); 1711 refresh_calendars(); 1712 }); 1713 } 1714 $('.positionHelper').css('display', 'none'); 1715 2038 var selected; 2039 var color = $('.cal-colors-options-btn').each(function(index){ 2040 if ($(this).is('.color-selected')) 2041 selected = index; 2042 }); 2043 DataLayer.put( "calendarSignature", { 2044 user: User.me.id, 2045 calendar: { 2046 name: Encoder.htmlEncode($('.qtip-active input').val()), 2047 timezone: User.preferences.timezone 2048 }, 2049 isOwner: 1, 2050 fontColor: colorsSuggestions[selected]['font'].substring(1) , 2051 backgroundColor: colorsSuggestions[selected]['background'].substring(1) , 2052 borderColor: colorsSuggestions[selected]['border'].substring(1) 2053 }); 2054 DataLayer.commit( false, false, function( received ){ 2055 delete Calendar.currentViewKey; 2056 Calendar.load(); 2057 refresh_calendars(); 2058 }); 2059 meu_container.find(".button.new").qtip('destroy'); 2060 }); 2061 2062 $('.qtip-active .button.cancel').button().click(function(){ 2063 meu_container.find(".button.new").qtip('destroy'); 2064 }); 2065 2066 $(".qtip-active input").Watermark("Nome da agenda"); 2067 2068 $('.qtip-active').keydown(function(event) { 2069 if (event.keyCode == '27') { 2070 meu_container.find(".button.new").qtip('destroy'); 1716 2071 } 1717 }); 1718 } 1719 1720 function refresh_calendars(){ 1721 1722 var colorsSuggestions = colors_suggestions(); 1723 var buttons_colors = ""; 1724 for(var i = 0; i < colorsSuggestions.length; i++){ 1725 buttons_colors += "<a class=\"cal-colors-options-btn ui-icon ui-button-icon-primary signed-cal-colors-options-btn-"+i+"\" style=\"background-color:"+colorsSuggestions[i]['background']+"; border-color:"+colorsSuggestions[i]['border']+"; color:"+colorsSuggestions[i]['font']+"\">•</a>"; 1726 } 1727 1728 //DataLayer.render( 'templates/calendar_list.ejs', 'calendar:list', ["IN", "id", Calendar.calendarIds], function( html ){ 1729 DataLayer.render( 'templates/calendar_list.ejs', Calendar, function( html ){ 1730 1731 var meu_container = $(".calendars-list").html( html ); 1732 1733 $('ul.list-calendars .cal-list-options-btn').each(function(){ 1734 $(this).menu({ 1735 content: $(this).next().html(), 1736 width: '120', 1737 positionOpts: { 1738 posX: 'left', 1739 posY: 'bottom', 1740 offsetX: 0, 1741 offsetY: 0, 1742 directionH: 'right', 1743 directionV: 'down', 1744 detectH: true, // do horizontal collision detection 1745 detectV: true, // do vertical collision detection 1746 linkToFront: false 1747 }, 1748 flyOut: true, 1749 showSpeed: 100, 1750 crumbDefaultText: '>' 1751 }); 1752 }); 1753 1754 meu_container.find(".button.new-calendar").button({ 1755 icons: { 1756 primary: "ui-icon-plus" 1757 }, 1758 text: false 1759 }).click(function () { 1760 1761 if( $('.qtip.qtip-blue.qtip-active').val() !== ''){ 1762 $(this).qtip({ 1763 show: {ready: true, solo: true, when: {event: 'click'}}, 1764 hide: false, 1765 content: { 1766 text: $('<div></div>').html( DataLayer.render( 'templates/calendar_quick_add.ejs', {} ) ), 1767 title: { 1768 text:'Nova Agenda', 1769 button: '<a class="button close" href="#">close</a>' 1770 } 1771 }, 1772 style: {name: 'blue', tip: {corner: 'leftMiddle'}, border: {width: 4, radius: 8}, width: {min: 230, max:230}}, 1773 position: { 1774 corner: { 1775 target: 'rightMiddle', 1776 tooltip: 'leftMiddle' 1777 }, 1778 adjust: {x:0, y:-12} 1779 } 1780 }) 1781 .qtip("api").onShow = function(arg0) { 1782 $('.qtip-active .button.close').button({ 1783 icons: {primary: "ui-icon-close"}, 1784 text: false 1785 }) 1786 .click(function(){ 1787 meu_container.find(".button.new-calendar").qtip('destroy'); 1788 }); 1789 //TODO emplementar tratamento de duplicação de valores no location 1790 $('.qtip-active .button.save').button().click(function(){ 1791 for(var i = 0; i < Calendar.calendars.length; i++){ 1792 if(Calendar.calendars[i].location == $('.qtip-active input').val()){ 1793 $.Zebra_Dialog('O nome desta agenda já está sendo utilizada em uma Url de outra agenda. Por favor, informe outro nome para agenda.',{ 1794 'overlay_opacity': '0.5', 1795 'type': 'warning' 1796 }); 1797 meu_container.find(".button.new").qtip('destroy'); 1798 return; 1799 } 1800 } 1801 1802 var selected; 1803 var color = $('.cal-colors-options-btn').each(function(index){ 1804 if ($(this).is('.color-selected')) 1805 selected = index; 1806 }); 1807 DataLayer.put( "calendarSignature", { 1808 user: User.me.id, 1809 calendar: { 1810 name: Encoder.htmlEncode($('.qtip-active input').val()), 1811 timezone: User.preferences.timezone 1812 }, 1813 isOwner: 1, 1814 fontColor: colorsSuggestions[selected]['font'].substring(1) , 1815 backgroundColor: colorsSuggestions[selected]['background'].substring(1) , 1816 borderColor: colorsSuggestions[selected]['border'].substring(1) 1817 }); 1818 DataLayer.commit( false, false, function( received ){ 1819 delete Calendar.currentViewKey; 1820 Calendar.load(); 1821 refresh_calendars(); 1822 }); 1823 meu_container.find(".button.new").qtip('destroy'); 1824 }); 1825 1826 $('.qtip-active .button.cancel').button().click(function(){ 1827 meu_container.find(".button.new").qtip('destroy'); 1828 }); 1829 1830 $(".qtip-active input").Watermark("Nome da agenda"); 1831 1832 $('.qtip-active').keydown(function(event) { 1833 if (event.keyCode == '27') { 1834 meu_container.find(".button.new").qtip('destroy'); 1835 } 1836 }); 1837 1838 $('.colors-options').prepend(buttons_colors); 1839 $('.colors-options .signed-cal-colors-options-btn-0').addClass('color-selected'); 2072 }); 2073 2074 $('.colors-options').prepend(buttons_colors); 2075 $('.colors-options .signed-cal-colors-options-btn-0').addClass('color-selected'); 1840 2076 1841 var buttons = $('.cal-colors-options-btn').button(); 1842 1843 buttons.click(function(){ 1844 buttons.removeClass('color-selected'); 1845 $(this).addClass('color-selected'); 1846 }); 1847 } 1848 } 1849 }); 1850 1851 $("img.cal-list-img").click(function(evt) { 1852 $(".cal-list-options_1").toggleClass( "hidden" ); 2077 var buttons = $('.cal-colors-options-btn').button(); 2078 2079 buttons.click(function(){ 2080 buttons.removeClass('color-selected'); 2081 $(this).addClass('color-selected'); 1853 2082 }); 1854 1855 $(".my-calendars a.title-my-calendars").click(function() { 1856 $(".my-calendars ul.my-list-calendars").toggleClass("hidden") 1857 $('.my-calendars .status-list').toggleClass("ui-icon-triangle-1-s"); 1858 $('.my-calendars .status-list').toggleClass("ui-icon-triangle-1-e"); 1859 }); 1860 1861 $(".signed-calendars a.title-signed-calendars").click(function() { 1862 $(".signed-calendars ul.signed-list-calendars").toggleClass( "hidden"); 1863 }); 1864 1865 $("ul li.list-calendars-item").click(function(evt) { 1866 1867 }); 1868 1869 $("ul li.list-calendars-item .ui-corner-all").click(function(evt) { 1870 //alert('teste'); 1871 }); 2083 } 2084 } 2085 }); 2086 2087 $("img.cal-list-img").click(function(evt) { 2088 $(".cal-list-options_1").toggleClass( "hidden" ); 2089 }); 2090 2091 $(".my-calendars a.title-my-calendars").click(function() { 2092 $(".my-calendars ul.my-list-calendars").toggleClass("hidden") 2093 $('.my-calendars .status-list').toggleClass("ui-icon-triangle-1-s"); 2094 $('.my-calendars .status-list').toggleClass("ui-icon-triangle-1-e"); 2095 }); 2096 2097 $(".signed-calendars a.title-signed-calendars").click(function() { 2098 $(".signed-calendars ul.signed-list-calendars").toggleClass( "hidden"); 2099 }); 2100 2101 $("ul li.list-calendars-item").click(function(evt) { 2102 2103 }); 2104 2105 $("ul li.list-calendars-item .ui-corner-all").click(function(evt) { 2106 //alert('teste'); 2107 }); 1872 2108 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 2109 meu_container.find(".button.new-calendar-shared").button({ 2110 icons: { 2111 primary: "ui-icon-plus" 2112 }, 2113 text: false 2114 }).click(function (event) { 2115 show_modal_search_shared(); 2116 }); 2117 2118 2119 //TODO Implementar ocultar agendas. 2120 meu_container.find('.title-signed-calendars').click(function(evt){ 2121 var status = $(this).parent().find('.status-list-shared'); 2122 2123 if(status.hasClass('ui-icon-triangle-1-s')) 2124 status.removeClass('ui-icon-triangle-1-s').addClass('ui-icon-triangle-1-e'); 2125 else 2126 status.removeClass('ui-icon-triangle-1-e').addClass('ui-icon-triangle-1-s'); 2127 }); 2128 2129 $('.calendar-view').click(function(evt){ 2130 if($tabs.tabs('option' ,'selected') == 1){ 2131 pageselectCallback('', 0); 2132 } 2133 2134 if(Calendar.currentView){ 2135 var checkBox = $(this); 2136 if(!!Calendar.currentView[ checkBox.val() ]){ 2137 Calendar.currentView[ checkBox.val() ].hidden = !checkBox.is(':checked'); 2138 $('#calendar').fullCalendar( 'refetchEvents' ); 2139 } 2140 } 2141 }); 2142 }); 1907 2143 } 1908 2144 1909 2145 function add_events_list(keyword) 1910 2146 { 1911 var tab_title = ""; 1912 if (keyword){ 1913 if(keyword.length < 10) 1914 tab_title = keyword; 1915 else 1916 tab_title = keyword.substr(0,10) + '..."'; 2147 var tab_title = ""; 2148 if (keyword){ 2149 if(keyword.length < 10) 2150 tab_title = keyword; 2151 else 2152 tab_title = keyword.substr(0,10) + '..."'; 2153 }else{ 2154 tab_title = "Lista de eventos"; 2155 } 2156 keyword = ( keyword || '' ).replace( /\s+/g, "_" ); 2157 2158 if(!(document.getElementById('tab_events_list_' + (Base64.encode(keyword)).replace(/[^\w\s]/gi, "") ))) 2159 { 2160 Encoder.EncodeType = "entity"; 2161 $tabs.tabs( "add", "#tab_events_list_" + (Base64.encode(keyword)).replace(/[^\w\s]/gi, ""), Encoder.htmlEncode(tab_title) ); 2162 } 2163 else /* Tab already opened */ 2164 { 2165 $tabs.tabs("option", "selected", 2); 2166 } 2167 2168 pageselectCallback(keyword, 0); // load page 1 and insert data on event_list.ejs 2169 2170 $('.preferences-win.active .button.save, .preferences-win.active .button.cancel, .preferences-win.active .button.import, .preferences-win.active .button.export').button(); 2171 } 2172 2173 function paginatorSearch(currentView){ 2174 $(currentView+' .header-paginator .fc-header-left .fc-button').hover( 2175 function(){ 2176 $(this).addClass('fc-state-hover'); 2177 }, 2178 function(){ 2179 $(this).removeClass('fc-state-hover'); 2180 }).mousedown(function(){ 2181 $(this).addClass('fc-state-down'); 2182 }).mouseup(function(){ 2183 $(this).removeClass('fc-state-down'); 2184 $('.events-list.events-list-win.active').removeClass('active'); 2185 var paginator = $(this).attr('class'); 2186 if(paginator.indexOf('next') > 0){ 2187 if(parseInt($(currentView+' [name = results]').val()) > 25) 2188 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($(currentView+' [name = page_index]').val())) +1)); 1917 2189 }else{ 1918 tab_title = "Lista de eventos"; 1919 } 1920 keyword = ( keyword || '' ).replace( /\s+/g, "_" ); 1921 1922 if(!(document.getElementById('tab_events_list_' + (Base64.encode(keyword)).replace(/[^\w\s]/gi, "") ))) 1923 { 1924 Encoder.EncodeType = "entity"; 1925 $tabs.tabs( "add", "#tab_events_list_" + (Base64.encode(keyword)).replace(/[^\w\s]/gi, ""), Encoder.htmlEncode(tab_title) ); 1926 } 1927 else /* Tab already opened */ 1928 { 1929 $tabs.tabs("option", "selected", 2); 1930 } 1931 1932 pageselectCallback(keyword, 0); // load page 1 and insert data on event_list.ejs 1933 1934 $('.preferences-win.active .button.save, .preferences-win.active .button.cancel, .preferences-win.active .button.import, .preferences-win.active .button.export').button(); 1935 } 1936 1937 function paginatorSearch(currentView){ 1938 $(currentView+' .header-paginator .fc-header-left .fc-button').hover( 1939 function(){ 1940 $(this).addClass('fc-state-hover'); 1941 }, 1942 function(){ 1943 $(this).removeClass('fc-state-hover'); 1944 }).mousedown(function(){ 1945 $(this).addClass('fc-state-down'); 1946 }).mouseup(function(){ 1947 $(this).removeClass('fc-state-down'); 1948 $('.events-list.events-list-win.active').removeClass('active'); 1949 var paginator = $(this).attr('class'); 1950 if(paginator.indexOf('next') > 0){ 1951 if(parseInt($(currentView+' [name = results]').val()) > 25) 1952 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($(currentView+' [name = page_index]').val())) +1)); 1953 }else{ 1954 if(parseInt($(currentView+' [name = page_index]').val()) > 0) 1955 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($(currentView+' [name = page_index]').val())) -1)); 2190 if(parseInt($(currentView+' [name = page_index]').val()) > 0) 2191 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($(currentView+' [name = page_index]').val())) -1)); 2192 } 2193 }); 2194 } 2195 2196 function mountTitleList(page_index ,view){ 2197 switch (view){ 2198 case 'agendaDay': 2199 case 'basicDay': 2200 var date = new Date().add({ 2201 days: page_index 2202 }); 2203 return (dateCalendar.dayNames[date.getDay()])+", "+(date.toString('dd MMM yyyy')); 2204 case 'agendaWeek': 2205 var dateStart = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 2206 dateStart.add({ 2207 days: (7 * page_index) 2208 }); 2209 var dateEnd = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 2210 dateEnd.add({ 2211 days: (page_index * 7)+7 2212 }); 2213 if(dateStart.toString('MM') != dateEnd.toString('MM')) 2214 return dateStart.toString('dd')+' de '+dateCalendar.monthNamesShort[dateStart.getMonth()]+' a '+dateEnd.toString('dd')+' de '+dateCalendar.monthNames[dateEnd.getMonth()]+' - '+dateEnd.toString('yyyy'); 2215 return +dateStart.toString("dd")+" a "+dateEnd.toString("dd")+" de "+dateCalendar.monthNames[dateEnd.getMonth()]+" - "+dateEnd.toString('yyyy'); 2216 case 'month': 2217 var date = new Date().add({ 2218 months: page_index 2219 }) 2220 return dateCalendar.monthNames[date.getMonth()]+" "+date.toString("yyyy"); 2221 case 'year': 2222 var date = new Date().add({ 2223 years: page_index 2224 }); 2225 return date.toString("yyyy"); 2226 } 2227 } 2228 2229 function paginatorList(currentView, view){ 2230 $(currentView+' .events-list.events-list-win.active .list-events-paginator .fc-header-title').html('<h2>'+mountTitleList( parseInt($('[name = page_index]').val()),view)+'</h2>'); 2231 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right .fc-button').removeClass('fc-state-active') 2232 if(view == 'basicDay') 2233 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right .fc-button-agendaDay').addClass('fc-state-active'); 2234 else 2235 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right .fc-button-'+view).addClass('fc-state-active'); 2236 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right').addClass('list-right'); 2237 2238 $(currentView+' .header-paginator .fc-header-right .fc-button').hover( 2239 function(){ 2240 $(this).addClass('fc-state-hover'); 2241 }, 2242 function(){ 2243 $(this).removeClass('fc-state-hover'); 2244 }).mousedown(function(){ 2245 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right .fc-button').removeClass('fc-state-active') 2246 $(this).addClass('fc-state-active'); 2247 }).mouseup(function(){ 2248 var goView = $(this).attr('class'); 2249 if(goView.indexOf('agendaDay') > 0) 2250 pageselectCallback($(currentView+' [name = keyword]').val(), 0, '', 'agendaDay'); 2251 else if(goView.indexOf('month') > 0) 2252 pageselectCallback($(currentView+' [name = keyword]').val(), 0, '', 'month'); 2253 else if(goView.indexOf('year') > 0) 2254 pageselectCallback($(currentView+' [name = keyword]').val(), 0, '', 'year'); 2255 else if(goView.indexOf('agendaWeek') > 0) 2256 pageselectCallback($(currentView+' [name = keyword]').val(), 0, '', 'agendaWeek'); 2257 2258 }); 2259 2260 $(currentView+' .header-paginator .fc-header-left .fc-button').hover( 2261 function(){ 2262 $(this).addClass('fc-state-hover'); 2263 }, 2264 function(){ 2265 $(this).removeClass('fc-state-hover'); 2266 }).mousedown(function(){ 2267 $(this).addClass('fc-state-down'); 2268 }).mouseup(function(){ 2269 $(this).removeClass('fc-state-down'); 2270 var paginator = $(this).attr('class'); 2271 if(paginator.indexOf('next') > 0) 2272 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($('[name = page_index]').val())) +1), '', view); 2273 else 2274 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($('[name = page_index]').val())) -1), '', view); 2275 }); 2276 } 2277 2278 function paginatorListEvent(currentView, typeView, view){ 2279 if(!!$(currentView).find('.fc-calendar').length) 2280 return; 2281 $(currentView+' .events-list.events-list-win.active').prepend($('.fc-header').clone()); 2282 //Remove contudo nao utilizado 2283 $(currentView+' .events-list.events-list-win.active .fc-header .fc-button-today').remove(); 2284 $(currentView+' .events-list.events-list-win.active .fc-header .fc-button-basicWeek').remove(); 2285 $(currentView+' .events-list.events-list-win.active .fc-header .fc-button-basicDay').remove(); 2286 2287 //Adiciona e remove as classes para esta visualizacao 2288 $(currentView+' .events-list.events-list-win.active .fc-header .fc-header-center').addClass('list-events-paginator'); 2289 $(currentView+' .events-list.events-list-win.active .fc-header .list-events-paginator').removeClass('fc-header-center'); 2290 2291 //Adicionar class no header padronizar com a tela principal 2292 $(currentView+' .events-list.events-list-win.active .fc-header').addClass('header-paginator'); 2293 $(currentView+' .events-list.events-list-win.active .header-paginator').removeClass('fc-header'); 2294 2295 if(typeView == 'search'){ 2296 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right').remove() 2297 $(currentView+' .events-list.events-list-win.active .list-events-paginator .fc-header-title').html('<h2>Resultados para: '+$(currentView+' [name = keyword]').val()+'</h2>'); 2298 if((parseInt($(currentView+' [name = page_index]').val()) == 0) && (parseInt($(currentView+' [name = results]').val()) <= 25)) 2299 return; 2300 paginatorSearch(currentView); 2301 }else 2302 paginatorList(currentView, view); 2303 } 2304 2305 function mountCriteriaList(view, page_index, calerdars_selecteds){ 2306 var rangeStart , rangeEnd; 2307 switch (view){ 2308 case 'basicDay': 2309 case 'agendaDay': 2310 rangeStart = new Date().add({ 2311 days: page_index 2312 }).getTime(); 2313 rangeEnd = rangeStart; 2314 break; 2315 case 'agendaWeek': 2316 var dateStart = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 2317 var dateEnd = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 2318 rangeStart = dateStart.add({ 2319 days: (7 * page_index) 2320 }).getTime(); 2321 rangeEnd = dateEnd.add({ 2322 days: (7 * page_index)+7 2323 }).getTime(); 2324 break; 2325 case 'month': 2326 var date = Date.today().add({ 2327 months: page_index 2328 }) 2329 rangeStart = date.moveToFirstDayOfMonth().getTime(); 2330 rangeEnd = date.moveToLastDayOfMonth().getTime(); 2331 break; 2332 case 'year': 2333 var dateStart = new Date().add({ 2334 years: page_index 2335 }); 2336 var dateEnd = new Date().add({ 2337 years: page_index 2338 }); 2339 if(dateStart.getMonth() != 0) 2340 dateStart.moveToMonth(0, -1) 2341 if(dateEnd.getMonth() != 11) 2342 dateEnd.moveToMonth(11) 2343 rangeStart = dateStart.moveToFirstDayOfMonth().getTime(); 2344 rangeEnd = dateEnd.moveToLastDayOfMonth().getTime(); 2345 break; 2346 } 2347 2348 var timezone = {}; 2349 for(var i in Calendar.signatureOf) 2350 timezone[i] = Calendar.signatureOf[i].calendar.timezone; 2351 2352 return { 2353 filter: ['AND', ['>=', 'rangeStart', rangeStart], ['<=', 'rangeEnd', rangeEnd] , ['IN', 'calendar', calerdars_selecteds]], 2354 criteria: { 2355 deepness: 2, 2356 order: 'startTime', 2357 timezones: timezone 2358 } 2359 }; 2360 2361 } 2362 2363 function pageselectCallback(keyword, page_index, jq, view){ 2364 2365 var selecteds = getSelectedCalendars(); 2366 if(!selecteds && (keyword != '' && keyword != null)){ 2367 jQuery('#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "")|| '')).html( 2368 '<div title="Lista de eventos" class="events-list events-list-win active empty">' + 2369 '<label>Por favor selecione ao menos uma agenda.</label>' + 2370 '</div>' 2371 ); 2372 }else{ 2373 var criteria = null; 2374 if(keyword == '' || keyword == null) 2375 criteria = mountCriteriaList(!!view ? view : User.preferences.defaultCalView, page_index, selecteds) 2376 else 2377 criteria = { 2378 filter: ['AND', ['OR', ["i*", "summary", keyword], ["i*", "description", keyword]], ['IN', 'calendar', selecteds]], 2379 criteria: { 2380 order: 'startTime', 2381 offset: (25 * page_index), 2382 limit: (((25 * page_index) + 25) + 1), 2383 deepness: 2 2384 } 2385 }; 2386 var results = DataLayer.get('schedulable:detail', criteria); 2387 keyword = ( keyword || '' ).replace( /\s+/g, "_" ); 2388 } 2389 // não há resultados 2390 if ((((typeof(results) == 'undefined') || (!results.events_list )) && selecteds) &&(keyword != '' && keyword != null)) { 2391 jQuery('#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "")|| '')).html( 2392 '<div title="Lista de eventos" class="events-list events-list-win active empty">' + 2393 '<label>Não foi encontrado nenhum evento correspondente à sua pesquisa.</label>' + 2394 '</div>' 2395 ); 2396 // há resultados e Agendas Selecionadas 2397 } else{ 2398 if(typeof(results) != 'undefined'){ 2399 results['page_index'] = page_index; 2400 results['keyword'] = keyword; 2401 2402 DataLayer.render( 'templates/event_list.ejs', results, function( html ){ 2403 var currentView = '#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "") || ''); 2404 jQuery(currentView).html( html ); 2405 jQuery('.events-list-win .menu-container .button').button(); 2406 2407 $(".event-details-item").parent().click(function(){ 2408 2409 $(this).siblings("div.details-event-list").toggleClass("hidden") 2410 .find('.button.delete').click(function(){ 2411 var eventId = $(this).siblings('[name="eventid"]').val(); 2412 $.Zebra_Dialog('Tem certeza que deseja excluir o evento?', { 2413 'type': 'question', 2414 'overlay_opacity': '0.5', 2415 'buttons': ['Sim', 'Não'], 2416 'onClose': function(clicked) { 2417 if(clicked == 'Sim'){ 2418 DataLayer.remove('schedulable', eventId); 2419 } 1956 2420 } 2421 }); 2422 }) 2423 .end().find('.button.edit').click(function(){ 2424 eventDetails( DataLayer.get( "schedulable", $(this).siblings('[name="eventid"]').val() ), true ); 1957 2425 }); 1958 } 1959 1960 function mountTitleList(page_index ,view){ 1961 switch (view){ 1962 case 'agendaDay': 1963 case 'basicDay': 1964 var date = new Date().add({days: page_index}); 1965 return (dateCalendar.dayNames[date.getDay()])+", "+(date.toString('dd MMM yyyy')); 1966 case 'agendaWeek': 1967 var dateStart = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 1968 dateStart.add({days: (7 * page_index)}); 1969 var dateEnd = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 1970 dateEnd.add({days: (page_index * 7)+7}); 1971 if(dateStart.toString('MM') != dateEnd.toString('MM')) 1972 return dateStart.toString('dd')+' de '+dateCalendar.monthNamesShort[dateStart.getMonth()]+' a '+dateEnd.toString('dd')+' de '+dateCalendar.monthNames[dateEnd.getMonth()]+' - '+dateEnd.toString('yyyy'); 1973 return +dateStart.toString("dd")+" a "+dateEnd.toString("dd")+" de "+dateCalendar.monthNames[dateEnd.getMonth()]+" - "+dateEnd.toString('yyyy'); 1974 case 'month': 1975 var date = new Date().add({months: page_index}) 1976 return dateCalendar.monthNames[date.getMonth()]+" "+date.toString("yyyy"); 1977 case 'year': 1978 var date = new Date().add({years: page_index}); 1979 return date.toString("yyyy"); 1980 } 1981 } 1982 1983 function paginatorList(currentView, view){ 1984 $(currentView+' .events-list.events-list-win.active .list-events-paginator .fc-header-title').html('<h2>'+mountTitleList( parseInt($('[name = page_index]').val()),view)+'</h2>'); 1985 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right .fc-button').removeClass('fc-state-active') 1986 if(view == 'basicDay') 1987 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right .fc-button-agendaDay').addClass('fc-state-active'); 1988 else 1989 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right .fc-button-'+view).addClass('fc-state-active'); 1990 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right').addClass('list-right'); 1991 1992 $(currentView+' .header-paginator .fc-header-right .fc-button').hover( 1993 function(){ 1994 $(this).addClass('fc-state-hover'); 1995 }, 1996 function(){ 1997 $(this).removeClass('fc-state-hover'); 1998 }).mousedown(function(){ 1999 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right .fc-button').removeClass('fc-state-active') 2000 $(this).addClass('fc-state-active'); 2001 }).mouseup(function(){ 2002 var goView = $(this).attr('class'); 2003 if(goView.indexOf('agendaDay') > 0) 2004 pageselectCallback($(currentView+' [name = keyword]').val(), 0, '', 'agendaDay'); 2005 else if(goView.indexOf('month') > 0) 2006 pageselectCallback($(currentView+' [name = keyword]').val(), 0, '', 'month'); 2007 else if(goView.indexOf('year') > 0) 2008 pageselectCallback($(currentView+' [name = keyword]').val(), 0, '', 'year'); 2009 else if(goView.indexOf('agendaWeek') > 0) 2010 pageselectCallback($(currentView+' [name = keyword]').val(), 0, '', 'agendaWeek'); 2011 2012 }); 2013 2014 $(currentView+' .header-paginator .fc-header-left .fc-button').hover( 2015 function(){ 2016 $(this).addClass('fc-state-hover'); 2017 }, 2018 function(){ 2019 $(this).removeClass('fc-state-hover'); 2020 }).mousedown(function(){ 2021 $(this).addClass('fc-state-down'); 2022 }).mouseup(function(){ 2023 $(this).removeClass('fc-state-down'); 2024 var paginator = $(this).attr('class'); 2025 if(paginator.indexOf('next') > 0) 2026 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($('[name = page_index]').val())) +1), '', view); 2027 else 2028 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($('[name = page_index]').val())) -1), '', view); 2029 }); 2030 } 2031 2032 function paginatorListEvent(currentView, typeView, view){ 2033 if(!!$(currentView).find('.fc-calendar').length) 2034 return; 2035 $(currentView+' .events-list.events-list-win.active').prepend($('.fc-header').clone()); 2036 //Remove contudo nao utilizado 2037 $(currentView+' .events-list.events-list-win.active .fc-header .fc-button-today').remove(); 2038 $(currentView+' .events-list.events-list-win.active .fc-header .fc-button-basicWeek').remove(); 2039 $(currentView+' .events-list.events-list-win.active .fc-header .fc-button-basicDay').remove(); 2040 2041 //Adiciona e remove as classes para esta visualizacao 2042 $(currentView+' .events-list.events-list-win.active .fc-header .fc-header-center').addClass('list-events-paginator'); 2043 $(currentView+' .events-list.events-list-win.active .fc-header .list-events-paginator').removeClass('fc-header-center'); 2044 2045 //Adicionar class no header padronizar com a tela principal 2046 $(currentView+' .events-list.events-list-win.active .fc-header').addClass('header-paginator'); 2047 $(currentView+' .events-list.events-list-win.active .header-paginator').removeClass('fc-header'); 2048 2049 if(typeView == 'search'){ 2050 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right').remove() 2051 $(currentView+' .events-list.events-list-win.active .list-events-paginator .fc-header-title').html('<h2>Resultados para: '+$(currentView+' [name = keyword]').val()+'</h2>'); 2052 if((parseInt($(currentView+' [name = page_index]').val()) == 0) && (parseInt($(currentView+' [name = results]').val()) <= 25)) 2053 return; 2054 paginatorSearch(currentView); 2055 }else 2056 paginatorList(currentView, view); 2057 } 2058 2059 function mountCriteriaList(view, page_index, calerdars_selecteds){ 2060 var rangeStart , rangeEnd; 2061 switch (view){ 2062 case 'basicDay': 2063 case 'agendaDay': 2064 rangeStart = new Date().add({days: page_index}).getTime(); 2065 rangeEnd = rangeStart; 2066 break; 2067 case 'agendaWeek': 2068 var dateStart = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 2069 var dateEnd = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 2070 rangeStart = dateStart.add({days: (7 * page_index)}).getTime(); 2071 rangeEnd = dateEnd.add({days: (7 * page_index)+7}).getTime(); 2072 break; 2073 case 'month': 2074 var date = Date.today().add({months: page_index}) 2075 rangeStart = date.moveToFirstDayOfMonth().getTime(); 2076 rangeEnd = date.moveToLastDayOfMonth().getTime(); 2077 break; 2078 case 'year': 2079 var dateStart = new Date().add({years: page_index}); 2080 var dateEnd = new Date().add({years: page_index}); 2081 if(dateStart.getMonth() != 0) 2082 dateStart.moveToMonth(0, -1) 2083 if(dateEnd.getMonth() != 11) 2084 dateEnd.moveToMonth(11) 2085 rangeStart = dateStart.moveToFirstDayOfMonth().getTime(); 2086 rangeEnd = dateEnd.moveToLastDayOfMonth().getTime(); 2087 break; 2088 } 2089 2090 var timezone = {}; 2091 for(var i in Calendar.signatureOf) 2092 timezone[i] = Calendar.signatureOf[i].calendar.timezone; 2093 2094 return {filter: ['AND', ['>=', 'rangeStart', rangeStart], ['<=', 'rangeEnd', rangeEnd] , ['IN', 'calendar', calerdars_selecteds]], criteria: {deepness: 2, order: 'startTime', timezones: timezone}}; 2095 2096 } 2097 2098 function pageselectCallback(keyword, page_index, jq, view){ 2099 2100 var selecteds = getSelectedCalendars(); 2101 if(!selecteds && (keyword != '' && keyword != null)){ 2102 jQuery('#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "")|| '')).html( 2103 '<div title="Lista de eventos" class="events-list events-list-win active empty">' + 2104 '<label>Por favor selecione ao menos uma agenda.</label>' + 2105 '</div>' 2106 ); 2107 }else{ 2108 var criteria = null; 2109 if(keyword == '' || keyword == null) 2110 criteria = mountCriteriaList(!!view ? view : User.preferences.defaultCalView, page_index, selecteds) 2111 else 2112 criteria = {filter: ['AND', ['OR', ["i*", "summary", keyword], ["i*", "description", keyword]], ['IN', 'calendar', selecteds]], criteria: {order: 'startTime', offset: (25 * page_index), limit: (((25 * page_index) + 25) + 1), deepness: 2}}; 2113 var results = DataLayer.get('schedulable:detail', criteria); 2114 keyword = ( keyword || '' ).replace( /\s+/g, "_" ); 2115 } 2116 // não há resultados 2117 if ((((typeof(results) == 'undefined') || (!results.events_list )) && selecteds) &&(keyword != '' && keyword != null)) { 2118 jQuery('#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "")|| '')).html( 2119 '<div title="Lista de eventos" class="events-list events-list-win active empty">' + 2120 '<label>Não foi encontrado nenhum evento correspondente à sua pesquisa.</label>' + 2121 '</div>' 2122 ); 2123 // há resultados e Agendas Selecionadas 2124 } else{ 2125 if(typeof(results) != 'undefined'){ 2126 results['page_index'] = page_index; 2127 results['keyword'] = keyword; 2128 2129 DataLayer.render( 'templates/event_list.ejs', results, function( html ){ 2130 var currentView = '#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "") || ''); 2131 jQuery(currentView).html( html ); 2132 jQuery('.events-list-win .menu-container .button').button(); 2133 2134 $(".event-details-item").parent().click(function(){ 2135 2136 $(this).siblings("div.details-event-list").toggleClass("hidden") 2137 .find('.button.delete').click(function(){ 2138 var eventId = $(this).siblings('[name="eventid"]').val(); 2139 $.Zebra_Dialog('Tem certeza que deseja excluir o evento?', { 2140 'type': 'question', 2141 'overlay_opacity': '0.5', 2142 'buttons': ['Sim', 'Não'], 2143 'onClose': function(clicked) { 2144 if(clicked == 'Sim'){ 2145 DataLayer.remove('schedulable', eventId); 2146 } 2147 } 2148 }); 2149 }) 2150 .end().find('.button.edit').click(function(){ 2151 eventDetails( DataLayer.get( "schedulable", $(this).siblings('[name="eventid"]').val() ), true ); 2152 }); 2153 2154 }); 2155 paginatorListEvent(currentView, (keyword == '' || keyword == null) ? 'list' : 'search', !!view ? view : User.preferences.defaultCalView); 2156 }); 2157 }else{ 2158 var currentView = '#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "") || ''); 2159 jQuery('#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "")|| '')).html( 2160 '<div title="Lista de eventos" class="events-list events-list-win active empty">' + 2161 '<input type="hidden" name="page_index" value="'+page_index+'"></inpunt>'+ 2162 '<input type="hidden" name="keyword" value="'+keyword+'"></inpunt>'+ 2163 '<label class="empty-result">Não foram encontrados eventos neste intervalo.</label>' + 2164 '</div>' 2165 ); 2166 paginatorListEvent(currentView, 'list', !!view ? view : User.preferences.defaultCalView); 2167 } 2168 2169 } 2426 2427 }); 2428 paginatorListEvent(currentView, (keyword == '' || keyword == null) ? 'list' : 'search', !!view ? view : User.preferences.defaultCalView); 2429 }); 2430 }else{ 2431 var currentView = '#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "") || ''); 2432 jQuery('#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "")|| '')).html( 2433 '<div title="Lista de eventos" class="events-list events-list-win active empty">' + 2434 '<input type="hidden" name="page_index" value="'+page_index+'"></inpunt>'+ 2435 '<input type="hidden" name="keyword" value="'+keyword+'"></inpunt>'+ 2436 '<label class="empty-result">Não foram encontrados eventos neste intervalo.</label>' + 2437 '</div>' 2438 ); 2439 paginatorListEvent(currentView, 'list', !!view ? view : User.preferences.defaultCalView); 2440 } 2441 2442 } 2170 2443 2171 2444 } 2172 2445 2173 2446 function show_modal_import_export(tab, calendarId) { 2174 DataLayer.render( 'templates/import_export.ejs', {calendars: Calendar.calendars, owner: User.me.id}, function( html ){ 2175 2176 if (!UI.dialogs.importCalendar) { 2177 UI.dialogs.importCalendar = jQuery('#div-import-export-calendar') 2178 .append('<div title="Importar e Exportar Eventos" class="import-export import-export-win active"> <div>') 2179 .find('.import-export-win.active').html(html).dialog({ 2180 resizable: false, 2181 modal:true, 2182 width:500, 2183 position: 'center' 2184 }); 2185 2186 } else { 2187 UI.dialogs.importCalendar.html(html); 2188 } 2189 2190 var tabsImportExport = UI.dialogs.importCalendar.find(".tabs-import-export").tabs({selected: tab}); 2447 DataLayer.render( 'templates/import_export.ejs', { 2448 calendars: Calendar.calendars, 2449 owner: User.me.id 2450 }, function( html ){ 2451 2452 if (!UI.dialogs.importCalendar) { 2453 UI.dialogs.importCalendar = jQuery('#div-import-export-calendar') 2454 .append('<div title="Importar e Exportar Eventos" class="import-export import-export-win active"> <div>') 2455 .find('.import-export-win.active').html(html).dialog({ 2456 resizable: false, 2457 modal:true, 2458 width:500, 2459 position: 'center' 2460 }); 2461 2462 } else { 2463 UI.dialogs.importCalendar.html(html); 2464 } 2465 2466 var tabsImportExport = UI.dialogs.importCalendar.find(".tabs-import-export").tabs({ 2467 selected: tab 2468 }); 2191 2469 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2470 UI.dialogs.importCalendar.find('.button').button(); 2471 2472 tabsImportExport.find('option[value="'+calendarId+'"]').attr('selected','selected').trigger('change'); 2473 2474 var form = false; 2475 $('.import-event-form').fileupload({ 2476 sequentialUploads: true, 2477 add: function (e, data) { 2478 form = data 2479 var name = form.files[0].name; 2480 $('.import-event-form').find('input[type="file"]').hide(); 2481 $('.import-event-form').find('span.file-add').removeClass('hidden'); 2482 $('.import-event-form').find('span.file-add').append('<span>'+ name +'</span><a class="button remove-attachment tiny"></a>'); 2483 $('.import-event-form').find('.button.remove-attachment').button({ 2484 icons: { 2485 primary: "ui-icon-close" 2486 }, 2487 text: false 2488 }).click(function (event){ 2489 $('.import-event-form').find('input[type="file"]').show(); 2490 $('.import-event-form').find('span.file-add').addClass('hidden').html(''); 2491 form = false; 2492 }); 2215 2493 2216 2494 2217 }, 2218 done: function(e, data){ 2219 var msg = ''; 2220 var type = ''; 2221 2222 if(!!data.result && data.result == "[][[]]"){ 2223 msg = 'Não foram encontrados novos eventos na importação!'; 2224 type = 'information'; 2225 }else if(!!data.result && data.result == '[][false]'){ 2226 msg = 'Erro ao realizar a importação, por favor verifique o arquivo .ics'; 2227 type = 'warning'; 2228 }else{ 2229 msg = 'Importação realizada com sucesso!'; 2230 type = 'confirmation'; 2231 Calendar.rerenderView(true); 2232 } 2233 2234 $.Zebra_Dialog(msg, { 2235 'type': type, 2236 'overlay_opacity': '0.5', 2237 'buttons': ['Fechar'] 2238 }); 2239 } 2495 }, 2496 done: function(e, data){ 2497 var msg = ''; 2498 var type = ''; 2499 2500 if(!!data.result && data.result == "[][[]]"){ 2501 msg = 'Não foram encontrados novos eventos na importação!'; 2502 type = 'information'; 2503 }else if(!!data.result && data.result == '[][false]'){ 2504 msg = 'Erro ao realizar a importação, por favor verifique o arquivo .ics'; 2505 type = 'warning'; 2506 }else{ 2507 msg = 'Importação realizada com sucesso!'; 2508 type = 'confirmation'; 2509 Calendar.rerenderView(true); 2510 } 2511 2512 $.Zebra_Dialog(msg, { 2513 'type': type, 2514 'overlay_opacity': '0.5', 2515 'buttons': ['Fechar'] 2240 2516 }); 2241 2242 UI.dialogs.importCalendar.find(".menu-import-event") 2243 .children(".import").click(function(data){ 2244 $('.import-event-form fieldset.import-calendar', UI.dialogs.importCalendar).append( 2245 '<input type="hidden" name="params[calendar_timezone]" value="'+ 2246 Calendar.signatureOf[$('.import-event-form option:selected').val()].calendar.timezone 2247 +'"/>') 2248 if(form) 2249 form.submit(); 2250 UI.dialogs.importCalendar.dialog("close"); 2251 /** 2517 } 2518 }); 2519 2520 UI.dialogs.importCalendar.find(".menu-import-event") 2521 .children(".import").click(function(data){ 2522 $('.import-event-form fieldset.import-calendar', UI.dialogs.importCalendar).append( 2523 '<input type="hidden" name="params[calendar_timezone]" value="'+ 2524 Calendar.signatureOf[$('.import-event-form option:selected').val()].calendar.timezone 2525 +'"/>') 2526 if(form) 2527 form.submit(); 2528 UI.dialogs.importCalendar.dialog("close"); 2529 /** 2252 2530 * TODO - implementar ação de importação 2253 2531 */ 2254 2532 }); 2255 2533 2256 2257 2534 UI.dialogs.importCalendar.find(".menu-export-event") 2535 .children(".export").click(function(){ 2258 2536 2259 2260 2261 2537 $('.export-event-form', UI.dialogs.importCalendar).submit(); 2538 UI.dialogs.importCalendar.dialog("close"); 2539 /** 2262 2540 * TODO - implementar ação de exportação 2263 2541 */ 2264 2542 }); 2265 2543 2266 2267 2268 2269 2270 2271 2544 UI.dialogs.importCalendar.find(".menu-container") 2545 .children(".cancel").click(function(){ 2546 UI.dialogs.importCalendar.dialog("close"); 2547 }); 2548 2549 UI.dialogs.importCalendar.dialog("open"); 2272 2550 }); 2273 2551 } … … 2283 2561 **/ 2284 2562 if(!type) 2285 2286 2287 2288 2289 2563 type = $('.calendar-copy-move input[name="typeEvent"]').val(); 2564 2565 var schedulable = DataLayer.get('schedulable', event+''); 2566 2567 calendar = !!calendar ? calendar : schedulable.calendar; 2290 2568 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2569 if(typeof(schedulable) == "array") 2570 schedulable = schedulable[0]; 2571 2572 //Move eventos entre agendas 2573 if(parseInt(type) == 0){ 2574 2575 schedulable.calendar = calendar; 2576 DataLayer.put('schedulable', schedulable); 2577 2578 DataLayer.commit(); 2579 //copia eventos entre agendas 2580 }else{ 2581 2582 var newSchedulable = schedulable; 2583 2584 delete newSchedulable.id; 2585 delete newSchedulable.uid; 2586 delete newSchedulable.sequence; 2587 delete newSchedulable.dtstamp; 2588 2589 delete schedulable.DayLigth; 2590 delete schedulable.rangeStart 2591 delete schedulable.rangeEnd; 2592 delete schedulable.lastUpdate; 2315 2593 2316 2594 delete schedulable.calendar; 2317 2595 2318 2319 2320 2321 2322 2323 2596 if(schedulable.repeat && type == "1" ){ 2597 var repeat = DataLayer.get('repeat', schedulable.repeat); 2598 delete repeat.schedulable; 2599 delete repeat.id; 2600 repeat.startTime = new Date(parseInt(repeat.startTime)).toString('yyyy-MM-dd HH:mm:00'); 2601 repeat.endTime = new Date(parseInt(repeat.endTime)).toString('yyyy-MM-dd HH:mm:00'); 2324 2602 2325 var exceptions = DataLayer.get('repeatOccurrence', {filter: ['AND', ['=','repeat', schedulable.repeat], ['=','exception','1']]}, true); 2326 if(exceptions){ 2327 repeat.exceptions = ''; 2328 for(var i in exceptions ) 2329 repeat.exceptions += exceptions[i].occurrence + ((exceptions.length -1) == parseInt(i) ? '' : ','); 2603 var exceptions = DataLayer.get('repeatOccurrence', { 2604 filter: ['AND', ['=','repeat', schedulable.repeat], ['=','exception','1']] 2605 }, true); 2606 if(exceptions){ 2607 repeat.exceptions = ''; 2608 for(var i in exceptions ) 2609 repeat.exceptions += exceptions[i].occurrence + ((exceptions.length -1) == parseInt(i) ? '' : ','); 2330 2610 2331 2611 } 2332 2612 2333 2613 2334 2335 2336 2337 2338 2339 2340 2341 2342 2614 schedulable.repeat = repeat; 2615 }else{ 2616 if(!!idRecurrence){ 2617 newSchedulable.endTime = parseInt(schedulable.occurrences[idRecurrence]) + (parseInt(newSchedulable.endTime) - parseInt(newSchedulable.startTime)); 2618 newSchedulable.startTime = schedulable.occurrences[idRecurrence]; 2619 } 2620 delete schedulable.repeat; 2621 } 2622 delete schedulable.occurrences; 2343 2623 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2624 schedulable.calendar = DataLayer.copy(calendar); 2625 2626 var participants = DataLayer.copy(schedulable.participants); 2627 delete schedulable.participants; 2628 2629 schedulable.participants = $.map( participants, function( attendee, i ){ 2630 2631 var participant = DataLayer.get('participant', attendee, false); 2632 2633 if(typeof(participant) == 'array') 2634 participant = participant[0]; 2635 2636 delete participant.delegatedFrom; 2637 delete participant.id; 2638 delete participant.schedulable; 2359 2639 2360 2361 2362 2363 2364 2365 2366 2367 2640 participant.id = DataLayer.put('participant', participant); 2641 2642 return participant ; 2643 }); 2644 //Edit ocurrence 2645 if(parseInt(type) == 3){ 2646 newSchedulable.endTime = !!evt.end ? evt.end.getTime() : ((evt.start).getTime() + 86400000); 2647 newSchedulable.startTime = evt.start.getTime(); 2368 2648 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 } 2649 return newSchedulable; 2650 } 2651 newSchedulable.endTime = new Date(parseInt(newSchedulable.endTime) - (newSchedulable.allDay ? 86400000 : 0)).toString('yyyy-MM-dd hh:mm:00'); 2652 newSchedulable.startTime = new Date(parseInt(newSchedulable.startTime)).toString('yyyy-MM-dd hh:mm:00'); 2653 2654 DataLayer.put('schedulable', newSchedulable); 2655 2656 } 2657 2658 2659 } -
trunk/prototype/modules/calendar/templates/attachment_add_itemlist.ejs
r5515 r6044 11 11 <span class="archive-error"><%=data.file.error%></span> 12 12 <%}if(!data.file.error){%> 13 <span style="width: 1 10px; height: 14px; overflow:hidden">14 <span class="progress in-progress hidden"></span>13 <span style="width: 14px; height: 14px;"> 14 <img src="<%=DataLayer.dispatchPath%>/modules/calendar/img/ajax-loader.gif" class="progress after-upload"></img> 15 15 </span> 16 16 <%}%>
Note: See TracChangeset
for help on using the changeset viewer.