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

Revision 5947, 13.5 KB checked in by acoutinho, 12 years ago (diff)

Ticket #2626 - Inconsistencia no organizador de um evento quando criado a partir de uma agenda compartilhada

  • 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                        if(startEvent.toString('mm') < 30)
141                                        startEvent.add({minutes: (30 - parseInt(startEvent.toString('mm')))});
142                        else
143                                        startEvent.add({hours: 1, minutes: '-'+startEvent.toString('mm')});
144                        var endEvent = function(date){
145                                        if(!!User.preferences.defaultCalendar){
146                                                        return  parseInt(date.getTime()) +
147                                                                (       !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ? 
148                                                                        (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration * 60000) :
149                                                                        (User.preferences.defaultDuration * 60000)
150                                                                );
151                                        }else
152                                                        return parseInt(date.getTime()) + (User.preferences.defaultDuration * 60000);
153                        };       
154                       
155                        eventDetails({
156                                startTime: startEvent.getTime(),
157                                endTime: endEvent(startEvent)
158                        }, true );
159                });
160
161        var calendar = $('#calendar').fullCalendar(DataLayer.merge({
162
163                defaultView: User.preferences.defaultCalView,
164                timeFormat: User.preferences.hourFormat,
165                axisFormat: User.preferences.hourFormat,
166                eventSources: Calendar.sources,
167
168                header: {
169                        left: 'prev,next today,basicWeek,basicDay',
170                        center: 'title',
171                        right: 'agendaDay,agendaWeek,month,year'
172                },
173                firstHour: dateCalendar.getShortestTime(User.preferences.defaultStartHour ? User.preferences.defaultStartHour : '6'),
174                firstDay: dateCalendar.dayOfWeek[User.preferences.weekStart],
175                editable: true,
176                selectable: true,
177                selectHelper: true,
178                droppable: true, // this allows things to be dropped onto the calendar !!!
179                timeFormat: {
180                        agenda: 'HH:mm{ - HH:mm}',
181                        '': 'HH:mm{ - HH:mm} }'
182                },
183                titleFormat: {
184                        month: 'MMMM yyyy',                             
185                        week: "dd[ yyyy] { 'a'[ MMM] dd 'de' MMMM '-' yyyy}",
186                        day: 'dddd,  dd MMM , yyyy'
187                },
188                columnFormat:{
189                        month: 'ddd',   
190                        week: 'ddd dd/MM',
191                        day: 'dddd dd/MM' 
192                },
193               
194                allDayText: 'Dia todo',
195                buttonText: {
196                        today: 'hoje',
197                        month: 'mês',
198                        week: 'semana',
199                        day: 'dia',
200                        year: 'ano'
201                },
202                /*
203                eventRender: function( event, element, view ){
204                        $(element).attr( 'event-id', event.id );
205                },
206                */
207                select: function( start, end, allDay, event, view ){
208                        if (view.name == "month") {
209                                if (User.preferences.defaultStartHour) {
210                                  _start = User.preferences.defaultStartHour;
211                                 
212                                  if (_start.length > 4)
213                                _start = _start.trim().substring(0,5); // remove o am/pm
214                             
215                              _start = _start.split(":");
216                              start.setHours(_start[0]);
217                              start.setMinutes(_start[1]);
218                            }
219                                 
220                                if (User.preferences.defaultEndHour) {
221                                  _end = User.preferences.defaultEndHour;
222                                  if (_end.length > 4)
223                                _end = _end.trim().substring(0,5); // remove o am/pm
224                                                     
225                              _end = _end.split(":");                     
226                              end.setHours(_end[0]);                       
227                              end.setMinutes(_end[1]);
228                                }                   
229                        } // END if (view.name == "month")
230                       
231                        eventDetails( { 'start': start,
232                                        'end': end,
233                                        'allDay': allDay } );
234                },
235
236                eventDrop: function( evt, event, view  ){
237                        evt.id = evt.id.split('-')[0];
238                        if(!evt.disableDragging){
239                           
240                             if(evt.isRepeat){
241                                 var schedulable = copyAndMoveTo(false , evt.id , false, "3", evt);
242                                 
243                                 var repeat = mount_exception(evt.id, evt.occurrence);
244                                 DataLayer.remove('repeat', false);
245                                 DataLayer.put('repeat', repeat);
246                                 DataLayer.commit('repeat', false, function(data){
247                                   
248                                    DataLayer.remove('schedulable', repeat.schedulable, false);
249                                    DataLayer.put('schedulable', schedulable);
250                                     
251                                 });
252
253                             }else{                                 
254                                DataLayer.put( "schedulable:calendar", evt );
255
256                                event.editable = false;
257                                event.className = "blocked-event";
258                                calendar.fullCalendar( 'updateEvent', evt );
259                             }
260                             
261                        }else
262                            Calendar.rerenderView(true);
263                },
264
265                eventResize: function( evt, event, view ){
266                        evt.id = evt.id.split('-')[0];
267                        if(!evt.disableDragging){
268                             if(evt.isRepeat){
269                                 var schedulable = copyAndMoveTo(false , evt.id , false, "3", evt);
270                                 
271                                 //Normaliza a data para o backend
272                                 schedulable.startTime = new Date(parseInt(schedulable.startTime)).toString('yyyy-MM-dd hh:mm:00');
273                                 schedulable.endTime = new Date(parseInt(schedulable.endTime)).toString('yyyy-MM-dd hh:mm:00');
274                                 
275                                 var repeat = mount_exception(evt.id, evt.occurrence);
276                                 
277                                 DataLayer.remove('repeat', false);
278                                 DataLayer.put('repeat', repeat);
279                                 DataLayer.commit('repeat', false, function(data){
280                                     
281                                    DataLayer.remove('schedulable', repeat.schedulable, false);
282                                    DataLayer.put('schedulable', schedulable);
283                                     
284                                 });
285                             }else{                                 
286                                DataLayer.put( "schedulable:calendar", evt );   
287                                evt.editable = false;
288                                evt.className = "blocked-event";
289                                calendar.fullCalendar( 'updateEvent', evt );
290                             }
291                       
292                        }else
293                                Calendar.rerenderView(true);
294                },
295
296                eventClick: function( evt, event, view ){
297                        evt.id = evt.id.split('-')[0];
298                        if(evt.selectable){
299                            if(evt.isRepeat){
300                                $.Zebra_Dialog(evt.title + ' é um evento com repetição.', {
301                                        'type':     'question',
302                                        'overlay_opacity': '0.5',
303                                        'buttons':  ['Editar todas ocorrências', 'Editar essa ocorrência'],
304                                        'onClose':  function(clicked) {
305                                                if(clicked == 'Editar todas ocorrências') {
306                                                    eventDetails( DataLayer.get( "schedulable", evt.id), true);
307                                                }else{
308                                                    /*
309                                                    * TODO - repeat foi adicionado pois melhorias devem ser feitas no rollback do
310                                                    *DataLayer, repeat somente é usado quando se trata da criação de um evento
311                                                    *pela edição de uma ocorrência.
312                                                    */     
313                                                    var repeat = mount_exception(evt.id, evt.occurrence);
314                                                                                                 
315                                                    $('.calendar-copy-move input[name="typeEvent"]').val("3");
316                                                   
317                                                    eventDetails(copyAndMoveTo(false , evt.id , false, "3", evt), true, '', false, repeat);
318                                                }       
319                                        }
320                                });
321                               
322                            }else{
323                                var schedulable = DataLayer.get( "schedulable", evt.id);
324                                schedulable.calendar = evt.calendar;
325                                eventDetails( schedulable, true);
326                               
327                            }
328                               
329                        }
330                },
331               
332                eventAfterRender: function(event, element, view){
333                        contentMenu();
334                }
335        }, dateCalendar));
336 
337        contentMenu();
338         
339         $('body').click(function(){
340                $('#context-menu-event').html('');
341         });
342         
343        if($(window).height() < $('body').height()){
344                var hei = $('body').height() - $(window).height();
345                hei = $('#divAppbox').height() - hei;
346                $('#divAppbox').css('max-height', hei);
347                $('#divAppbox').css('min-height', hei);
348                $('body').css('overflow-y','hidden');
349                delete hei;
350         }
351         
352         $(window).resize(function(){
353                $('#divAppbox').css('max-height', $(window).height() - 104);
354                $('#divAppbox').css('min-height', $(window).height() - 104);
355                $('#divAppbox').css('overflow-x', 'auto');
356                $('#divAppbox').css('overflow-y', 'scroll');
357        });       
358        //Todo chamada do metodo que adiciona ao full calendar o botao de listagem de eventos 
359        //listEvents();
360});
Note: See TracBrowser for help on using the repository browser.