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

Revision 6951, 25.3 KB checked in by acoutinho, 12 years ago (diff)

Ticket #2966 - Suporte a importacao e exportacao de tarefas / correcoes de bugs

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