source: trunk/prototype/modules/calendar/js/init.js @ 7579

Revision 7579, 19.8 KB checked in by acoutinho, 11 years ago (diff)

Ticket #3233 - Problemas na configuracao da hora de um evento.

  • Property svn:executable set to *
Line 
1$(document).ready(function() {
2        //Remove o icone de configuraçõe padrão antigo do expresso
3        $('#sideboxdragarea').addClass('hidden');
4
5        refresh_calendars();
6        $tabs = $('#tabs').tabs({
7            add: function( event, ui ) {
8                        Calendar.lastView = $tabs.tabs('option' ,'selected');
9                        $('#tabs .events-list-win.active').removeClass('active');
10                        $tabs.tabs('select', '#' + ui.panel.id);
11                },
12                remove: function( event, ui ) {
13                        $tabs.tabs('select', Calendar.lastView);
14                },
15                show: function( event, ui ){
16                        delete Calendar.currentViewKey;
17                        $('#calendar').fullCalendar('refetchEvents');
18                }
19        })
20        .tabs('option', 'tabTemplate', "<li><a href='#{href}'>#{label}</a><span class='ui-icon ui-icon-close'>Remove Tab</span></li>" );
21
22        /**
23          * Make a button to close the tab
24          */
25        $tabs.find( "span.ui-icon-close" ).live( "click", function() {
26                var index = $( "li", $tabs ).index( $( this ).parent() );
27                if($tabs.tabs('option' ,'selected') == index){
28                        if($tabs.tabs("length") == 2 && Calendar.lastView != 1)
29                                $tabs.tabs( "select", 0);
30                        $tabs.tabs( "select", Calendar.lastView);
31                }
32                if($tabs.tabs('option' ,'selected') == 0 || $tabs.tabs('option' ,'selected') == 1)
33                        Calendar.lastView = $tabs.tabs('option' ,'selected');
34                if(index != -1)
35                  $tabs.tabs( "remove", index );       
36                       
37               
38                });     
39        $('.button.config-menu').button({
40            icons: {
41                primary: "ui-icon-gear",
42                secondary: "ui-icon-triangle-1-s"
43            },
44            text: false
45        });
46      $('.button.add').button({
47              icons: {
48                      secondary: "ui-icon-plus"
49              }
50      })
51
52                var miniCalendar = $('.block-vertical-toolbox .mini-calendar').datepicker({
53                        dateFormat: 'yy-m-d',
54                        //dateFormat: 'DD, d MM, yy',
55                        //inline: true,
56                        firstDay: dateCalendar.dayOfWeek[User.preferences.weekStart],
57                        onSelect: function(dateText, inst)
58                        {       
59                                $tabs.tabs("select", "#calendar");
60                                var toDate = $('.block-vertical-toolbox .mini-calendar').datepicker("getDate").toString('yyyy-MM-dd').split('-');
61                                $('#calendar').fullCalendar('gotoDate', toDate[0], parseInt(toDate[1]-1), toDate[2] );
62                                $('#calendar').fullCalendar( 'changeView', 'agendaDay' );
63                        }                       
64                })
65                .find('.ui-icon-circle-triangle-e').removeClass('ui-icon-circle-triangle-e').addClass('ui-icon-triangle-1-e').end()
66                .find('.ui-icon-circle-triangle-w').removeClass('ui-icon-circle-triangle-w').addClass('ui-icon-triangle-1-w');
67               
68                //Onclick do mês
69                $('.ui-datepicker-title .ui-datepicker-month').live('click',function(){
70                        $tabs.tabs("select", "#calendar");
71                        $('#calendar').fullCalendar('gotoDate',$(this).siblings('span').html(), Date.getMonthNumberFromName($(this).html() == 'Março' ? 'Mar' : $(this).html()),'01');
72                        $('#calendar').fullCalendar( 'changeView', 'month');
73                });
74                //Onclick do ano
75                $('.ui-datepicker-title .ui-datepicker-year').live('click',function(){
76                        $tabs.tabs("select", "#calendar");
77                        $('#calendar').fullCalendar('gotoDate',$(this).html(), '0', '01');
78                        $('.fc-button-year').click();
79                });
80               
81        //Onclick em um dia do calendário anual
82        $( ".fc-day-number" ).live( "click", function() {
83                       
84                var date = $(this).parents('[class*="fc-day-"]').attr('class').match(/fc-day-(\d{4})-(\d{2})-(\d{2})/);
85
86                if (date) date.shift();
87                else return false;
88
89                $('#calendar').fullCalendar('gotoDate',date[0],date[1]-1,date[2]);
90                $('#calendar').fullCalendar( 'changeView', 'agendaDay' );
91        });     
92
93        $('.main-search input.search').keydown(function(event){
94                if(event.keyCode == 13) {
95                        Encoder.EncodeType = "entity";
96                        //$(this).val($(this).val());
97                                       
98                        add_events_list($(this).val());
99                        $(this).val('');
100                }
101        });
102       
103        //efetua pesquisas pelo click na lupa de pesquisa
104        $('.main-search span.ui-icon-search').click(function(event){
105                        add_events_list($(this).parent().find('input.search').val());
106                        $(this).parent().find('input.search').val();
107        });
108       
109        $('.block-horizontal-toolbox .main-config-menu').menu({
110                content: $('.main-config-menu-content').html(),
111                positionOpts: {
112                        posX: 'left',
113                        posY: 'bottom',
114                        offsetX: -140,
115                        offsetY: 0,
116                        directionH: 'right',
117                        directionV: 'down',
118                        detectH: true, // do horizontal collision detection 
119                        detectV: true, // do vertical collision detection
120                        linkToFront: false
121                },
122                flyOut: true,
123                showSpeed: 100,
124                crumbDefaultText: '>'
125        });
126             
127                $('#trash').droppable({
128                        drop: function(event, ui){
129                                //              calendar.fullCalendar( 'removeEvents', ui.draggable.attr('event-id') );
130                                DataLayer.remove( "event", ui.draggable.attr('event-id') );
131                                $(this).switchClass('empty','full');
132                        },
133                        tolerance: "touch"
134                });
135
136      /* initialize the calendar
137      -----------------------------------------------------------------*/
138                $(".button.add.add-event").click(function(event){
139                        var startEvent = new Date();
140                        var configData = (startEvent.toString('mm') < 30)  ? {minutes: (30 - parseInt(startEvent.toString('mm')))} : {hours: 1, minutes: '-'+startEvent.toString('mm')};
141                        startEvent.add(configData);
142
143                        eventDetails({
144                                startTime: startEvent.getTime(),
145                                endTime: dateCalendar.decodeRange(startEvent, (!!User.preferences.defaultCalendar ? (   !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ? 
146                                                (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration) : (User.preferences.defaultDuration)) : (User.preferences.defaultDuration)))
147                        }, true );
148                });
149               
150                var currentToolTip = null;
151                $('#divAppbox').on('scroll',function(){
152                        if ($(".new-task").length)                     
153                                currentToolTip.qtip('destroy');
154                });
155               
156                /* Quick add task
157        -----------------------------------------------------------------*/
158                $(".button.add.add-task").click(function(event){
159                        currentToolTip = $(this);
160                        var componente = $(this);
161                       
162            if(!$('div.qtip.qtip-blue.new-task').length){
163
164                $('div.qtip.qtip-blue').remove();
165
166                        $(componente).qtip({
167                            show: {
168                                ready: true,
169                                solo: true,
170                                when: {
171                                        event: 'click'
172                                }
173                                },
174                                hide: false,
175                                content: {
176                                        text: $('<div></div>').html( DataLayer.render( 'templates/task_quick_add.ejs', {"componente" : componente} ) ),
177                                        title: {
178                                                text:'Nova Tarefa',
179                                                button: '<a class="button close" href="#">close</a>'
180                                        }
181                                },
182                                style: {
183                                        name: 'blue',
184                                tip: {
185                                                corner: 'leftMiddle'
186                                        },
187                                border: {
188                                            width: 4,
189                                            radius: 8
190                                        },
191                                width: {
192                                                min: 225,
193                                            max:225
194                                        }
195                                },
196                        position: {
197                                corner: {
198                                            target: 'rightMiddle',
199                                            tooltip: 'leftMiddle'
200                                },
201                                adjust: {
202                                            x:0,
203                                            y:0
204                                }
205                        }
206                    })
207                .qtip("api").onShow = function(arg0) {
208
209                        /*------------------------------------------------------------------------*/
210                        /*               Seta os valores padrões nos inputs do qtip               */
211                         $('div.qtip div.add-simple-task input.task').Watermark("Tarefa sem título");
212                             $('div.qtip div.add-simple-task textarea').Watermark("Descrição");
213                        /*------------------------------------------------------------------------*/
214
215                            $('.qtip-active .button.close').button({
216                                icons: {
217                                    primary: "ui-icon-close"
218                                },
219                                text: false
220                            })
221                            .click(function(){
222                                        $(componente).qtip('destroy');
223                            });
224                                                       
225                            $('.qtip-active .button.save').button().click(function(){
226                               
227                                var title = $('div.qtip div.add-simple-task input.task').val();
228                                        var description = $('div.qtip div.add-simple-task textarea').val();
229
230                                        var calendar, timezone = '';
231
232                                        for (var i = 0; i < Calendar.signatures.length; i++){
233                                                if(Calendar.signatures[i].type == 1 && Calendar.signatures[i].calendar.type == 1){
234                                                        calendar = Calendar.signatures[i].calendar.id;
235                                                        timezone = Calendar.signatures[i].calendar.timezone;
236                                                        break;
237                                                }
238                                        }
239
240                                DataLayer.put('schedulable',
241                                {
242                                        summary: title,
243                                        description: description,
244                                        type: '2',
245                                        calendar: calendar,
246                                        timezone: timezone,
247                                        'class':'1',
248                                                        status: '1',
249                                        startTime: new Date().toString('yyyy-MM-dd 00:00:00'),
250                                        endTime: new Date().toString('yyyy-MM-dd 00:00:00'),
251                                        allDay: '1',
252                            priority: '1',
253                                        participants:
254                                        [{ 
255                                            user: User.me.id,
256                                            isOrganizer: 1,
257                                            acl: 'row'
258                                        }]
259                                });
260                               
261                        $(componente).qtip('destroy');
262
263                    });
264
265                            $('.qtip-active .button.advanced').button().click(function(){
266
267                                var startEvent = new Date();
268                                        var configData = (startEvent.toString('mm') < 30)  ? {minutes: (30 - parseInt(startEvent.toString('mm')))} : {hours: 1, minutes: '-'+startEvent.toString('mm')};
269                                        startEvent.add(configData);
270                       
271                                                var componente = $(this);
272                        var description = $('div.qtip div.add-simple-task textarea[name="description"]').val();
273
274                                        taskDetails({
275                            summary: $('div.qtip div.add-simple-task input[name="summary"]').val(),
276                            description: description == 'Descrição' ? '' : description,
277                                                startTime: startEvent.getTime(),
278                                                endTime: dateCalendar.decodeRange(startEvent, (!!User.preferences.defaultCalendar ? (   !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ? 
279                                                        (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration) : (User.preferences.defaultDuration)) : (User.preferences.defaultDuration)))
280                                        }, true );
281
282                        $(componente).qtip('destroy');
283                            });
284                                                               
285                                $('.qtip-active .button.cancel').button().click(function(){
286                                        $(componente).qtip('destroy');
287                            });
288                                                       
289                            $('.qtip-active .button').button();
290                       
291                        $('div.qtip.qtip-blue.qtip-active').addClass('new-task');
292            }
293        }
294                });
295
296        $(".button.add.add-activity").click(function(event){
297                        var startEvent = new Date();
298                        var configData = (startEvent.toString('mm') < 30)  ? {minutes: (30 - parseInt(startEvent.toString('mm')))} : {hours: 1, minutes: '-'+startEvent.toString('mm')};
299                        startEvent.add(configData);
300                       
301                        activityDetails({
302                                startTime: startEvent.getTime(),
303                                endTime: dateCalendar.decodeRange(startEvent, (!!User.preferences.defaultCalendar ? (   !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ? 
304                                                (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration) : (User.preferences.defaultDuration)) : (User.preferences.defaultDuration)))
305                        }, true );
306
307        });
308
309        var calendar = $('#calendar').fullCalendar(DataLayer.merge({
310
311                defaultView: User.preferences.defaultCalView,
312                timeFormat: User.preferences.hourFormat,
313                axisFormat: User.preferences.hourFormat,
314                eventSources: Calendar.sources,
315
316                header: {
317                        left: 'prev,next today,agendaWeek,agendaDay',
318                        center: 'title',
319                        right: 'agendaDay,agendaWeek,month,year'
320                },
321                firstHour: dateCalendar.getShortestTime(User.preferences.defaultStartHour ? User.preferences.defaultStartHour : '6'),
322                firstDay: dateCalendar.dayOfWeek[User.preferences.weekStart],
323                editable: true,
324                selectable: true,
325                selectHelper: true,
326                droppable: true, // this allows things to be dropped onto the calendar !!!
327                timeFormat: {
328                        agenda: 'HH:mm{ - HH:mm}',
329                        '': 'HH:mm{ - HH:mm} }'
330                },
331                titleFormat: {
332                        month: 'MMMM yyyy',                             
333                        week: "dd[ yyyy] { 'a'[ MMM] dd 'de' MMMM '-' yyyy}",
334                        day: 'dddd,  dd MMM , yyyy'
335                },
336                columnFormat:{
337                        month: 'ddd',   
338                        week: 'ddd dd/MM',
339                        day: 'dddd dd/MM' 
340                },
341               
342                allDayText: 'Dia todo',
343                buttonText: {
344                        today: 'hoje',
345                        month: 'mês',
346                        week: 'semana',
347                        day: 'dia',
348                        year: 'ano'
349                },
350
351
352        eventRender: function( event, element, view ){
353                    $('#calendar td.fc-year-have-event').removeClass('fc-year-have-event');
354
355                        var img_icon = "";
356                        if(event.type == 1)
357                                img_icon = "mini-event.png";
358                        if(event.type == 2)
359                                img_icon = "mini-task.png";
360                        if(event.type == 3)
361                                img_icon = "mini-activity.png";
362
363                       
364            element.find(".fc-event-inner.fc-event-skin").prepend($('<img style="width: 11px; height: 13px;" class="" src="../prototype/modules/calendar/img/' + img_icon + '"></img>'));
365                },
366
367                select: function( start, end, allDay, event, view ){
368                        if (view.name == "month") {
369                                if (User.preferences.defaultStartHour) {
370                                  _start = User.preferences.defaultStartHour;
371                                 
372                                  if (_start.length > 4)
373                                _start = _start.trim().substring(0,5); // remove o am/pm
374                             
375                              _start = _start.split(":");
376                              start.setHours(_start[0]);
377                              start.setMinutes(_start[1]);
378                            }
379                                 
380                                if (User.preferences.defaultEndHour) {
381                                  _end = User.preferences.defaultEndHour;
382                                  if (_end.length > 4)
383                                _end = _end.trim().substring(0,5); // remove o am/pm
384                                                     
385                              _end = _end.split(":");                     
386                              end.setHours(_end[0]);                       
387                              end.setMinutes(_end[1]);
388                                }                   
389                        } // END if (view.name == "month")
390                       
391                        eventDetails( { 'start': start,
392                                        'end': end,
393                                        'allDay': allDay } );
394                },
395
396                eventDrop: function( evt, event, view  ){
397                        evt.id = evt.id.split('-')[0];
398                        if(!evt.disableDragging){
399                           
400                             if(evt.isRepeat){
401                                 var schedulable = copyAndMoveTo(false , evt.id , false, "3", evt);
402                                 
403                                 var repeat = mount_exception(evt.id, evt.occurrence);
404                                 DataLayer.remove('repeat', false);
405                                 DataLayer.put('repeat', repeat);
406                                 DataLayer.commit('repeat', false, function(data){
407                                   
408                                    DataLayer.remove('schedulable', repeat.schedulable, false);
409                                    DataLayer.put('schedulable', schedulable);
410                                     
411                                 });
412
413                             }else{                                 
414                                DataLayer.put( "schedulable:calendar", evt );
415
416                                event.editable = false;
417                                event.className = "blocked-event";
418                                calendar.fullCalendar( 'updateEvent', evt );
419                             }
420                             
421                        }else
422                            Calendar.rerenderView(true);
423                },
424
425                eventResize: function( evt, event, view ){
426                        evt.id = evt.id.split('-')[0];
427                        if(!evt.disableDragging){
428                             if(evt.isRepeat){
429                                 var schedulable = copyAndMoveTo(false , evt.id , false, "3", evt);
430                                 
431                                 //Normaliza a data para o backend
432                                 schedulable.startTime = new Date(parseInt(schedulable.startTime)).toString('yyyy-MM-dd hh:mm:00');
433                                 schedulable.endTime = new Date(parseInt(schedulable.endTime)).toString('yyyy-MM-dd hh:mm:00');
434                                 
435                                 var repeat = mount_exception(evt.id, evt.occurrence);
436                                 
437                                 DataLayer.remove('repeat', false);
438                                 DataLayer.put('repeat', repeat);
439                                 DataLayer.commit('repeat', false, function(data){
440                                     
441                                    DataLayer.remove('schedulable', repeat.schedulable, false);
442                                    DataLayer.put('schedulable', schedulable);
443                                     
444                                 });
445                             }else{                                 
446                                DataLayer.put( "schedulable:calendar", evt );   
447                                evt.editable = false;
448                                evt.className = "blocked-event";
449                                calendar.fullCalendar( 'updateEvent', evt );
450                             }
451                       
452                        }else
453                                Calendar.rerenderView(true);
454                },
455
456                eventClick: function( evt, event, view ){
457                        evt.id = evt.id.split('-')[0];
458           
459            switch (parseInt(evt.type)){
460                case 1:
461                    if(evt.selectable){
462                        if(evt.isRepeat){
463                            $.Zebra_Dialog(evt.title + ' é um evento com repetição.', {
464                                'type':     'question',
465                                'overlay_opacity': '0.5',
466                                'buttons':  ['Editar todas ocorrências', 'Editar essa ocorrência'],
467                                'onClose':  function(clicked) {
468                                    if(clicked == 'Editar todas ocorrências') {
469                                        eventDetails( DataLayer.get( "schedulable", evt.id), true);
470                                    }else{
471                                        /*
472                                        * TODO - repeat foi adicionado pois melhorias devem ser feitas no rollback do
473                                        *DataLayer, repeat somente é usado quando se trata da criação de um evento
474                                        *pela edição de uma ocorrência.
475                                        */     
476                                        var repeat = mount_exception(evt.id, evt.occurrence);
477                                                                                         
478                                        $('.calendar-copy-move input[name="typeEvent"]').val("3");
479                                       
480                                        eventDetails(copyAndMoveTo(false , evt.id , false, "3", evt), true, '', false, repeat);
481                                    }       
482                                }
483                            });
484                        }else{
485                            var schedulable = DataLayer.get( "schedulable", evt.id);
486                            schedulable.calendar = evt.calendar;
487                            eventDetails( schedulable, true);
488                            }
489                        }
490                        break;
491                    case 2:
492                        var task = DataLayer.get( "schedulable", evt.id);
493                        task.group = evt.calendar;
494                        taskDetails( task, true);
495                        break;
496                    case 3:
497                        var activity = DataLayer.get( "schedulable", evt.id);
498                        activity.group = evt.calendar;
499                        activityDetails( activity, true);
500                        break;
501            }
502                },
503               
504                eventAfterRender: function(event, element, view){
505
506                        contentMenu();
507
508                }
509        }, dateCalendar));     
510
511        $('#calendar .fc-header-left .fc-button-agendaWeek, #calendar .fc-header-left .fc-button-agendaDay').click(function(){
512                $(this).parent().find(".fc-button-today").click();
513        });
514               
515        contentMenu();
516         
517         $('body').click(function(){
518                $('#context-menu-event').html('');
519         });
520         
521        if($(window).height() < $('body').height()){
522                var hei = $('body').height() - $(window).height();
523                hei = $('#divAppbox').height() - hei;
524                $('#divAppbox').css('max-height', hei);
525                $('#divAppbox').css('min-height', hei);
526                $('body').css('overflow-y','hidden');
527                delete hei;
528         }
529         
530         $(window).resize(function(){
531                $('#divAppbox').css('max-height', $(window).height() - 104);
532                $('#divAppbox').css('min-height', $(window).height() - 104);
533                $('#divAppbox').css('overflow-x', 'auto');
534                $('#divAppbox').css('overflow-y', 'scroll');
535        });       
536        //Todo chamada do metodo que adiciona ao full calendar o botao de listagem de eventos 
537        printEvents();
538});
539
540
541function useDesktopNotification(){
542        return !!parseInt(User.preferences.useDesktopNotification);
543}
Note: See TracBrowser for help on using the repository browser.