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

Revision 6954, 25.8 KB checked in by douglasz, 12 years ago (diff)

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