PluginProbe ʕ •ᴥ•ʔ
Folders – Unlimited Folders to Organize Media Library Folder, Pages, Posts, File Manager / 2.5
Folders – Unlimited Folders to Organize Media Library Folder, Pages, Posts, File Manager v2.5
3.1.9 3.1.8 3.1.7 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 2.9.8 3.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 trunk 1.3.7 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 2.3 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9 2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5 2.6.6 2.6.7 2.6.8 2.6.9 2.7 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8 2.8.1 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9 2.9.1 2.9.2
folders / assets / js / media.js
folders / assets / js Last commit date
custom.js 6 years ago livequery.min.js 6 years ago media.js 6 years ago new-media.js 6 years ago select2.min.js 6 years ago spectrum.min.js 6 years ago
media.js
407 lines
1 (function() {
2 var selectedFolderMediaId = -1;
3 var MediaLibraryOrganizerTaxonomyFilter = wp.media.view.AttachmentFilters.extend({
4 id: 'media-attachment-taxonomy-filter',
5 createFilters: function() {
6 var filters = {};
7 var totalItems = folders_media_options.terms.length;
8 _.each(folders_media_options.terms || {}, function(term, index) {
9 filters[term.term_id] = {
10 text: term.name + ' (' + term.count + ')',
11 props: {
12 'media_folder': term.slug
13 }
14 };
15 });
16 filters.all = {
17 text: 'All Folders',
18 props: {
19 'media_folder': ''
20 },
21 priority: 10
22 };
23 filters.unassigned = {
24 text: '(Unassigned)',
25 props: {
26 'media_folder': "-1"
27 },
28 priority: 10
29 };
30 this.filters = filters;
31 },
32 change: function() {
33 var filters = {};
34 _.each(folders_media_options.terms || {}, function(term, index) {
35 filters[term.term_id] = {
36 text: term.name + ' (' + term.count + ')',
37 props: {
38 'media_folder': term.slug
39 }
40 };
41 });
42 filters.all = {
43 text: 'Select a folder >>',
44 props: {
45 'media_folder': ''
46 },
47 priority: 10
48 };
49 filters.unassigned = {
50 text: '(Unassigned)',
51 props: {
52 'media_folder': "-1"
53 },
54 priority: 10
55 };
56 this.filters = filters;
57 var filter = this.filters[ this.el.value ];
58 if ( filter ) {
59 this.model.set( filter.props );
60 }
61 }
62 });
63
64 var AttachmentsBrowser = wp.media.view.AttachmentsBrowser;
65 wp.media.view.AttachmentsBrowser = wp.media.view.AttachmentsBrowser.extend({
66 createToolbar: function() {
67 AttachmentsBrowser.prototype.createToolbar.call(this);
68 this.toolbar.set('MediaLibraryOrganizerTaxonomyFilter', new MediaLibraryOrganizerTaxonomyFilter({
69 controller: this.controller,
70 model: this.collection.props,
71 priority: -75
72 }).render());
73 }
74 });
75
76 var Query = wp.media.model.Query;
77 _.extend(Query, {
78 get: (function() {
79 var queries = [];
80 return function(props, options) {
81 var args = {},
82 orderby = Query.orderby,
83 defaults = Query.defaultProps,
84 query,
85 cache = false; // Always disable query
86 delete props.query;
87 delete props.cache;
88 _.defaults(props, defaults);
89
90 _.each(['include', 'exclude'], function(prop) {
91 if (props[prop] && !_.isArray(props[prop])) {
92 props[prop] = [props[prop]];
93 }
94 });
95 _.each(props, function(value, prop) {
96 if (_.isNull(value)) {
97 return;
98 }
99 args[Query.propmap[prop] || prop] = value;
100 });
101 _.defaults(args, Query.defaultArgs);
102 args.orderby = orderby.valuemap[props.orderby] || props.orderby;
103 // Disable query caching
104 cache = false;
105 // Search the query cache for a matching query.
106 if (cache) {
107 query = _.find(queries, function(query) {
108 return _.isEqual(query.args, args);
109 });
110 } else {
111 queries = [];
112 }
113 // Otherwise, create a new query and add it to the cache.
114 if (!query) {
115 query = new Query([], _.extend(options || {}, {
116 props: props,
117 args: args
118 }));
119 queries.push(query);
120 }
121 return query;
122 };
123 }())
124 });
125 })(jQuery, _);
126
127 jQuery(document).on("click", ".media-frame-router .media-menu-item", function(){
128 setTimeout(function(){
129 if(lastFolderData.length > 0) {
130 if(jQuery(".folder_for_media option").length != (lastFolderData.length+2)) {
131 var selectedVal = jQuery(".folder_for_media").val();
132 var selectedDD = jQuery(".folder_for_media");
133 selectedDD.html("<option value='-1'>(Unassigned)</option>");
134 for (i = 0; i < lastFolderData.length; i++) {
135 selectedDD.append("<option value='" + lastFolderData[i].term_id + "'>"+lastFolderData[i].name+"</option>");
136 }
137 selectedDD.append("<option value='add-folder'>+ Create a New Folder</option>");
138 if(selectedFolderMediaId != "" && selectedFolderMediaId != null) {
139 selectedDD.val(selectedFolderMediaId);
140 } else {
141 selectedDD.val(selectedVal);
142 }
143 }
144 }
145 }, 100);
146 });
147 var selectedFolderMediaId = -1;
148 var selectedFolderPageID = "all";
149 var filesInQueue = 0;
150 var uploadedFileCount = 0;
151 var lastFolderData = [];
152 jQuery(document).on("change", ".folder_for_media", function(){
153 if(jQuery(this).val() != "add-folder" && jQuery(this).val() != null) {
154 selectedFolderMediaId = jQuery(this).val();
155 } else if(jQuery(this).val() == "add-folder") {
156 selectedFolderMediaId = -1;
157 if(!jQuery("#wcp-content").length) {
158 if(folders_media_options.is_key_active == 0 && folders_media_options.folders >= 10) {
159 if (jQuery("#custom-folder-media-popup-form").length) {
160 jQuery("#custom-folder-media-popup-form").remove();
161 }
162 if (!jQuery("#custom-folder-media-popup-form").length) {
163 jQuery("body").append("<div class='folder-media-popup-form' id='custom-folder-media-popup-form'></div>");
164 jQuery("#custom-folder-media-popup-form").append("<div class='media-popup-form' id='custom-popup-form-content'></div>");
165 jQuery(".media-popup-form").append('<div id="add-update-folder-title" class="add-update-folder-title">You\'ve reached the 10 folder limitation!</div>');
166 jQuery(".media-popup-form").append('<div class="folder-form-message">Unlock unlimited amount of folders by activating your license key.</div>');
167 jQuery(".media-popup-form").append('<div class="folder-form-buttons"><a href="javascript:;" class="remove-media-form">Cancel</a><a href="'+folders_media_options.activate_url+'" target="_blank" class="form-submit-btn" style="width: 145px">Activate your key</button></div>');
168 }
169 } else {
170 if (jQuery("#custom-folder-media-popup-form").length) {
171 jQuery("#custom-folder-media-popup-form").remove();
172 }
173 if (!jQuery("#custom-folder-media-popup-form").length) {
174 jQuery("body").append("<div class='folder-media-popup-form' id='custom-folder-media-popup-form'></div>");
175 jQuery("#custom-folder-media-popup-form").append("<div class='media-popup-form' id='custom-popup-form-content'></div>");
176 jQuery("#custom-popup-form-content").append("<form action='#' id='folder-media-popup-form' method='post'></form>");
177 jQuery("#folder-media-popup-form").append('<div id="add-update-folder-title" class="add-update-folder-title">Add Folder</div>');
178 jQuery("#folder-media-popup-form").append('<div class="folder-form-input"><input id="media-folder-name" autocomplete="off" placeholder="Folder name" class=""></div>');
179 jQuery("#folder-media-popup-form").append('<div class="folder-form-errors" id="media-form-error"><span class="dashicons dashicons-info"></span> Please enter folder name</div>');
180 jQuery("#folder-media-popup-form").append('<div class="folder-form-buttons"><button type="submit" class="form-submit-btn" id="save-media-folder" style="width: 106px">Submit</button><a href="javascript:;" class="remove-media-form">Cancel</a></div>');
181 jQuery("#media-folder-name").focus();
182 }
183 }
184 }
185 }
186
187 if(jQuery(".media-toolbar #media-attachment-taxonomy-filter").length) {
188 jQuery("#media-attachment-taxonomy-filter").val(jQuery(this).val());
189 jQuery("#media-attachment-taxonomy-filter").trigger("change");
190 }
191 });
192
193 jQuery(document).on("change", "#media-attachment-taxonomy-filter", function(){
194 if(jQuery(this).val() != null && jQuery(this).val() != "add-folder") {
195 jQuery(".folder_for_media").val(jQuery(this).val());
196 selectedFolderPageID = jQuery(this).val();
197 selectedFolderMediaId = jQuery(this).val();
198 }
199 });
200
201 function resetDDCounter() {
202 var currentDDVal = jQuery("#media-attachment-taxonomy-filter").val();
203 jQuery.ajax({
204 url: folders_media_options.ajax_url,
205 data: "type=attachment&action=wcp_get_default_list&active_id=0",
206 method: 'post',
207 success: function (res) {
208 res = jQuery.parseJSON(res);
209
210 if(jQuery("#media-attachment-taxonomy-filter").length) {
211 jQuery("#media-attachment-taxonomy-filter").each(function(){
212 folders_media_options.terms = res.taxonomies;
213 var selectedDD = jQuery(this);
214 selectedDD.html("<option value='all'>All Folders</option><option value='unassigned'>(Unassigned)</option>");
215 lastFolderData = res.taxonomies;
216 for (i = 0; i < res.taxonomies.length; i++) {
217 selectedDD.append("<option value='" + res.taxonomies[i].term_id + "'>" + res.taxonomies[i].name + " (" + res.taxonomies[i].count + ")</option>");
218 }
219 selectedDD.val(currentDDVal).trigger("change");
220
221 if(resetMediaID !== false) {
222 selectedDD.val(resetMediaID).trigger("change");
223 }
224 });
225 }
226 resetMediaID = false;
227 }
228 })
229 }
230
231 function resetSelectMediaDropDown() {
232 jQuery.ajax({
233 url: folders_media_options.ajax_url,
234 data: "type=attachment&action=wcp_get_default_list&active_id=0",
235 method: 'post',
236 success: function (res) {
237 res = jQuery.parseJSON(res);
238 if(jQuery(".folder_for_media").length) {
239 if(!jQuery("#wcp-content").length) {
240 var selectedDD = jQuery(".folder_for_media");
241 selectedDD.html("<option value='-1'>(Unassigned)</option>");
242 lastFolderData = res.taxonomies;
243 for (i = 0; i < res.taxonomies.length; i++) {
244 selectedDD.append("<option value='" + res.taxonomies[i].term_id + "'>" + res.taxonomies[i].name + " (" + res.taxonomies[i].count + ")</option>");
245 }
246 selectedDD.append("<option value='add-folder'>+ Create a New Folder</option>");
247 }
248 jQuery("#custom-folder-media-popup-form").remove();
249 }
250 if(!jQuery("#media-attachment-taxonomy-filter").length && resetMediaID != false) {
251 jQuery(".folder_for_media").val(resetMediaID).trigger("change");
252 } else {
253 resetDDCounter();
254 }
255 }
256 });
257 }
258 var wp = window.wp;
259 //Upload on page Media Library (upload.php)
260 if (typeof wp !== 'undefined' && typeof wp.Uploader === 'function') {
261 wp.media.view.Modal.prototype.on('open', function() {
262 setTimeout(function(){
263 if(jQuery("#media-attachment-taxonomy-filter").length) {
264 if(jQuery("#media-attachment-taxonomy-filter").val() == "all") {
265 jQuery("#media-attachment-taxonomy-filter option:gt(1)").remove();
266 _.each(folders_media_options.terms, function(term, index){
267 jQuery("#media-attachment-taxonomy-filter").append("<option value='" + term.term_id + "'>" + term.name + " (" + term.count + ")</option>")
268 });
269 }
270
271 if(!jQuery("#wcp-content").length) {
272 jQuery(".attachment-filters").val(selectedFolderPageID).trigger("change");
273 }
274 }
275 },100);
276 });
277 jQuery.extend(wp.Uploader.prototype, {
278 progress: function () {
279 },
280 init: function () {
281 if (this.uploader) {
282 this.uploader.bind('FileFiltered', function (up, file) {
283 filesInQueue++;
284 jQuery(".folder-meter").css("width", "0%");
285 jQuery(".media-folder-loader").show();
286 jQuery("#total_upload_files").text(filesInQueue);
287 });
288 this.uploader.bind('BeforeUpload', function (uploader, file) {
289 var folder_id = selectedFolderMediaId;
290 var params = uploader.settings.multipart_params;
291 folder_id = parseInt(folder_id);
292 if (folder_id > 0) {
293 params.folder_for_media = folder_id;
294 }
295 if(uploadedFileCount < filesInQueue) {
296 jQuery(".media-folder-loader").show();
297 var progress_width = uploadedFileCount/filesInQueue*100;
298 jQuery(".folder-meter").css("width", progress_width+"%");
299 }
300 uploadedFileCount++;
301 jQuery("#current_upload_files").text(uploadedFileCount);
302
303 });
304 this.uploader.bind('UploadComplete', function (up, files) {
305 selectedFolderMediaId = -1;
306 });
307 this.uploader.bind('UploadComplete', function (up, files) {
308 var wp_media = window.wp;
309
310 jQuery(".folder-meter").css("width", "100%");
311 setTimeout(function(){
312 jQuery(".media-folder-loader").hide();
313 jQuery(".folder-meter").css("width", "0%");
314 filesInQueue = 0;
315 uploadedFileCount = 0;
316 }, 1250);
317
318 resetDDCounter();
319
320 if( wp_media.media.frame.content.get() !== null) {
321 wp_media.media.frame.content.get().collection.props.set({ignore: (+ new Date())});
322 wp_media.media.frame.content.get().options.selection.reset();
323 } else {
324 //wp_media.media.frame.library.props.set ({ignore: (+ new Date())});
325 if(jQuery("#media-attachment-taxonomy-filter").length) {
326 jQuery(".attachment-filters").each(function(){
327 jQuery(this).trigger("change");
328 });
329 }
330 }
331 });
332 }
333 }
334 });
335 }
336
337 jQuery( document ).ajaxComplete(function( event, request, settings ) {
338 if(settings.data != undefined && typeof settings.data == 'string' && settings.data.indexOf("action=delete-post")>-1) {
339 resetDDCounter();
340 }
341 });
342
343 jQuery(document).on("click", "#menu-item-browse", function (e) {
344 setTimeout(function(){
345 if(resetMediaScreen) {
346 resetDDCounter();
347 }
348 }, 100);
349 });
350 var resetMediaScreen = false;
351 var resetMediaID = false;
352 jQuery(document).on("submit", "#folder-media-popup-form", function(){
353 if(jQuery.trim(jQuery("#media-folder-name").val()) == "") {
354 jQuery("#media-form-error").show();
355 jQuery("#media-folder-name").focus();
356 } else {
357 jQuery("button#save-media-folder").html("<span class='spinner-border'></span>");
358 jQuery("button#save-media-folder").attr("disabled", true);
359 var orderNumber = -1;
360 jQuery(".folder_for_media option").each(function(){
361 thisText = jQuery(this).text();
362 if(jQuery.trim(thisText[0]) != "") {
363 orderNumber++;
364 }
365 });
366 jQuery.ajax({
367 url: folders_media_options.ajax_url,
368 data: "action=wcp_add_new_folder&parent_id=0&is_from_media=1&type=attachment&term_id=0&order="+orderNumber+"&name="+jQuery.trim(jQuery("#media-folder-name").val())+"&nonce=" +folders_media_options.nonce,
369 type: 'post',
370 success: function (res) {
371 result = jQuery.parseJSON(res);
372 if (result.status == '1') {
373 resetMediaID = result.id;
374 folders_media_options.is_key_active = result.is_key_active;
375 folders_media_options.folders = result.folders;
376 resetSelectMediaDropDown();
377 resetMediaScreen = true;
378 //resetSelectMediaDropDown();
379 } else {
380 jQuery(".folder-form-errors").html(result.message).show();
381 jQuery("button#save-media-folder").attr("disabled", false);
382 jQuery("button#save-media-folder").html("Submit");
383 }
384 }
385 });
386 }
387 return false;
388 });
389
390 jQuery(document).on("click", ".remove-media-form", function(e){
391 e.stopPropagation();
392 jQuery("#custom-folder-media-popup-form").remove();
393 jQuery(".folder_for_media").val("-1").trigger("change");
394 jQuery("#media-attachment-taxonomy-filter").each(function(){
395 jQuery(this).val("all").trigger("change");
396 });
397 });
398 jQuery(document).on("click", "#custom-folder-media-popup-form", function (e) {
399 jQuery("#custom-folder-media-popup-form").remove();
400 jQuery(".folder_for_media").val("-1").trigger("change");
401 jQuery("#media-attachment-taxonomy-filter").each(function(){
402 jQuery(this).val("all").trigger("change");
403 });
404 });
405 jQuery(document).on("click", ".media-popup-form", function (e) {
406 e.stopPropagation();
407 });