/** * Main WP Media Folder script * It handles the categories filtering */ let wpmfFoldersModule, wpmfAddCloudQueue, cloud_sync_loader_icon; (function ($) { wpmfFoldersModule = { taxonomy: null, // WPMF taxonomy categories_order: null, // Categories ids in order categories: null, // All categories objects media_root: null, // Id of media folder root category relation_category_filter: [], // Relation between categories variable and filter select relation_filter_category: [], // Relation between filter select content and category categories variable last_selected_folder: 0, // Last folder we moved into attachments_browser_initialized: false, // Is the attachment browser already initialized attachments_browser: null, // Variable used to store attachment browser reference to use it later dragging_elements: null, // Variable used to store elements while dragging files or folders hover_image: false, // Do we show or not the image on hover aws3_label: false, // Do we show or not the attachment label hover_images: [], // hover images doing_global_search: false, // Save status of search folder_ordering: 'name-ASC', // Folder ordering page_type: null, // Current page type upload-list, upload-grid editFolderId: 0, // Current folder id to edit or delete ... editFileId: 0, // Current file id to edit folder_search: null, events: [], // event handling upload_folder: null, reload_attachment: true, added_files_length: 0, uploaded_files_length: 0, limit_folders: 400, enable_folders: true, wpmfTotalSize: 0, filesTotal: 0, /** * Retrieve the current displayed frame */ getFrame: function () { if (wpmfFoldersModule.page_type === 'upload-list') { // We're in the list mode return $('.upload-php #posts-filter'); } else { if ($('.media-frame.mode-select[id^="__wp-uploader-id-"]:visible').length) { return $('.media-frame.mode-select[id^="__wp-uploader-id-"]:visible'); } else { return $('[id^="__wp-uploader-id-"]:visible div.media-frame'); } } }, /** * Initialize module related things */ initModule: function () { if (!$('.ju-status-wrap').length) { $(document).on('move_queue_status', function(e, files_length) { if (typeof files_length !== "undefined") { var text = wpmf.l18n.mv_local_cloud_msg.replace('%d', files_length); wpmfSnackbarModule.show({ id: 'move_local_to_cloud', content: text, auto_close: false, is_progress: true, icon: 'sync' }); // call ju queue on builder if (!$('.ju_queue_status').length) { var queue_process = setInterval(function(){ $.ajax({ url : wpmf.vars.ajaxurl, type : 'POST', data : { action: 'ju_queue' }, success : function(data){ $(document).trigger('ju_queue_updated_status', data); if(parseInt(data.queue_length) === 0) { clearInterval(queue_process); } }, error: function () { clearInterval(queue_process); } }); }, 15000); } } }); $(document).on('ju_queue_updated_status', function(e, data) { var text; var htmlString = data.status_html; if (!$('.ju_queue_status_res').length) { var div = document.createElement('div'); div.innerHTML = htmlString.trim(); div.classList.add('ju_queue_status_res_wrap'); div.style.display = 'none'; document.body.appendChild(div); } setTimeout(function () { var move_length = $('.ju_queue_status_res li[data-id="wpmf_move_local_to_cloud"]').length; var delete_length = $('.ju_queue_status_res li[data-id="wpmf_remove_local_file"]').length; if (typeof move_length === "undefined") { move_length = 0; } if (typeof delete_length === "undefined") { delete_length = 0; } if (parseInt(move_length) !== 0 || parseInt(delete_length) !== 0) { if (move_length > delete_length) { text = $('.ju_queue_status_res li[data-id="wpmf_move_local_to_cloud"]').html(); } else { text = $('.ju_queue_status_res li[data-id="wpmf_remove_local_file"]').html(); } wpmfSnackbarModule.show({ id: 'move_local_to_cloud', content: text, auto_close: false, is_progress: true, icon: 'sync' }); } else { wpmfSnackbarModule.close('move_local_to_cloud'); } if ($('.ju_queue_status_res_wrap').length) { $('.ju_queue_status_res_wrap').remove(); } },200); }); } // Retrieve values we'll use wpmfFoldersModule.limit_folders = parseInt(wpmf.vars.limit_folders_number); wpmfFoldersModule.taxonomy = wpmf.vars.taxo; wpmfFoldersModule.categories_order_full = wpmf.vars.wpmf_categories_order; wpmfFoldersModule.categories = wpmf.vars.wpmf_categories; wpmfFoldersModule.categories_order = (wpmfFoldersModule.categories_order_full.length > wpmfFoldersModule.limit_folders) ? wpmfFoldersModule.categories_order_full.slice(0, wpmfFoldersModule.limit_folders) : wpmfFoldersModule.categories_order_full; wpmfFoldersModule.media_root = wpmf.vars.root_media_root; wpmfFoldersModule.show_files_count = parseInt(wpmf.vars.option_countfiles) === 1; wpmfFoldersModule.enable_folders = (wpmfFoldersModule.categories_order_full.length > wpmfFoldersModule.limit_folders) ? 0 : wpmf.vars.enable_folders; // Define the page type if (wpmf.vars.wpmf_pagenow === 'upload.php' && $('#posts-filter input[name="mode"][value="list"]').length && $('#posts-filter .media').length) { wpmfFoldersModule.page_type = 'upload-list'; wpmfFoldersModule.folder_ordering = wpmf.vars.wpmf_order_f; } else if (wpmf.vars.wpmf_pagenow === 'upload.php' && $('#wp-media-grid').length) { wpmfFoldersModule.page_type = 'upload-grid'; } if (wpmf.vars.option_hoverimg === 1) wpmfFoldersModule.hover_image = true; if (wpmf.vars.aws3_label === 1) wpmfFoldersModule.aws3_label = true; const init = function () { const $current_frame = wpmfFoldersModule.getFrame(); // Add remote button if (wpmf.vars.hide_remote_video) { if (wpmf.vars.wpmf_pagenow === 'upload.php') { if (!$('.wpmf_btn_remote_video').length) { $('.page-title-action').after(''+ wpmf.l18n.remote_video +''); wpmfFoldersModule.initRemoteVideo(); } } } if (!$('.wpmf_btn_upload_folder').length) { $('.page-title-action').after(''+ wpmf.l18n.upload_folder_label +''); } // add bulk upload to s3 button if (parseInt(wpmf.vars.copy_files_to_bucket) === 1) { if (!$current_frame.find('.bulk-upload-s3-btn').length) { $current_frame.find('.media-frame-content .media-toolbar-secondary .delete-selected-button').after(''); $('.bulk-upload-s3-btn').on('click', function () { let local_files = []; $('li.attachment.selected').each(function (i, v) { local_files.push($(v).data('id')); }); local_files = local_files.join(); wpmfFoldersModule.uploadFilesToS3(local_files); }); } } // end add bulk upload to s3 button // get last access folder let lastAccessFolder = wpmfFoldersModule.getCookie('lastAccessFolder_' + wpmf.vars.host); if (wpmfFoldersModule.page_type !== 'upload-list') { // Do not add WPMF when editing a gallery if (wp.media.frame !== undefined && wp.media.frame._state === 'gallery-edit') { wpmfFoldersModule.trigger('wpGalleryEdition'); $('ul.attachments .wpmf-attachment:not(.wpmf-new):not(.wpmf-back):not(.ui-droppable)').draggable( 'disable' ); return; } } // Initialize select folder filter wpmfFoldersModule.initLoadingFolder(); // Select the first item of folder filter if (wpmfFoldersModule.page_type !== 'upload-list') { if (typeof lastAccessFolder === "undefined" || (typeof lastAccessFolder !== "undefined" && lastAccessFolder === '') || (typeof lastAccessFolder !== "undefined" && parseInt(lastAccessFolder) === 0) || typeof wpmfFoldersModule.categories[lastAccessFolder] === "undefined") { if (typeof wpmfFoldersModule.relation_category_filter[wpmfFoldersModule.last_selected_folder] === "undefined") { wpmfFoldersModule.changeFolder(wpmfFoldersModule.getCurrentFolderId()); } else { $current_frame.find('#wpmf-media-category').val(wpmfFoldersModule.relation_category_filter[wpmfFoldersModule.last_selected_folder]).trigger('change'); } } else { $current_frame.find('#wpmf-media-category').val(wpmfFoldersModule.relation_category_filter[lastAccessFolder]).trigger('change'); } } // render context menu box wpmfFoldersModule.renderContextMenu(); // render folder permissions wrap wpmfFoldersModule.renderFolderPermissionsWrap(); // Add the breadcrumb if ($current_frame.find('#wpmf-breadcrumb').length === 0) { if (wpmfFoldersModule.page_type !== 'upload-list') { $current_frame.find('.attachments-browser ul.attachments').before(''); } else { $current_frame.find('.tablenav.top').before(''); } } // Initialize some thing for listing page if (wpmfFoldersModule.page_type === 'upload-list') { // Create folder container for list view $current_frame.find('.tablenav.top').before(''); if (typeof lastAccessFolder === "undefined" || (typeof lastAccessFolder !== "undefined" && lastAccessFolder === '') || (typeof lastAccessFolder !== "undefined" && parseInt(lastAccessFolder) === 0)) { wpmfFoldersModule.last_selected_folder = 0; } else { wpmfFoldersModule.last_selected_folder = lastAccessFolder; $('#wpmf-media-category').val(wpmfFoldersModule.last_selected_folder); } // Change the upload href link to add current folder as parameter $('.page-title-action').attr('href', $('.page-title-action').attr('href') + '?wpmf-folder=' + wpmfFoldersModule.last_selected_folder); } if (typeof wpmf.vars.hide_tree === "undefined" || parseInt(wpmf.vars.hide_tree) === 0) { // Remove the loader on list page if (wpmfFoldersModule.page_type === 'upload-list' && !$('.upload-php #posts-filter').hasClass('listview-loaded')) { setTimeout(function () { $('.upload-php #posts-filter').addClass('listview-loaded'); }, 200); } $('.wp-filter').addClass('wpmf-no-tree'); } // Change the upload href link to add current folder as parameter let new_media_url = $('#menu-media').find('a[href="media-new.php"]').attr('href'); $('#menu-media li a[href="media-new.php"]').attr('href', new_media_url + '?wpmf-folder=' + wpmfFoldersModule.last_selected_folder); // Initialize breadcrumb wpmfFoldersModule.updateBreadcrumb(); // check if enable display own media if (typeof lastAccessFolder === "undefined" || (typeof lastAccessFolder !== "undefined" && lastAccessFolder === '') || (typeof lastAccessFolder !== "undefined" && parseInt(lastAccessFolder) === 0)) { // Finally render folders wpmfFoldersModule.renderFolders(); } else { // Finally render folders if (typeof wpmfFoldersModule.categories[parseInt(lastAccessFolder)] !== "undefined") { wpmfFoldersModule.renderFolders(parseInt(lastAccessFolder)); } else { wpmfFoldersModule.renderFolders(); } } if (wpmfFoldersModule.page_type !== 'upload-list') { // Attach event when something is added to the attachments list let timeout; // call drag folderempty attachment wpmfFoldersModule.initializeDragAndDropAttachments(); wpmfFoldersModule.openContextMenuFolder(); // call open context menu when empty attachment $current_frame.find('.attachments-browser ul.attachments').on("DOMNodeInserted", function () { // Wait All DOMInserted events to be thrown before calling the initialization functions window.clearTimeout(timeout); timeout = window.setTimeout(function () { // Hovering image intialization wpmfFoldersModule.initHoverImage(); wpmfFoldersModule.initAttachmentLabelS3(); // open / close context menu box wpmfFoldersModule.openContextMenuFile(); wpmfFoldersModule.openContextMenuFolder(); wpmfFoldersModule.getFrame().find('.attachments-browser ul.attachments .attachment .thumbnail').each(function (e){ var $this = $(this); if ($this.closest('.attachment-preview').hasClass('type-image') && !$this.closest('.attachment.loading').length) { let id = $this.closest('.attachment').data('id'); let cloud_media = wp.media.attachment(id).get('cloud_media'); let url = wp.media.attachment(id).get('url'); if (typeof url !== "undefined") { if (url.indexOf('action=wpmf') !== -1 || url.indexOf('api.onedrive.com') !== -1 || url.indexOf('drive.google.com') !== -1 || url.indexOf('dropbox.com') !== -1) { $this.css('background', 'transparent url(' + wpmf.vars.img_url + 'spinner.gif) center no-repeat'); $this.find('img').on('load', function(){ $this.css('background', 'transparent'); }); } } if (parseInt(cloud_media) === 1) { $this.closest('li').addClass('wpmf_cloud_media').removeClass('wpmf_local_media'); } else { $this.closest('li').removeClass('wpmf_cloud_media').addClass('wpmf_local_media'); } } }); // Attach drag and drop event to the attachments wpmfFoldersModule.initializeDragAndDropAttachments(); }, 300); }); // Add the creation gallery from folder button if (typeof wp.data === "undefined" || (typeof wp.data !== "undefined" && typeof wp.data.select('core/editor') === "undefined")) { wpmfFoldersModule.addCreateGalleryBtn(); } } else { // Attach drag and drop event to the attachments wpmfFoldersModule.initializeDragAndDropAttachments(); // open / close context menu box wpmfFoldersModule.openContextMenuFolder(); } wpmfFoldersModule.trigger('ready', $current_frame); }; if ($('.upload-php #posts-filter input[name="mode"][value="list"]').length) { // Initialize directly in list mode init(); } else { // Initialize folders rendering when the attachment browser is ready if (typeof wp !== "undefined") { if (typeof wp.media !== "undefined" && typeof wp.media.view !== "undefined" && typeof wp.media.view.AttachmentsBrowser !== "undefined") { wp.media.view.AttachmentsBrowser.prototype.on('ready', function () { init(); }); } } } if (wpmfFoldersModule.page_type !== 'upload-list') { // Extend uploader to send some POST datas with the uploaded file if (typeof wp === "undefined") { return; } if (typeof wp.Uploader === "undefined") { return; } var upload_type = 'file'; $.extend(wp.Uploader.prototype, { init: function () { // Add the current wpmf folder to the request this.uploader.bind('BeforeUpload', function (t, e) { e.wpmf_folder = (typeof e.wpmf_folder !== "undefined") ? e.wpmf_folder : wpmfFoldersModule.last_selected_folder; t.settings.multipart_params.wpmf_folder = e.wpmf_folder; var file = e.getSource(); delete this.settings.multipart_params['relativePath']; if (file.relativePath !== '') { this.settings.multipart_params['relativePath'] = file.relativePath; upload_type = 'folder'; } }); this.uploader.bind('FilesAdded', function (up, files) { wpmfFoldersModule.added_files_length = parseInt(wpmfFoldersModule.added_files_length) + files.length; files.forEach((function (t) { t.wpmf_folder = wpmfFoldersModule.last_selected_folder; })) }); this.uploader.bind('FileUploaded', function (up, file, response) { wpmfFoldersModule.uploaded_files_length++; }); // Reload attachments so they can show up if we're inside a folder this.uploader.bind('UploadComplete', function (e, t) { wpmfSnackbarModule.show({ id: 'upload_completed', content: wpmf.l18n.media_uploaded, auto_close_delay: 3000 }); wpmfFoldersModule.added_files_length = 0; wpmfFoldersModule.uploaded_files_length = 0; wpmfFoldersModule.upload_folder = null; wpmfFoldersModule.reloadAttachments(); if (upload_type === 'folder') { upload_type = 'file'; $.ajax({ type: "POST", url: wpmf.vars.ajaxurl, data: { action: "wpmf", task: "reload_folder_tree", wpmf_nonce: wpmf.vars.wpmf_nonce }, success: function (response) { if (response.status) { wpmfFoldersModule.categories = response.categories; wpmfFoldersModule.categories_order = response.categories_order; // Regenerate the folder filter wpmfFoldersModule.initFolderFilter(); // Reload the folders wpmfFoldersModule.renderFolders(); wpmfFoldersModule.trigger('addFolder', ''); } } }); } else { wpmfFoldersModule.renderFolders(); } // Hovering image intialization wpmfFoldersModule.initHoverImage(); wpmfFoldersModule.initAttachmentLabelS3(); if (wpmfFoldersModule.show_files_count) { wpmfFoldersModule.updateCountFiles(wpmfFoldersModule.last_selected_folder); } }); if (wpmfFoldersModule.show_files_count) { jQuery(document).ajaxComplete(function (e, xhs, req) { try { if (req.data.indexOf("action=delete-post") > -1) { if (xhs.responseText == -3) { alert(wpmf.l18n.remove_file_permission_msg); } else { wpmfFoldersModule.trigger('deleteFile', wpmfFoldersModule.last_selected_folder); } } if (req.data.indexOf("action=wpmf&task=delete_file") > -1) { if (xhs.responseText == -3) { alert(wpmf.l18n.remove_file_permission_msg1); } } if (req.data.indexOf("action=save-attachment") > -1) { if (xhs.responseText == -3) { alert(wpmf.l18n.update_file_permission_msg); } } } catch (e) { } }.bind(this)); } } }); // Initialize folders rendering on media modal events let myMediaViewModal = wp.media.view.Modal; if (typeof myMediaViewModal !== "undefined") { wp.media.view.Modal = wp.media.view.Modal.extend({ open: function () { myMediaViewModal.prototype.open.apply(this, arguments); if (wpmf.vars.wpmf_pagenow !== 'upload.php') { if (typeof ElementorConfig !== "undefined" || typeof DIVI !== "undefined" || wpmf.vars.wpmf_pagenow === 'customize.php') { wpmfFoldersModule.reloadAttachments(); } } if (typeof wp.media.frame !== "undefined") { wp.media.frame.on('router:render:browse', function () { init(); }); wp.media.frame.on('content:activate:browse', function () { init(); }); } else { wpmfFoldersModule.renderFolders(); } } }); } // Hide create gallery button if attachments are selected if (typeof wpmf.vars.usegellery !== "undefined" && parseInt(wpmf.vars.usegellery) === 1) { let myMediaViewToolbar = wp.media.view.Toolbar; if (typeof myMediaViewToolbar !== "undefined") { wp.media.view.Toolbar = wp.media.view.Toolbar.extend({ refresh: function () { myMediaViewToolbar.prototype.refresh.apply(this, arguments); let state = this.controller.state(), selection = state.get('selection'); if (typeof state !== "undefined" && typeof selection !== "undefined") { if (selection.length === 0) { $('.btn-selectall,.btn-selectall-gallery').show(); $('.media-button-gallery').hide(); } else { $('.btn-selectall,.btn-selectall-gallery').hide(); $('.media-button-gallery').show(); } } } }); } } let myMediaControllerCollectionEdit = wp.media.controller.CollectionEdit; if (typeof myMediaControllerCollectionEdit !== "undefined") { wp.media.controller.CollectionEdit = wp.media.controller.CollectionEdit.extend({ activate: function () { myMediaControllerCollectionEdit.prototype.activate.apply(this, arguments); }, deactivate: function () { myMediaControllerCollectionEdit.prototype.deactivate.apply(this, arguments); } }); } // display folder on feature image let myMediaControllerFeaturedImage = wp.media.controller.FeaturedImage; if (typeof myMediaControllerFeaturedImage !== "undefined") { wp.media.controller.FeaturedImage = wp.media.controller.FeaturedImage.extend({ updateSelection: function () { myMediaControllerFeaturedImage.prototype.updateSelection.apply(this, arguments); wpmfFoldersModule.renderFolders(); } }); } // Create and initialize select filter used to filter by folder wpmfFoldersModule.initFolderFilter(); // Add button to the uploader content page let myMediaViewToolbar = wp.media.view.UploaderInline; if (typeof myMediaViewToolbar !== "undefined") { wp.media.view.UploaderInline = wp.media.view.UploaderInline.extend({ ready: function () { myMediaViewToolbar.prototype.ready.apply(this, arguments); // Add remote video button if (wpmf.vars.hide_remote_video) { if (!this.$el.find('.wpmf_btn_remote_video').length) { this.$el.find('.upload-ui button').after(''); wpmfFoldersModule.initRemoteVideo(); } } // render folder tree in left menu if (typeof wpmf.vars.hide_tree !== "undefined" && parseInt(wpmf.vars.hide_tree) === 1) { wpmfFoldersTreeModule.initModule(wpmfFoldersModule.getFrame()); } if (wpmf.vars.wpmf_pagenow !== 'upload.php') { if (!this.$el.find('.wpmf_msg_upload_folder').length) { let bread = ''; let lastAccessFolder = wpmfFoldersModule.getCookie('lastAccessFolder_' + wpmf.vars.host); if (typeof lastAccessFolder === "undefined" || (typeof lastAccessFolder !== "undefined" && lastAccessFolder === '') || (typeof lastAccessFolder !== "undefined" && parseInt(lastAccessFolder) === 0) || typeof wpmfFoldersModule.categories[lastAccessFolder] === "undefined") { bread = wpmfFoldersModule.getBreadcrumb(); } else { bread = wpmfFoldersModule.getBreadcrumb(lastAccessFolder); } this.$el.find('.post-upload-ui').after('

' + wpmf.l18n.msg_upload_folder + '' + bread + '

'); } } } }); } // Manage reset iframe wp.Uploader.queue.on('reset', function () { // remove attachment loading wpmfFoldersModule.wpmfTotalSize = 0; $('.attachment.loading').remove(); if (!$('.wpmf-process-file-item.wpmf-uploading').length) { $('.wpmf-process-lists').remove(); wpmfFoldersModule.wpmfTotalSize = 0; wpmfFoldersModule.filesTotal = 0; } }); // Manage adding an uploaded file wp.Uploader.queue.on('add', function (file_info) { if (parseInt(wpmf.vars.wpmf_post_type) !== 1 || !$('#wpb_visual_composer').is(":visible")) { if (typeof wp.media.frame !== 'undefined' && typeof wp.media.frame._state !== 'undefined' && wp.media.frame._state !== 'featured-image') { // Create the download attachment wpmfFoldersModule.getFrame().find('.attachments-browser .attachments').prepend('
  • '); } } if (!$('.wpmf-process-lists').length) { $('body').append(`
    ${wpmf.l18n.uploaded} 0 / 0
    ${wpmf.l18n.upload_text}
    expand_more close
    ${wpmf.l18n.total_size} 0
    `); $('.wpmf-head-upload-action-close').unbind('click').bind('click', function () { $('.wpmf-process-lists').remove(); wpmfFoldersModule.wpmfTotalSize = 0; wpmfFoldersModule.filesTotal = 0; }); $('.wpmf-head-upload-action-expand').unbind('click').bind('click', function () { $('.wpmf-process-body').toggleClass('hide'); }); } wpmfFoldersModule.wpmfTotalSize = parseInt(wpmfFoldersModule.wpmfTotalSize); wpmfFoldersModule.wpmfTotalSize = wpmfFoldersModule.wpmfTotalSize + file_info.attributes.file.size; $('.wpmf-upload-total-size').html(wpmfFoldersModule.formatBytes(wpmfFoldersModule.wpmfTotalSize)); if (parseInt(wpmf.vars.wpmf_post_type) !== 1 || !$('#wpb_visual_composer').is(":visible")) { if (typeof wp.media.frame !== 'undefined' && typeof wp.media.frame._state !== 'undefined') { let type = file_info.attributes.file.type; let icon = ''; if (type.indexOf('image') != -1) { icon = ' image '; } else { icon = ' description '; } let item = wpmfFoldersModule.getUploadItemTemplate(file_info.attributes.file.id, file_info.attributes.file.name, icon); // Create the download attachment if ($('.wpmf-process-body ul li').length) { $('.wpmf-process-body ul').append(item); } else { $('.wpmf-process-body ul').html(item); } } } }); // Get upload progress infos let myMediaUploaderStatus = wp.media.view.UploaderStatus; if (typeof myMediaUploaderStatus !== "undefined") { wp.media.view.UploaderStatus = wp.media.view.UploaderStatus.extend({ progress: function (file_info) { // Call parent function myMediaUploaderStatus.prototype.progress.apply(this, arguments); // This is not a uploading update if (file_info === undefined || file_info.changed === undefined || file_info.changed.percent === undefined) { return; } if (typeof wp.media.frame !== 'undefined' && typeof wp.media.frame._state !== 'undefined' && wp.media.frame._state !== 'featured-image') { // Update the uploaded percentage for this file $('li.attachment[data-cid=' + file_info.attributes.file.id + '] .media-progress-bar > div').css({'width': file_info.changed.percent + '%'}); } if (typeof wp.media.frame !== 'undefined' && typeof wp.media.frame._state !== 'undefined') { // Update the uploaded percentage for this file var file_id = file_info.attributes.file.id; if (file_info.changed.percent >= 100) { $('.wpmf-process-file-item[data-cid=' + file_id + '] .wpmf-fileupload-progress-bar').css({'background': 'none'}); $('.wpmf-process-file-item[data-cid=' + file_id + '] .wpmf-fileupload-progress-bar').html(''); $('.wpmf-process-file-item[data-cid="'+ file_id +'"]').removeClass('wpmf-uploading'); } else { $('.wpmf-process-file-item[data-cid=' + file_id + '] .wpmf-fileupload-progress-bar').css({'background': 'radial-gradient(closest-side, white 70%, transparent 80% 100%), conic-gradient(#0073ab '+ file_info.changed.percent +'%, #ddd 0)'}); } } }, info: function () { myMediaUploaderStatus.prototype.info.apply(this, arguments); var queue = this.queue, index = 0, active; if (!queue.length) { return; } active = this.queue.find(function (attachment, i) { index = i; return attachment.get('uploading'); }); var total = wpmfFoldersModule.filesTotal + queue.length; if (this.$index && this.$total && this.$filename) { $('.wpmf-upload-completed').text(index + 1); $('.wpmf-upload-total').text(total); } var completed = $('.wpmf-upload-completed').html(); if (completed == '') { completed = 0; } var completed_process = parseInt(completed) / total * 100; $('.wpmf-process-head-bar').css('width', completed_process + '%'); }, error: function (error) { if (error.get('message') === wpmf.l18n.error_replace) { $('.upload-errors').addClass('wpmferror_replace'); wp.Uploader.queue.reset(); } myMediaUploaderStatus.prototype.error.apply(this, arguments); } }); } } wpmfFoldersModule.trigger('afterFiltersInitialization'); }, formatBytes: function (bytes, decimals = 2) { if (!+bytes) return '0 Bytes'; const k = 1024; const dm = decimals < 0 ? 0 : decimals; const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`; }, /** * Get backbone of media */ getBackboneOfMedia: function(c = false) { let t, a, n = wpmfFoldersModule.getFrame().parents(".media-modal:visible"); return a = ((t = n.length > 0 && !c) ? n.find(".attachments-browser") : $(".media-frame-content .attachments-browser")).data("backboneView"), { browser: $('.attachments-browser'), view: a } }, /** * Create the folder/taxonomy filtering */ initFolderFilter: function () { /** * We extend the AttachmentFilters view to add our own filtering */ if (typeof wp.media.view.AttachmentFilters !== "undefined") { wp.media.view.AttachmentFilters['wpmf_categories'] = wp.media.view.AttachmentFilters.extend({ className: 'wpmf-media-categories attachment-filters', id: 'wpmf-media-category', createFilters: function () { let filters = {}; let ij = 0; let space = '  '; _.each(wpmfFoldersModule.categories_order || [], function (key) { let term = wpmfFoldersModule.categories[key]; if (typeof term !== "undefined") { if (parseInt(wpmfFoldersModule.media_root) !== parseInt(term.id)) { let query = { taxonomy: wpmfFoldersModule.taxonomy, term_id: parseInt(term.id, 10), term_slug: term.slug, wpmf_taxonomy: 'true', wpmf_nonce: wpmf.vars.wpmf_nonce }; if (typeof term.depth === 'undefined') { term.depth = 0; } filters[ij] = { text: space.repeat(term.depth) + term.label, props: query }; wpmfFoldersModule.relation_category_filter[term.id] = ij; wpmfFoldersModule.relation_filter_category[ij] = term.id; ij++; } } }); this.filters = filters; } }); } // render filter let myAttachmentsBrowser = wp.media.view.AttachmentsBrowser; if (typeof myAttachmentsBrowser !== "undefined") { wp.media.view.AttachmentsBrowser = wp.media.view.AttachmentsBrowser.extend({ createToolbar: function () { this.$el.data("backboneView", this); wp.media.model.Query.defaultArgs.filterSource = 'filter-attachment-category'; myAttachmentsBrowser.prototype.createToolbar.apply(this, arguments); //Save the attachments because we'll need it to change the category filter wpmfFoldersModule.attachments_browser = this; this.toolbar.set(wpmfFoldersModule.taxonomy, new wp.media.view.AttachmentFilters['wpmf_categories']({ controller: this.controller, model: this.collection.props, priority: -75 }).render() ); }, // Add video icon for each remote video attachment updateContent: function () { myAttachmentsBrowser.prototype.updateContent.apply(this, arguments); wpmfFoldersModule.getFrame().find('.attachments-browser .attachment').each(function (i, v) { const id_img = $(v).data('id'); if (parseInt(wp.media.attachment(id_img).get('is_video')) === 1) { if ($('li.attachment[data-id="' + id_img + '"] .attachment-preview .wpmf_remote_video').length === 0) { $('li.attachment[data-id="' + id_img + '"] .attachment-preview').append('play_circle_filled'); } } }); } }); } // If the filter has already been rendered, force it to be reloaded if (wpmfFoldersModule.attachments_browser !== null) { // Remove previous filter wpmfFoldersModule.getFrame().find('#wpmf-media-category').remove(); // Regenerate filter wpmfFoldersModule.attachments_browser.toolbar.set(wpmfFoldersModule.taxo, new wp.media.view.AttachmentFilters['wpmf_categories']({ controller: wpmfFoldersModule.attachments_browser.controller, model: wpmfFoldersModule.attachments_browser.collection.props, priority: -75 }).render() ); wpmfFoldersModule.initLoadingFolder(); } // order image gallery let myMediaControllerGalleryEdit = wp.media.controller.GalleryEdit; if (typeof myMediaControllerGalleryEdit !== "undefined") { wp.media.controller.GalleryEdit = wp.media.controller.GalleryEdit.extend({ gallerySettings: function (browser) { // Apply original method myMediaControllerGalleryEdit.prototype.gallerySettings.apply(this, arguments); var library = this.get('library'); browser.toolbar.set('wpmf_reverse_gallery', { text: 'Order by', priority: 70, click: function () { /* Sort images gallery by setting */ var lists_i = library.toArray(); var listsId = []; var wpmf_orderby = $('.wpmf_orderby').val(); var wpmf_order = $('.wpmf_order').val(); $.each(lists_i, function (i, v) { listsId.push(v.id); }); var wpmf_img_order = []; $.ajax({ method: "POST", dataType: 'json', url: wpmf.vars.ajaxurl, data: { action: "wpmf", ids: listsId, wpmf_orderby: wpmf_orderby, wpmf_order: wpmf_order, task: "gallery_get_image", wpmf_nonce: wpmf.vars.wpmf_nonce }, success: function (res) { if (res !== false) { $.each(res, function (i, v) { $.each(lists_i, function (k, h) { if (h.id === v.ID) wpmf_img_order.push(h); }); }); library.reset(wpmf_img_order); } } }); } }); } }); } // Reload folders after searching let mySearch = wp.media.view.Search; let search_initialized = false; if (typeof mySearch !== "undefined") { wp.media.view.Search = wp.media.view.Search.extend({ search: function (event) { // Apply original method mySearch.prototype.search.apply(this, arguments); // Register on change event if not already done if (!search_initialized) { this.model.on('change', function () { wpmfFoldersModule.renderFolders(); }); // Prevent to register the function on the event each time search is called search_initialized = true; } } }); } }, setFolderOrdering: function (ordering) { wpmfFoldersModule.folder_ordering = ordering; // Rerender folders wpmfFoldersModule.renderFolders(); }, /** * Force attachments to be reloaded in the current view */ reloadAttachments: function (c = false) { // Force reloading files let n = wpmfFoldersModule.getBackboneOfMedia(c); if (n.browser.length > 0 && "object" == typeof n.view) try { n.view.collection.props.set({ignore: +new Date}) } catch (e) {} $("#wpmf_preview_image").remove(); }, /** * Initialize the events on which the folders should be reloaded */ initLoadingFolder: function () { wpmfFoldersModule.getFrame().find('#wpmf-media-category').on('change', function () { if (wpmfFoldersModule.page_type === 'upload-list') { // In list view submit filter form $('.upload-php #posts-filter').submit(); } else { wpmfFoldersModule.renderFolders(wpmfFoldersModule.relation_filter_category[$(this).val()]); wpmfFoldersModule.updateBreadcrumb(wpmfFoldersModule.relation_filter_category[$(this).val()]); // set cookie last access folder if (typeof wpmfFoldersModule.relation_filter_category[$(this).val()] === "undefined") { wpmfFoldersModule.setCookie('lastAccessFolder_' + wpmf.vars.host, 0, 365); } else { wpmfFoldersModule.setCookie('lastAccessFolder_' + wpmf.vars.host, wpmfFoldersModule.relation_filter_category[$(this).val()], 365); } // Trigger change changeFolder event for other modules wpmfFoldersModule.trigger('changeFolder', wpmfFoldersModule.relation_filter_category[$(this).val()]); } }); }, /** * set a cookie * @param cname cookie name * @param cvalue cookie value * @param exdays */ setCookie: function (cname, cvalue, exdays) { let d = new Date(); d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); let expires = "expires=" + d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; }, /** * get a cookie * @param cname cookie name * @returns {*} */ getCookie: function (cname) { let name = cname + "="; let ca = document.cookie.split(';'); for (let i = 0; i < ca.length; i++) { let c = ca[i]; while (c.charAt(0) === ' ') { c = c.substring(1); } if (c.indexOf(name) === 0) { return c.substring(name.length, c.length); } } return ""; }, /** * Move into the term_id folder * It will change the selected option in the filter * This will update the attachments and render the folders * * @param term_id */ changeFolder: function (term_id) { // set cookie last access folder if (typeof term_id === "undefined") { wpmfFoldersModule.setCookie('lastAccessFolder_' + wpmf.vars.host, 0, 365); } else { wpmfFoldersModule.setCookie('lastAccessFolder_' + wpmf.vars.host, term_id, 365); } // Select the filter folder if (wpmfFoldersModule.page_type === 'upload-list') { wpmfFoldersModule.getFrame().find('#wpmf-media-category').val(term_id).trigger('change'); } else { wpmfFoldersModule.getFrame().find('#wpmf-media-category').val(wpmfFoldersModule.relation_category_filter[term_id]).trigger('change'); } $('#menu-media li a[href^="media-new.php"]').attr('href', wpmf.vars.media_new_url + '?wpmf-folder=' + term_id); $("#wpmf_preview_image").remove(); if (wpmfFoldersModule.page_type !== 'upload-list') { if (wpmfFoldersModule.getFrame().find('.wpmf-order-media').val() === 'custom' || !wpmfFoldersModule.reload_attachment) { wpmfFoldersModule.reloadAttachments(); wpmfFoldersModule.reload_attachment = true; } } }, /** * Generate the html tag for a folder attachment * * @param type string type of folder * @param name string folder name * @param term_id int folder term id * @param parent_id int folder parent id * * @return {string} the string that contains the single folder attachment rendered */ getFolderRendering: function (type, name, term_id, parent_id) { let buttons = ''; let class_names = ''; let main_icon = ''; let action = ''; if (type === 'folder') { // This is a folder buttons = ` `; class_names = 'wpmf-folder'; action = 'onclick="wpmfFoldersModule.changeFolder(' + term_id + ');"'; main_icon = 'folder'; if (wpmfFoldersModule.categories[term_id].drive_type === 'google_drive') { main_icon = ''; class_names += ' wpmf_drive_folder'; } if (wpmfFoldersModule.categories[term_id].drive_type === 'dropbox') { main_icon = ''; class_names += ' wpmf_drive_folder'; } let odvColor = '#8f8f8f'; if (wpmfFoldersModule.categories[term_id].drive_type === 'onedrive' || wpmfFoldersModule.categories[term_id].drive_type === 'onedrive_business') { if (typeof wpmf.vars.colors !== 'undefined' && typeof wpmf.vars.colors[term_id] !== 'undefined' && type === 'folder') { odvColor = wpmf.vars.colors[term_id]; } } if (wpmfFoldersModule.categories[term_id].drive_type === 'onedrive') { main_icon = `icon`; class_names += ' wpmf_drive_folder'; } if (wpmfFoldersModule.categories[term_id].drive_type === 'onedrive_business') { main_icon = `icon`; class_names += ' wpmf_drive_folder'; } if (wpmfFoldersModule.categories[term_id].drive_type === 'nextcloud') { main_icon = ''; class_names += ' wpmf_drive_folder'; } if (wpmfFoldersModule.categories[term_id].drive_type !== 'google_drive' && wpmfFoldersModule.categories[term_id].drive_type !== 'dropbox' && wpmfFoldersModule.categories[term_id].drive_type !== 'onedrive' && wpmfFoldersModule.categories[term_id].drive_type !== 'onedrive_business' && wpmfFoldersModule.categories[term_id].drive_type !== 'nextcloud') { class_names += ' wpmf_local_media'; } } else if (type === 'back') { // This is a back folder class_names = 'wpmf-folder wpmf-back'; main_icon = ' keyboard_arrow_left '; action = 'onclick="wpmfFoldersModule.changeFolder(' + term_id + ');"'; } else if (type === 'new') { // This is a create new folder button class_names = 'wpmf-new'; main_icon = 'create_new_folder'; action = 'onclick="wpmfFoldersModule.newFolder(' + term_id + ');"'; } else if (type === 'line break') { class_names = 'wpmf-line-break'; } // get color folder let bgcolor = 'color: #8f8f8f'; if (typeof wpmf.vars.colors !== 'undefined' && typeof wpmf.vars.colors[term_id] !== 'undefined' && type === 'folder') { bgcolor = 'color: ' + wpmf.vars.colors[term_id]; } if (class_names === 'wpmf-line-break') { return `
  • ` } return `
  • ${main_icon} ${name}
  • ` }, /** * Update count files in folder * @param term_id */ updateCountFiles: function (term_id) { $.ajax({ type: "POST", url: wpmf.vars.ajaxurl, data: { action: "wpmf", task: "getcountfiles", term_id: term_id, wpmf_nonce: wpmf.vars.wpmf_nonce }, success: function (response) { if (response.status) { wpmfFoldersModule.categories[term_id].files_count = parseInt(response.count); wpmfFoldersModule.trigger('foldersCountChanged'); } } }); }, /** * Render the folders to the attachments listing * * @param term_id */ renderFolders: function (term_id) { if (parseInt(wpmfFoldersModule.enable_folders) === 0) { // return if disable show folders option return; } if (typeof term_id === "undefined") { // check if enable display own media if (typeof wpmfFoldersModule.categories[wpmfFoldersModule.last_selected_folder] === "undefined") { wpmfFoldersModule.last_selected_folder = 0; wpmfFoldersModule.changeFolder(0); } term_id = wpmfFoldersModule.last_selected_folder; } else { // Let's save this term as the last used one wpmfFoldersModule.last_selected_folder = term_id; } // Retrieve current frame const $frame = wpmfFoldersModule.getFrame(); // Retrieve the attachments container let $attachments_container; if (wpmfFoldersModule.page_type === 'upload-list') { $attachments_container = $frame.find('ul.attachments'); } else { $attachments_container = $frame.find('.attachments-browser ul.attachments'); } // Remove previous folders $attachments_container.find('.wpmf-attachment, .wpmf-line-break').remove(); // Retrieve the folders that may be added to current view let folders_ordered = []; // get search keyword let search = $('.wpmf_search_folder').val(); wpmfFoldersModule.folder_search = []; if (typeof search === "undefined") { search = ''; } else { search = search.trim().toLowerCase(); } for (let folder_id in wpmfFoldersModule.categories) { if (search === '') { if (wpmfFoldersModule.categories[folder_id].id !== 0 && // We don't show the root folder wpmfFoldersModule.categories[folder_id].parent_id === term_id // We only show folders of the current parent ) { folders_ordered.push(wpmfFoldersModule.categories[folder_id]); } } else { search = search.trim().toLowerCase(); let folder_name = wpmfFoldersModule.categories[folder_id].lower_label; // check folder name with search keyword if (folder_name.indexOf(search) !== -1 && wpmfFoldersModule.categories[folder_id].parent_id === term_id && wpmfFoldersModule.categories[folder_id].id !== 0) { folders_ordered.push(wpmfFoldersModule.categories[folder_id]); } if (folder_name.indexOf(search) !== -1) { wpmfFoldersModule.folder_search.push(folder_id); } } } let folder_order = wpmfFoldersModule.getCookie('media-order-folder' + wpmf.vars.host); if (typeof folder_order !== "undefined") { wpmfFoldersModule.folder_ordering = folder_order; } // Order folders switch (wpmfFoldersModule.folder_ordering) { default: case 'name-ASC': folders_ordered = folders_ordered.sort(function (a, b) { return a.label.localeCompare(b.label); }); break; case 'name-DESC': folders_ordered = folders_ordered.sort(function (a, b) { return b.label.localeCompare(a.label); }); break; case 'id-ASC': folders_ordered = folders_ordered.sort(function (a, b) { return a.id - b.id }); break; case 'id-DESC': folders_ordered = folders_ordered.sort(function (a, b) { return b.id - a.id }); break; case 'custom': folders_ordered = folders_ordered.sort(function (a, b) { return a.order - b.order }); break; } // Add each folder to the attachments listing $(folders_ordered).each(function () { // Get the formatted folder for the attachment listing if (parseInt(wpmf.vars.hide_tree) === 1) { if (this.drive_type === '' || (this.drive_type !== '' && parseInt(this.parent_id) !== 0)) { let folder = wpmfFoldersModule.getFolderRendering('folder', this.label, this.id, this.parent_id); // Add the folder to the attachment listing $attachments_container.append(folder); } } else { let folder = wpmfFoldersModule.getFolderRendering('folder', this.label, this.id, this.parent_id); // Add the folder to the attachment listing $attachments_container.append(folder); } }); if (parseInt(wpmf.vars.hide_tree) === 0) { // Get the formatted new button let folder = wpmfFoldersModule.getFolderRendering('new', wpmf.l18n['create_folder'], term_id, ''); // Add the new folder button to the attachment listing $attachments_container.prepend(folder); } // Get the formatted folder to use as a line break let line_break = wpmfFoldersModule.getFolderRendering('line break', '', '', ''); // Add the folder to the attachment listing $attachments_container.append(line_break); if ($('.display-all-media .check').length) { $('.attachments .wpmf-attachment').hide(); } else { $('.attachments .wpmf-attachment').show(); } $('.wpmf_id_category').val(wpmfFoldersModule.last_selected_folder).change(); if ($('.wpmf_btn_upload_folder').length && !$('.wpmf_btn_upload_folder input').length) { var wpmfUploader = new Resumable({ target: wpmf.vars.ajaxurl + '?action=wpmf_upload_folder', query: { id_category: $('input[name=id_category]').val() }, fileParameterName: 'file_upload', simultaneousUploads: 1, maxChunkRetries: 1, maxFileSize: 100*1024*1024, maxFileSizeErrorCallback: function (file) { }, chunkSize: wpmf.vars.serverUploadLimit - 50 * 1024, // Reduce 50KB to avoid error forceChunkSize: true, //fileType: allowedExt, fileTypeErrorCallback: function (file) { }, generateUniqueIdentifier: function (file, event) { if (file.hasOwnProperty('uniqueIdentifier')) { return file.uniqueIdentifier; } var relativePath = file.webkitRelativePath || file.fileName || file.name; var size = file.size; var prefix = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); var catId = wpmfFoldersModule.last_selected_folder; if (file.hasOwnProperty('catId')) { catId = file.catId } return (catId + '|||' + prefix + size + '-' + relativePath.replace(/[^0-9a-zA-Z_-]/img, '')); } }); wpmfUploader.assignBrowse($('.wpmf_btn_upload_folder'), true); wpmfUploader.on('createFolders', function (files) { wpmfFoldersModule.filesTotal += files.length; }); wpmfUploader.on('filesAdded', function (files) { if (files.length > 0) { var breadcrumb = []; $('#wpmf-breadcrumb li').each(function (i, v) { if (i > 0) { var item = $(v).find('a').html(); breadcrumb.push(item); } }); breadcrumb = breadcrumb.join('/'); wpmfUploader.opts.query = { id_category: $('input[name=id_category]').val(), }; if (!$('.wpmf-process-lists').length) { $('body').append(`
    ${wpmf.l18n.uploaded} 0 / 0
    ${wpmf.l18n.upload_text}
    expand_more close
    ${wpmf.l18n.total_size} 0
    `); $('.wpmf-head-upload-action-close').unbind('click').bind('click', function () { $('.wpmf-process-lists').remove(); }); $('.wpmf-head-upload-action-expand').unbind('click').bind('click', function () { $('.wpmf-process-body').toggleClass('hide'); }); } if (parseInt(wpmf.vars.wpmf_post_type) !== 1 || !$('#wpb_visual_composer').is(":visible")) { if (typeof wp.media.frame !== 'undefined' && typeof wp.media.frame._state !== 'undefined') { let first_file = files[0]; let relativePath = first_file.relativePath; let relativePaths = relativePath.split('/'); let folder_name = wpmfFoldersModule.string_to_slug(relativePaths[0]); if (!$('.wpmf-process-file-item[data-cid="'+ folder_name +'"]').length) { let icon = ' folder '; let item = wpmfFoldersModule.getUploadItemTemplate(folder_name, folder_name, icon); // Create the download attachment if ($('.wpmf-process-body ul li').length) { $('.wpmf-process-body ul').append(item); } else { $('.wpmf-process-body ul').html(item); } } $.each(files, function (i, v) { wpmfFoldersModule.wpmfTotalSize = parseInt(wpmfFoldersModule.wpmfTotalSize); wpmfFoldersModule.wpmfTotalSize = wpmfFoldersModule.wpmfTotalSize + v.file.size; }); $('.wpmf-upload-total').html(parseInt(wpmfFoldersModule.filesTotal)); $('.wpmf-upload-total-size').html(wpmfFoldersModule.formatBytes(wpmfFoldersModule.wpmfTotalSize)); } } wpmfUploader.upload(); } }); wpmfUploader.on('fileProgress', function (file) { }); wpmfUploader.on('fileError', function (file, msg) { }); wpmfUploader.on('fileSuccess', function (file, res) { try { let index = $('.wpmf-upload-completed').html(); if (index == '') { index = 0; } let completed = parseInt(index) + 1; if (completed <= parseInt(wpmfFoldersModule.filesTotal)) { $('.wpmf-upload-completed').text(completed); let percent = (completed)/parseInt(wpmfFoldersModule.filesTotal)*100; if (parseInt(percent) > 100) { percent = 100; } let relativePath = file.relativePath; let relativePaths = relativePath.split('/'); let folder_name = wpmfFoldersModule.string_to_slug(relativePaths[0]); if (percent == 100) { $('.wpmf-process-file-item[data-cid="'+ folder_name +'"] .wpmf-fileupload-progress-bar').css({'background': 'none'}); $('.wpmf-process-file-item[data-cid="'+ folder_name +'"] .wpmf-fileupload-progress-bar').html(''); $('.wpmf-process-file-item[data-cid="'+ folder_name +'"]').removeClass('wpmf-uploading'); } else { $('.wpmf-process-file-item[data-cid=' + folder_name + '] .wpmf-fileupload-progress-bar').css({'background': 'radial-gradient(closest-side, white 70%, transparent 80% 100%), conic-gradient(#0073ab '+ percent +'%, #ddd 0)'}); } $('.wpmf-process-head-bar').css('width', percent + '%'); } } catch (e) { } }); wpmfUploader.on('complete', function () { var completed = $('.wpmf-upload-completed').html(); if (completed == '') { completed = 0; } if (parseInt(completed) >= wpmfFoldersModule.filesTotal) { $('.wpmf-process-lists').remove(); wpmfFoldersModule.wpmfTotalSize = 0; wpmfFoldersModule.filesTotal = 0; } wpmfSnackbarModule.show({ id: 'upload_completed', content: wpmf.l18n.folder_uploaded, auto_close_delay: 3000 }); $.ajax({ type: "POST", url: wpmf.vars.ajaxurl, data: { action: "wpmf", task: "reload_folder_tree", wpmf_nonce: wpmf.vars.wpmf_nonce }, success: function (response) { if (response.status) { wpmfFoldersModule.categories = response.categories; wpmfFoldersModule.categories_order = response.categories_order; // Regenerate the folder filter wpmfFoldersModule.initFolderFilter(); // Reload the folders wpmfFoldersModule.renderFolders(); wpmfFoldersModule.trigger('addFolder', ''); } } }); }); } }, string_to_slug: function (str) { str = str.replace(/^\s+|\s+$/g, ''); // trim str = str.toLowerCase(); // remove accents, swap ñ for n, etc var from = "àáäâèéëêìíïîòóöôùúüûñçěščřžýúůďťň·/_,:;"; var to = "aaaaeeeeiiiioooouuuuncescrzyuudtn------"; for (var i=0, l=from.length ; i
    ${icon}
    ${name}
    `; }, /** * Set status folder color */ appendCheckColor: function () { $('.color-wrapper .color .color_check:not(.custom_color .color_check)').remove(); $('.color-wrapper > .color[data-color="' + wpmf.vars.colors[wpmfFoldersModule.editFolderId] + '"]').append('done'); }, /** * right click on folder to open menu */ openContextMenuFolder: function () { // init context menu on folders $('.wpmf-attachment, .wpmf-main-tree ul li .wpmf-item[data-id]').off('contextmenu').on('contextmenu', function (e) { if (parseInt($(e.target).data('id')) === 0 || $(e.target).closest('li').data('id') === 0) { $('.wpmf-contextmenu-folder li').hide(); $('.material_newfolder').closest('li').show(); $('.wpmf-download-contextmenu, .wpmf-download-contextmenu li').show(); } else { $('.wpmf-contextmenu-folder li').show(); } if (!$(this).hasClass('wpmf-new') && !$(this).hasClass('wpmf-back')) { wpmfFoldersModule.houtside(); let x = e.clientX; // Get the horizontal coordinate let y = e.clientY; if ($(e.target).hasClass('wpmf-attachment')) { wpmfFoldersModule.editFolderId = $(e.target).data('id'); } else { wpmfFoldersModule.editFolderId = $(e.target).closest('li').data('id'); } if (parseInt($(e.target).data('id')) !== parseInt(wpmfFoldersModule.last_selected_folder) && parseInt($(e.target).closest('li').data('id')) !== parseInt(wpmfFoldersModule.last_selected_folder)) { $('.material_refreshfolder').closest('li').hide(); } else { $('.material_refreshfolder').closest('li').show(); } if (wpmf.vars.show_folder_id) { $('.wpmf_folderID').html(wpmfFoldersModule.editFolderId); } if ($('.material_syncdrive').length) { $('.material_syncdrive').closest('li').remove(); } if (typeof wpmfFoldersModule.categories[wpmfFoldersModule.editFolderId].drive_type !== "undefined" && wpmfFoldersModule.categories[wpmfFoldersModule.editFolderId].drive_type !== '') { $('.wpmf-download-contextmenu, .wpmf-download-contextmenu li').hide(); } else { $('.wpmf-download-contextmenu, .wpmf-download-contextmenu li').show(); } if (wpmfFoldersModule.categories[wpmfFoldersModule.editFolderId].drive_type !== '' && parseInt(wpmfFoldersModule.categories[wpmfFoldersModule.editFolderId].parent_id) === 0) { $('.material_editfolder').closest('li').hide(); } else { $('.material_editfolder').closest('li').show(); } if (wpmfFoldersModule.categories[wpmfFoldersModule.editFolderId].drive_type === 'google_drive') { $('.wpmf-contextmenu-folder').append(`
  • ${wpmf.l18n.sync_drive}sync
  • `); } if (wpmfFoldersModule.categories[wpmfFoldersModule.editFolderId].drive_type === 'dropbox') { $('.wpmf-contextmenu-folder').append(`
  • ${wpmf.l18n.sync_drive}sync
  • `); } if (wpmfFoldersModule.categories[wpmfFoldersModule.editFolderId].drive_type === 'onedrive') { $('.wpmf-contextmenu-folder').append(`
  • ${wpmf.l18n.sync_drive}sync
  • `); } if (wpmfFoldersModule.categories[wpmfFoldersModule.editFolderId].drive_type === 'onedrive_business') { $('.wpmf-contextmenu-folder').append(`
  • ${wpmf.l18n.sync_drive}sync
  • `); } if (wpmfFoldersModule.categories[wpmfFoldersModule.editFolderId].drive_type === 'nextcloud') { $('.wpmf-contextmenu-folder').append(`
  • ${wpmf.l18n.sync_drive}sync
  • `); } wpmfFoldersModule.doSyncDrive(); // render custom color wpmfFoldersModule.renderCustomColor(); // change color for folder wpmfFoldersModule.setFolderColor(); // Set status folder color wpmfFoldersModule.appendCheckColor(); $('.wpmf-contextmenu').removeClass('context_overflow'); if ($('.wpmf-main-tree').length && $(this).hasClass('wpmf-item')) { if ((y + $('.wpmf-contextmenu-folder').outerHeight()) > $('.wpmf-main-tree').offset().top + $('.wpmf-main-tree').height()) { y = y - $('.wpmf-contextmenu-folder').outerHeight(); } } if (x + $('.wpmf-contextmenu-folder').width() + 236 > $(window).width()) { $('.wpmf-contextmenu.wpmf-contextmenu-folder').addClass('context_overflow').slideDown(200).css({ 'right': $(window).width() - x + 'px', 'left': 'auto', 'top': y + 'px' }); } else { $('.wpmf-contextmenu.wpmf-contextmenu-folder').slideDown(200).css({ 'left': x + 'px', 'right': 'auto', 'top': y + 'px' }); } } return false; }); $('body').on('click', function (e) { if (!$(e.target).hasClass('colorsub') && !$(e.target).hasClass('wp-color-folder')) { wpmfFoldersModule.houtside(); } }); // edit folder $('.material_editfolder').off('click').on('click', function (e) { wpmfFoldersModule.clickEditFolder(e, wpmfFoldersModule.editFolderId); wpmfFoldersModule.houtside(); }); $('.material_newfolder').off('click').on('click', function (e) { wpmfFoldersModule.newFolder(wpmfFoldersModule.editFolderId); wpmfFoldersModule.houtside(); }); $('.material_refreshfolder').off('click').on('click', function (e) { wpmfFoldersModule.reloadAttachments(); wpmfFoldersModule.houtside(); }); // delete folder $('.material_deletefolder').off('click').on('click', function (e) { wpmfFoldersModule.clickDeleteFolder(e, wpmfFoldersModule.editFolderId); wpmfFoldersModule.houtside(); }); $('.wpmf-bulk-folders-btn').off('click').on('click', function (e) { e.preventDefault(); if ($('.wpmf-folder-actions').hasClass('wpmf-deactivate')) { $('.wpmf-tree-actions').find('.wpmf-new-folder').addClass('hide'); } else { $('.wpmf-tree-actions').find('.wpmf-new-folder').removeClass('hide'); } $('.wpmf-folder-actions').toggleClass('wpmf-deactivate'); $('.wpmf-tree-checkbox').toggleClass('hide'); }); // delete folder $('.material_downloadfolder').off('click').on('click', function (e) { var sub = $(this).data('sub'); $.ajax({ type: "POST", url: wpmf.vars.ajaxurl, data: { action: "wpmf", task: "download_folder", folder_id: wpmfFoldersModule.editFolderId, download_sub: sub, wpmf_nonce: wpmf.vars.wpmf_nonce }, beforeSend: function () { // Show snackbar if (!$('.wpmf-snackbar[data-id="download_folder"]').length) { wpmfSnackbarModule.show({ id: 'download_folder', content: wpmf.l18n.download_folder, auto_close: false, is_progress: true }); } }, success: function (response) { wpmfSnackbarModule.close('download_folder'); if (response.status) { var hidden_a = document.createElement('a'); hidden_a.setAttribute('href', response.link); hidden_a.setAttribute('download', response.zipname); document.body.appendChild(hidden_a); hidden_a.click(); } } }); wpmfFoldersModule.houtside(); }); // get URL attachment $('.material_copyFolderId').off('click').on('click', function (e) { wpmfFoldersModule.setClipboardText(wpmfFoldersModule.editFolderId, wpmf.l18n.copy_folderID_msg); wpmfFoldersModule.houtside(); }); // change color for folder wpmfFoldersModule.setFolderColor(); }, /** * render custom color */ renderCustomColor: function () { // remove old html $('.custom_color_wrap').remove(); let value = ''; let custom_color = ''; let colorlists = wpmf.l18n.colorlists; let folder_color = '
    '; if (typeof colorlists[wpmf.vars.colors[wpmfFoldersModule.editFolderId]] === 'undefined') { if (typeof wpmf.vars.colors[wpmfFoldersModule.editFolderId] === 'undefined') { custom_color = '#8f8f8f'; } else { custom_color = wpmf.vars.colors[wpmfFoldersModule.editFolderId]; value = wpmf.vars.colors[wpmfFoldersModule.editFolderId]; } } else { custom_color = '#8f8f8f'; } folder_color += ` ` folder_color += `
    check
    `; folder_color += `
    `; $('.color-wrapper').append(folder_color); }, /** * Set folder color */ setFolderColor: function () { $('.wp-color-folder').on('keyup', function (e) { let val = $(this).val(); if (val.length >= 4) { $('.color.custom_color').data('color', val).css('background', val); } else { $('.color.custom_color').data('color', 'transparent').css('background', 'transparent'); } }); // change color for folder $('.wpmf-contextmenu.wpmf-contextmenu-folder .color').off('click').on('click', function (e) { let color = $(this).data('color'); $('.wpmf-attachment.wpmf-folder[data-id="' + wpmfFoldersModule.editFolderId + '"] .mdc-list-item__start-detail').css('color', color); $('.wpmf-main-tree .wpmf-item[data-id="' + wpmfFoldersModule.editFolderId + '"] .wpmf-item-icon, .wpmf-main-tree .wpmf-item[data-id="' + wpmfFoldersModule.editFolderId + '"] .tree_drive_icon').css('color', color); $('.wpmf-attachment.wpmf-folder[data-id="' + wpmfFoldersModule.editFolderId + '"] .mdc-list-item__start-detail svg .cls-2').css('fill', color); $('.wpmf-main-tree .wpmf-item[data-id="' + wpmfFoldersModule.editFolderId + '"] .tree_drive_icon_img > .cls-2').css('fill', color); wpmf.vars.colors[wpmfFoldersModule.editFolderId] = color; wpmfFoldersModule.appendCheckColor(); $.ajax({ type: "POST", url: wpmf.vars.ajaxurl, data: { action: "wpmf", task: "set_folder_color", color: color, folder_id: wpmfFoldersModule.editFolderId, wpmf_nonce: wpmf.vars.wpmf_nonce }, success: function (response) { if (!response.status) { // Show dialog when set background folder failed showDialog({ title: wpmf.l18n.information, // todo : use the response message instead of a predefined one text: wpmf.l18n.bgcolorerror, closeicon: true }); } } }); }); }, doSyncDrive: function () { $('.material_sync_google_drive').on('click', function () { wpmfAddCloudQueue.addGoogleQueue(wpmfFoldersModule.editFolderId); }); $('.material_sync_dropbox').on('click', function () { wpmfAddCloudQueue.addDropboxQueue(); }); $('.material_sync_onedrive').on('click', function () { wpmfAddCloudQueue.addOnedriveQueue(); }); $('.material_sync_onedrive_business').on('click', function () { wpmfAddCloudQueue.addOnedriveBusinessQueue(); }); $('.material_sync_nextcloud').on('click', function () { wpmfAddCloudQueue.addNextcloudQueue(); }); }, /** * render form replace */ renderFormReplace: function () { $('.replace_wrap').remove(); let form_replace = `