'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /** * Main WP Media Folder script * It handles the categories filtering */ var wpmfFoldersModule = void 0, wpmfAddCloudQueue = void 0, cloud_sync_loader_icon = void 0; (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 getFrame() { 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 initModule() { 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 success(data) { $(document).trigger('ju_queue_updated_status', data); if (parseInt(data.queue_length) === 0) { clearInterval(queue_process); } }, error: function error() { 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; var init = function init() { var $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 + ''); } // Download file table list media $('.wp-list-table .download').off('click').on('click', function (e){ e.preventDefault(); var post_id = $(this).parent().parent().parent().attr('id'); if (post_id) { var post_id_array = post_id.split("-"); if (Array.isArray(post_id_array)) { let id = post_id_array.pop(); if (id) { $.ajax({ type: "POST", url: wpmf.vars.ajaxurl, data: { action: "wpmf", task: "wpmf_download_file", id: id, wpmf_nonce: wpmf.vars.wpmf_nonce }, success: function success(response) { if (response.status) { window.location.href = wpmf.vars.site_url + '?act=wpmf_download_file&id=' + id + '&wpmf_nonce=' + wpmf.vars.wpmf_nonce; } else { showDialog({ text: wpmf.l18n.cannot_download, closeicon: true }); } } }); } } } }) $('#doaction').on('click', function (e) { var action = $('#bulk-action-selector-top').val(); //get list post id var cboxes = document.getElementsByName('media[]'); var post_ids = []; var len = cboxes.length; if (cboxes !== 'undefined') { for (var i=0; i 0) { var html = "

To select a tag, first choose one from the existing list. If the tag you need isn't there, you can create a new one.

