Dotclear

source: admin/js/_media.js @ 3880:e6d1f6d9d7df

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

Use let and const rather than var (ES2015/ES6), use template string where is more efficient

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      const me = $(this);
8      const $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        let 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      let $msg;
91      let label;
92
93      if ($container.hasClass('enhanced_uploader')) {
94        $msg = dotclear.msg.enhanced_uploader_disable;
95        label = dotclear.jsUpload.msg.choose_files;
96        $(me).fileupload({
97          disabled: false
98        });
99        displayMessageInQueue(0);
100        disableButton($('.button.start', '#fileupload .fileupload-buttonbar'));
101      } else {
102        $msg = dotclear.msg.enhanced_uploader_activate;
103        label = dotclear.jsUpload.msg.choose_file;
104      }
105
106      $(`<p class="clear"><button type="button" class="enhanced-toggle">${$msg}</button></p>`).click(function(e) {
107        if ($container.hasClass('enhanced_uploader')) {
108          $msg = dotclear.msg.enhanced_uploader_activate;
109          label = dotclear.jsUpload.msg.choose_file;
110          $('#upfile').attr('multiple', false);
111          enableButton($('.button.start', '#fileupload .fileupload-buttonbar'));
112
113          // when a user has clicked enhanced_uploader, and has added files
114          // We must remove files in table
115          $('.files .upload-file', me).remove();
116          $('.button.cancel,.button.clean', '#fileupload .fileupload-buttonbar').hide();
117          $(me).fileupload({
118            disabled: true
119          });
120          $('.queue-message', me).html('').hide();
121        } else {
122          $msg = dotclear.msg.enhanced_uploader_disable;
123          label = dotclear.jsUpload.msg.choose_files;
124          $('#upfile').attr('multiple', true);
125          const startButton = $('.button.start');
126          const buttonBar = $('#fileupload .fileupload-buttonbar');
127          disableButton(startButton);
128          disableButton(buttonBar);
129          startButton.css('display', 'inline-block');
130          buttonBar.show();
131          $(me).fileupload({
132            disabled: false
133          });
134          $('.queue-message', me).show();
135          displayMessageInQueue(0);
136        }
137        $(this).find('button').text($msg);
138        $('.add-label', me).text(label);
139
140        $container.toggleClass('enhanced_uploader');
141        e.preventDefault();
142      }).appendTo(me);
143    });
144  };
145})(jQuery);
146
147$(function() {
148  $('#fileupload').enhancedUploader();
149
150  $('.checkboxes-helpers').each(function() {
151    dotclear.checkboxesHelpers(this, undefined, '#form-medias input[type="checkbox"]', '#form-medias #delete_medias');
152  });
153  dotclear.condSubmit('#form-medias input[type="checkbox"]', '#form-medias #delete_medias');
154
155  $('#form-medias #delete_medias').click(function(e) {
156    const count_checked = $('input[name="medias[]"]:checked', $('#form-medias')).length;
157    if (count_checked == 0) {
158      e.preventDefault();
159      return false;
160    }
161    return window.confirm(dotclear.msg.confirm_delete_medias.replace('%d', count_checked));
162  });
163
164  // Preview media
165  $('.modal-image').magnificPopup({
166    type: 'image'
167  });
168
169  // attach media
170  $('#form-medias').on('click', '.media-item .attach-media', function(e) {
171    const parts = $(this).prop('href').split('?');
172    const str_params = parts[1].split('&');
173    let postData = {};
174
175    for (let n = 0; n < str_params.length; n++) {
176      const kv = str_params[n].split('=');
177      postData[kv[0]] = kv[1];
178    }
179    postData.xd_check = dotclear.nonce;
180
181    $.post(parts[0], postData, function(data) {
182      if (data.url !== undefined) {
183        document.location = data.url;
184      }
185    });
186
187    e.preventDefault();
188  });
189
190  // Replace remove links by a POST on hidden form
191  fileRemoveAct();
192
193  function fileRemoveAct() {
194    $('body').on('click', 'a.media-remove', function() {
195      const m_name = $(this).parents('.media-item').find('a.media-link').text();
196      let m_text = '';
197      if ($(this).parents('div.media-folder').length == 0) {
198        m_text = dotclear.msg.confirm_delete_media.replace('%s', m_name);
199      } else {
200        m_text = dotclear.msg.confirm_delete_directory.replace('%s', m_name);
201      }
202      if (window.confirm(m_text)) {
203        const f = $('#media-remove-hide').get(0);
204        f.elements.remove.value = this.href.replace(/^(.*)&remove=(.*?)(&|$)/, '$2');
205        this.href = '';
206        f.submit();
207      }
208      return false;
209    });
210  }
211});
Note: See TracBrowser for help on using the repository browser.

Sites map