function validDateEvent(){ var start_date = $(".new-event-win.active .start-date").val(); var end_date = $(".new-event-win.active .end-date").val(); var start_time = $(".new-event-win.active .start-time").val(); var end_time = $(".new-event-win.active .end-time").val(); var isAllDay = $('.new-event-win.active input[name="allDay"]').is(':checked'); if(start_date == "") return 'Por favor, informe uma data inicial'; else if(end_date == "") return 'Por favor, informe uma data final'; else if(!isAllDay && start_time == "") return 'Por favor, informe uma hora inicial'; else if(!isAllDay && end_time == "") return 'Por favor, informe uma hora final'; var formatString = (isAllDay)? User.preferences.dateFormat+" HH:mm" : User.preferences.dateFormat + " " + User.preferences.hourFormat; var startDate = Date.parseExact( isAllDay ? start_date+ " 00:00": start_date + " " + $.trim(start_time) , formatString ); var endDate = Date.parseExact( isAllDay ? end_date+ " 00:00": end_date + " " + $.trim(end_time) , formatString ); if(startDate == null || startDate.getTime() < 0 ) return 'Data inicial inválida'; if(endDate == null || endDate.getTime() < 0) return 'Data final inválida'; if((endDate.compareTo(startDate) != 1) && !((endDate.compareTo(startDate) == 0) && (isAllDay))){ return (start_date == end_date) ? ((end_time == start_time) ? 'Hora inicial igual a final' : 'Hora final menor que a inicial') : 'Data final menor que a inicial'; } return false; } /* function listEvents(){ var list = $('.fc-header-right').find('.fc-button.fc-button-agendaDay').clone(); $('.fc-header-right').find('.fc-button-year').toggleClass('fc-corner-right'); list.addClass('fc-corner-right'); list.addClass('fc-button-listagem'); list.removeClass('fc-button-agendaDay'); list.removeClass('fc-corner-left'); list.find('.fc-button-content').html('Listagem'); $('.fc-header-right').append(list); } */ function eventDetails( objEvent, decoded, path) { if(path == undefined) path = ""; if( !decoded ) objEvent = DataLayer.decode( "schedulable:calendar", objEvent ); objEvent = DataLayer.encode( "schedulable:preview", objEvent ); if(typeof(objEvent.id) == 'undefined'){ objEvent.alarms = Calendar.signatureOf[User.preferences.defaultCalendar || Calendar.calendarIds[0]].defaultAlarms || false; objEvent.useAlarmDefault = 1; } /** * canDiscardEventDialog deve ser true se não houver alterações no evento */ canDiscardEventDialog = true; /** * zebraDiscardEventDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog) * já está aberta na tela, uma vez que não é possivel acessar o evento ESC utilizado para fechá-la */ zebraDiscardEventDialog = false; var html = DataLayer.render( path+'templates/event_add.ejs', {event:objEvent}); if (!UI.dialogs.addEvent) { UI.dialogs.addEvent = jQuery('#sandbox').append('
').find('.new-event-win.active').html(html).dialog({ resizable: false, modal:true, autoOpen: false, width:700, position: 'center', close: function(event, ui) { /** * Remove tooltip possivelmente existente */ if ($('dd.attendee-list li:last').data('qtip')) $('dd.attendee-list li:last').qtip('destroy'); }, beforeClose: function(event, ui) { if (!canDiscardEventDialog && !zebraDiscardEventDialog) { zebraDiscardEventDialog = true; window.setTimeout(function() { $.Zebra_Dialog('Suas alterações no evento não foram salvas. Deseja descartar as alterações?', { 'type': 'question', 'overlay_opacity': '0.5', 'buttons': ['Descartar alterações', 'Continuar editando'], 'onClose': function(clicked) { if(clicked == 'Descartar alterações') { canDiscardEventDialog = true; UI.dialogs.addEvent.dialog('close'); }else{ zebraDiscardEventDialog = false; } /** * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la * com ESC, para que o evento ESC não seja propagado para fechamento da * janela de edição de eventos, deve ser setada uma flag indicando que * já existe uma janela de confirmação aberta. */ if (!clicked) { window.setTimeout(function() { zebraDiscardEventDialog = false; }, 200); } } }); }, 300); } return canDiscardEventDialog; } }); } else { UI.dialogs.addEvent.html(html); } var tabs = UI.dialogs.addEvent.children('.content').tabs(); var calendar = DataLayer.get('calendar', objEvent.calendar); if (calendar.timezone != objEvent.timezone){ UI.dialogs.addEvent.find('.calendar-addevent-details-txt-timezone').find('option[value="'+objEvent.timezone+'"]').attr('selected','selected').trigger('change'); UI.dialogs.addEvent.find('.calendar_addevent_details_lnk_timezone').addClass('hidden'); $('.calendar-addevent-details-txt-timezone').removeClass('hidden'); } UI.dialogs.addEvent.find('.calendar_addevent_details_lnk_timezone').click(function(e){ $(this).addClass('hidden'); $('.calendar-addevent-details-txt-timezone').removeClass('hidden'); e.preventDefault(); }); UI.dialogs.addEvent.find('.button.remove').button({text:false, icons:{primary:'ui-icon-close'}}).click(function(el){ var id; if( id = $(this).parent().find('input[name="alarmId[]"]').val()) DataLayer.remove('alarm', id); $(this).parent().remove().find('li').is(':empty'); }); /*Seleciona a agenda padrão para criação de um evento*/ UI.dialogs.addEvent.find('option[value="'+objEvent.calendar || User.preferences.defaultCalendar+'"]').attr('selected','selected').trigger('change'); /*Adicionar alarms padrões, quando alterado a agenda do usuário*/ UI.dialogs.addEvent.find('select[name="calendar"]').change(function(){ if((typeof($('input[name = "idEvent"]').val()) == 'undefined') || (!!!$('input[name = "idEvent"]').val())) { $('input[name = "isDefaultAlarm[]"]').parent().remove(); UI.dialogs.addEvent.find('input[name="defaultAlarm"]').parent().removeClass('hidden'); var calendarSelected = Calendar.signatureOf[$(this).val()]; calendarSelected.useAlarmDefault = 1; if(calendarSelected.defaultAlarms != ""){ var li_attach = DataLayer.render(path+'templates/alarms_add_itemlist.ejs', {alarm:calendarSelected}); jQuery('.event-alarms-list').append(li_attach).find('.button.remove').button({text:false, icons:{primary:'ui-icon-close'}}).click(function(el) { $(this).parent().remove().find('li').is(':empty'); }); }else{ UI.dialogs.addEvent.find('input[name="defaultAlarm"]').parent().addClass('hidden'); } } }); /*Checkbox adicionar alarms padrões*/ UI.dialogs.addEvent.find('input[name="defaultAlarm"]').click(function(){ if($(this).attr("checked")){ $('input[name="isDefaultAlarm[]"]').parent().remove(); var calendarSelected = Calendar.signatureOf[$('select[name="calendar"]').val()]; calendarSelected.useAlarmDefault = 1; if(calendarSelected.defaultAlarms != ""){ var li_attach = DataLayer.render(path+'templates/alarms_add_itemlist.ejs', {alarm:calendarSelected}); jQuery('.event-alarms-list').append(li_attach).find('.button.remove').button({text:false, icons:{primary:'ui-icon-close'}}).click(function(el) { var id; if( id = $(this).parent().find('input[name="alarmId[]"]').val()) DataLayer.remove('alarm', id); $(this).parent().remove().find('li').is(':empty') }); } } else { $('input[name="isDefaultAlarm[]"]').parent().remove(); } }); /* Checkbox allday */ UI.dialogs.addEvent.find('input[name="allDay"]').click(function(){ $(this).attr("checked") ? UI.dialogs.addEvent.find('.start-time, .end-time').addClass('hidden') : UI.dialogs.addEvent.find('.start-time, .end-time').removeClass('hidden'); }); UI.dialogs.addEvent.find('.button').button(); UI.dialogs.addEvent.find('.button.add').button({ icons: { secondary: "ui-icon-plus" } }); // ==== validation events ==== UI.dialogs.addEvent.find(".input-group .h1").Watermark("Evento sem título"); if(User.preferences.hourFormat.length == 5) { UI.dialogs.addEvent.find(".end-time, .start-time").mask("99:99"); } else { $.mask.definitions['{']='[ap]'; $.mask.definitions['}']='[m]'; UI.dialogs.addEvent.find(".end-time, .start-time").mask("99:99 {}", { completed:function(){ $(this).val(date.Calendar.defaultToAmPm($(this).val())); $(this).timepicker("refresh"); $(this).val($(this).val().replace(/[\.]/gi, "")); } }); } UI.dialogs.addEvent.find(".number").numeric(); User.preferences.dateFormat.indexOf('-') > 0 ? UI.dialogs.addEvent.find(".date").mask("99-99-9999") : UI.dialogs.addEvent.find(".date").mask("99/99/9999"); UI.dialogs.addEvent.find(".menu-addevent") .children(".delete").click(function(){ $.Zebra_Dialog('Tem certeza que deseja excluir o evento?', { 'type': 'question', 'overlay_opacity': '0.5', 'buttons': ['Sim', 'Não'], 'onClose': function(clicked) { if(clicked == 'Sim'){ DataLayer.remove( "schedulable", UI.dialogs.addEvent.find(".id-event").val() ); UI.dialogs.addEvent.dialog("close"); } } }); }).end() .children(".cancel").click(function(){ DataLayer.rollback('participant'); UI.dialogs.addEvent.dialog("close"); }).end() .children(".save").click(function(){ /* Validação */ var msg = false; if(msg = validDateEvent()){ $(".new-event-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg); return false; } canDiscardEventDialog = true; UI.dialogs.addEvent.children(".form-addevent").submit(); UI.dialogs.addEvent.dialog("close"); }).end() .children(".export").click(function(){ UI.dialogs.addEvent.children(".form-export").submit(); }); UI.dialogs.addEvent.find('input.date').datepicker({dateFormat: 'dd/mm/yy'}); if(path == ""){ UI.dialogs.addEvent.find('input.time').timepicker({ closeText: 'Ok', hourGrid: 4, minuteGrid: 10, ampm : ((User.preferences.hourFormat.length > 5) ? true: false), timeFormat: "hh:mm tt", onSelect: function (selectedDateTime){ if(!(User.preferences.hourFormat.length == 5)) $(this).val(selectedDateTime.replace(/[\.]/gi, "")); }, onClose : function (selectedDateTime){ if(!(User.preferences.hourFormat.length == 5)) $(this).val(selectedDateTime.replace(/[\.]/gi, "")); } }); } UI.dialogs.addEvent.find('.button-add-alarms').click(function(){ var li_attach = DataLayer.render(path+'templates/alarms_add_itemlist.ejs', {}); jQuery('.event-alarms-list').append(li_attach).find('.button.remove').button({text:false, icons:{primary:'ui-icon-close'}}).click(function(el) { $(this).parent().remove().find('li').is(':empty') }); // valicacao de campos numericos $('.number').numeric(); }); // UI.dialogs.addEvent.find('.button-add-attachment').click(function(){ // var li_attach = // '
  • ' + // '' + // '
  • '; // jQuery('.attachments-list').append(li_attach); // }); var attendeeHtml = DataLayer.render( path+'templates/attendee_add.ejs', {event:objEvent}); // load template of attendees var blkAddAtendee = UI.dialogs.addEvent.find('#calendar_addevent_details6').append(attendeeHtml); blkAddAtendee.find('li.attendee .button').addClass('small '+ (objEvent.isOrganizer == 1 ? '' : 'hidden')).button({text:false, icons: {primary:'ui-icon-close'}}).click(function () { DataLayer.remove('participant', $(this).parent().find('[type=checkbox]').val()); $(this).parent().remove(); }); //show or hidden permissions attendees //blkAddAtendee.find('.block-attendee-list #attendees-users li').click(show_permissions_attendees); UI.dialogs.addEvent.find(".attendee-list-add .add-attendee-input input").Watermark("digite um email para convidar"); /* Trata a edição de um novo participante adicionado * */ var hasNewAttendee = false; blkAddAtendee.find('.attendee-list-add .add-attendee-input input').keydown(function(event) { if (event.keyCode == '13' && $(this).val() != '') { Encoder.EncodeType = "entity"; $(this).val(Encoder.htmlEncode($(this).val())); newAttendeeEmail = false; newAttendeeName = false; skipAddNewLine = false; var info = $(this).val(); /** * email válido? */ info.match(/^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/) ? newAttendeeEmail = info : newAttendeeName = info; /** * 1) busca no banco para saber se o usuário já existe * 1.1) se existe, atualiza as info na lista de participantes e nao abre o tooltip * 1.2) se não existe * a) salva como novo usuario externo no banco (apenas com email) * b) exibe tooltip pedindo o nome * c) se o usuário preenche tooltip e salva, atualiza com o nome o usuário recém criado * d) se o usuário cancela o tooltip, fica o usuário salvo apenas com email e sem nome */ var user = DataLayer.get('user', ["=", "mail", $(this).val()], true); /** * guarda o último tooltip aberto referente à lista de participantes */ lastEditAttendeeToolTip = []; /** * Valida email e salva um participante externo */ var saveContact = function() { Encoder.EncodeType = "entity"; var currentTip = $('.qtip-active'); newAttendeeName = currentTip.find('input[name="name"]').val(); newAttendeeEmail = currentTip.find('input[name="mail"]').val(); if (!(!!newAttendeeEmail.match(/^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/))) { currentTip.find('.messages').removeClass('hidden').find('.message label').html('Email inválido.'); return false; } DataLayer.put('user', {id:userId, name:newAttendeeName, mail:newAttendeeEmail, isExternal:isExternal}); lastEditAttendeeToolTip.find('label') .filter('.name').html(Encoder.htmlEncode(newAttendeeName)).attr('title', Encoder.htmlEncode(newAttendeeName)).end() .filter('.mail').html(Encoder.htmlEncode(newAttendeeEmail)).attr('title', Encoder.htmlEncode(newAttendeeEmail)); blkAddAtendee.find('.attendee-list-add .add-attendee-input input').val(''); return true; } /** * Formata e adequa um tootip abert para edição de um participante na lista */ var onShowToolTip = function(arg0) { $('.qtip-active .button.close').button({ icons: {primary: "ui-icon-close"}, text: false }); $('.qtip-active .button').button() .filter('.save').click(function(event, ui) { if(saveContact()) lastEditAttendeeToolTip.qtip("destroy"); else return false; }).end() .filter('.cancel').click(function(event, ui) { lastEditAttendeeToolTip.qtip("destroy"); }) /** * Trata o ENTER no campo da tooltip, equivalente a salvar * o novo convidado. */ $('.qtip-active input').keydown(function(event) { if (event.keyCode == '13') { if (saveContact()) lastEditAttendeeToolTip.qtip("destroy"); lastEditAttendeeToolTip.qtip("destroy"); event.preventDefault(); } }) .filter('[name="name"]').Watermark("informe o nome do contato").end() .filter('[name="mail"]').Watermark("informe o email do contato"); } /** * Se o email digitado já foi adicionado na lista, * o usuário deve ser avisado e um botão de edição deve ser exibido */ if(blkAddAtendee.find('label.mail[title="' + newAttendeeEmail + '"]').length) { hasNewAttendee = false; newAttendeeName = blkAddAtendee.find('label.mail[title="' + newAttendeeEmail + '"]').parents('li').find('label.name').attr('title'); blkAddAtendee.find('.email-validation').removeClass('hidden') .find('.message label').html("O usuário acima já foi adicionado! Editar") .find(".button").button().click(function () { /** * Se o usuário optar por editar o participante anteriormente adicionado, * uma tooltip deve ser aberta para este participante, viabilizando a edição */ blkAddAtendee.find("ul.attendee-list").scrollTo('label.mail[title="' + newAttendeeEmail + '"]'); /** * Remove tooltip possivelmente existente */ if (lastEditAttendeeToolTip.length && lastEditAttendeeToolTip.data('qtip')) lastEditAttendeeToolTip.qtip('destroy'); lastEditAttendeeToolTip = blkAddAtendee.find('label.mail[title="' + newAttendeeEmail + '"]').parents('li'); lastEditAttendeeToolTip.qtip({ show: {ready: true, solo: true, when: {event: 'click'}}, hide: false, content: { text: $('
    ').html( DataLayer.render( path+'templates/attendee_quick_edit.ejs', {attendee:{name:newAttendeeName, mail:newAttendeeEmail}} ) ), title: { text:'Detalhes do participante', button: 'close' } }, style: {name: 'blue', tip: {corner: 'leftMiddle'}, border: {width: 4, radius: 8}, width: {min: 230, max:230}}, position: { corner: { target: 'rightMiddle', tooltip: 'leftMiddle' }, adjust: {x:0, y:0} } }); lastEditAttendeeToolTip.qtip("api").onShow = onShowToolTip; }); skipAddNewLine = true; } else { hasNewAttendee = true; blkAddAtendee.find('.email-validation').addClass('hidden'); } var isExternal = (!!user && !(!!user.isExternal)) ? 0 : 1; /** * Remove tooltip possivelmente existente */ if (lastEditAttendeeToolTip.length && lastEditAttendeeToolTip.data('qtip')) lastEditAttendeeToolTip.qtip('destroy'); userId = ''; var newAttendeeId = ''; if (user){ if (!skipAddNewLine) { user[0].id = DataLayer.put('participant', {user: user[0].id, isExternal: isExternal}); blkAddAtendee.find('dd.attendee-list ul.attendee-list').append( DataLayer.render(path+'templates/participants_add_itemlist.ejs', user) ) .find('.button.close').addClass('small').button({text:false, icons:{primary:'ui-icon-close'}}).click(function() { DataLayer.remove('participant', $(this).parent().find('[type=checkbox]').val()); $(this).parent().remove(); }).end() .scrollTo('max'); } $(this).val(''); } else if (!skipAddNewLine) { /** * a) salva como novo usuario externo no banco (apenas com email) e... * adiciona novo contato externo à lista de convidados */ userId = DataLayer.put('user', {name: newAttendeeName, mail: newAttendeeEmail, isExternal: isExternal}); newAttendeeId = DataLayer.put('participant', {user: userId, isExternal: isExternal}); blkAddAtendee.find('dd.attendee-list ul.attendee-list').append( DataLayer.render(path+'templates/participants_add_itemlist.ejs', [{id:newAttendeeId, name: newAttendeeName, mail: newAttendeeEmail, isExternal: 1}]) ).find('.button.close').addClass('small').button({text:false, icons:{primary:'ui-icon-close'}}).click(function() { DataLayer.remove('participant', $(this).parent().find('[type=checkbox]').val()); $(this).parent().remove(); }).end() .scrollTo('max'); /** * Adiciona tootip para atualização dos dados do contato externo * recém adicionado. */ lastEditAttendeeToolTip = blkAddAtendee.find('dd.attendee-list li:last'); lastEditAttendeeToolTip.qtip({ show: {ready: true, solo: true, when: {event: 'click'}}, hide: false, content: { text: $('
    ').html( DataLayer.render( path+'templates/attendee_quick_edit.ejs', {attendee:{name:newAttendeeName, mail:newAttendeeEmail}} ) ), title: { text:'Detalhes do participante', button: 'close' } }, style: {name: 'blue', tip: {corner: 'leftMiddle'}, border: {width: 4, radius: 8}, width: {min: 230, max:230}}, position: { corner: { target: 'rightMiddle', tooltip: 'leftMiddle' }, adjust: {x:0, y:0} } }); lastEditAttendeeToolTip.qtip("api").onShow = onShowToolTip; $(this).val(''); } event.preventDefault(); } }); /** * Trata a busca de usuários para adição de participantes */ blkAddAtendee.find('.add-attendee-search input').keydown(function(event) { if(event.keyCode == '13') { var result = DataLayer.get('user', ["*", "name", $(this).val()], true); /** * TODO: trocar por template */ blkAddAtendee.find('ul.search-result-list').empty().css('overflow', 'hidden'); if (!result) { blkAddAtendee.find('ul.search-result-list').append('
  • '); } for(i=0; iclose' } }, style: {name: 'blue', tip: {corner: 'leftMiddle'}, border: {width: 4, radius: 8}, width: {min: 250, max:250}}, position: { corner: { target: 'rightMiddle', tooltip: 'leftMiddle' }, adjust: {x:0, y:0} } }) $(this).qtip.onShow = function() { $('.qtip .button.close').button({ icons: {primary: "ui-icon-close"}, text: false }); } } else { // jQuery('.block-attendee-list .add-attendee-search').addClass('hidden'); } }); UI.dialogs.addEvent.find(':input').change(function(event){ if (event.keyCode != '27' && event.keyCode != '13') canDiscardEventDialog = false; }).keydown(function(event){ if (event.keyCode != '27' && event.keyCode != '13') canDiscardEventDialog = false; }); UI.dialogs.addEvent.dialog('open'); } function add_tab_preferences() { if(!(document.getElementById('preference_tab'))) { var tab_title = "Preferencias"; $tabs.tabs( "add", "#preference_tab", tab_title ); /* DataLayer.render( 'templates/timezone_list.ejs', {}, function( timezones_options ){ tabPrefCalendar.find('select[name="timezone"]').html(timezones_options).find('option[value="'+User.preferences.timezone+'"]').attr('selected','selected').trigger('change'); }); */ DataLayer.render( 'templates/preferences_calendar.ejs', {preferences:User.preferences, calendars: Calendar.calendars}, function( template ){ var tabPrefCalendar = jQuery('#preference_tab').html( template ).find('.preferences-win'); tabPrefCalendar.find('option[value="'+User.preferences.defaultCalendar+'"]').attr('selected','selected').trigger('change'); DataLayer.render( 'templates/timezone_list.ejs', {}, function( timezones_options ){ tabPrefCalendar.find('select[name="timezone"]').html(timezones_options).find('option[value="'+User.preferences.timezone+'"]').attr('selected','selected').trigger('change'); }); tabPrefCalendar.find('.button').button() .filter('.save').click(function(evt){ tabPrefCalendar.find('form').submit(); $('#calendar').fullCalendar('render'); $('.block-vertical-toolbox .mini-calendar').datepicker( "refresh" ); $tabs.tabs( "remove", "#preference_tab"); }).end().filter('.cancel').click(function(evt){ $tabs.tabs( "remove", "#preference_tab"); }); tabPrefCalendar.find('.number').numeric(); }); } else { $tabs.tabs("select", "#preference_tab"); return true; } } function add_tab_configure_calendar(calendar) { var calendars = []; var signatures = []; var previewActiveCalendarConf = 0; for (var i=0; i
    ').end().find('.accordion-user-calendars') .append(template_content.children('fieldset')); template_content.find('.accordion-user-calendars').children('fieldset').each(function(index) { $(this).before($('

    ').html($(this).children('legend'))); }); template_content.find('.accordion-user-calendars').accordion({ autoHeight: false, collapsible: true, clearStyle: true, active: previewActiveCalendarConf, changestart: populateAccordionOnActive }); populateAccordionOnActive(previewActiveCalendarConf); }); } else { $tabs.tabs("select", "#configure_tab"); $('.accordion-user-calendars').accordion( "activate" , previewActiveCalendarConf ); return true; } } function getSelectedCalendars( reverse ){ var selecteds = {}; var cont = 0; jQuery(function() { jQuery(".my-calendars .calendar-view").each(function(i, obj) { var check_box = obj; if( reverse ? !check_box.checked : check_box.checked ) { selecteds[cont] = obj.value; cont++; }; }); }); if (!cont) return false; selecteds.length = cont; return $.makeArray( selecteds ); } /** * TODO - transformar em preferência do módulo e criar telas de adição e exclusão de conjunto de cores */ function colors_suggestions(){ return [ {name:'Padrão', border:'#3366cc', font:'#ffffff', background:'#3366cc'}, {name:'Coala', border:'#123456', font:'#ffffff', background:'#385c80'}, {name:'Tomate', border:'#d5130b', font:'#111111', background:'#e36d76'}, {name:'Limão', border:'#32ed21', font:'#1f3f1c', background:'#b2f1ac'}, {name:'Alto contraste', border:'#000000', font:'#ffffff', background:'#222222'} ] } function remove_calendar(){ /* Pode ser assim $('.cal-list-options-btn.ui-state-active').attr('class').replace(/[a-zA-Z-]+/g, ''); */ $.Zebra_Dialog('Todos os eventos desta agenda serão removidos. Deseja prosseguir com a operação?', { 'type': 'question', 'overlay_opacity': '0.5', 'buttons': ['Sim', 'Não'], 'onClose': function(clicked) { if(clicked == 'Sim'){ var idCalendar = $('.cal-list-options-btn.ui-state-active').attr('class').match(/[0-9]+/g); var signature = ''; for(var i =0; i < Calendar.signatures.length; i++){ if(idCalendar[0] == Calendar.signatures[i].calendar.id){ signature = Calendar.signatures[i].id; break; } } DataLayer.remove('calendarSignature', signature); if(idCalendar == User.preferences.defaultCalendar) DataLayer.remove( 'modulePreference', User.preferenceIds['defaultCalendar']); } $('.positionHelper').css('display', 'none'); } }); } function refresh_calendars(){ var colorsSuggestions = colors_suggestions(); var buttons_colors = ""; for(var i = 0; i < colorsSuggestions.length; i++){ buttons_colors += ""; } //DataLayer.render( 'templates/calendar_list.ejs', 'calendar:list', ["IN", "id", Calendar.calendarIds], function( html ){ DataLayer.render( 'templates/calendar_list.ejs', Calendar, function( html ){ var meu_container = $(".calendars-list").html( html ); $('ul.list-calendars .cal-list-options-btn').each(function(){ $(this).menu({ content: $(this).next().html(), width: '120', positionOpts: { posX: 'left', posY: 'bottom', offsetX: 0, offsetY: 0, directionH: 'right', directionV: 'down', detectH: true, // do horizontal collision detection detectV: true, // do vertical collision detection linkToFront: false }, flyOut: true, showSpeed: 100, crumbDefaultText: '>' }); }); meu_container.find(".button.new").button({ icons: { primary: "ui-icon-plus" }, text: false }).click(function () { if( $('.qtip.qtip-blue.qtip-active').val() !== ''){ $(this).qtip({ show: {ready: true, solo: true, when: {event: 'click'}}, hide: false, content: { text: $('
    ').html( DataLayer.render( 'templates/calendar_quick_add.ejs', {} ) ), title: { text:'Nova Agenda', button: 'close' } }, style: {name: 'blue', tip: {corner: 'leftMiddle'}, border: {width: 4, radius: 8}, width: {min: 230, max:230}}, position: { corner: { target: 'rightMiddle', tooltip: 'leftMiddle' }, adjust: {x:0, y:-12} } }) .qtip("api").onShow = function(arg0) { $('.qtip-active .button.close').button({ icons: {primary: "ui-icon-close"}, text: false }) .click(function(){ meu_container.find(".button.new").qtip('destroy'); }); //TODO emplementar tratamento de duplicação de valores no location $('.qtip-active .button.save').button().click(function(){ for(var i = 0; i < Calendar.calendars.length; i++){ if(Calendar.calendars[i].location == $('.qtip-active input').val()){ $.Zebra_Dialog('O nome desta agenda já está sendo utilizada em uma Url de outra agenda. Por favor, informe outro nome para agenda.',{ 'overlay_opacity': '0.5', 'type': 'warning' }); meu_container.find(".button.new").qtip('destroy'); return; } } var selected; var color = $('.cal-colors-options-btn').each(function(index){ if ($(this).is('.color-selected')) selected = index; }); DataLayer.put( "calendarSignature", { user: User.me.id, calendar: { name: Encoder.htmlEncode($('.qtip-active input').val()), timezone: User.preferences.timezone }, isOwner: 1, fontColor: colorsSuggestions[selected]['font'].substring(1) , backgroundColor: colorsSuggestions[selected]['background'].substring(1) , borderColor: colorsSuggestions[selected]['border'].substring(1) }); meu_container.find(".button.new").qtip('destroy'); }); $('.qtip-active .button.cancel').button().click(function(){ meu_container.find(".button.new").qtip('destroy'); }); $(".qtip-active input").Watermark("Nome da agenda"); $('.qtip-active').keydown(function(event) { if (event.keyCode == '27') { meu_container.find(".button.new").qtip('destroy'); } }); $('.colors-options').prepend(buttons_colors); $('.colors-options .signed-cal-colors-options-btn-0').addClass('color-selected'); var buttons = $('.cal-colors-options-btn').button(); buttons.click(function(){ buttons.removeClass('color-selected'); $(this).addClass('color-selected'); }); } } }); $("img.cal-list-img").click(function(evt) { $(".cal-list-options_1").toggleClass( "hidden" ); }); $(".my-calendars a.title-my-calendars").click(function() { $(".my-calendars ul.my-list-calendars").toggleClass("hidden") $('.my-calendars .status-list').toggleClass("ui-icon-triangle-1-s"); $('.my-calendars .status-list').toggleClass("ui-icon-triangle-1-e"); }); $(".signed-calendars a.title-signed-calendars").click(function() { $(".signed-calendars ul.signed-list-calendars").toggleClass( "hidden"); }); $("ul li.list-calendars-item").click(function(evt) { }); $("ul li.list-calendars-item .ui-corner-all").click(function(evt) { //alert('teste'); }); $('.calendar-view').click(function(evt){ if($tabs.tabs('option' ,'selected') == 1){ pageselectCallback('', 0); } if(Calendar.currentView){ var checkBox = $(this); if(!!Calendar.currentView[ checkBox.val() ]){ Calendar.currentView[ checkBox.val() ].hidden = !checkBox.is(':checked'); $('#calendar').fullCalendar( 'refetchEvents' ); } } }); }); } function add_events_list(keyword) { var tab_title = ""; if (keyword){ if(keyword.length < 10) tab_title = keyword; else tab_title = keyword.substr(0,10) + '..."'; }else{ tab_title = "Lista de eventos"; } keyword = ( keyword || '' ).replace( /\s+/g, "_" ); if(!(document.getElementById('tab_events_list_' + (Base64.encode(keyword)).replace(/[^\w\s]/gi, "") ))) { Encoder.EncodeType = "entity"; $tabs.tabs( "add", "#tab_events_list_" + (Base64.encode(keyword)).replace(/[^\w\s]/gi, ""), Encoder.htmlEncode(tab_title) ); } else /* Tab already opened */ { $tabs.tabs("option", "selected", 2); } pageselectCallback(keyword, 0); // load page 1 and insert data on event_list.ejs $('.preferences-win.active .button.save, .preferences-win.active .button.cancel, .preferences-win.active .button.import, .preferences-win.active .button.export').button(); } function paginatorSearch(currentView){ $(currentView+' .header-paginator .fc-header-left .fc-button').hover( function(){ $(this).addClass('fc-state-hover'); }, function(){ $(this).removeClass('fc-state-hover'); }).mousedown(function(){ $(this).addClass('fc-state-down'); }).mouseup(function(){ $(this).removeClass('fc-state-down'); $('.events-list.events-list-win.active').removeClass('active'); var paginator = $(this).attr('class'); if(paginator.indexOf('next') > 0){ if(parseInt($(currentView+' [name = results]').val()) > 25) pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($(currentView+' [name = page_index]').val())) +1)); }else{ if(parseInt($(currentView+' [name = page_index]').val()) > 0) pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($(currentView+' [name = page_index]').val())) -1)); } }); } function mountTitleList(page_index ,view){ switch (view){ case 'day': case 'basicDay': var date = new Date().add({days: page_index}); return (dateCalendar.dayNames[date.getDay()])+", "+(date.toString('dd MMM yyyy')); case 'agendaWeek': case 'week': var dateStart = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); dateStart.add({days: (7 * page_index)}); var dateEnd = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); dateEnd.add({days: (page_index * 7)+7}); if(dateStart.toString('MM') != dateEnd.toString('MM')) return dateStart.toString('dd')+' de '+dateCalendar.monthNamesShort[dateStart.getMonth()]+' a '+dateEnd.toString('dd')+' de '+dateCalendar.monthNames[dateEnd.getMonth()]+' - '+dateEnd.toString('yyyy'); return +dateStart.toString("dd")+" a "+dateEnd.toString("dd")+" de "+dateCalendar.monthNames[dateEnd.getMonth()]+" - "+dateEnd.toString('yyyy'); case 'month': var date = new Date().add({months: page_index}) return dateCalendar.monthNames[date.getMonth()]+" "+date.toString("yyyy"); case 'year': var date = new Date().add({years: page_index}); return date.toString("yyyy"); } } function paginatorList(currentView, view){ $(currentView+' .events-list.events-list-win.active .list-events-paginator .fc-header-title').html('

    '+mountTitleList( parseInt($('[name = page_index]').val()),view)+'

    '); $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right .fc-button').removeClass('fc-state-active') if(view == 'basicDay') $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right .fc-button-agendaday').addClass('fc-state-active'); else $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right .fc-button-'+((view == 'day' || view == 'week') ? 'agenda'+view : view )).addClass('fc-state-active'); $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right').addClass('list-right'); $(currentView+' .header-paginator .fc-header-right .fc-button').hover( function(){ $(this).addClass('fc-state-hover'); }, function(){ $(this).removeClass('fc-state-hover'); }).mousedown(function(){ $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right .fc-button').removeClass('fc-state-active') $(this).addClass('fc-state-active'); }).mouseup(function(){ var goView = $(this).attr('class'); if(goView.indexOf('agendaDay') > 0) pageselectCallback($(currentView+' [name = keyword]').val(), 0, '', 'day'); else if(goView.indexOf('month') > 0) pageselectCallback($(currentView+' [name = keyword]').val(), 0, '', 'month'); else if(goView.indexOf('year') > 0) pageselectCallback($(currentView+' [name = keyword]').val(), 0, '', 'year'); else if(goView.indexOf('agendaWeek') > 0) pageselectCallback($(currentView+' [name = keyword]').val(), 0, '', 'week'); }); $(currentView+' .header-paginator .fc-header-left .fc-button').hover( function(){ $(this).addClass('fc-state-hover'); }, function(){ $(this).removeClass('fc-state-hover'); }).mousedown(function(){ $(this).addClass('fc-state-down'); }).mouseup(function(){ $(this).removeClass('fc-state-down'); var paginator = $(this).attr('class'); if(paginator.indexOf('next') > 0) pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($('[name = page_index]').val())) +1), '', view); else pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($('[name = page_index]').val())) -1), '', view); }); } function paginatorListEvent(currentView, typeView, view){ if(!!$(currentView).find('.fc-calendar').length) return; $(currentView+' .events-list.events-list-win.active').prepend($('.fc-header').clone()); //Remove contudo nao utilizado $(currentView+' .events-list.events-list-win.active .fc-header .fc-button-today').remove(); $(currentView+' .events-list.events-list-win.active .fc-header .fc-button-basicWeek').remove(); $(currentView+' .events-list.events-list-win.active .fc-header .fc-button-basicDay').remove(); //Adiciona e remove as classes para esta visualizacao $(currentView+' .events-list.events-list-win.active .fc-header .fc-header-center').addClass('list-events-paginator'); $(currentView+' .events-list.events-list-win.active .fc-header .list-events-paginator').removeClass('fc-header-center'); //Adicionar class no header padronizar com a tela principal $(currentView+' .events-list.events-list-win.active .fc-header').addClass('header-paginator'); $(currentView+' .events-list.events-list-win.active .header-paginator').removeClass('fc-header'); if(typeView == 'search'){ $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right').remove() $(currentView+' .events-list.events-list-win.active .list-events-paginator .fc-header-title').html('

    Resultados para: '+$(currentView+' [name = keyword]').val()+'

    '); if((parseInt($(currentView+' [name = page_index]').val()) == 0) && (parseInt($(currentView+' [name = results]').val()) <= 25)) return; paginatorSearch(currentView); }else paginatorList(currentView, view); } function mountCriteriaList(view, page_index, calerdars_selecteds){ var rangeStart , rangeEnd; switch (view){ case 'basicDay': case 'day': rangeStart = new Date().add({days: page_index}).toString("yyyy-MM-dd"); rangeEnd = rangeStart; break; case 'agendaWeek': case 'week': var dateStart = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); var dateEnd = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); rangeStart = dateStart.add({days: (7 * page_index)}).toString("yyyy-MM-dd"); rangeEnd = dateEnd.add({days: (7 * page_index)+7}).toString("yyyy-MM-dd"); break; case 'month': var date = new Date().add({months: page_index}) rangeStart = date.moveToFirstDayOfMonth().toString("yyyy-MM-dd"); rangeEnd = date.moveToLastDayOfMonth().toString("yyyy-MM-dd"); break; case 'year': var dateStart = new Date().add({years: page_index}); var dateEnd = new Date().add({years: page_index}); if(dateStart.getMonth() != 0) dateStart.moveToMonth(0, -1) if(dateEnd.getMonth() != 11) dateEnd.moveToMonth(11) rangeStart = dateStart.moveToFirstDayOfMonth().toString("yyyy-MM-dd"); rangeEnd = dateEnd.moveToLastDayOfMonth().toString("yyyy-MM-dd"); break; } return {filter: ['AND', ['>=', 'rangeStart', rangeStart], ['<=', 'rangeEnd', rangeEnd] , ['IN', 'calendar', calerdars_selecteds]], criteria: {deepness: 2, order: 'startTime'}}; } function pageselectCallback(keyword, page_index, jq, view){ var selecteds = getSelectedCalendars(); if(!selecteds && (keyword != '' && keyword != null)){ jQuery('#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "")|| '')).html( '
    ' + '' + '
    ' ); }else{ var criteria = null; if(keyword == '' || keyword == null) criteria = mountCriteriaList(!!view ? view : User.preferences.defaultCalView, page_index, selecteds) else 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}}; var results = DataLayer.get('schedulable:detail', criteria); keyword = ( keyword || '' ).replace( /\s+/g, "_" ); } // não há resultados if ((((typeof(results) == 'undefined') || (!results.events_list )) && selecteds) &&(keyword != '' && keyword != null)) { jQuery('#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "")|| '')).html( '
    ' + '' + '
    ' ); // há resultados e Agendas Selecionadas } else{ if(typeof(results) != 'undefined'){ results['page_index'] = page_index; results['keyword'] = keyword; DataLayer.render( 'templates/event_list.ejs', results, function( html ){ var currentView = '#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "") || ''); jQuery(currentView).html( html ); jQuery('.events-list-win .menu-container .button').button(); $(".event-details-item").parent().click(function(){ $(this).siblings("div.details-event-list").toggleClass("hidden") .find('.button.delete').click(function(){ var eventId = $(this).siblings('[name="eventid"]').val(); $.Zebra_Dialog('Tem certeza que deseja excluir o evento?', { 'type': 'question', 'overlay_opacity': '0.5', 'buttons': ['Sim', 'Não'], 'onClose': function(clicked) { if(clicked == 'Sim'){ DataLayer.remove('schedulable', eventId); } } }); }) .end().find('.button.edit').click(function(){ eventDetails( DataLayer.get( "schedulable", $(this).siblings('[name="eventid"]').val() ), true ); }); }); paginatorListEvent(currentView, (keyword == '' || keyword == null) ? 'list' : 'search', !!view ? view : User.preferences.defaultCalView); }); }else{ var currentView = '#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "") || ''); jQuery('#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "")|| '')).html( '
    ' + ''+ ''+ '' + '
    ' ); paginatorListEvent(currentView, 'list', !!view ? view : User.preferences.defaultCalView); } } } function show_modal_import_export(tab, calendarId) { DataLayer.render( 'templates/import_export.ejs', {calendars: Calendar.calendars, owner: User.me.id}, function( html ){ if (!UI.dialogs.importCalendar) { UI.dialogs.importCalendar = jQuery('#div-import-export-calendar') .append('
    ') .find('.import-export-win.active').html(html).dialog({ resizable: false, modal:true, width:500, position: 'center' }); } else { UI.dialogs.importCalendar.html(html); } var tabsImportExport = UI.dialogs.importCalendar.find(".tabs-import-export").tabs({selected: tab}); UI.dialogs.importCalendar.find('.button').button(); tabsImportExport.find('option[value="'+calendarId+'"]').attr('selected','selected').trigger('change'); UI.dialogs.importCalendar.find(".menu-import-event") .children(".import").click(function(data){ $('.import-event-form', UI.dialogs.importCalendar).submit(); UI.dialogs.importCalendar.dialog("close"); isValidCalback = true; /** * TODO - implementar ação de importação */ }); UI.dialogs.importCalendar.find(".menu-export-event") .children(".export").click(function(){ $('.export-event-form', UI.dialogs.importCalendar).submit(); UI.dialogs.importCalendar.dialog("close"); /** * TODO - implementar ação de exportação */ }); UI.dialogs.importCalendar.find(".menu-container") .children(".cancel").click(function(){ UI.dialogs.importCalendar.dialog("close"); }); UI.dialogs.importCalendar.dialog("open"); }); }