Dotclear

source: admin/js/_media.js @ 3706:170617361020

Revision 3706:170617361020, 7.3 KB checked in by franck <carnet.franck.paul@…>, 7 years ago (diff)

use strict and no more linter warnings/errors as far as possible

Line 
1/*global $, jQuery, dotclear, template_upload, template_download */
2'use strict';
3
4(function($) {
5  $.fn.enhancedUploader = function() {
6    return this.each(function() {
7      var me = $(this);
8      var $container = $(me).parent();
9
10      function enableButton(button) {
11        button.prop('disabled', false).removeClass('disabled');
12      }
13
14      function disableButton(button) {
15        button.prop('disabled', true).addClass('disabled');
16      }
17
18      function displayMessageInQueue(n) {
19        var msg = '';
20        if (n == 1) {
21          msg = dotclear.jsUpload.msg.file_in_queue;
22        } else if (n > 1) {
23          msg = dotclear.jsUpload.msg.files_in_queue;
24          msg = msg.replace(/%d/, n);
25        } else {
26          msg = dotclear.jsUpload.msg.no_file_in_queue;
27        }
28        $('.queue-message', me).html(msg);
29      }
30
31      $('.button.choose_files').click(function(e) {
32        if ($container.hasClass('enhanced_uploader')) {
33          // Use the native click() of the file input.
34          $('#upfile').click();
35          e.preventDefault();
36        }
37      });
38
39      $('.button.cancel', '#fileupload .fileupload-buttonbar').click(function() {
40        $('.button.cancel', '#fileupload .fileupload-buttonbar').hide();
41        disableButton($('.button.start', '#fileupload .fileupload-buttonbar'));
42        displayMessageInQueue(0);
43      });
44
45      $(me).on('click', '.cancel', function() {
46        if ($('.fileupload-ctrl .files .template-upload', me).length == 0) {
47          $('.button.cancel', '#fileupload .fileupload-buttonbar').hide();
48          disableButton($('.button.start', '#fileupload .fileupload-buttonbar'));
49        }
50        displayMessageInQueue($('.files .template-upload', me).length);
51      });
52
53      $('.button.clean', me).click(function(e) {
54        $('.fileupload-ctrl .files .template-download', me).slideUp(500, function() {
55          $(this).remove();
56        });
57        $(this).hide();
58        e.preventDefault();
59      });
60
61      $(me).fileupload({
62        url: $(me).attr('action'),
63        autoUpload: false,
64        sequentialUploads: true,
65        uploadTemplateId: null,
66        downloadTemplateId: null,
67        uploadTemplate: template_upload,
68        downloadTemplate: template_download
69      }).bind('fileuploadadd', function() {
70        $('.button.cancel').css('display', 'inline-block');
71        $('#fileupload .fileupload-buttonbar').show();
72        enableButton($('.button.start', '#fileupload .fileupload-buttonbar'));
73      }).bind('fileuploadadded', function() {
74        displayMessageInQueue($('.files .template-upload', me).length);
75      }).bind('fileuploaddone', function(e, data) {
76        if (data.result.files[0].html !== undefined) {
77          $('.media-list .files-group').append(data.result.files[0].html);
78          $('#form-medias .hide').removeClass('hide');
79        }
80        $('.button.clean').css('display', 'inline-block');
81        $(me).show();
82      }).bind('fileuploadalways', function() {
83        displayMessageInQueue($('.files .template-upload', me).length);
84        if ($('.fileupload-ctrl .files .template-upload', me).length == 0) {
85          $('.button.cancel', '#fileupload .fileupload-buttonbar').hide();
86          disableButton($('.button.start', '#fileupload .fileupload-buttonbar'));
87        }
88      });
89
90      var $msg, label;
91
92      if ($container.hasClass('enhanced_uploader')) {
93        $msg = dotclear.msg.enhanced_uploader_disable;
94        label = dotclear.jsUpload.msg.choose_files;
95        $(me).fileupload({
96          disabled: false
97        });
98        displayMessageInQueue(0);
99        disableButton($('.button.start', '#fileupload .fileupload-buttonbar'));
100      } else {
101        $msg = dotclear.msg.enhanced_uploader_activate;
102        label = dotclear.jsUpload.msg.choose_file;
103      }
104
105      $('<p class="clear"><button type="button" class="enhanced-toggle">' + $msg + '</button></p>').click(function(e) {
106        if ($container.hasClass('enhanced_uploader')) {
107          $msg = dotclear.msg.enhanced_uploader_activate;
108          label = dotclear.jsUpload.msg.choose_file;
109          $('#upfile').attr('multiple', false);
110          enableButton($('.button.start', '#fileupload .fileupload-buttonbar'));
111
112          // when a user has clicked enhanced_uploader, and has added files
113          // We must remove files in table
114          $('.files .upload-file', me).remove();
115          $('.button.cancel,.button.clean', '#fileupload .fileupload-buttonbar').hide();
116          $(me).fileupload({
117            disabled: true
118          });
119          $('.queue-message', me).html('').hide();
120        } else {
121          $msg = dotclear.msg.enhanced_uploader_disable;
122          label = dotclear.jsUpload.msg.choose_files;
123          $('#upfile').attr('multiple', true);
124          var startButton = $('.button.start');
125          var buttonBar = $('#fileupload .fileupload-buttonbar');
126          disableButton(startButton);
127          disableButton(buttonBar);
128          startButton.css('display', 'inline-block');
129          buttonBar.show();
130          $(me).fileupload({
131            disabled: false
132          });
133          $('.queue-message', me).show();
134          displayMessageInQueue(0);
135        }
136        $(this).find('button').text($msg);
137        $('.add-label', me).text(label);
138
139        $container.toggleClass('enhanced_uploader');
140        e.preventDefault();
141      }).appendTo(me);
142    });
143  };
144})(jQuery);
145
146$(function() {
147  $('#fileupload').enhancedUploader();
148
149  $('.checkboxes-helpers').each(function() {
150    dotclear.checkboxesHelpers(this, undefined, '#form-medias input[type="checkbox"]', '#form-medias #delete_medias');
151  });
152  dotclear.condSubmit('#form-medias input[type="checkbox"]', '#form-medias #delete_medias');
153
154  $('#form-medias #delete_medias').click(function(e) {
155    var count_checked = $('input[name="medias[]"]:checked', $('#form-medias')).length;
156    if (count_checked == 0) {
157      e.preventDefault();
158      return false;
159    }
160    return window.confirm(dotclear.msg.confirm_delete_medias.replace('%d', count_checked));
161  });
162
163  // Preview media
164  $('.modal-image').magnificPopup({
165    type: 'image'
166  });
167
168  // attach media
169  $('#form-medias').on('click', '.media-item .attach-media', function(e) {
170    var parts = $(this).prop('href').split('?');
171    var str_params = parts[1].split('&');
172    var postData = {};
173
174    for (var n = 0; n < str_params.length; n++) {
175      var kv = str_params[n].split('=');
176      postData[kv[0]] = kv[1];
177    }
178    postData.xd_check = dotclear.nonce;
179
180    $.post(parts[0], postData, function(data) {
181      if (data.url !== undefined) {
182        document.location = data.url;
183      }
184    });
185
186    e.preventDefault();
187  });
188
189  // Replace remove links by a POST on hidden form
190  fileRemoveAct();
191
192  function fileRemoveAct() {
193    $('body').on('click', 'a.media-remove', function() {
194      var m_name = $(this).parents('.media-item').find('a.media-link').text();
195      var m_text = '';
196      if ($(this).parents('div.media-folder').length == 0) {
197        m_text = dotclear.msg.confirm_delete_media.replace('%s', m_name);
198      } else {
199        m_text = dotclear.msg.confirm_delete_directory.replace('%s', m_name);
200      }
201      if (window.confirm(m_text)) {
202        var f = $('#media-remove-hide').get(0);
203        f.elements.remove.value = this.href.replace(/^(.*)&remove=(.*?)(&|$)/, '$2');
204        this.href = '';
205        f.submit();
206      }
207      return false;
208    });
209  }
210});
Note: See TracBrowser for help on using the repository browser.

Sites map