Dotclear

source: admin/js/_media.js @ 1724:4cc223c99439

Revision 1724:4cc223c99439, 4.9 KB checked in by Nicolas <nikrou77@…>, 12 years ago (diff)

[Tests] Add tests for media uploader
Refactoring of _media.js : put all code in a jquery plugin to make
it easy to test and to avoid polluting global namespace.
Use same jquery for tests and for admin

Need to add more tests for media uploader
Fix indentation for all js

Line 
1(function($) {
2     $.fn.enhancedUploader = function() {
3          return this.each(function() {
4               var me = $(this);
5
6               function enableButton(button) {
7                    button.prop('disabled',false).removeClass('disabled');
8               }
9
10               function disableButton(button) {
11                    button.prop('disabled',true).addClass('disabled');
12               }
13               
14               function displayMessageInQueue(n) {
15                    var msg = '';
16                    if (n==1) {
17                         msg = dotclear.jsUpload.msg.file_in_queue;
18                    } else if (n>1) {
19                         msg = dotclear.jsUpload.msg.files_in_queue;
20                         msg = msg.replace(/%d/,n);
21                    } else {
22                         msg = dotclear.jsUpload.msg.no_file_in_queue;
23                    }
24                    $('.queue-message',me).html(msg);
25               }
26               
27               $('.button.add').click(function(e) {
28                    // Use the native click() of the file input.
29                    $('#upfile').click();
30                    e.preventDefault();
31               });
32               
33               $('.button.cancel', '#fileupload .fileupload-buttonbar').click(function(e) {
34                    $('.button.cancel','#fileupload .fileupload-buttonbar').hide();
35                    disableButton($('.button.start','#fileupload .fileupload-buttonbar'));
36                    displayMessageInQueue(0);
37               });
38               
39               $('.cancel').live('click', function(e) {
40                    if ($('.fileupload-ctrl .files .template-upload', me).length==0) {
41                         $('.button.cancel','#fileupload .fileupload-buttonbar').hide();
42                         disableButton($('.button.start','#fileupload .fileupload-buttonbar'));
43                    }
44                    displayMessageInQueue($('.files .template-upload',me).length);
45               });
46               
47               $('.button.clean', me).click(function(e) {
48                    $('.fileupload-ctrl .files .template-download', me).slideUp(500, function() {
49                         $(this).remove();
50                    });
51                    $(this).hide();
52                    e.preventDefault();
53               });
54               
55               $(me).fileupload({
56                    url: $(me).attr('action'),
57                    autoUpload: false,
58                    sequentialUploads: true,
59                    uploadTemplateId: null,
60                    downloadTemplateId: null,
61                    uploadTemplate: template_upload,
62                    downloadTemplate: template_download
63               }).bind('fileuploadadd', function(e, data) {
64                    $('.button.cancel','#fileupload .fileupload-buttonbar').show();
65                    enableButton($('.button.start','#fileupload .fileupload-buttonbar'));
66               }).bind('fileuploadadded', function(e, data) {
67                    displayMessageInQueue($('.files .template-upload',me).length);
68               }).bind('fileuploaddone', function(e, data) {
69                    if (data.result.files[0].html !==undefined) {
70                         $('.media-list p.clear').before(data.result.files[0].html);
71                    }
72                    $('.button.clean',me).show();
73               }).bind('fileuploadalways', function(e, data) {
74                    displayMessageInQueue($('.files .template-upload',me).length);
75                    if ($('.fileupload-ctrl .files .template-upload',me).length==0) {
76                         $('.button.cancel','#fileupload .fileupload-buttonbar').hide();
77                         disableButton($('.button.start','#fileupload .fileupload-buttonbar'));
78                    }
79               });
80               
81               var $container = $(me).parent();
82               var $msg,label;
83
84               if ($container.hasClass('enhanced_uploader')) {
85                    $msg = dotclear.msg.enhanced_uploader_disable;
86                    label = dotclear.jsUpload.msg.choose_files;
87                    $(me).fileupload({disabled:false});
88                    displayMessageInQueue(0);
89                    disableButton($('.button.start','#fileupload .fileupload-buttonbar'));
90               } else {
91                    $msg = dotclear.msg.enhanced_uploader_activate;
92                    label = dotclear.jsUpload.msg.choose_file;
93               }
94
95               $('<p class="clear"><a class="enhanced-toggle" href="#">' + $msg + '</a></p>').click(function() {
96                    if ($container.hasClass('enhanced_uploader')) {
97                         $msg = dotclear.msg.enhanced_uploader_activate;
98                         label = dotclear.jsUpload.msg.choose_file;
99                         $('#upfile').attr('multiple', false);
100                         enableButton($('.button.start','#fileupload .fileupload-buttonbar'));
101                         
102                         // when a user has clicked enhanced_uploader, and has added files
103                         // We must remove files in table
104                         $('.files .upload-file', me).remove();
105                         $('.button.cancel,.button.clean','#fileupload .fileupload-buttonbar').hide();
106                         $(me).fileupload({disabled:true});
107                         $('.queue-message',me).html('').hide();
108                    } else {
109                         $msg = dotclear.msg.enhanced_uploader_disable;
110                         label = dotclear.jsUpload.msg.choose_files;
111                         $('#upfile').attr('multiple', true);
112                         var startButton = $('.button.start','#fileupload .fileupload-buttonbar');
113                         disableButton(startButton);
114                         startButton.show();
115                         $(me).fileupload({disabled:false});
116                         $('.queue-message',me).show();
117                         displayMessageInQueue(0);
118                    }
119                    $(this).find('a').text($msg);
120                    $('.add-label', me).text(label);
121                   
122                    $container.toggleClass('enhanced_uploader');
123               }).appendTo(me);
124          });
125     };
126})(jQuery);
127
128
129$(function() {
130     $('#fileupload').enhancedUploader();
131
132     // Replace remove links by a POST on hidden form
133     fileRemoveAct();
134
135     function fileRemoveAct() {
136          $('a.media-remove').live('click', function() {
137               var m_name = $(this).parents('ul').find('li:first>a').text();
138               if (window.confirm(dotclear.msg.confirm_delete_media.replace('%s',m_name))) {
139                    var f = $('#media-remove-hide').get(0);
140                    f.elements['remove'].value = this.href.replace(/^(.*)&remove=(.*?)(&|$)/,'$2');
141                    this.href = '';
142                    f.submit();
143               }
144               return false;
145          });
146     }
147});
Note: See TracBrowser for help on using the repository browser.

Sites map