"; html += ''; //show tagify for tags showDialog({ id: 'wpmf-add-tag-dialog', title: wpmf.l18n.create_or_select_tag, text: html, negative: { title: wpmf.l18n.cancel }, positive: { title: wpmf.l18n.add, onClick: function onClick(e) { var value = $('input[name=tags-outside]').val(); if (value) { var array_value = JSON.parse(value); var tag_name = []; array_value.forEach(element => { tag_name.push(element.value); }); //save tag if (tag_name.length) { $.ajax({ method: "POST", dataType: "json", url: wpmf.vars.ajaxurl, data: { action: "wpmf", task: "save_tag_item", tag_name: tag_name, post_ids: post_ids, wpmf_nonce: wpmf.vars.wpmf_nonce }, success: function success(response) { if (response.status) { window.location.reload(); } else { console.log(response.status); } } }); } } } } }); //set tagify var input = document.querySelector('input[name=tags-outside]') var tagify = new Tagify(input, { focusable: false, dropdown: { position: 'input', enabled: 0 // always opens dropdown when input gets focus } }); //get 10 tag items $.ajax({ method: "POST", dataType: "json", url: wpmf.vars.ajaxurl, data: { action: "wpmf", task: "get_tag_item", wpmf_nonce: wpmf.vars.wpmf_nonce }, success: function success(response) { if (response.status) { tagify.whitelist = response.list_tags; // update whitelist } } }); //search tag document.querySelector('.tagify__input').addEventListener("keyup", function (e) { var tag_name = $(this).html(); if (tag_name.length > 1) { $.ajax({ method: "POST", dataType: "json", url: wpmf.vars.ajaxurl, data: { action: "wpmf", task: "get_tag_item", tag_name : tag_name, wpmf_nonce: wpmf.vars.wpmf_nonce }, success: function success(response) { if (response.status) { tagify.whitelist = response.list_tags // update whitelist } } }); } }); } else { showDialog({ text: wpmf.l18n.select_file_required, closeicon: true }); } } }); //fix delete file submit on list view $('.wp-list-table .row-actions .delete .submitdelete').attr('onclick', 'return'); $('.wp-list-table .row-actions .delete .submitdelete').off('click').on('click', function (e) { e.preventDefault(); var confirm = showNotice.warn(); if (confirm) { var href = $(this).attr('href'); var id = href.substring( href.indexOf("post=") + 5, href.lastIndexOf("&") ); if (id && !isNaN(id)){ $.ajax({ type: "POST", url: wpmf.vars.ajaxurl, data: { action: "wpmf", task: "delete_file", id: id, wpmf_nonce: wpmf.vars.wpmf_nonce }, success: function success(response) { if (response.status) { window.location.reload(); } } }); } } }); // add iframe to play mp4 in attachment detail on google drive $('#wp-media-grid .media-frame').off('click').on('click', function (e) { var file_name = $(".attachment-info .details .filename").html(); if (file_name && file_name.indexOf('.mp4') > 0) { var src = $('.thumbnail-video img').attr('src'); if (src && src.indexOf('drive.google.com') > 0) { //get id video var id = src.substring( src.indexOf("id=") + 3, src.lastIndexOf("&") ); $('.wp-video').remove(); $('.thumbnail-video .details-image').remove(); $('.thumbnail-video').attr('style', 'width: 480px; height: 270px'); if (id) { var html = ""; $('.thumbnail-audio').append(html); } } } //fix style for google item if (file_name && file_name.indexOf('.mp3') > 0 || file_name && file_name.indexOf('.csv') > 0 || file_name && file_name.indexOf('.zip') > 0) { $('.thumbnail .details-image').attr('style', 'background-image:none'); } }) // 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 () { var 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 var 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 var 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 var timeout = void 0; // call drag folderempty attachment wpmfFoldersModule.initializeDragAndDropAttachments(); wpmfFoldersModule.openContextMenuFolder(); // Select the node that will be observed for mutations // call open context menu when empty attachment const targetNode = $current_frame.find('.attachments-browser ul.attachments')[0]; // Options for the observer (which mutations to observe) const config = { attributes: true, childList: true, subtree: true }; // Callback function to execute when mutations are observed const callback = (mutationList, observer) => { for (const mutation of mutationList) { if (mutation.type === "childList") { // 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) { var _id = $this.closest('.attachment').data('id'); var cloud_media = wp.media.attachment(_id).get('cloud_media'); var 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); } } }; if (targetNode){ // Create an observer instance linked to the callback function const observer = new MutationObserver(callback); // Start observing the target node for configured mutations observer.observe(targetNode, config); // Later, you can stop observing // observer.disconnect(); } // 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 init() { var this_url = document.URL; if (this_url.indexOf('media-new.php') < 0) { // Add the current wpmf folder to the request this.uploader.bind('BeforeUpload', function(up, e) { e.wpmf_folder = typeof e.wpmf_folder !== "undefined" ? e.wpmf_folder : wpmfFoldersModule.last_selected_folder; var file = e.getSource(); delete this.settings.multipart_params['relativePath']; if (file.relativePath !== '') { this.settings.multipart_params['relativePath'] = file.relativePath; upload_type = 'folder'; } var multipart_params = up.settings.multipart_params; multipart_params['wpmf_nonce'] = wpmf.vars.wpmf_nonce; multipart_params['wpmf_folder'] = e.wpmf_folder; up.settings.multipart_params = multipart_params; }); } 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 success(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 var myMediaViewModal = wp.media.view.Modal; if (typeof myMediaViewModal !== "undefined") { wp.media.view.Modal = wp.media.view.Modal.extend({ open: function open() { 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) { var _myMediaViewToolbar = wp.media.view.Toolbar; if (typeof _myMediaViewToolbar !== "undefined") { wp.media.view.Toolbar = wp.media.view.Toolbar.extend({ refresh: function refresh() { _myMediaViewToolbar.prototype.refresh.apply(this, arguments); var 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(); } } } }); } } var myMediaControllerCollectionEdit = wp.media.controller.CollectionEdit; if (typeof myMediaControllerCollectionEdit !== "undefined") { wp.media.controller.CollectionEdit = wp.media.controller.CollectionEdit.extend({ activate: function activate() { myMediaControllerCollectionEdit.prototype.activate.apply(this, arguments); }, deactivate: function deactivate() { myMediaControllerCollectionEdit.prototype.deactivate.apply(this, arguments); } }); } // display folder on feature image var myMediaControllerFeaturedImage = wp.media.controller.FeaturedImage; if (typeof myMediaControllerFeaturedImage !== "undefined") { wp.media.controller.FeaturedImage = wp.media.controller.FeaturedImage.extend({ updateSelection: function updateSelection() { 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 var myMediaViewToolbar = wp.media.view.UploaderInline; if (typeof myMediaViewToolbar !== "undefined") { wp.media.view.UploaderInline = wp.media.view.UploaderInline.extend({ ready: function ready() { 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) { var bread = ''; var 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('\n
    \n
    \n \n ' + wpmf.l18n.uploaded + ' 0 / 0
    ' + wpmf.l18n.upload_text + '
    \n
    \n
    expand_more close
    \n
    \n
    \n
      \n
      \n
      ' + wpmf.l18n.total_size + ' 0
      \n
      \n '); $('.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') { var type = file_info.attributes.file.type; var icon = ''; if (type.indexOf('image') != -1) { icon = ' image '; } else { icon = ' description '; } var 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 var myMediaUploaderStatus = wp.media.view.UploaderStatus; if (typeof myMediaUploaderStatus !== "undefined") { wp.media.view.UploaderStatus = wp.media.view.UploaderStatus.extend({ progress: function progress(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 info() { 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(_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 formatBytes(bytes) { var decimals = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2; if (!+bytes) return '0 Bytes'; var k = 1024; var dm = decimals < 0 ? 0 : decimals; var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; var 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 getBackboneOfMedia() { var c = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var t = void 0, a = void 0, 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 initFolderFilter() { /** * We extend the AttachmentFilters view to add our own filtering */ if (typeof wp.media !== 'undefined' && typeof wp.media.view !== 'undefined' && 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 createFilters() { var filters = {}; var ij = 0; var space = '  '; _.each(wpmfFoldersModule.categories_order || [], function (key) { var term = wpmfFoldersModule.categories[key]; if (typeof term !== "undefined") { if (parseInt(wpmfFoldersModule.media_root) !== parseInt(term.id)) { var 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 if (typeof wp.media !== "undefined" && typeof wp.media.view !== "undefined" && typeof wp.media.view.AttachmentsBrowser !== "undefined") { var myAttachmentsBrowser = wp.media.view.AttachmentsBrowser; } if (typeof myAttachmentsBrowser !== "undefined") { wp.media.view.AttachmentsBrowser = wp.media.view.AttachmentsBrowser.extend({ createToolbar: function createToolbar() { 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 updateContent() { myAttachmentsBrowser.prototype.updateContent.apply(this, arguments); wpmfFoldersModule.getFrame().find('.attachments-browser .attachment').each(function (i, v) { var 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 if (typeof wp.media !== "undefined" && typeof wp.media.controller !== "undefined" && typeof wp.media.controller.GalleryEdit !== "undefined") { var myMediaControllerGalleryEdit = wp.media.controller.GalleryEdit; } if (typeof myMediaControllerGalleryEdit !== "undefined") { wp.media.controller.GalleryEdit = wp.media.controller.GalleryEdit.extend({ gallerySettings: function gallerySettings(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 click() { /* 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 success(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 if (typeof wp.media !== "undefined" && typeof wp.media.view !== "undefined" && typeof wp.media.view.Search !== "undefined") { var mySearch = wp.media.view.Search; } var search_initialized = false; if (typeof mySearch !== "undefined") { wp.media.view.Search = wp.media.view.Search.extend({ search: function search(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 setFolderOrdering(ordering) { wpmfFoldersModule.folder_ordering = ordering; // Rerender folders wpmfFoldersModule.renderFolders(); }, /** * Force attachments to be reloaded in the current view */ reloadAttachments: function reloadAttachments() { var c = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; // Force reloading files var 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 initLoadingFolder() { 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 setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000); var expires = "expires=" + d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; }, /** * get a cookie * @param cname cookie name * @returns {*} */ getCookie: function getCookie(cname) { var name = cname + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var 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 changeFolder(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 getFolderRendering(type, name, term_id, parent_id) { var buttons = ''; var class_names = ''; var main_icon = ''; var action = ''; if (type === 'folder') { // This is a folder buttons = '\n '; 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'; } var 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 var 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 '
    • \n \n ' + main_icon + '\n \n \n ' + name + '\n \n
    • '; }, /** * Update count files in folder * @param term_id */ updateCountFiles: function updateCountFiles(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 success(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 renderFolders(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 var $frame = wpmfFoldersModule.getFrame(); // Retrieve the attachments container var $attachments_container = void 0; 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 var folders_ordered = []; // get search keyword var search = $('.wpmf_search_folder').val(); wpmfFoldersModule.folder_search = []; if (typeof search === "undefined") { search = ''; } else { search = search.trim().toLowerCase(); } for (var 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(); var 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); } } } var 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) { var folder = wpmfFoldersModule.getFolderRendering('folder', this.label, this.id, this.parent_id); // Add the folder to the attachment listing $attachments_container.append(folder); } } else { var _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 var 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 var 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 maxFileSizeErrorCallback(file) {}, chunkSize: wpmf.vars.serverUploadLimit - 50 * 1024, // Reduce 50KB to avoid error forceChunkSize: true, //fileType: allowedExt, fileTypeErrorCallback: function fileTypeErrorCallback(file) {}, generateUniqueIdentifier: function generateUniqueIdentifier(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('\n
      \n
      \n \n ' + wpmf.l18n.uploaded + ' 0 / 0
      ' + wpmf.l18n.upload_text + '
      \n
      \n
      expand_more close
      \n
      \n
      \n
        \n
        \n
        ' + wpmf.l18n.total_size + ' 0
        \n
        \n '); $('.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 !== 'undefined' && typeof wp.media.frame !== 'undefined' && typeof wp.media.frame._state !== 'undefined') { var first_file = files[0]; var relativePath = first_file.relativePath; var relativePaths = relativePath.split('/'); var _folder_name = wpmfFoldersModule.string_to_slug(relativePaths[0]); if (!$('.wpmf-process-file-item[data-cid="' + _folder_name + '"]').length) { var icon = ' folder '; var 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 { var index = $('.wpmf-upload-completed').html(); if (index == '') { index = 0; } var completed = parseInt(index) + 1; if (completed <= parseInt(wpmfFoldersModule.filesTotal)) { $('.wpmf-upload-completed').text(completed); var percent = completed / parseInt(wpmfFoldersModule.filesTotal) * 100; if (parseInt(percent) > 100) { percent = 100; } var relativePath = file.relativePath; var relativePaths = relativePath.split('/'); var _folder_name2 = wpmfFoldersModule.string_to_slug(relativePaths[0]); if (percent == 100) { $('.wpmf-process-file-item[data-cid="' + _folder_name2 + '"] .wpmf-fileupload-progress-bar').css({ 'background': 'none' }); $('.wpmf-process-file-item[data-cid="' + _folder_name2 + '"] .wpmf-fileupload-progress-bar').html(''); $('.wpmf-process-file-item[data-cid="' + _folder_name2 + '"]').removeClass('wpmf-uploading'); } else { $('.wpmf-process-file-item[data-cid=' + _folder_name2 + '] .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 success(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 string_to_slug(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 < l; i++) { str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i)); } str = str.replace('.', '-') // replace a dot by a dash .replace(/[^a-z0-9 -]/g, '') // remove invalid chars .replace(/\s+/g, '-') // collapse whitespace and replace by a dash .replace(/-+/g, '-') // collapse dashes .replace(/\//g, ''); // collapse all forward-slashes return str; }, getUploadItemTemplate: function getUploadItemTemplate(id, name, icon) { return '
      • \n
        ' + icon + '\n
        \n ' + name + '\n
        \n
        \n
        \n
      • '; }, /** * Set status folder color */ appendCheckColor: function appendCheckColor() { $('.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 openContextMenuFolder() { // 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(); var x = e.clientX; // Get the horizontal coordinate var 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 beforeSend() { // 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 success(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 renderCustomColor() { // remove old html $('.custom_color_wrap').remove(); var value = ''; var custom_color = ''; var colorlists = wpmf.l18n.colorlists; var folder_color = '
        '; if (typeof colorlists[wpmf.vars.colors[wpmfFoldersModule.editFolderId]] === 'undefined') { if (typeof wpmf.vars.colors[wpmfFoldersModule.editFolderId] === 'undefined') { custom_color = '#b2b2b2'; } else { custom_color = wpmf.vars.colors[wpmfFoldersModule.editFolderId]; value = wpmf.vars.colors[wpmfFoldersModule.editFolderId]; } } else { custom_color = '#b2b2b2'; } folder_color += '\n '; folder_color += '
        check
        '; folder_color += '
        '; $('.color-wrapper').append(folder_color); }, /** * Set folder color */ setFolderColor: function setFolderColor() { $('.wp-color-folder').on('keyup', function (e) { var 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) { var 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 success(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 doSyncDrive() { $('.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 renderFormReplace() { $('.replace_wrap').remove(); var form_replace = '\n