');
}
}
// 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('
';
$('.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
\n \n ';
if (!$('.replace_wrap').length) {
$('body').append(form_replace);
}
},
/**
* right click on file to open menu
*/
openContextMenuFile: function openContextMenuFile() {
// init context menu on files
$('.attachments-browser .attachment:not(.wpmf-attachment)').off('contextmenu').on('contextmenu', function (e) {
wpmfFoldersModule.houtside();
var x = e.clientX; // Get the horizontal coordinate
var y = e.clientY;
if ($(e.target).hasClass('thumbnail')) {
wpmfFoldersModule.editFileId = $(e.target).closest('li').data('id');
} else {
wpmfFoldersModule.editFileId = $(e.target).data('id');
}
$('.material_downloadfile').data('id', wpmfFoldersModule.editFileId);
if (typeof wpmfFoldersModule.categories[wpmfFoldersModule.last_selected_folder].drive_type !== "undefined" && wpmfFoldersModule.categories[wpmfFoldersModule.last_selected_folder].drive_type !== '') {
$('.set_folder_menu').closest('li').hide();
$('.material_import').closest('li').show();
} else {
$('.set_folder_menu').closest('li').show();
$('.material_import').closest('li').hide();
}
if (wp.media.attachment(wpmfFoldersModule.editFileId).get('mime') !== 'application/pdf') {
$('.insert_pdfembed').closest('li').addClass('hide').removeClass('show');
} else {
$('.insert_pdfembed').closest('li').addClass('show').removeClass('hide');
}
if (wp.media.attachment(wpmfFoldersModule.editFileId).get('mime') === 'image/jpg' || wp.media.attachment(wpmfFoldersModule.editFileId).get('mime') === 'image/jpeg' || wp.media.attachment(wpmfFoldersModule.editFileId).get('mime') === 'image/png') {
$('.insert_image_lightbox').closest('li').addClass('show').removeClass('hide');
} else {
$('.insert_image_lightbox').closest('li').addClass('hide').removeClass('show');
}
var context_height = $('.wpmf-contextmenu.wpmf-contextmenu-file').height();
if (y + context_height > $(window).height()) {
y = y - context_height;
}
$('.wpmf-contextmenu').removeClass('context_overflow');
if (x + $('.wpmf-contextmenu-file').width() > $(window).width()) {
$('.wpmf-contextmenu.wpmf-contextmenu-file').addClass('context_overflow').slideDown(200).css({
'right': $(window).width() - x + 'px',
'left': 'auto',
'top': y + 'px'
});
} else {
$('.wpmf-contextmenu.wpmf-contextmenu-file').slideDown(200).css({
'left': x + 'px',
'right': 'auto',
'top': y + 'px'
});
}
// create form replace
wpmfFoldersModule.renderFormReplace();
return false;
});
// edit folder
$('.material_editfile').off('click').on('click', function (e) {
$('.attachments-browser .attachments .attachment[data-id="' + wpmfFoldersModule.editFileId + '"]').click();
wpmfFoldersModule.houtside();
});
// delete folder
$('.material_deletefile').off('click').on('click', function (e) {
wpmfFoldersModule.clickDeleteFile(e, wpmfFoldersModule.editFileId);
wpmfFoldersModule.houtside();
});
// duplicate file
$('.material_duplicatefile').off('click').on('click', function (e) {
wpmfDuplicateModule.doDuplicate(wpmfFoldersModule.editFileId);
wpmfFoldersModule.houtside();
});
// get URL attachment
$('.material_geturlfile').off('click').on('click', function (e) {
var url = wp.media.attachment(wpmfFoldersModule.editFileId).get('url');
wpmfFoldersModule.setClipboardText(url, wpmf.l18n.copy_url);
wpmfFoldersModule.houtside();
});
$('.material_downloadfile').off('click').on('click', function (e) {
e.preventDefault();
var id = $(this).data('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
});
}
}
});
});
$('.material_overridefile').off('click').on('click', function (e) {
$('#wpmf_upload_input_version').click();
wpmfReplaceModule.doEvent();
wpmfReplaceModule.replace_attachment(wpmfFoldersModule.editFileId, 'material');
wpmfFoldersModule.houtside();
});
$('.insert_pdfembed').off('click').on('click', function (e) {
var mime = wp.media.attachment(wpmfFoldersModule.editFileId).get('mime');
if (mime === 'application/pdf') {
var url = wp.media.attachment(wpmfFoldersModule.editFileId).get('url');
var title = wp.media.attachment(wpmfFoldersModule.editFileId).get('title');
var filename = wp.media.attachment(wpmfFoldersModule.editFileId).get('filename');
var html = '';
if (title !== '') {
html += title;
} else {
html += filename;
}
html += '';
window.send_to_editor(html);
wp.media.frame.close();
wpmfFoldersModule.houtside();
}
});
$('.insert_image_lightbox').off('click').on('click', function (e) {
var lightbox_size = wpmfFoldersModule.getFrame().find('.compat-field-wpmf_image_lightbox select').val();
var image_size = wpmfFoldersModule.getFrame().find('#attachment-display-settings-size').val();
if (typeof lightbox_size === "undefined") {
lightbox_size = 'full';
}
if (typeof image_size === "undefined") {
image_size = 'medium';
}
var sizes = wp.media.attachment(wpmfFoldersModule.editFileId).get('sizes');
var html = '';
html += '';
html += '';
//wp.media.editor.insert(html);
window.send_to_editor(html);
wp.media.frame.close();
wpmfFoldersModule.houtside();
});
// change folder for file
$('.set_folder_menu').off('click').on('click', function (e) {
var type = wpmfFoldersModule.getFrame().find('.attachments-browser .attachment.selected').length > 1 ? 'multiple' : 'one';
wpmfAssignModule.showdialog(type);
wpmfAssignModule.initTree();
wpmfFoldersModule.houtside();
});
$('.material_import').off('click').on('click', function (e) {
wpmfImportCloudModule.showdialog(false);
wpmfImportCloudModule.initModule();
wpmfFoldersModule.houtside();
});
$('.material_copy_file_to_s3').off('click').on('click', function (e) {
wpmfFoldersModule.uploadFilesToS3(wpmfFoldersModule.editFileId);
wpmfFoldersModule.houtside();
});
},
/**
* Upload the files to S3
*
* @param ids
*/
uploadFilesToS3: function uploadFilesToS3(ids) {
$.ajax({
type: "POST",
url: wpmf.vars.ajaxurl,
data: {
action: "wpmf_upload_single_file_to_s3",
ids: ids,
wpmf_nonce: wpmf.vars.wpmf_nonce
},
beforeSend: function beforeSend() {
wpmfSnackbarModule.show({
id: 'uploadFilesToS3',
content: wpmf.l18n.uploading_files_to_s3,
icon: 'sync',
auto_close: false,
is_progress: true
});
},
success: function success(response) {
wpmfSnackbarModule.close('uploadFilesToS3');
if (response.status) {
if (typeof response.remove !== "undefined" && parseInt(response.remove) === 1) {
wpmfFoldersModule.removeLocalFiles(response.ids);
} else {
wpmfFoldersModule.reloadAttachments();
}
}
}
});
},
/**
* Remove the files from local
*
* @param ids
*/
removeLocalFiles: function removeLocalFiles(ids) {
$.ajax({
type: "POST",
url: wpmf.vars.ajaxurl,
data: {
action: "wpmf_remove_local_file",
ids: ids,
wpmf_nonce: wpmf.vars.wpmf_nonce
},
beforeSend: function beforeSend() {
wpmfSnackbarModule.show({
id: 'removeFilesFromLocal',
content: wpmf.l18n.removing_files_from_local,
auto_close: false,
is_progress: true
});
},
success: function success(res) {
if (res.status) {
wpmfSnackbarModule.close('removeFilesFromLocal');
wpmfFoldersModule.reloadAttachments();
}
}
});
},
/**
* click outside
*/
houtside: function houtside() {
$('.wpmf-contextmenu-file, .wpmf-contextmenu-folder').hide();
},
/**
* set clipboard text
* @param text
*/
setClipboardText: function setClipboardText(text, msg_success) {
var id = "mycustom-clipboard-textarea-hidden-id";
var existsTextarea = document.getElementById(id);
if (!existsTextarea) {
var textarea = document.createElement("textarea");
textarea.id = id;
// Place in top-left corner of screen regardless of scroll position.
textarea.style.position = 'fixed';
textarea.style.top = 0;
textarea.style.left = 0;
// Ensure it has a small width and height. Setting to 1px / 1em
// doesn't work as this gives a negative w/h on some browsers.
textarea.style.width = '1px';
textarea.style.height = '1px';
// We don't need padding, reducing the size if it does flash render.
textarea.style.padding = 0;
// Clean up any borders.
textarea.style.border = 'none';
textarea.style.outline = 'none';
textarea.style.boxShadow = 'none';
// Avoid flash of white box if rendered for any reason.
textarea.style.background = 'transparent';
document.querySelector("body").appendChild(textarea);
existsTextarea = document.getElementById(id);
}
existsTextarea.value = text;
existsTextarea.select();
try {
var status = document.execCommand('copy');
if (!status) {
showDialog({
title: wpmf.l18n.information, // todo : use the response message instead of a predefined one
text: wpmf.l18n.cannot_copy,
closeicon: true
});
} else {
wpmfSnackbarModule.show({
id: 'copy_success',
content: msg_success,
auto_close_delay: 1000
});
}
} catch (err) {
showDialog({
title: wpmf.l18n.information, // todo : use the response message instead of a predefined one
text: wpmf.l18n.unable_copy,
closeicon: true
});
}
},
renderPermissionHtml: function renderPermissionHtml(role_user_list) {
var cl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'folder_permission_items';
return '
\n ' + role_user_list + '\n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n
';
},
renderFolderPermissionsWrap: function renderFolderPermissionsWrap() {
if (wpmf.vars.wpmf_role !== 'administrator') {
return false;
}
var roles = '',
users = '';
$.each(wpmf.vars.roles, function (role, role_infos) {
roles += '';
});
$.each(wpmf.vars.users, function (user, user_infos) {
users += '';
});
var role_list = '
\n
\n
\n \n
\n \n
\n
\n \n delete \n
\n
';
var user_list = '
\n
\n
\n \n
\n \n
\n
\n \n delete \n
\n
';
var role_permission_html = wpmfFoldersModule.renderPermissionHtml(role_list, 'folder_permission_items folder_role_permission_items');
var user_permission_html = wpmfFoldersModule.renderPermissionHtml(user_list, 'folder_permission_items folder_user_permission_items');
var html = '\n
';
// Add the context menu box for folder to body
if (!$('.wpmf-contextmenu.wpmf-contextmenu-folder').length) {
$('body').append(context_folder);
}
// Add the context menu box for attachment to body
if (!$('.wpmf-contextmenu.wpmf-contextmenu-file').length) {
$('body').append(context_file);
}
},
/**
* Open a lightbox to enter the new folder name
*
* @param parent_id id parent folder
*/
newFolder: function newFolder(parent_id) {
var options = {
title: wpmf.l18n.create_folder,
text: '',
negative: {
title: wpmf.l18n.cancel
},
positive: {
title: wpmf.l18n.create,
onClick: function onClick() {
// Call php script to create the folder
wpmfFoldersModule.createNewFolder($('.wpmf_newfolder_input').val(), parent_id);
// Hide the dialog
hideDialog(jQuery('#orrsDiag'));
}
}
};
showDialog(options);
// Bind the press enter key to submit the modal
$('.wpmf_newfolder_input').focus().on('keypress', function (e) {
if (e.which === 13) {
options.positive.onClick.call(this);
}
});
},
/**
* Send ajax request to create a new folder
*
* @param name string new folder name
* @param parent_id int parent folder
*/
createNewFolder: function createNewFolder(name, parent_id) {
return $.ajax({
type: "POST",
url: wpmf.vars.ajaxurl,
data: {
action: "wpmf",
task: "add_folder",
name: name,
parent: parent_id,
wpmf_nonce: wpmf.vars.wpmf_nonce
},
beforeSend: function beforeSend() {
// Show snackbar
wpmfSnackbarModule.show({
id: 'upload_folder',
content: wpmf.l18n.wpmf_folder_adding,
auto_close: false,
is_progress: true
});
},
success: function success(response) {
if (response.status) {
if (wpmfFoldersModule.page_type === 'upload-list') {
// In list view reload the page
$('.upload-php #posts-filter').submit();
return;
}
// Update the categories variables
wpmfFoldersModule.categories = response.categories;
wpmfFoldersModule.categories_order = response.categories_order;
// Regenerate the folder filter
wpmfFoldersModule.initFolderFilter();
// Reload the folders
wpmfFoldersModule.renderFolders();
wpmfSnackbarModule.close('upload_folder');
// Show snackbar
wpmfSnackbarModule.show({
id: 'folder_added',
icon: 'create_new_folder',
content: wpmf.l18n.wpmf_addfolder
});
wpmfFoldersModule.trigger('addFolder', response.term);
} else {
wpmfSnackbarModule.close('upload_folder');
// Show dialog when adding folder failed
showDialog({
title: wpmf.l18n.information, // todo : use the response message instead of a predefined one
text: response.msg,
closeicon: true
});
}
}
});
},
/**
* Clicki on edit icon on a folder
*/
clickEditFolder: function clickEditFolder(event, folder_id) {
event.stopPropagation();
// Retrieve the current folder name
var name = wpmfFoldersModule.categories[folder_id].label;
// Show the input dialog
var options = {
title: wpmf.l18n.promt,
text: '',
negative: {
title: wpmf.l18n.cancel
},
positive: {
title: wpmf.l18n.save,
onClick: function onClick() {
var new_name = $('.wpmf_newfolder_input').val();
if (new_name !== '' && new_name !== 'null') {
// Call php script to update folder name
wpmfFoldersModule.updateFolderName(folder_id, new_name);
// Close the dialog
hideDialog($('#orrsDiag'));
}
}
}
};
showDialog(options);
// Bind the press enter key to submit the modal
$('.wpmf_newfolder_input').keypress(function (e) {
if (e.which === 13) {
options.positive.onClick.call(this);
}
});
},
/**
* Update folder name
*
* @param id int id of folder
* @param name string new name of folder
*/
updateFolderName: function updateFolderName(id, name) {
return $.ajax({
type: "POST",
url: wpmf.vars.ajaxurl,
data: {
action: "wpmf",
task: "edit_folder",
name: name,
id: id,
wpmf_nonce: wpmf.vars.wpmf_nonce
},
beforeSend: function beforeSend() {
// Show snackbar
if (!$('.wpmf-snackbar[data-id="edit_folder"]').length) {
wpmfSnackbarModule.show({
id: 'edit_folder',
content: wpmf.l18n.folder_editing,
auto_close: false,
is_progress: true
});
}
},
success: function success(response) {
var $snack = wpmfSnackbarModule.getFromId('edit_folder');
wpmfSnackbarModule.close('edit_folder');
if (!response.status) {
if (name !== wpmfFoldersModule.categories[id].label) {
// todo: why do we check that?
showDialog({
title: wpmf.l18n.information,
text: response.msg,
closeicon: true
});
}
} else {
// Store variables in case of undo
var old_name = wpmfFoldersModule.categories[id].label;
// Update the name in stored variables
wpmfFoldersModule.categories[id].label = response.details.name;
// Render folders to update name
wpmfFoldersModule.renderFolders();
if (wpmfFoldersModule.page_type === 'upload-list') {
// Update the name in select input with the same number of spaces
var $selected_option = $('#wpmf-media-category option[value="' + id + '"]');
$selected_option.html($selected_option.html().slice(0, $selected_option.html().lastIndexOf(' ')) + name);
} else {
// Update the select filter
wpmfFoldersModule.initFolderFilter();
}
// Show snackbar
wpmfSnackbarModule.show({
id: 'undo_editfolder',
content: wpmf.l18n.wpmf_undo_editfolder,
is_undoable: true,
onUndo: function onUndo() {
// Cancel delete folder
wpmfFoldersModule.updateFolderName(id, old_name);
}
});
wpmfFoldersModule.trigger('updateFolder', id);
}
}
});
},
/**
* Delete folder click function in template
* @param event Object
* @param id int folder id to delete
*/
clickDeleteFolder: function clickDeleteFolder(event, id) {
event = event || window.event; // FF IE fix if event has not been passed in function
event.stopPropagation();
// Show an alter depending on if we delete also included images inside the folder
var alert_delete = void 0;
if (typeof wpmf.vars.wpmf_remove_media !== "undefined" && parseInt(wpmf.vars.wpmf_remove_media) === 1) {
alert_delete = wpmf.l18n.alert_delete_all;
} else {
alert_delete = wpmf.l18n.alert_delete;
}
showDialog({
title: alert_delete,
negative: {
title: wpmf.l18n.cancel
},
positive: {
title: wpmf.l18n.delete,
onClick: function onClick() {
// Add effect in the folder deleted while we wait the response from server
$('.wpmf-attachment[data-id="' + id + '"]').css({ 'opacity': '0.5' });
$('.wpmf-attachment[data-id="' + id + '"] .wpmf-attachment-preview').append('
');
wpmfFoldersModule.deleteFolder(id);
}
}
});
},
/**
* Send ajax request to delete a folder
* @param id
*/
deleteFolder: function deleteFolder(id) {
// Store some values in case of undo
var old_folder_name = wpmfFoldersModule.categories[id].label,
old_parent = wpmfFoldersModule.categories[id].parent_id;
$.ajax({
type: "POST",
url: wpmf.vars.ajaxurl,
data: {
action: "wpmf",
task: "delete_folder",
id: id,
wpmf_nonce: wpmf.vars.wpmf_nonce
},
beforeSend: function beforeSend() {
// Show snackbar
if (typeof wpmf.vars.wpmf_remove_media !== "undefined" && parseInt(wpmf.vars.wpmf_remove_media) === 1) {
if (!$('.wpmf-snackbar[data-id="deleting_folder"]').length) {
wpmfSnackbarModule.show({
id: 'deleting_folder',
content: wpmf.l18n.wpmf_folder_deleting,
auto_close: false,
is_progress: true
});
}
}
},
success: function success(response) {
if (response.status) {
if (wpmfFoldersModule.page_type === 'upload-list') {
// In list view reload the page
$('.upload-php #posts-filter').submit();
return;
}
// Update the categories variables
wpmfFoldersModule.categories = response.categories;
wpmfFoldersModule.categories_order = response.categories_order;
// Regenerate the folder filter
wpmfFoldersModule.initFolderFilter();
// Reload the folders
wpmfFoldersModule.renderFolders();
wpmfSnackbarModule.close('deleting_folder');
// Show snackbar
wpmfSnackbarModule.show({
id: 'undo_remove_folder',
content: wpmf.l18n.wpmf_undo_remove,
icon: 'delete_outline',
is_undoable: true,
onUndo: function onUndo() {
// Cancel delete folder
wpmfFoldersModule.createNewFolder(old_folder_name, old_parent);
}
});
wpmfFoldersModule.trigger('deleteFolder', id);
} else {
if (typeof response.msg !== "undefined" && response.msg === 'limit') {
wpmfFoldersModule.deleteFolder(id);
} else {
// todo : show error message from json response
showDialog({
title: wpmf.l18n.information,
text: response.error,
closeicon: true
});
$('.wpmf-attachment[data-id="' + id + '"]').css({ 'opacity': 1 });
}
}
}
});
},
/**
* Send ajax request to delete multiple folders
* @param ids
*/
deleteMultipleFolders: function deleteMultipleFolders(ids) {
if (ids.length) {
$.ajax({
type: "POST",
url: wpmf.vars.ajaxurl,
data: {
action: "wpmf",
task: "delete_multiple_folders",
id: ids.join(),
wpmf_nonce: wpmf.vars.wpmf_nonce
},
beforeSend: function beforeSend() {
// Show snackbar
if (!$('.wpmf-snackbar[data-id="deleting_folder"]').length) {
wpmfSnackbarModule.show({
id: 'deleting_folder',
content: wpmf.l18n.wpmf_folder_deleting,
auto_close: false,
is_progress: true
});
}
},
success: function success(response) {
if (response.status) {
if (wpmfFoldersModule.page_type === 'upload-list') {
// In list view reload the page
$('.upload-php #posts-filter').submit();
return;
}
// Update the categories variables
wpmfFoldersModule.categories = response.categories;
wpmfFoldersModule.categories_order = response.categories_order;
// Regenerate the folder filter
wpmfFoldersModule.initFolderFilter();
// Reload the folders
wpmfFoldersModule.renderFolders();
wpmfSnackbarModule.close('deleting_folder');
wpmfFoldersModule.trigger('deleteFolder');
} else {
if (typeof response.msg !== "undefined" && response.msg === 'limit') {
wpmfFoldersModule.deleteMultipleFolders(ids);
} else {
// todo : show error message from json response
showDialog({
title: wpmf.l18n.information,
text: response.error,
closeicon: true
});
$('.wpmf-attachment[data-id="' + id + '"]').css({ 'opacity': 1 });
}
}
}
});
}
},
/**
* Delete file click function in template
* @param event Object
* @param id int file id to delete
*/
clickDeleteFile: function clickDeleteFile(event, id) {
showDialog({
title: wpmf.l18n.alert_delete_file,
negative: {
title: wpmf.l18n.cancel
},
positive: {
title: wpmf.l18n.remove,
onClick: function onClick() {
wpmfFoldersModule.deletefile(id);
}
}
});
},
/**
* Send ajax request to delete a file
* @param id
*/
deletefile: function deletefile(id) {
// Store some values in case of undo
return $.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) {
wpmfFoldersModule.trigger('deleteFile', wpmfFoldersModule.last_selected_folder);
wpmfFoldersModule.reloadAttachments();
}
}
});
},
/**
* Change the breadcrumb content
* depending on the selected folder
*
* @param term_id
*/
updateBreadcrumb: function updateBreadcrumb(term_id) {
if (typeof term_id === "undefined") {
term_id = wpmfFoldersModule.getCurrentFolderId();
} else {
// Let's save this term as the last used one
wpmfFoldersModule.last_selected_folder = term_id;
}
// Get breadcrumb element
var $wpmf_breadcrumb = wpmfFoldersModule.getFrame().find('#wpmf-breadcrumb');
// Remove breadcrumb content
$wpmf_breadcrumb.html(null);
var category = wpmfFoldersModule.categories[term_id];
var breadcrumb_content = '';
// Ascend until there is no more parent
while (parseInt(category.parent_id) !== parseInt(wpmf.vars.parent)) {
// Generate breadcrumb element
breadcrumb_content = '
';
return helper;
},
appendTo: append_element,
delay: $(window).width() < 450 ? 500 : 100, // Prevent dragging when only trying to click
distance: 10,
revert: true,
revertDuration: 1000,
cursorAt: { top: 10, left: 10 },
drag: function drag() {},
start: function start(event, ui) {
// Save the element we drag in a variable to use this later
wpmfFoldersModule.dragging_elements = [this];
// Add the original size of element
$(ui.helper).css('width', $(ui.helper.context).outerWidth() + 'px');
$(ui.helper).css('height', $(ui.helper.context).outerWidth() + 'px');
if (!$(this).hasClass('wpmf-folder')) {
// We're moving a file, it could be multiple files dragging
if (wpmfFoldersModule.page_type === 'upload-list') {
// Save the element we drag in a variable to use this later
$frame.find('#the-list input[name="media[]"]:checked:not(".ui-draggable-dragging")').closest('tr').each(function () {
if (this !== wpmfFoldersModule.dragging_elements[0]) {
// Check that the element is not already in the list
wpmfFoldersModule.dragging_elements.push(this);
}
});
} else {
$frame.find('.attachments-browser ul.attachments .attachment[aria-checked="true"]:not(".ui-draggable-dragging")').each(function () {
if (this !== wpmfFoldersModule.dragging_elements[0]) {
// Check that the element is not already in the list
wpmfFoldersModule.dragging_elements.push(this);
}
});
}
if (wpmfFoldersModule.dragging_elements.length > 1) {
$('.wpmf-move-element .mdc-list-item__text').text(wpmf.l18n.moving + ' ' + wpmfFoldersModule.dragging_elements.length + ' ' + wpmf.l18n.files);
} else {
$('.wpmf-move-element .mdc-list-item__text').text(wpmf.l18n.moving + ' ' + wpmf.l18n.file);
}
}
// Add some style to original elements
$(wpmfFoldersModule.dragging_elements).each(function () {
$(this).addClass('wpmf-dragging');
});
},
stop: function stop(event, ui) {
// Revert style
$(wpmfFoldersModule.dragging_elements).each(function () {
$(this).removeClass('wpmf-dragging');
});
wpmfFoldersModule.dragging_elements = null;
}
});
},
sortableAll: function sortableAll($frame, preview_sortable, append_element, items_sortable) {
if (wpmfFoldersModule.page_type === 'upload-list') {
// sortable folder
var placeholder = '';
placeholder = 'mdc-list-item attachment wpmf-attachment material_design wpmf-folder mdc-ripple-upgraded wpmf-transparent';
$('.attachments').sortable({
placeholder: placeholder,
revert: true,
items: '.wpmf-folder:not(.wpmf-back)',
distance: 5,
tolerance: "pointer",
appendTo: append_element,
helper: function helper(e, item) {
return $(item).clone();
},
/** Prevent firefox bug positionnement **/
start: function start(event, ui) {},
stop: function stop(event, ui) {},
beforeStop: function beforeStop(event, ui) {
var userAgent = navigator.userAgent.toLowerCase();
if (ui.offset !== "undefined" && userAgent.match(/firefox/)) {
ui.helper.css('margin-top', 0);
}
},
update: function update() {
var order = '';
$.each($('.attachments .wpmf-folder'), function (i, val) {
if (order !== '') {
order += ',';
}
order += '"' + i + '":' + $(val).data('id');
wpmfFoldersModule.categories[$(val).data('id')].order = i;
});
order = '{' + order + '}';
// do re-order file
$.ajax({
type: "POST",
url: wpmf.vars.ajaxurl,
data: {
action: "wpmf",
task: "reorderfolder",
order: order,
wpmf_nonce: wpmf.vars.wpmf_nonce
},
success: function success(response) {
wpmfFoldersModule.trigger('foldersOrderChanged');
}
});
}
});
// sortable file
placeholder = '';
placeholder = 'mdc-list-item attachment wpmf-attachment material_design wpmf-folder mdc-ripple-upgraded wpmf-transparent';
$('.upload-php .wp-list-table.media').sortable({
placeholder: 'wpmf-highlight',
revert: true,
distance: 5,
items: '.wp-list-table.media #the-list > tr',
tolerance: "pointer",
appendTo: append_element,
helper: function helper(e, item) {
if (wpmfFoldersModule.page_type === 'upload-list' && $(item).is('tr')) {
var label = $(item).find('.filename span').text();
var full_label = $(item).find('.filename').text();
var filename = full_label.replace(label, "");
return '
' + filename + '
';
} else {
return $(item).clone();
}
},
/** Prevent firefox bug positionnement **/
start: function start(event, ui) {
// Save the element we drag in a variable to use this later
wpmfFoldersModule.dragging_elements = [$(ui.item)];
// Add the original size of element
if (!$($(ui.helper)).hasClass('wpmf-folder')) {
// Save the element we drag in a variable to use this later
$frame.find('#the-list input[name="media[]"]:checked:not(".ui-draggable-dragging")').closest('tr').each(function () {
if (this !== wpmfFoldersModule.dragging_elements[0][0]) {
// Check that the element is not already in the list
wpmfFoldersModule.dragging_elements.push($(this));
}
});
}
var cols = $('.wp-list-table.media thead tr th').length + $('.wp-list-table.media thead tr td').length;
ui.placeholder.html("
");
},
stop: function stop(event, ui) {
wpmfFoldersModule.dragging_elements = null;
},
beforeStop: function beforeStop(event, ui) {
var userAgent = navigator.userAgent.toLowerCase();
if (ui.offset !== "undefined" && userAgent.match(/firefox/)) {
ui.helper.css('margin-top', 0);
}
},
beforeRevert: function beforeRevert(e, ui) {
return true;
},
update: function update() {
var order = '';
var element = '';
$.each($('.wp-list-table.media #the-list > tr'), function (i, val) {
var string_id = $(val).attr('id');
if (order !== '') {
order += ',';
}
order += '"' + i + '":' + string_id.replace("post-", "");
});
order = '{' + order + '}';
// do re-order file
$.ajax({
type: "POST",
url: wpmf.vars.ajaxurl,
data: {
action: "wpmf",
task: "reorderfile",
order: order,
wpmf_nonce: wpmf.vars.wpmf_nonce
},
success: function success(response) {
if (wpmfFoldersModule.page_type !== 'upload-list') {
wpmfFoldersModule.reloadAttachments();
}
}
});
}
});
$(".upload-php .wp-list-table.media").disableSelection();
} else {
var _placeholder = '';
$('.attachments').sortable({
placeholder: '',
revert: true,
cancel: ".ui-state-disabled",
items: '.attachment:not(.ui-state-disabled):not(.wpmf-new):not(.wpmf-back)',
distance: 5,
tolerance: "pointer",
appendTo: append_element,
helper: function helper(e, item) {
return $(item).clone();
},
/** Prevent firefox bug positionnement **/
start: function start(event, ui) {
if ($(ui.item).hasClass('attachment save-ready')) {
$('.wpmf-attachment').addClass('ui-state-disabled');
_placeholder = 'attachment';
} else {
$('.attachment.save-ready').addClass('ui-state-disabled');
_placeholder = 'mdc-list-item attachment wpmf-attachment material_design wpmf-folder mdc-ripple-upgraded wpmf-transparent';
}
$(ui.placeholder).addClass(_placeholder);
wpmfFoldersModule.dragging_elements = [$(ui.item)];
// Add the original size of element
if (!$($(ui.helper)).hasClass('wpmf-folder')) {
// We're moving a file, it could be multiple files dragging
$frame.find('.attachments-browser ul.attachments .attachment[aria-checked="true"]:not(".ui-draggable-dragging")').each(function () {
if (this !== wpmfFoldersModule.dragging_elements[0][0]) {
// Check that the element is not already in the list
wpmfFoldersModule.dragging_elements.push($(this));
}
});
}
ui.placeholder.html("");
},
stop: function stop(event, ui) {
$('.attachment').removeClass('ui-state-disabled');
},
beforeStop: function beforeStop(event, ui) {
var userAgent = navigator.userAgent.toLowerCase();
if (ui.offset !== "undefined" && userAgent.match(/firefox/)) {
ui.helper.css('margin-top', 0);
}
},
update: function update(event, ui) {
if ($(ui.item).hasClass('wpmf-folder')) {
var order = '';
$.each($('.attachments .wpmf-folder'), function (i, val) {
if (order !== '') {
order += ',';
}
order += '"' + i + '":' + $(val).data('id');
wpmfFoldersModule.categories[$(val).data('id')].order = i;
});
order = '{' + order + '}';
// do re-order file
$.ajax({
type: "POST",
url: wpmf.vars.ajaxurl,
data: {
action: "wpmf",
task: "reorderfolder",
order: order,
wpmf_nonce: wpmf.vars.wpmf_nonce
},
success: function success() {
wpmfFoldersModule.trigger('foldersOrderChanged');
}
});
} else {
var _order = '';
if (wpmfFoldersModule.page_type === 'upload-list') {
$.each($('.wp-list-table.media #the-list > tr'), function (i, val) {
var string_id = $(val).attr('id');
if (_order !== '') {
_order += ',';
}
_order += '"' + i + '":' + string_id.replace("post-", "");
});
_order = '{' + _order + '}';
} else {
$.each($('.attachments .attachment:not(.wpmf-attachment)'), function (i, val) {
if (_order !== '') {
_order += ',';
}
_order += '"' + i + '":' + $(val).data('id');
});
_order = '{' + _order + '}';
}
// do re-order file
$.ajax({
type: "POST",
url: wpmf.vars.ajaxurl,
data: {
action: "wpmf",
task: "reorderfile",
order: _order,
wpmf_nonce: wpmf.vars.wpmf_nonce
},
success: function success(response) {
if (wpmfFoldersModule.page_type !== 'upload-list') {
wpmfFoldersModule.reloadAttachments();
}
}
});
}
}
});
$(".attachments").disableSelection();
}
},
/**
* Custom order
* @param $frame
* @param append_element
*/
sortableFolder: function sortableFolder($frame, append_element) {
var placeholder = 'mdc-list-item attachment wpmf-attachment material_design wpmf-folder mdc-ripple-upgraded wpmf-transparent';
if (wpmfFoldersModule.page_type !== 'upload-list') {
$('.attachments').sortable();
$('.attachments').sortable('enable');
}
$('.attachments').sortable({
placeholder: placeholder,
revert: true,
distance: 5,
items: '.wpmf-folder:not(.wpmf-back)',
tolerance: "pointer",
appendTo: append_element,
helper: function helper(e, item) {
return $(item).clone();
},
/** Prevent firefox bug positionnement **/
start: function start(event, ui) {},
stop: function stop(event, ui) {},
beforeStop: function beforeStop(event, ui) {
var userAgent = navigator.userAgent.toLowerCase();
if (ui.offset !== "undefined" && userAgent.match(/firefox/)) {
ui.helper.css('margin-top', 0);
}
},
update: function update() {
var order = '';
$.each($('.attachments .wpmf-folder'), function (i, val) {
if (order !== '') {
order += ',';
}
order += '"' + i + '":' + $(val).data('id');
wpmfFoldersModule.categories[$(val).data('id')].order = i;
});
order = '{' + order + '}';
// do re-order file
$.ajax({
type: "POST",
url: wpmf.vars.ajaxurl,
data: {
action: "wpmf",
task: "reorderfolder",
order: order,
wpmf_nonce: wpmf.vars.wpmf_nonce
},
success: function success() {
wpmfFoldersModule.trigger('foldersOrderChanged');
}
});
}
}).disableSelection();
},
/**
* Custom order
* @param $frame
* @param append_element
* @param items
* @param preview
* @param placeholder
*/
sortableFile: function sortableFile($frame, append_element, items, preview, placeholder) {
if (wpmfFoldersModule.page_type !== 'upload-list') {
$(preview).sortable();
}
$(preview).sortable({
placeholder: placeholder,
revert: true,
distance: 10,
cursorAt: { top: 10, left: 10 },
items: items,
tolerance: "pointer",
appendTo: append_element,
helper: function helper(e, item) {
var helper = '
';
return helper;
},
/** Prevent firefox bug positionnement **/
start: function start(event, ui) {
// Save the element we drag in a variable to use this later
wpmfFoldersModule.dragging_elements = [$(ui.item)];
// Add the original size of element
if (!$($(ui.helper)).hasClass('wpmf-folder')) {
// We're moving a file, it could be multiple files dragging
if (wpmfFoldersModule.page_type === 'upload-list') {
// Save the element we drag in a variable to use this later
$frame.find('#the-list input[name="media[]"]:checked:not(".ui-draggable-dragging")').closest('tr').each(function () {
if (this !== wpmfFoldersModule.dragging_elements[0][0]) {
// Check that the element is not already in the list
wpmfFoldersModule.dragging_elements.push($(this));
}
});
} else {
$frame.find('.attachments-browser ul.attachments .attachment[aria-checked="true"]:not(".ui-draggable-dragging")').each(function () {
if (this !== wpmfFoldersModule.dragging_elements[0][0]) {
// Check that the element is not already in the list
wpmfFoldersModule.dragging_elements.push($(this));
}
});
}
}
if (wpmfFoldersModule.page_type === 'upload-list') {
var cols = $('.wp-list-table.media thead tr th').length + $('.wp-list-table.media thead tr td').length;
ui.placeholder.html("
");
} else {
ui.placeholder.html("");
}
},
stop: function stop(event, ui) {
wpmfFoldersModule.dragging_elements = null;
},
beforeStop: function beforeStop(event, ui) {
var userAgent = navigator.userAgent.toLowerCase();
if (ui.offset !== "undefined" && userAgent.match(/firefox/)) {
ui.helper.css('margin-top', 0);
}
},
beforeRevert: function beforeRevert(e, ui) {
return true;
},
update: function update() {
var order = '';
if (wpmfFoldersModule.page_type === 'upload-list') {
$.each($('.wp-list-table.media #the-list > tr'), function (i, val) {
var string_id = $(val).attr('id');
if (order !== '') {
order += ',';
}
order += '"' + i + '":' + string_id.replace("post-", "");
});
order = '{' + order + '}';
} else {
$.each($('.attachments .attachment:not(.wpmf-attachment)'), function (i, val) {
if (order !== '') {
order += ',';
}
order += '"' + i + '":' + $(val).data('id');
});
order = '{' + order + '}';
}
// do re-order file
$.ajax({
type: "POST",
url: wpmf.vars.ajaxurl,
data: {
action: "wpmf",
task: "reorderfile",
order: order,
wpmf_nonce: wpmf.vars.wpmf_nonce
},
success: function success(response) {
if (wpmfFoldersModule.page_type !== 'upload-list') {
wpmfFoldersModule.reloadAttachments();
}
}
});
}
});
$(".attachments").disableSelection();
},
/**
* Function called when an attachment is dropped in a folder
* @param to_folder_id
*/
droppedAttachment: function droppedAttachment(to_folder_id) {
if ($(wpmfFoldersModule.dragging_elements).hasClass('wpmf-folder')) {
// We're dropping a folder
// Send request to move folder
wpmfFoldersModule.moveFolder($(wpmfFoldersModule.dragging_elements).data('id'), to_folder_id);
} else {
// We're dropping an attachment
var files_ids = [];
// Retrieve the ids of files dragged
$(wpmfFoldersModule.dragging_elements).each(function () {
if (wpmfFoldersModule.page_type === 'upload-list') {
var row_ids = $(this).attr('id');
var row_id = row_ids.split('-');
var file_id = parseInt(row_id[1]);
if (files_ids.indexOf(file_id) === -1) {
files_ids.push(file_id);
}
} else {
files_ids.push($(this).data('id'));
}
});
// Send request to move files
wpmfFoldersModule.moveFile(files_ids, to_folder_id, wpmfFoldersModule.last_selected_folder);
}
},
/**
* Move a folder inside another folder
*
* @param folder_id int folder we're moving
* @param folder_to_id int folder we're moving into
* @return jqXHR
*/
moveFolder: function moveFolder(folder_id, folder_to_id) {
// Store parent id in order to use it in the undo function
var parent_id = wpmfFoldersModule.categories[folder_id].parent_id;
return $.ajax({
type: "POST",
url: wpmf.vars.ajaxurl,
data: {
action: "wpmf",
task: "move_folder",
id: folder_id,
id_category: folder_to_id,
type: 'move', // todo: handle the undo feature
wpmf_nonce: wpmf.vars.wpmf_nonce
},
beforeSend: function beforeSend() {
// Show snackbar
if (!$('.wpmf-snackbar[data-id="moving_folder"]').length) {
wpmfSnackbarModule.show({
id: 'moving_folder',
content: wpmf.l18n.folder_moving,
auto_close: false,
is_progress: true
});
}
},
success: function success(response) {
if (response.status) {
// Update the categories variables
wpmfFoldersModule.categories = response.categories;
wpmfFoldersModule.categories_order = response.categories_order;
// Reload the folders
wpmfFoldersModule.renderFolders();
// Trigger event
wpmfFoldersModule.trigger('moveFolder', folder_id, folder_to_id);
wpmfSnackbarModule.close('moving_folder');
// Show snackbar
wpmfSnackbarModule.show({
id: 'undo_movefolder',
content: wpmf.l18n.wpmf_undo_movefolder,
icon: 'trending_flat',
is_undoable: true,
onUndo: function onUndo() {
// Move back to old folder
wpmfFoldersModule.moveFolder(folder_id, parent_id);
}
});
} else {
wpmfSnackbarModule.close('moving_folder');
if (typeof response.msg !== "undefined") {
//todo: change wrong variable name to something more understandable like message or error_message, and what should we do if wrong is set?
showDialog({
title: wpmf.l18n.information,
text: response.msg,
closeicon: true
});
}
}
}
});
},
/**
* Move a file into a folder
*
* @param files_ids array(int) Array of files to move
* @param folder_to_id int folder to move the files into
* @param folder_from_id int folder we move the file from
* @return jqXHR
*/
moveFile: function moveFile(files_ids, folder_to_id, folder_from_id) {
var undo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
if (parseInt(folder_to_id) === parseInt(folder_from_id)) {
return;
}
if (typeof wpmfFoldersModule.categories[folder_to_id].drive_type !== "undefined" && wpmfFoldersModule.categories[folder_to_id].drive_type !== '') {
var check = true;
$.each(files_ids, function (i, id) {
var size = wp.media.attachment(id).get('filesizeInBytes');
var cloud_media = wp.media.attachment(id).get('cloud_media');
if (size > 25165824 && parseInt(cloud_media) === 0) {
check = false;
return false;
}
});
if (!check) {
showDialog({
title: wpmf.l18n.information,
text: wpmf.l18n.move_confirm_msg,
negative: {
title: wpmf.l18n.cancel
},
positive: {
title: wpmf.l18n.proceed,
onClick: function onClick() {
wpmfFoldersModule.doMoveFile(files_ids, folder_to_id, folder_from_id, undo);
}
}
});
} else {
wpmfFoldersModule.doMoveFile(files_ids, folder_to_id, folder_from_id, undo);
}
} else {
wpmfFoldersModule.doMoveFile(files_ids, folder_to_id, folder_from_id, undo);
}
},
doMoveFile: function doMoveFile(files_ids, folder_to_id, folder_from_id, undo) {
$.ajax({
type: "POST",
url: wpmf.vars.ajaxurl,
data: {
action: "wpmf",
task: "move_file",
ids: files_ids,
id_category: folder_to_id,
current_category: folder_from_id,
type: 'move', // todo: handle the undo feature
wpmf_nonce: wpmf.vars.wpmf_nonce
},
beforeSend: function beforeSend() {
// Show snackbar
if (!$('.wpmf-snackbar[data-id="moving_file"]').length) {
wpmfSnackbarModule.show({
id: 'moving_file',
content: files_ids.length > 1 ? files_ids.length + ' ' + wpmf.l18n.files_moving : wpmf.l18n.file_moving,
icon: ' snippet_folder ',
auto_close: false,
is_progress: true
});
}
},
success: function success(response) {
if (response.status) {
if (wpmfFoldersModule.page_type === 'upload-list') {
location.reload();
return;
}
// reload attachment after move file
if (!$('.display-all-media .check').length || $('.display-all-media .check').length && parseInt(wpmfFoldersModule.last_selected_folder) !== 0) {
$.each(files_ids, function (i, v) {
$('.attachment[data-id="' + v + '"]').remove();
});
}
if (!undo) {
wpmfFoldersModule.reload_attachment = false;
} else {
var order_media = $('#media-order-media').val();
// if set custom media order filter
if (order_media === 'custom') {
setTimeout(function () {
wpmfFoldersModule.reloadAttachments();
}, 400);
} else {
wpmfFoldersModule.reloadAttachments();
}
wpmfFoldersModule.reload_attachment = true;
}
if ($('.mode-select .select-mode-toggle-button').length) {
$('.mode-select .select-mode-toggle-button').click();
}
if ($('.selection-info .clear-selection').length) {
$('.selection-info .clear-selection').click();
}
wpmfSnackbarModule.close('moving_file');
wpmfFoldersModule.categories[folder_from_id].files_count -= files_ids.length;
wpmfFoldersModule.categories[folder_to_id].files_count += files_ids.length;
wpmfFoldersModule.trigger('moveFile', files_ids, folder_to_id, folder_from_id);
if (typeof response.is_local_to_cloud !== "undefined" && !response.is_local_to_cloud) {
// Show snackbar
wpmfSnackbarModule.show({
id: 'undo_movefile',
content: files_ids.length > 1 ? files_ids.length + ' ' + wpmf.l18n.files_moved : wpmf.l18n.file_moved,
icon: ' snippet_folder ',
is_undoable: true,
onUndo: function onUndo() {
// Cancel moving files
wpmfFoldersModule.moveFile(files_ids, folder_from_id, folder_to_id, true);
}
});
} else {
wpmfSnackbarModule.show({
id: 'undo_movefile',
content: files_ids.length > 1 ? files_ids.length + ' ' + wpmf.l18n.files_moved : wpmf.l18n.file_moved,
icon: ' snippet_folder ',
is_undoable: false
});
$(document).trigger('move_queue_status', files_ids.length);
}
} else {
if (typeof response.msg !== "undefined") {
wpmfSnackbarModule.close('moving_file');
showDialog({
title: wpmf.l18n.information,
text: response.msg,
closeicon: true
});
}
}
}
});
},
/**
* Init show attachment label
*/
initAttachmentLabelS3: function initAttachmentLabelS3() {
// Return if the config do not allow it
if (wpmfFoldersModule.aws3_label === false) {
return;
}
wpmfFoldersModule.getFrame().find('.attachments-browser ul.attachments .attachment .thumbnail').each(function (i, v) {
var $wrap = $(v).closest('.attachment');
var id = $wrap.data('id');
var src_img = wp.media.attachment(id).get('url');
var aws3_infos = wp.media.attachment(id).get('aws3_infos');
if (typeof src_img !== "undefined") {
if (typeof aws3_infos !== "undefined") {
if (!$wrap.find('.wpmf_aws_text').length) {
var endpoint = 'aws3';
if (typeof aws3_infos.endpoint !== "undefined") {
endpoint = aws3_infos.endpoint;
}
var aws_text = 'aws3';
switch (endpoint) {
case 'wasabi':
aws_text = 'Wasabi';
break;
case 'digitalocean':
aws_text = 'DigitalOcean';
break;
case 'linode':
aws_text = 'Linode';
break;
case 'google_cloud_storage':
aws_text = 'Google Cloud';
break;
case 'bunny_cdn_edge':
aws_text = 'BunnyNet';
break;
}
$wrap.find('.attachment-preview').append('' + aws_text + '');
var aws_text_info = '';
aws_text_info += '
Bucket: ' + aws3_infos.Bucket + '
';
aws_text_info += '
Path: ' + aws3_infos.Key + '
';
aws_text_info += '
Region: ' + aws3_infos.Region + '
';
aws_text_info += '
Access: ' + aws3_infos.Acl + '
';
var aws3_tooltip = '
' + aws_text_info + '
';
$wrap.find('.attachment-preview').append(aws3_tooltip);
}
}
}
});
tippy('.wpmf_aws_text', {
theme: 'wpmf',
animation: 'scale',
animateFill: false,
maxWidth: 300,
duration: 0,
arrow: true,
allowHTML: true,
onShow: function onShow(instance) {
var id = $(instance.reference).data('wpmftippy_id');
instance.popper.hidden = false;
instance.setContent($('#tippy_' + id).html());
}
});
},
/**
* Init hover image
*/
initHoverImage: function initHoverImage() {
// Return if the config do not allow it
if (wpmfFoldersModule.hover_image === false) {
return;
}
if (wp !== undefined && wp.media !== undefined && wp.media.frame !== undefined && wp.media.frame._state === 'gallery-edit') {
return;
}
// todo : rewrite and comment this part
var yOffset = 30;
// these 2 variable determine popup's distance from the cursor
// you might want to adjust to get the right result
/* END CONFIG */
wpmfFoldersModule.getFrame().find('.attachments-browser ul.attachments .attachment .thumbnail').on('mouseenter', function (e) {
var $this = $(this);
if ($this.closest('.attachment-preview').hasClass('type-image') && !$this.closest('.attachment.loading').length) {
var id_img = $(this).closest('.attachment').data('id');
var ext = '!svg';
if (typeof wpmfFoldersModule.hover_images[id_img] === "undefined") {
/* Get some attribute */
var sizes = wp.media.attachment(id_img).get('sizes');
var title = wp.media.attachment(id_img).get('title');
var is_video = wp.media.attachment(id_img).get('is_video');
var video_url = wp.media.attachment(id_img).get('video_url');
var caption = wp.media.attachment(id_img).get('caption');
var filename = wp.media.attachment(id_img).get('filename');
var width = 0;
if ($this.closest('.attachment-preview').hasClass('subtype-svg+xml')) {
var wpmfurl = $this.find('img').attr('src');
ext = 'svg';
return;
} else {
if (typeof sizes !== "undefined") {
if (typeof sizes.medium !== "undefined" && typeof sizes.medium.url !== "undefined") {
wpmfurl = sizes.medium.url;
if (typeof sizes.medium.width !== "undefined") {
width = sizes.medium.width;
}
} else {
wpmfurl = $this.find('img').attr('src');
width = $this.find('img').width();
}
} else {
wpmfurl = $this.find('img').attr('src');
width = $this.find('img').width();
}
}
if (typeof title === "undefined") {
title = "";
}
if (typeof filename === "undefined") {
filename = "";
}
title = wpmfescapeScripts(title);
wpmfFoldersModule.hover_images[id_img] = {
'title': title,
'is_video': is_video,
'video_url': video_url,
'caption': caption,
'wpmfurl': wpmfurl,
'filename': filename,
'width': width,
'ext': ext
};
}
var html = "
";
html += '
';
html += "";
html += "";
if (parseInt(wpmfFoldersModule.hover_images[id_img].is_video) === 1) {
html += wpmfFoldersModule.hover_images[id_img].title;
} else {
html += wpmfFoldersModule.hover_images[id_img].filename;
}
html += "";
html += " ";
html += "";
if (parseInt(wpmfFoldersModule.hover_images[id_img].is_video) === 1) {
if (wpmfFoldersModule.hover_images[id_img].video_url !== '') {
html += wpmfFoldersModule.hover_images[id_img].video_url;
}
} else {
html += wpmfFoldersModule.hover_images[id_img].title;
}
html += "";
html += "";
html += "
";
if ($('#wpmf_preview_image').length === 0) {
$("body").append(html);
$("#wpmf_preview_image").fadeIn("fast");
var top;
if (e.pageY + $("#wpmf_preview_image").height() > $('body').height()) {
top = e.pageY - $("#wpmf_preview_image").height() - 50;
} else {
top = e.pageY - $("#wpmf_preview_image").height() / 2 - 50;
}
if (e.pageX + 300 > $('body').width()) {
$("#wpmf_preview_image").css("top", top + "px").css("left", e.pageX - 350 + "px").fadeIn("fast");
} else {
$("#wpmf_preview_image").css("top", top + "px").css("left", e.pageX + yOffset + "px").fadeIn("fast");
}
}
}
}).on('mouseleave', wpmfFoldersModule.getFrame().find('.attachments-browser ul.attachments .attachment .thumbnail'), function () {
$("#wpmf_preview_image").remove();
});
},
addCreateGalleryBtn: function addCreateGalleryBtn() {
if (parseInt(wpmf.vars.usegellery) === 1) {
if ($('.btn-selectall').length === 0) {
var btnSelectAll = "" + wpmf.l18n.create_gallery_folder + "";
$('.button.media-button.button-primary.button-large.media-button-gallery').before(btnSelectAll);
}
if ($('.btn-selectall-gallery').length === 0) {
var btnSelectAll1 = "" + wpmf.l18n.create_gallery_folder + "";
$('.button.media-button.button-primary.button-large.media-button-insert').before(btnSelectAll1);
}
}
},
initRemoteVideo: function initRemoteVideo() {
// Ajax function which creates the video
var create_remote_video = function create_remote_video() {
var remote_link = $('.wpmf_remote_video_input').val();
$.ajax({
type: "POST",
url: wpmf.vars.ajaxurl,
data: {
action: "wpmf",
task: "create_remote_video",
wpmf_remote_link: remote_link,
folder_id: wpmfFoldersModule.last_selected_folder,
wpmf_nonce: wpmf.vars.wpmf_nonce
},
success: function success(response) {
if (response.status) {
wpmfSnackbarModule.show({
id: 'remote_video_uploaded',
content: wpmf.l18n.video_uploaded
});
wpmfFoldersModule.reloadAttachments();
wpmfFoldersModule.trigger('addRemoteVideo', wpmfFoldersModule.last_selected_folder);
} else {
showDialog({
title: wpmf.l18n.information,
text: response.msg,
closeicon: true
});
}
}
});
};
// Initialize main functionality
if (wpmf.vars.hide_remote_video) {
$('.wpmf_btn_remote_video,.wpmf_icon_remote_video').on('click', function () {
var html = '';
html += '
';
html += '
';
html += '';
html += '';
html += '';
html += 'play_circle_filled';
html += '