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

Revision 6958, 25.9 KB checked in by douglasz, 12 years ago (diff)

Ticket #2966 - Nao permitir editar alguns campos na tela de atividade.

  • 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
373UI.dialogs.addActivity.find('select[name="activityStatus"]').attr('disabled', 'disabled');
374
375// ==== validation events ====
376UI.dialogs.addActivity.find(".input-group .h1").Watermark("Atividade sem título");
377
378UI.dialogs.addActivity.find(".number").numeric();
379
380User.preferences.dateFormat.indexOf('-') > 0 ?
381UI.dialogs.addActivity.find(".date").mask("99-99-9999", {
382    completed:function(){
383        updateMap();
384    }
385}) :
386
387UI.dialogs.addActivity.find(".date").mask("99/99/9999", {
388    completed:function(){
389        updateMap();
390    }
391});
392
393UI.dialogs.addActivity.find(".menu-addactivity")
394.children(".delete").click(function(){
395    $.Zebra_Dialog('Tem certeza que deseja excluir a atividade?', {
396        'type':     'question',
397        'overlay_opacity': '0.5',
398        'buttons':  ['Sim', 'Não'],
399        'onClose':  function(clicked) {
400            if(clicked == 'Sim'){
401                canDiscardActivityDialog = true;
402                /* Remove por filtro */
403                DataLayer.removeFilter('schedulable', {filter: ['AND', ['=', 'id', objActivity.id], ['=', 'group', objActivity.group], ['=','user',(objActivity.me.user ? objActivity.me.user.id : objActivity.me.id)]]});
404                Calendar.rerenderView(true);
405                /********************/
406                UI.dialogs.addActivity.dialog("close");
407            }
408        }
409    });
410}).end()
411           
412.children(".cancel").click(function(){
413    UI.dialogs.addActivity.dialog("close");
414}).end()
415           
416.children(".save").click(function(){
417    /* Validação
418    var msg = false;                   
419    if(msg = validDateEvent()){
420        $(".new-activity-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg);
421        return false;
422    }
423    */
424        UI.dialogs.addActivity.find('select[name="activityStatus"]').removeAttr('disabled');
425    canDiscardActivityDialog = true;
426                       
427        UI.dialogs.addActivity.children().find('form.form-addactivity').submit();
428        UI.dialogs.addActivity.dialog("close");
429
430}).end()
431               
432.children(".export").click(function(){
433    UI.dialogs.addActivity.children().find(".form-export").submit();
434});
435
436var task_activityHtml = DataLayer.render( path+'templates/task_activity_add.ejs', {     activity: objActivity});
437var blkAddTask = UI.dialogs.addActivity.find('#group_addactivity_details8').append(task_activityHtml);
438
439var dates = UI.dialogs.addActivity.find('input.date').datepicker({
440    dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'),
441    onSelect : function( selectedDate ){
442        updateMap();
443    }
444});
445
446blkAddTask.find('.add-activity-search .ui-icon-search').click(function(event) {
447    blkAddTask.find('.add-activity-search input').keydown();
448});
449                       
450                       
451blkAddTask.find('.add-activity-search input').keydown(function(event) {
452
453    if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') {
454    // Fazer get das tarefas   
455        var filter =
456        {
457            filter:
458                ['AND',
459                    ['=', 'type', '2'],
460                    ['>=','startTime', $.now()],
461                    ['in', 'calendar',
462                        [$('div.new-activity-win.active select[name="groupFilter"]').val()]
463                    ]
464                ], criteria: {'filterTasks': true}
465        };
466    if($(this).val() != ''){
467        filter['filter'].push(['OR',
468                            ["i*", "summary", $(this).val()],
469                            ["i*", "description", $(this).val()]
470                           ]);
471    }
472
473    var result = DataLayer.get('schedulable:taskSearch', filter, true)
474        /**
475        * TODO: trocar por template
476        */
477        blkAddTask.find('ul.search-result-list').empty().css('overflow', 'hidden');
478        if (!result) {
479            blkAddTask.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>');
480        }else{
481        for(i=0; i<result.length; i++)
482            result[i].enabled = (blkAddTask.find('dd.task-activity-list ul.task-activity-list input[value="' +  result[i].id + '"]').length) ? false : true;
483                                                                                       
484        blkAddTask.find('ul.search-result-list').append(DataLayer.render( path+'templates/task_search_itemlist.ejs', result));
485
486        /* TODO - Verificar id da aitividade*/
487        blkAddTask.find('ul.search-result-list li').click(function(event, ui){
488            if ($(event.target).is('input')) {
489                old_item = $(event.target).parents('li');
490
491                tasks[old_item.find('[name="id"]').val()] = {
492                    startDate: old_item.find('[name="taskStartDate"]').val(),
493                    startHour: old_item.find('[name="taskStartHour"]').val(),
494                    endDate: old_item.find('[name="taskEndDate"]').val(),
495                    endHour: old_item.find('[name="taskEndHour"]').val(),
496                    dueDate: old_item.find('[name="taskDueDate"]').val(),
497                    dueTime: old_item.find('[name="taskDueTime"]').val(),
498                    allDay: old_item.find('[name="taskAllDay"]').val(),
499                    percentage: old_item.find('[name="taskPercentage"]').val(),
500                    status: old_item.find('[name="taskStatus"]').val()
501                };
502
503                tasks.length += 1;
504                                                               
505                blkAddTask.find('dd.task-activity-list ul.task-activity-list')
506                    .append(DataLayer.render(path+'templates/task_add_itemlist.ejs', [{
507                        idTask: old_item.find('[name="id"]').val(),
508                            description: old_item.find('.description').html()
509                        }]))
510                        .scrollTo('max');
511                callbackTask();
512                registerStatus();
513                blkAddTask.find('.not-activity').addClass('hidden');
514                old_item.remove();
515            }
516        });
517    }
518    event.preventDefault();
519    }
520});
521
522/*Carrega as tarefas já existentes em uma atividade*/
523if(objActivity.tasks.length){
524    tasks = objActivity.tasks;
525
526    for(var i in objActivity.tasks){
527        if(i != 'length')
528            blkAddTask.find('dd.task-activity-list ul.task-activity-list')
529                .append(DataLayer.render(path+'templates/task_add_itemlist.ejs', [{
530                    idTask: i,
531                    description: tasks[i].description,
532                    idTaskToActivity: tasks[i].taskToActivity
533                 }]))
534            .scrollTo('max');
535    }
536
537    callbackTask();
538    registerStatus();
539    blkAddTask.find('.not-activity').addClass('hidden');
540}
541
542UI.dialogs.addActivity.find('.row.fileupload-buttonbar-activity .button').filter('.delete').button({
543    icons: {
544           primary: "ui-icon-close"
545    },
546    text: 'Excluir'
547}).click(function () {
548    $.Zebra_Dialog('Tem certeza que deseja excluir todos anexos?', {
549        'type':     'question',
550        'overlay_opacity': '0.5',
551        'buttons':  ['Sim', 'Não'],
552        'onClose':  function(clicked) {
553            if(clicked == 'Sim'){
554               
555                var ids = [];
556                $.each($('.attachment-list input'), function (i, input) {
557                     DataLayer.remove('schedulableToAttachment', {
558                        filter: ['=', 'id', ''+input.value]
559                        });
560                });
561                $('.attachment-list input').remove();
562                $('.row.fileupload-buttonbar .attachments-list p').remove();
563            }
564        }});
565}).end()
566.filter('.close').button({
567    icons: {
568           primary: "ui-icon-close"
569    },
570    text: false
571}).click(function () {
572    DataLayer.remove('schedulableToAttachment', $(this).parents('p').find('input[name="fileId[]"]').val());
573    $(this).parents('p').remove();
574}).end()
575.filter('.downlaod-archive').button({
576    icons: {
577           primary: "ui-icon-arrowthickstop-1-s"
578    },
579    text: false
580});
581var maxSizeFile = 2000000;
582$('#fileupload').fileupload({
583    sequentialUploads: true,
584    add: function (e, data) {
585        if(data.files[0].size < maxSizeFile)
586            data.submit();
587    },
588    change: function (e, data) {
589        $.each(data.files, function (index, file) {
590            var attach = {};
591            attach.fileName = file.name;
592            var ext = file.name.split('.');
593            if(file.name.length > 10)
594                attach.fileName = ext.length == 1 ? file.name.substr(0, 10) :  file.name.substr(0, 6) + '.' + ext[ext.length -1];
595            attach.fileSize = formatBytes(file.size);
596            if(file.size > maxSizeFile)
597                attach.error = 'Tamanho de arquivo nao permitido!!'
598                               
599            $('.attachments-list').append(DataLayer.render(path+'templates/attachment_add_itemlist.ejs', {
600                file : attach
601            }));
602                               
603            if(file.size < maxSizeFile){
604                $('.fileinput-button.new').append(data.fileInput[0]).removeClass('new');
605                $('.attachments-list').find('[type=file]').addClass('hidden');
606                                       
607            }else
608                $('.fileinput-button.new').removeClass('new');
609                               
610                               
611            $('.attachments-list').find('.button.close').button({
612                icons: {
613                    primary: "ui-icon-close"
614                },
615                text: false
616            }).click(function(){
617                var idAttach = $(this).parent().find('input[name="fileId[]"]').val();
618                $('.attachment-list').find('input[value="'+idAttach+'"]')
619                $(this).parent().remove();
620            });
621                               
622        })
623        },
624    done: function(e, data){
625        var currentUpload = $('.progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide();
626
627        if(!!data.result && data.result != "[]"){
628            var newAttach = (attch = jQuery.parseJSON(data.result)) ? attch : jQuery.parseJSON(data.result[0].activeElement.childNodes[0].data);
629            $('.attachment-list').append('<input tyepe="hidden" name="attachment[]" value="'+newAttach['attachment'][0][0].id+'"/>');
630            currentUpload.removeClass('on-complete').parents('p')
631            .append('<input type="hidden" name="fileId[]" value="'+newAttach['attachment'][0][0].id+'"/>')
632            .find('.status-upload').addClass('ui-icon ui-icon-check');
633        }else
634            currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel');
635        }
636});
637$('.attachments-list .button').button();
638
639if(!!window.FormData)                   
640$('#fileupload').bind('fileuploadstart', function () {
641    var widget = $(this),
642    progressElement = $('#fileupload-progress').fadeIn(),
643    interval = 500,
644    total = 0,
645    loaded = 0,
646    loadedBefore = 0,
647    progressTimer,
648    progressHandler = function (e, data) {
649        loaded = data.loaded;
650        total = data.total;
651    },
652    stopHandler = function () {
653        widget
654        .unbind('fileuploadprogressall', progressHandler)
655        .unbind('fileuploadstop', stopHandler);
656        window.clearInterval(progressTimer);
657        progressElement.fadeOut(function () {
658            progressElement.html('');
659        });
660    },
661    formatTime = function (seconds) {
662        var date = new Date(seconds * 1000);
663        return ('0' + date.getUTCHours()).slice(-2) + ':' +
664        ('0' + date.getUTCMinutes()).slice(-2) + ':' +
665        ('0' + date.getUTCSeconds()).slice(-2);
666    },
667    /* formatBytes = function (bytes) {
668            if (bytes >= 1000000000) {
669                return (bytes / 1000000000).toFixed(2) + ' GB';
670            }
671            if (bytes >= 1000000) {
672                return (bytes / 1000000).toFixed(2) + ' MB';
673            }
674            if (bytes >= 1000) {
675                return (bytes / 1000).toFixed(2) + ' KB';
676            }
677            return bytes + ' B';
678        },*/
679    formatPercentage = function (floatValue) {
680        return (floatValue * 100).toFixed(2) + ' %';
681    },
682    updateProgressElement = function (loaded, total, bps) {
683        progressElement.html(
684            formatBytes(bps) + 'ps | ' +
685            formatTime((total - loaded) / bps) + ' | ' +
686            formatPercentage(loaded / total) + ' | ' +
687            formatBytes(loaded) + ' / ' + formatBytes(total)
688            );
689    },
690    intervalHandler = function () {
691        var diff = loaded - loadedBefore;
692        if (!diff) {
693            return;
694        }
695        loadedBefore = loaded;
696        updateProgressElement(
697            loaded,
698            total,
699            diff * (1000 / interval)
700            );
701    };
702    widget
703    .bind('fileuploadprogressall', progressHandler)
704    .bind('fileuploadstop', stopHandler);
705    progressTimer = window.setInterval(intervalHandler, interval);
706});
707
708UI.dialogs.addActivity.find(':input').change(function(event){
709    if (event.keyCode != '27' && event.keyCode != '13')
710        canDiscardActivityDialog = false;
711}).keydown(function(event){
712    if (event.keyCode != '27' && event.keyCode != '13')
713        canDiscardActivityDialog = false;
714});
715
716UI.dialogs.addActivity.dialog('open');
717}
Note: See TracBrowser for help on using the repository browser.