source: sandbox/2.4.2-expresso1/prototype/modules/calendar/js/activity.helpers.js @ 6959

Revision 6959, 26.4 KB checked in by douglasz, 12 years ago (diff)

Ticket #2966 - Correcoes de interface e validacoes das atividades.

  • Property svn:executable set to *
Line 
1function activityDetails( objActivity, decoded, path, isMail, repeat){
2
3    tasks = {length: 0};
4       
5    if(path == undefined)
6        path = "";
7               
8    if( !decoded )
9        objActivity = DataLayer.decode( "schedulable:group", objActivity );
10
11    if(!isMail)
12        objActivity = DataLayer.encode( "schedulable:activity", objActivity );
13   
14    var registerStatus = function(){
15        var blkAuto = UI.dialogs.addActivity.find('#group_addactivity_details1');
16
17        var startDate = false;
18        var endDate = new Date;
19        var dueDate = new Date;
20        var percentage = 0;             
21                var statusTasks = {1: 0, 2: 0, 3: 0, 4: 0};
22               
23                var allDay = true;
24
25        var formatString =  User.preferences.dateFormat + " " +  User.preferences.hourFormat;
26
27        if(tasks.length == 0){
28
29            startDate = new Date();
30            var configData = (startDate.toString('mm') < 30)  ? {minutes: (30 - parseInt(startDate.toString('mm')))} : {hours: 1, minutes: '-'+startDate.toString('mm')};
31            startDate.add(configData);
32
33            endDate = new Date(dateCalendar.decodeRange(startDate, (!!User.preferences.defaultCalendar ? (   !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ?  (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration) : (User.preferences.defaultDuration)) : (User.preferences.defaultDuration))));
34
35            blkAuto.find('input[name="startDate"]').val(startDate.toString(User.preferences.dateFormat ));
36            blkAuto.find('input[name="startHour"]').val(startDate.toString(User.preferences.hourFormat ));
37
38            blkAuto.find('input[name="endDate"]').val(endDate.toString(User.preferences.dateFormat ));
39            blkAuto.find('input[name="endHour"]').val(endDate.toString(User.preferences.hourFormat ));
40
41            blkAuto.find('input[name="dueDate"]').val('');
42            blkAuto.find('input[name="dueHour"]').val('');
43                       
44            blkAuto.find('input[name="percentage"]').val(percentage);
45                       
46                        todoStatus('addActivity', 1);
47               
48                        UI.dialogs.addActivity.find('select[name="activityStatus"] option[value="'+1+'"]').attr('selected','selected');
49
50            blkAuto.find('input[name="allDay"]').attr('checked', false);
51
52            return true;
53        }
54
55        for (var i in tasks){
56
57            if(i == 'length')
58                continue;
59                       
60                        statusTasks[tasks[i].status]++;
61                       
62            stTime = Date.parseExact( tasks[i].startDate + " "+$.trim( tasks[i].startHour) , formatString);
63            enTime = Date.parseExact( tasks[i].endDate + " "+$.trim( tasks[i].endHour), formatString );
64           
65            startDate = (startDate && startDate.compareTo(stTime) == -1) ? startDate : stTime;
66            endDate = endDate.compareTo(enTime) == -1 ? enTime : endDate;
67           
68            if(tasks[i].dueDate != ''){
69                pvTime = Date.parseExact( tasks[i].dueDate + " "+$.trim( tasks[i].dueTime), formatString );
70                dueDate = dueDate.compareTo(pvTime) == -1 ? pvTime : dueDate;
71            }
72
73            if(parseInt(tasks[i].percentage) > 0)
74                percentage += parseInt((100 / tasks.length)) * ( parseInt(tasks[i].percentage) / 100);
75        }
76                var statusActivity = 1;
77               
78                if(statusTasks[4] != 0)
79                        statusActivity = 4;
80                else if(statusTasks[2] != 0)
81                        statusActivity = 2;
82                else if(statusTasks[3] == tasks.length)
83                        statusActivity = 3;
84                else if(statusTasks[1] == tasks.length)
85                        statusActivity = 1;
86                else
87                        statusActivity = 2;                     
88                       
89                todoStatus('addActivity', statusActivity);
90               
91                UI.dialogs.addActivity.find('select[name="activityStatus"] option[value="'+statusActivity+'"]').attr('selected','selected');
92               
93        dueDate = dueDate.compareTo(endDate) == -1 ? endDate : dueDate;
94
95        blkAuto.find('input[name="startDate"]').val(startDate.toString(User.preferences.dateFormat ));
96        blkAuto.find('input[name="startHour"]').val(startDate.toString(User.preferences.hourFormat ));
97
98        blkAuto.find('input[name="endDate"]').val(endDate.toString(User.preferences.dateFormat ));
99        blkAuto.find('input[name="endHour"]').val(endDate.toString(User.preferences.hourFormat ));
100
101        blkAuto.find('input[name="dueDate"]').val(dueDate.toString(User.preferences.dateFormat ));
102        blkAuto.find('input[name="dueHour"]').val(dueDate.toString(User.preferences.hourFormat ));
103
104        blkAuto.find('input[name="percentage"]').val(percentage);
105
106        blkAuto.find('input[name="allDay"]').attr('checked', (!!(startDate.compareTo(endDate) == 0) || (startDate.toString('HH:mm') == endDate.toString('HH:mm')) ? true : false));
107    }
108
109
110    var callbackTask = function(){
111
112        blkAddTask.find("li .button").filter(".close.new").button({
113            icons: {
114            primary: "ui-icon-close"
115            },
116            text: false
117        }).click(function () {
118
119            delete tasks[$(this).parents('li').find('input[name="idtask[]"]').val()]
120            tasks.length +=  -1;
121
122            idTaskToActivity = $(this).parents('li').find('input[name="idTaskToActivity[]"]').val()
123
124            if(idTaskToActivity != '')
125                DataLayer.remove('taskToActivity', idTaskToActivity);
126           
127            $(this).parents('li').remove();
128               
129            if(blkAddTask.find(".task-activity-list li").length == 1)
130                blkAddTask.find("li.not-activity    ").removeClass('hidden');
131
132            registerStatus();
133        })
134        .addClass('tiny disable ui-button-disabled ui-state-disabled')
135        .removeClass('new').end()
136
137        .filter(".info.new").button({
138            icons: {
139                primary:  "ui-icon-notice"
140            },
141            text: false
142        }).click(function () {
143            var positionY = $(this).parents("li").offset().top;
144             
145            var name = $(this).parents('li').find("div").find(".name").text();
146            var email = $(this).parents('li').find("div").find(".mail").text()
147                       
148            if( $('.qtip.qtip-blue.qtip-active').val() !== ''){
149                $(this).qtip({
150                    show: {
151                        ready: true,
152                        solo: true,
153                        when: {
154                            event: 'click'
155                        }
156                    },
157                    hide: false,
158                    content: {
159                        text: $('<div></div>').html( DataLayer.render( path + 'templates/activity_information_task.ejs', {
160                            'name' : name
161                        } ) ),
162                        title: {
163                            text:'Informações',
164                            button: '<a class="button close" href="#">close</a>'
165                        }
166                    },
167                style: {
168                    name: 'blue',
169                        tip: {
170                             },
171                        border: {
172                            width: 4,
173                            radius: 8
174                        },
175                        width: {
176                            min: 230,
177                            max:230
178                        }
179                },
180                position: {
181                    corner: {
182                        target: 'rightMiddle',
183                        tooltip: 'leftMiddle'
184                    },
185                    adjust: {
186                        x: 30,
187                        y: 0
188                    }
189                }
190            })
191            .qtip("api").onShow = function(arg0) {
192                $('.qtip-active .button.close').button({
193                    icons: {
194                        primary: "ui-icon-close"
195                    },
196                    text: false
197                })
198                .click(function(){
199                    blkAddAtendee.find('dd.task-activity-list').qtip('destroy');
200                });
201                                       
202                $('.qtip-active .button.cancel').button().click(function(){
203                    blkAddAtendee.find('dd.activity-list [type=checkbox]').attr('checked', false);
204                    blkAddAtendee.find('dd.activity-list').qtip('destroy');
205                });
206
207                $('.qtip .button').button();
208                                       
209            };
210         }             
211     })
212 .addClass('tiny disable ui-button-disabled ui-state-disabled')
213 .removeClass('new').end()   
214
215        UI.dialogs.addActivity.find('.task-activity-list li').hover(
216            function () {
217                $(this).addClass("hover-attendee");
218                $(this).find('.button').removeClass('disable ui-button-disabled ui-state-disabled').end()
219                .find('.activity-options').addClass('hover-attendee');
220            },
221            function () {
222                $(this).removeClass("hover-attendee");
223                $(this).find('.button').addClass('disable ui-button-disabled ui-state-disabled').end()
224                .find('.activity-options').removeClass('hover-attendee');
225            }
226        );       
227    }
228
229
230    /**
231         * canDiscardActivityDialog deve ser true se não houver alterações no evento
232         */
233    canDiscardActivityDialog = true;
234    /**
235         * zebraDiscardActivityDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog)
236         * já está aberta na tela, uma vez que não é possivel acessar o evento ESC utilizado para fechá-la
237         */
238    zebraDiscardActivityDialog = false;
239       
240        var html = DataLayer.render( path+'templates/activity_add.ejs', {
241            activity:objActivity
242        });     
243                       
244        if (!UI.dialogs.addActivity) {
245
246            UI.dialogs.addActivity = jQuery('#sandbox').append('<div title="Criar Atividade" class="new-activity-win active"> <div>').find('.new-activity-win.active').html(html).dialog({
247                resizable: false,
248                modal:true,
249                autoOpen: false,
250                width:735,
251                position: 'center',
252                close: function(event, ui) {
253                        /**
254                         * Remove tooltip possivelmente existente
255                         */
256                        if ($('.qtip.qtip-blue.qtip-active').length)
257                                $('.qtip.qtip-blue.qtip-active').qtip('destroy');                                               
258                       
259                attendees  = {};
260                },
261                beforeClose: function(event, ui) {
262               
263                    if (!canDiscardActivityDialog && !zebraDiscardActivityDialog) {
264                                zebraDiscardActivityDialog = true;
265                                window.setTimeout(function() {
266                                    $.Zebra_Dialog('Suas alterações na atividade não foram salvas. Deseja descartar as alterações?', {
267                                        'type':     'question',
268                                        'overlay_opacity': '0.5',
269                                        'buttons':  ['Descartar alterações', 'Continuar editando'],
270                                        'onClose':  function(clicked) {
271                                            if(clicked == 'Descartar alterações') {
272                                                canDiscardActivityDialog = true;
273                                                /**
274                                                *Remoção dos anexos do eventos caso seja cancelado a edição
275                                                */
276                                                DataLayer.rollback();
277
278                                                var ids = false;
279                                                $.each($('.attachment-list input'), function (i, input) {
280                                                    DataLayer.put('attachment', {id: ''+input.value});
281                                                    DataLayer.remove('attachment', ''+input.value);
282                                                        ids = true;
283                                                });
284                                                if(ids)
285                                                        DataLayer.commit();
286
287                                                UI.dialogs.addActivity.dialog('close');
288                                            }else{
289                                                   zebraDiscardActivityDialog = false;
290                                            }
291                                                                                       
292                                            /**
293                                            * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la
294                                            * com ESC, para que o evento ESC não seja propagado para fechamento da
295                                            * janela de edição de eventos, deve ser setada uma flag indicando que
296                                            * já existe uma janela de confirmação aberta.
297                                            */
298                                            if (!clicked) {
299                                                window.setTimeout(function() {
300                                                    zebraDiscardActivityDialog = false;
301                                                }, 200);
302                                            }
303                                        }
304                            });
305                                                                       
306                        }, 300);
307            }
308            //DataLayer.rollback();
309            return canDiscardActivityDialog;
310        },
311        dragStart: function(event, ui) {
312                if ($('.qtip.qtip-blue.qtip-active').length)
313                        $('.qtip.qtip-blue.qtip-active').qtip('destroy');
314       }
315    });
316                               
317        } else {
318            UI.dialogs.addActivity.html(html);
319        }
320
321/* Checkbox allday */
322UI.dialogs.addActivity.find('input[name="allDay"]').click(function(){
323    $(this).attr("checked") ?
324    UI.dialogs.addActivity.find('.start-time, .end-time').addClass('hidden') :
325    UI.dialogs.addActivity.find('.start-time, .end-time').removeClass('hidden');
326});
327               
328var tabs = UI.dialogs.addActivity.children('.content').tabs({
329        select: function(event, ui) {
330                if ($('.qtip.qtip-blue.qtip-active').length)
331                        $('.qtip.qtip-blue.qtip-active').qtip('destroy');
332        }       
333        });
334
335var group = DataLayer.get('calendar', objActivity.group);
336                               
337if (group.timezone != objActivity.timezone){
338    UI.dialogs.addActivity.find('.group_addactivity_details_lnk_timezone').find('option[value="'+objActivity.timezone+'"]').attr('selected','selected').trigger('change');
339    UI.dialogs.addActivity.find('.group_addactivity_details_lnk_timezone').addClass('hidden');
340    $('.group-addevent-details-txt-timezone').removeClass('hidden');
341                       
342}
343
344UI.dialogs.addActivity.find('.group_addactivity_details_lnk_timezone').click(function(e){
345    $(this).addClass('hidden');
346    $('.group-addactivity-details-txt-timezone').removeClass('hidden');
347    e.preventDefault();
348});
349
350UI.dialogs.addActivity.find('.button.remove').button({
351    text:false,
352    icons:{
353        primary:'ui-icon-close'
354    }
355}).click(function(el){
356    var id;
357    if( id = $(this).parent().find('input[name="alarmId[]"]').val())
358        DataLayer.remove('alarm', id);
359    $(this).parent().remove().find('li').is(':empty');
360});
361
362UI.dialogs.addActivity.find('.button-add-alarms').click(function(){
363            DataLayer.render( 'templates/alarms_add_itemlist.ejs', {type: 0}, function( template ){                     
364            jQuery('.activity-alarms-list').append(template)
365            .find('li:last label:eq(0)').remove().end()
366            .find('.number').numeric().end()
367            .find('.button.remove').button({
368                text:false,
369                icons:{
370                    primary:'ui-icon-close'
371                }
372            }).click(function(el) {
373                $(this).parent().remove();
374            });   
375            });
376        });
377
378/*Seleciona a agenda padrão para visualização/edição de um evento*/
379if(objActivity.id)
380    UI.dialogs.addActivity.find('select[name="group"] option[value="'+objActivity.group+'"]').attr('selected','selected').trigger('change');
381
382UI.dialogs.addActivity.find('.button').button();
383    UI.dialogs.addActivity.find('.button.add').button({
384        icons: {
385           secondary: "ui-icon-plus"
386        }
387});
388
389todoStatus('addActivity', (objActivity.activityStatus != undefined) ? objActivity.activityStatus : 1);
390
391UI.dialogs.addActivity.find('select[name="activityStatus"]').attr('disabled', 'disabled');
392
393// ==== validation events ====
394UI.dialogs.addActivity.find(".input-group .h1").Watermark("Atividade sem título");
395
396UI.dialogs.addActivity.find(".number").numeric();
397
398User.preferences.dateFormat.indexOf('-') > 0 ?
399UI.dialogs.addActivity.find(".date").mask("99-99-9999", {
400    completed:function(){
401        updateMap();
402    }
403}) :
404
405UI.dialogs.addActivity.find(".date").mask("99/99/9999", {
406    completed:function(){
407        updateMap();
408    }
409});
410
411UI.dialogs.addActivity.find(".menu-addactivity")
412.children(".delete").click(function(){
413    $.Zebra_Dialog('Tem certeza que deseja excluir a atividade?', {
414        'type':     'question',
415        'overlay_opacity': '0.5',
416        'buttons':  ['Sim', 'Não'],
417        'onClose':  function(clicked) {
418            if(clicked == 'Sim'){
419                canDiscardActivityDialog = true;
420                /* Remove por filtro */
421                DataLayer.removeFilter('schedulable', {filter: ['AND', ['=', 'id', objActivity.id], ['=', 'group', objActivity.group], ['=','user',(objActivity.me.user ? objActivity.me.user.id : objActivity.me.id)]]});
422                Calendar.rerenderView(true);
423                /********************/
424                UI.dialogs.addActivity.dialog("close");
425            }
426        }
427    });
428}).end()
429           
430.children(".cancel").click(function(){
431    UI.dialogs.addActivity.dialog("close");
432}).end()
433           
434.children(".save").click(function(){
435    /* Validação
436    var msg = false;                   
437    if(msg = validDateEvent()){
438        $(".new-activity-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg);
439        return false;
440    }
441    */
442        UI.dialogs.addActivity.find('select[name="activityStatus"]').removeAttr('disabled');
443    canDiscardActivityDialog = true;
444                       
445        UI.dialogs.addActivity.children().find('form.form-addactivity').submit();
446        UI.dialogs.addActivity.dialog("close");
447
448}).end()
449               
450.children(".export").click(function(){
451    UI.dialogs.addActivity.children().find(".form-export").submit();
452});
453
454var task_activityHtml = DataLayer.render( path+'templates/task_activity_add.ejs', {     activity: objActivity});
455var blkAddTask = UI.dialogs.addActivity.find('#group_addactivity_details8').append(task_activityHtml);
456
457var dates = UI.dialogs.addActivity.find('input.date').datepicker({
458    dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'),
459    onSelect : function( selectedDate ){
460        updateMap();
461    }
462});
463
464blkAddTask.find('.add-activity-search .ui-icon-search').click(function(event) {
465    blkAddTask.find('.add-activity-search input').keydown();
466});
467                       
468                       
469blkAddTask.find('.add-activity-search input').keydown(function(event) {
470
471    if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') {
472    // Fazer get das tarefas   
473        var filter =
474        {
475            filter:
476                ['AND',
477                    ['=', 'type', '2'],
478                    ['>=','startTime', $.now()],
479                    ['in', 'calendar',
480                        [$('div.new-activity-win.active select[name="groupFilter"]').val()]
481                    ]
482                ], criteria: {'filterTasks': true}
483        };
484    if($(this).val() != ''){
485        filter['filter'].push(['OR',
486                            ["i*", "summary", $(this).val()],
487                            ["i*", "description", $(this).val()]
488                           ]);
489    }
490
491    var result = DataLayer.get('schedulable:taskSearch', filter, true)
492        /**
493        * TODO: trocar por template
494        */
495        blkAddTask.find('ul.search-result-list').empty().css('overflow', 'hidden');
496        if (!result) {
497            blkAddTask.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>');
498        }else{
499        for(i=0; i<result.length; i++)
500            result[i].enabled = (blkAddTask.find('dd.task-activity-list ul.task-activity-list input[value="' +  result[i].id + '"]').length) ? false : true;
501                                                                                       
502        blkAddTask.find('ul.search-result-list').append(DataLayer.render( path+'templates/task_search_itemlist.ejs', result));
503
504        /* TODO - Verificar id da aitividade*/
505        blkAddTask.find('ul.search-result-list li').click(function(event, ui){
506            if ($(event.target).is('input')) {
507                old_item = $(event.target).parents('li');
508
509                tasks[old_item.find('[name="id"]').val()] = {
510                    startDate: old_item.find('[name="taskStartDate"]').val(),
511                    startHour: old_item.find('[name="taskStartHour"]').val(),
512                    endDate: old_item.find('[name="taskEndDate"]').val(),
513                    endHour: old_item.find('[name="taskEndHour"]').val(),
514                    dueDate: old_item.find('[name="taskDueDate"]').val(),
515                    dueTime: old_item.find('[name="taskDueTime"]').val(),
516                    allDay: old_item.find('[name="taskAllDay"]').val(),
517                    percentage: old_item.find('[name="taskPercentage"]').val(),
518                    status: old_item.find('[name="taskStatus"]').val()
519                };
520
521                tasks.length += 1;
522                                                               
523                blkAddTask.find('dd.task-activity-list ul.task-activity-list')
524                    .append(DataLayer.render(path+'templates/task_add_itemlist.ejs', [{
525                        idTask: old_item.find('[name="id"]').val(),
526                            description: old_item.find('.description').html()
527                        }]))
528                        .scrollTo('max');
529                callbackTask();
530                registerStatus();
531                blkAddTask.find('.not-activity').addClass('hidden');
532                old_item.remove();
533            }
534        });
535    }
536    event.preventDefault();
537    }
538});
539
540/*Carrega as tarefas já existentes em uma atividade*/
541if(objActivity.tasks.length){
542    tasks = objActivity.tasks;
543
544    for(var i in objActivity.tasks){
545        if(i != 'length')
546            blkAddTask.find('dd.task-activity-list ul.task-activity-list')
547                .append(DataLayer.render(path+'templates/task_add_itemlist.ejs', [{
548                    idTask: i,
549                    description: tasks[i].description,
550                    idTaskToActivity: tasks[i].taskToActivity
551                 }]))
552            .scrollTo('max');
553    }
554
555    callbackTask();
556    registerStatus();
557    blkAddTask.find('.not-activity').addClass('hidden');
558}
559
560UI.dialogs.addActivity.find('.row.fileupload-buttonbar-activity .button').filter('.delete').button({
561    icons: {
562           primary: "ui-icon-close"
563    },
564    text: 'Excluir'
565}).click(function () {
566    $.Zebra_Dialog('Tem certeza que deseja excluir todos anexos?', {
567        'type':     'question',
568        'overlay_opacity': '0.5',
569        'buttons':  ['Sim', 'Não'],
570        'onClose':  function(clicked) {
571            if(clicked == 'Sim'){
572               
573                var ids = [];
574                $.each($('.attachment-list input'), function (i, input) {
575                     DataLayer.remove('schedulableToAttachment', {
576                        filter: ['=', 'id', ''+input.value]
577                        });
578                });
579                $('.attachment-list input').remove();
580                $('.row.fileupload-buttonbar .attachments-list p').remove();
581            }
582        }});
583}).end()
584.filter('.close').button({
585    icons: {
586           primary: "ui-icon-close"
587    },
588    text: false
589}).click(function () {
590    DataLayer.remove('schedulableToAttachment', $(this).parents('p').find('input[name="fileId[]"]').val());
591    $(this).parents('p').remove();
592}).end()
593.filter('.downlaod-archive').button({
594    icons: {
595           primary: "ui-icon-arrowthickstop-1-s"
596    },
597    text: false
598});
599var maxSizeFile = 2000000;
600$('#fileupload').fileupload({
601    sequentialUploads: true,
602    add: function (e, data) {
603        if(data.files[0].size < maxSizeFile)
604            data.submit();
605    },
606    change: function (e, data) {
607        $.each(data.files, function (index, file) {
608            var attach = {};
609            attach.fileName = file.name;
610            var ext = file.name.split('.');
611            if(file.name.length > 10)
612                attach.fileName = ext.length == 1 ? file.name.substr(0, 10) :  file.name.substr(0, 6) + '.' + ext[ext.length -1];
613            attach.fileSize = formatBytes(file.size);
614            if(file.size > maxSizeFile)
615                attach.error = 'Tamanho de arquivo nao permitido!!'
616                               
617            $('.attachments-list').append(DataLayer.render(path+'templates/attachment_add_itemlist.ejs', {
618                file : attach
619            }));
620                               
621            if(file.size < maxSizeFile){
622                $('.fileinput-button.new').append(data.fileInput[0]).removeClass('new');
623                $('.attachments-list').find('[type=file]').addClass('hidden');
624                                       
625            }else
626                $('.fileinput-button.new').removeClass('new');
627                               
628                               
629            $('.attachments-list').find('.button.close').button({
630                icons: {
631                    primary: "ui-icon-close"
632                },
633                text: false
634            }).click(function(){
635                var idAttach = $(this).parent().find('input[name="fileId[]"]').val();
636                $('.attachment-list').find('input[value="'+idAttach+'"]')
637                $(this).parent().remove();
638            });
639                               
640        })
641        },
642    done: function(e, data){
643        var currentUpload = $('.progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide();
644
645        if(!!data.result && data.result != "[]"){
646            var newAttach = (attch = jQuery.parseJSON(data.result)) ? attch : jQuery.parseJSON(data.result[0].activeElement.childNodes[0].data);
647            $('.attachment-list').append('<input tyepe="hidden" name="attachment[]" value="'+newAttach['attachment'][0][0].id+'"/>');
648            currentUpload.removeClass('on-complete').parents('p')
649            .append('<input type="hidden" name="fileId[]" value="'+newAttach['attachment'][0][0].id+'"/>')
650            .find('.status-upload').addClass('ui-icon ui-icon-check');
651        }else
652            currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel');
653        }
654});
655$('.attachments-list .button').button();
656
657if(!!window.FormData)                   
658$('#fileupload').bind('fileuploadstart', function () {
659    var widget = $(this),
660    progressElement = $('#fileupload-progress').fadeIn(),
661    interval = 500,
662    total = 0,
663    loaded = 0,
664    loadedBefore = 0,
665    progressTimer,
666    progressHandler = function (e, data) {
667        loaded = data.loaded;
668        total = data.total;
669    },
670    stopHandler = function () {
671        widget
672        .unbind('fileuploadprogressall', progressHandler)
673        .unbind('fileuploadstop', stopHandler);
674        window.clearInterval(progressTimer);
675        progressElement.fadeOut(function () {
676            progressElement.html('');
677        });
678    },
679    formatTime = function (seconds) {
680        var date = new Date(seconds * 1000);
681        return ('0' + date.getUTCHours()).slice(-2) + ':' +
682        ('0' + date.getUTCMinutes()).slice(-2) + ':' +
683        ('0' + date.getUTCSeconds()).slice(-2);
684    },
685    /* formatBytes = function (bytes) {
686            if (bytes >= 1000000000) {
687                return (bytes / 1000000000).toFixed(2) + ' GB';
688            }
689            if (bytes >= 1000000) {
690                return (bytes / 1000000).toFixed(2) + ' MB';
691            }
692            if (bytes >= 1000) {
693                return (bytes / 1000).toFixed(2) + ' KB';
694            }
695            return bytes + ' B';
696        },*/
697    formatPercentage = function (floatValue) {
698        return (floatValue * 100).toFixed(2) + ' %';
699    },
700    updateProgressElement = function (loaded, total, bps) {
701        progressElement.html(
702            formatBytes(bps) + 'ps | ' +
703            formatTime((total - loaded) / bps) + ' | ' +
704            formatPercentage(loaded / total) + ' | ' +
705            formatBytes(loaded) + ' / ' + formatBytes(total)
706            );
707    },
708    intervalHandler = function () {
709        var diff = loaded - loadedBefore;
710        if (!diff) {
711            return;
712        }
713        loadedBefore = loaded;
714        updateProgressElement(
715            loaded,
716            total,
717            diff * (1000 / interval)
718            );
719    };
720    widget
721    .bind('fileuploadprogressall', progressHandler)
722    .bind('fileuploadstop', stopHandler);
723    progressTimer = window.setInterval(intervalHandler, interval);
724});
725
726UI.dialogs.addActivity.find(':input').change(function(event){
727    if (event.keyCode != '27' && event.keyCode != '13')
728        canDiscardActivityDialog = false;
729}).keydown(function(event){
730    if (event.keyCode != '27' && event.keyCode != '13')
731        canDiscardActivityDialog = false;
732});
733
734UI.dialogs.addActivity.dialog('open');
735}
Note: See TracBrowser for help on using the repository browser.