source: sandbox/2.4.2-expresso1/prototype/modules/calendar/js/init.js @ 6768

Revision 6768, 13.4 KB checked in by acoutinho, 12 years ago (diff)

Ticket #2951 - Implementacao da funcionalidade de alarms desktop com suporte a eventos

  • Property svn:executable set to *
Line 
1$(document).ready(function() {
2
3        //Remove o icone de configuraçõe padrão antigo do expresso
4        $('#sideboxdragarea').addClass('hidden');
5
6        refresh_calendars();
7        $tabs = $('#tabs').tabs({
8            add: function( event, ui ) {
9                        Calendar.lastView = $tabs.tabs('option' ,'selected');
10                        $('#tabs .events-list-win.active').removeClass('active');
11                        $tabs.tabs('select', '#' + ui.panel.id);
12                },
13                remove: function( event, ui ) {
14                        $tabs.tabs('select', Calendar.lastView);
15                },
16                show: function( event, ui ){
17                        delete Calendar.currentViewKey;
18                        $('#calendar').fullCalendar('refetchEvents');
19                }
20        })
21        .tabs('option', 'tabTemplate', "<li><a href='#{href}'>#{label}</a><span class='ui-icon ui-icon-close'>Remove Tab</span></li>" );
22
23        /**
24          * Make a button to close the tab
25          */
26        $tabs.find( "span.ui-icon-close" ).live( "click", function() {
27                var index = $( "li", $tabs ).index( $( this ).parent() );
28                if($tabs.tabs('option' ,'selected') == index){
29                        if($tabs.tabs("length") == 2 && Calendar.lastView != 1)
30                                $tabs.tabs( "select", 0);
31                        $tabs.tabs( "select", Calendar.lastView);
32                }
33                if($tabs.tabs('option' ,'selected') == 0 || $tabs.tabs('option' ,'selected') == 1)
34                        Calendar.lastView = $tabs.tabs('option' ,'selected');
35                if(index != -1)
36                  $tabs.tabs( "remove", index );       
37                       
38               
39                });     
40        $('.button.config-menu').button({
41            icons: {
42                primary: "ui-icon-gear",
43                secondary: "ui-icon-triangle-1-s"
44            },
45            text: false
46        });
47      $('.button.add').button({
48              icons: {
49                      secondary: "ui-icon-plus"
50              }
51      })
52
53                var miniCalendar = $('.block-vertical-toolbox .mini-calendar').datepicker({
54                        dateFormat: 'yy-m-d',
55                        //dateFormat: 'DD, d MM, yy',
56                        //inline: true,
57                        firstDay: dateCalendar.dayOfWeek[User.preferences.weekStart],
58                        onSelect: function(dateText, inst)
59                        {       
60                                $tabs.tabs("select", "#calendar");
61                                var toDate = $('.block-vertical-toolbox .mini-calendar').datepicker("getDate").toString('yyyy-MM-dd').split('-');
62                                $('#calendar').fullCalendar('gotoDate', toDate[0], parseInt(toDate[1]-1), toDate[2] );
63                                $('#calendar').fullCalendar( 'changeView', 'agendaDay' );
64                        }                       
65                })
66                .find('.ui-icon-circle-triangle-e').removeClass('ui-icon-circle-triangle-e').addClass('ui-icon-triangle-1-e').end()
67                .find('.ui-icon-circle-triangle-w').removeClass('ui-icon-circle-triangle-w').addClass('ui-icon-triangle-1-w');
68               
69                //Onclick do mês
70                $('.ui-datepicker-title .ui-datepicker-month').live('click',function(){
71                        $tabs.tabs("select", "#calendar");
72                        $('#calendar').fullCalendar('gotoDate',$(this).siblings('span').html(), Date.getMonthNumberFromName($(this).html() == 'Março' ? 'Mar' : $(this).html()),'01');
73                        $('#calendar').fullCalendar( 'changeView', 'month');
74                });
75                //Onclick do ano
76                $('.ui-datepicker-title .ui-datepicker-year').live('click',function(){
77                        $tabs.tabs("select", "#calendar");
78                        $('#calendar').fullCalendar('gotoDate',$(this).html(), '0', '01');
79                        $('.fc-button-year').click();
80                });
81               
82        //Onclick em um dia do calendário anual
83        $( ".fc-day-number" ).live( "click", function() {
84                       
85                var date = $(this).parents('[class*="fc-day-"]').attr('class').match(/fc-day-(\d{4})-(\d{2})-(\d{2})/);
86
87                if (date) date.shift();
88                else return false;
89
90                $('#calendar').fullCalendar('gotoDate',date[0],date[1]-1,date[2]);
91                $('#calendar').fullCalendar( 'changeView', 'agendaDay' );
92        });     
93
94        $('.main-search input.search').keydown(function(event){
95                if(event.keyCode == 13) {
96                        Encoder.EncodeType = "entity";
97                        //$(this).val($(this).val());
98                                       
99                        add_events_list($(this).val());
100                        $(this).val('');
101                }
102        });
103       
104        //efetua pesquisas pelo click na lupa de pesquisa
105        $('.main-search span.ui-icon-search').click(function(event){
106                        add_events_list($(this).parent().find('input.search').val());
107                        $(this).parent().find('input.search').val();
108        });
109       
110        $('.block-horizontal-toolbox .main-config-menu').menu({
111                content: $('.main-config-menu-content').html(),
112                positionOpts: {
113                        posX: 'left',
114                        posY: 'bottom',
115                        offsetX: -140,
116                        offsetY: 0,
117                        directionH: 'right',
118                        directionV: 'down',
119                        detectH: true, // do horizontal collision detection 
120                        detectV: true, // do vertical collision detection
121                        linkToFront: false
122                },
123                flyOut: true,
124                showSpeed: 100,
125                crumbDefaultText: '>'
126        });
127             
128                $('#trash').droppable({
129                        drop: function(event, ui){
130                                //              calendar.fullCalendar( 'removeEvents', ui.draggable.attr('event-id') );
131                                DataLayer.remove( "event", ui.draggable.attr('event-id') );
132                                $(this).switchClass('empty','full');
133                        },
134                        tolerance: "touch"
135                });
136
137      /* initialize the calendar
138      -----------------------------------------------------------------*/
139                $(".button.add.add-event").click(function(event){
140                        var startEvent = new Date();
141                        var configData = (startEvent.toString('mm') < 30)  ? {minutes: (30 - parseInt(startEvent.toString('mm')))} : {hours: 1, minutes: '-'+startEvent.toString('mm')};
142                        startEvent.add(configData);
143
144                        eventDetails({
145                                startTime: startEvent.getTime(),
146                                endTime: dateCalendar.decodeRange(startEvent, (!!User.preferences.defaultCalendar ? (   !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ? 
147                                                (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration) : (User.preferences.defaultDuration)) : (User.preferences.defaultDuration)))
148                        }, true );
149                });
150
151        var calendar = $('#calendar').fullCalendar(DataLayer.merge({
152
153                defaultView: User.preferences.defaultCalView,
154                timeFormat: User.preferences.hourFormat,
155                axisFormat: User.preferences.hourFormat,
156                eventSources: Calendar.sources,
157
158                header: {
159                        left: 'prev,next today,basicWeek,basicDay',
160                        center: 'title',
161                        right: 'agendaDay,agendaWeek,month,year'
162                },
163                firstHour: dateCalendar.getShortestTime(User.preferences.defaultStartHour ? User.preferences.defaultStartHour : '6'),
164                firstDay: dateCalendar.dayOfWeek[User.preferences.weekStart],
165                editable: true,
166                selectable: true,
167                selectHelper: true,
168                droppable: true, // this allows things to be dropped onto the calendar !!!
169                timeFormat: {
170                        agenda: 'HH:mm{ - HH:mm}',
171                        '': 'HH:mm{ - HH:mm} }'
172                },
173                titleFormat: {
174                        month: 'MMMM yyyy',                             
175                        week: "dd[ yyyy] { 'a'[ MMM] dd 'de' MMMM '-' yyyy}",
176                        day: 'dddd,  dd MMM , yyyy'
177                },
178                columnFormat:{
179                        month: 'ddd',   
180                        week: 'ddd dd/MM',
181                        day: 'dddd dd/MM' 
182                },
183               
184                allDayText: 'Dia todo',
185                buttonText: {
186                        today: 'hoje',
187                        month: 'mês',
188                        week: 'semana',
189                        day: 'dia',
190                        year: 'ano'
191                },
192                /*
193                eventRender: function( event, element, view ){
194                        $(element).attr( 'event-id', event.id );
195                },
196                */
197                select: function( start, end, allDay, event, view ){
198                        if (view.name == "month") {
199                                if (User.preferences.defaultStartHour) {
200                                  _start = User.preferences.defaultStartHour;
201                                 
202                                  if (_start.length > 4)
203                                _start = _start.trim().substring(0,5); // remove o am/pm
204                             
205                              _start = _start.split(":");
206                              start.setHours(_start[0]);
207                              start.setMinutes(_start[1]);
208                            }
209                                 
210                                if (User.preferences.defaultEndHour) {
211                                  _end = User.preferences.defaultEndHour;
212                                  if (_end.length > 4)
213                                _end = _end.trim().substring(0,5); // remove o am/pm
214                                                     
215                              _end = _end.split(":");                     
216                              end.setHours(_end[0]);                       
217                              end.setMinutes(_end[1]);
218                                }                   
219                        } // END if (view.name == "month")
220                       
221                        eventDetails( { 'start': start,
222                                        'end': end,
223                                        'allDay': allDay } );
224                },
225
226                eventDrop: function( evt, event, view  ){
227                        evt.id = evt.id.split('-')[0];
228                        if(!evt.disableDragging){
229                           
230                             if(evt.isRepeat){
231                                 var schedulable = copyAndMoveTo(false , evt.id , false, "3", evt);
232                                 
233                                 var repeat = mount_exception(evt.id, evt.occurrence);
234                                 DataLayer.remove('repeat', false);
235                                 DataLayer.put('repeat', repeat);
236                                 DataLayer.commit('repeat', false, function(data){
237                                   
238                                    DataLayer.remove('schedulable', repeat.schedulable, false);
239                                    DataLayer.put('schedulable', schedulable);
240                                     
241                                 });
242
243                             }else{                                 
244                                DataLayer.put( "schedulable:calendar", evt );
245
246                                event.editable = false;
247                                event.className = "blocked-event";
248                                calendar.fullCalendar( 'updateEvent', evt );
249                             }
250                             
251                        }else
252                            Calendar.rerenderView(true);
253                },
254
255                eventResize: function( evt, event, view ){
256                        evt.id = evt.id.split('-')[0];
257                        if(!evt.disableDragging){
258                             if(evt.isRepeat){
259                                 var schedulable = copyAndMoveTo(false , evt.id , false, "3", evt);
260                                 
261                                 //Normaliza a data para o backend
262                                 schedulable.startTime = new Date(parseInt(schedulable.startTime)).toString('yyyy-MM-dd hh:mm:00');
263                                 schedulable.endTime = new Date(parseInt(schedulable.endTime)).toString('yyyy-MM-dd hh:mm:00');
264                                 
265                                 var repeat = mount_exception(evt.id, evt.occurrence);
266                                 
267                                 DataLayer.remove('repeat', false);
268                                 DataLayer.put('repeat', repeat);
269                                 DataLayer.commit('repeat', false, function(data){
270                                     
271                                    DataLayer.remove('schedulable', repeat.schedulable, false);
272                                    DataLayer.put('schedulable', schedulable);
273                                     
274                                 });
275                             }else{                                 
276                                DataLayer.put( "schedulable:calendar", evt );   
277                                evt.editable = false;
278                                evt.className = "blocked-event";
279                                calendar.fullCalendar( 'updateEvent', evt );
280                             }
281                       
282                        }else
283                                Calendar.rerenderView(true);
284                },
285
286                eventClick: function( evt, event, view ){
287                        evt.id = evt.id.split('-')[0];
288                        if(evt.selectable){
289                            if(evt.isRepeat){
290                                $.Zebra_Dialog(evt.title + ' é um evento com repetição.', {
291                                        'type':     'question',
292                                        'overlay_opacity': '0.5',
293                                        'buttons':  ['Editar todas ocorrências', 'Editar essa ocorrência'],
294                                        'onClose':  function(clicked) {
295                                                if(clicked == 'Editar todas ocorrências') {
296                                                    eventDetails( DataLayer.get( "schedulable", evt.id), true);
297                                                }else{
298                                                    /*
299                                                    * TODO - repeat foi adicionado pois melhorias devem ser feitas no rollback do
300                                                    *DataLayer, repeat somente é usado quando se trata da criação de um evento
301                                                    *pela edição de uma ocorrência.
302                                                    */     
303                                                    var repeat = mount_exception(evt.id, evt.occurrence);
304                                                                                                 
305                                                    $('.calendar-copy-move input[name="typeEvent"]').val("3");
306                                                   
307                                                    eventDetails(copyAndMoveTo(false , evt.id , false, "3", evt), true, '', false, repeat);
308                                                }       
309                                        }
310                                });
311                               
312                            }else{
313                                var schedulable = DataLayer.get( "schedulable", evt.id);
314                                schedulable.calendar = evt.calendar;
315                                eventDetails( schedulable, true);
316                               
317                            }
318                               
319                        }
320                },
321               
322                eventAfterRender: function(event, element, view){
323                        contentMenu();
324                }
325        }, dateCalendar));
326 
327        contentMenu();
328         
329         $('body').click(function(){
330                $('#context-menu-event').html('');
331         });
332         
333        if($(window).height() < $('body').height()){
334                var hei = $('body').height() - $(window).height();
335                hei = $('#divAppbox').height() - hei;
336                $('#divAppbox').css('max-height', hei);
337                $('#divAppbox').css('min-height', hei);
338                $('body').css('overflow-y','hidden');
339                delete hei;
340         }
341         
342         $(window).resize(function(){
343                $('#divAppbox').css('max-height', $(window).height() - 104);
344                $('#divAppbox').css('min-height', $(window).height() - 104);
345                $('#divAppbox').css('overflow-x', 'auto');
346                $('#divAppbox').css('overflow-y', 'scroll');
347        });       
348        //Todo chamada do metodo que adiciona ao full calendar o botao de listagem de eventos 
349        //listEvents();
350});
351
352
353function useDesktopNotification(){
354        return !!parseInt(User.preferences.useDesktopNotification);
355}
Note: See TracBrowser for help on using the repository browser.