/** * Folder filters for WPMF */ let wpmfFoldersFiltersModule; (function ($) { wpmfFoldersFiltersModule = { events: [], // event handling wpmf_all_media: false, /** * Initialize module related things */ initModule: function (page_type) { if (wpmf.vars.usefilter === 1) { // fix conflict with WP smush , image recycle plugin if (wpmf.vars.wpmf_pagenow === 'upload.php' && !page_type) { return; } if (page_type === 'upload-list') { wpmfFoldersFiltersModule.initListSizeFilter(); wpmfFoldersFiltersModule.initListWeightFilter(); wpmfFoldersFiltersModule.initListMyMediasFilter(); wpmfFoldersFiltersModule.initListAllMediasFilter(); wpmfFoldersFiltersModule.initListFolderOrderFilter(); wpmfFoldersFiltersModule.initListFilesOrderFilter(); // Auto submit when a select box is changed $('.filter-items select').on('change', function () { $('#post-query-submit').click(); }); } else { if (typeof wp.media.view.AttachmentsBrowser !== "undefined") { wpmfFoldersFiltersModule.initSizeFilter(); wpmfFoldersFiltersModule.initWeightFilter(); wpmfFoldersFiltersModule.initMyMediasFilter(); wpmfFoldersFiltersModule.initFoldersOrderFilter(); wpmfFoldersFiltersModule.initFilesOrderFilter(); } } const initDropdown = function ($current_frame) { // Check if the dropdown has already been added to the current frame if (!$current_frame.find('.wpmf-dropdown').length) { // Initialize dropdown wpmfFoldersFiltersModule.initDropdown($current_frame); } }; if (wpmfFoldersModule.page_type === 'upload-list') { wpmfFoldersFiltersModule.initFilter(); // Don't need to wait on list page initDropdown(wpmfFoldersModule.getFrame()); } else { // Wait main module to be ready on modal window wpmfFoldersModule.on('ready', function ($current_frame) { wpmfFoldersFiltersModule.initFilter(); initDropdown($current_frame); }); } } }, /** * Init filter */ initFilter: function () { let data = {}; let order_folder = wpmfFoldersModule.getCookie('media-order-folder' + wpmf.vars.host); let order_media = wpmfFoldersModule.getCookie('media-order-media' + wpmf.vars.host); let wpmf_all_media = wpmfFoldersModule.getCookie('wpmf_all_media' + wpmf.vars.host); let ownMedia = wpmfFoldersModule.getCookie('wpmf-display-media-filters' + wpmf.vars.host); if (typeof wpmf_all_media !== "undefined" && parseInt(wpmf_all_media) === 1) { $('.display-all-media').prepend('check'); data.wpmf_all_media = wpmf_all_media; wpmfFoldersFiltersModule.wpmf_all_media = 1; } if (typeof ownMedia !== "undefined" && ownMedia === 'yes') { $('.own-user-media').prepend('check'); $('#wpmf-display-media-filters').val(ownMedia); data.wpmf_display_media = 'yes'; } if (typeof order_folder !== "undefined" && order_folder !== "undefined" && order_folder !== "null" && order_folder !== 'all' && order_folder !== '') { $('#media-order-folder').val(order_folder); } if (typeof order_media !== "undefined" && order_media !== "undefined" && order_media !== "null" && order_media !== 'all' && order_media !== '') { $('#media-order-media').val(order_media); switch (order_media) { case 'date|asc': data.orderby = false; data.wpmf_orderby = 'date'; data.order = 'ASC'; break; case 'date|desc': data.orderby = false; data.wpmf_orderby = 'date'; data.order = 'DESC'; break; case 'title|asc': data.meta_key = ''; data.orderby = false; data.wpmf_orderby = 'title'; data.order = 'ASC'; break; case 'title|desc': data.meta_key = ''; data.orderby = false; data.wpmf_orderby = 'title'; data.order = 'DESC'; break; case 'size|asc': data.meta_key = 'wpmf_size'; data.orderby = false; data.wpmf_orderby = 'meta_value_num'; data.order = 'ASC'; break; case 'size|desc': data.meta_key = 'wpmf_size'; data.orderby = false; data.wpmf_orderby = 'meta_value_num'; data.order = 'DESC'; break; case 'filetype|asc': data.meta_key = 'wpmf_filetype'; data.orderby = false; data.wpmf_orderby = 'meta_value'; data.order = 'ASC'; break; case 'filetype|desc': data.meta_key = 'wpmf_filetype'; data.orderby = false; data.wpmf_orderby = 'meta_value'; data.order = 'DESC'; break; case 'custom': data.meta_key = 'wpmf_order'; data.orderby = false; data.wpmf_orderby = 'meta_value_num'; data.order = 'ASC'; break; } } if (wpmfFoldersModule.page_type !== 'upload-list') { let n = wpmfFoldersModule.getBackboneOfMedia(); if (typeof n.view !== 'undefined') { n.view.collection.props.set(data); } } }, /** * Initialize media size filtering */ initSizeFilter: function () { let myMediaViewAttachmentsBrowser = wp.media.view.AttachmentsBrowser; // render filter to toolbar if (typeof myMediaViewAttachmentsBrowser !== "undefined") { wp.media.view.AttachmentsBrowser = wp.media.view.AttachmentsBrowser.extend({ createToolbar: function () { // call the original method myMediaViewAttachmentsBrowser.prototype.createToolbar.apply(this, arguments); // add our custom filter wpmfFoldersModule.attachments_browser.toolbar.set('sizetags', new wp.media.view.AttachmentFilters['wpmf_attachment_size']({ controller: wpmfFoldersModule.attachments_browser.controller, model: wpmfFoldersModule.attachments_browser.collection.props, priority: -74 }).render()); } }); wp.media.view.AttachmentFilters['wpmf_attachment_size'] = wp.media.view.AttachmentFilters.extend({ className: 'wpmf-attachment-size attachment-filters', id: 'media-attachment-size-filters', createFilters: function () { let filters = {}; _.each(wpmf.vars.wpmf_size || [], function (text) { filters[text] = { text: text, props: { wpmf_size: text } }; }); filters.all = { text: wpmf.l18n.all_size_label, props: { wpmf_size: 'all' }, priority: 10 }; this.filters = filters; } }); } }, /** * Initialize the media size filtering for list view */ initListSizeFilter: function () { let filter_size = ''; $('#wpmf-media-category').after(''); $('#wpmf-media-category').after(''); $('#wpmf-media-category').after(filter_size + ''); }, /** * Initialize media weight filtering */ initWeightFilter: function () { let myMediaViewAttachmentsBrowser = wp.media.view.AttachmentsBrowser; wp.media.view.AttachmentsBrowser = wp.media.view.AttachmentsBrowser.extend({ createToolbar: function () { // call the original method myMediaViewAttachmentsBrowser.prototype.createToolbar.apply(this, arguments); // add our custom filter wpmfFoldersModule.attachments_browser.toolbar.set('weighttags', new wp.media.view.AttachmentFilters['wpmf_attachment_weight']({ controller: this.controller, model: this.collection.props, priority: -74 }).render()); } }); wp.media.view.AttachmentFilters['wpmf_attachment_weight'] = wp.media.view.AttachmentFilters.extend({ className: 'wpmf-attachment-weight attachment-filters', id: 'media-attachment-weight-filters', createFilters: function () { let filters = {}; _.each(wpmf.vars.wpmf_weight || [], function (text) { let labels = text[0].split('-'); let label; if (text[1] === 'kB') { label = (labels[0] / 1024) + ' kB-' + (labels[1] / 1024) + ' kB'; } else { label = (labels[0] / (1024 * 1024)) + ' MB-' + (labels[1] / (1024 * 1024)) + ' MB'; } filters[text[0]] = { text: label, props: { wpmf_weight: text[0] } }; }); filters.all = { text: wpmf.l18n.all_weight_label, props: { wpmf_weight: 'all' }, priority: -74 }; this.filters = filters; } }); }, /** * Initialize the media weight filtering for list view */ initListWeightFilter: function () { let filter_weight = ''; $('#wpmf-media-category').after(filter_weight + ''); }, /** * Initialize media folders ordering */ initFoldersOrderFilter: function () { wpmfFoldersModule.on('ready', function ($current_frame) { if ($current_frame.find('#media-order-folder').length) { // Filter already initialized return; } let element = ''; $current_frame.find('.media-frame-content .media-toolbar-secondary').append(element); $current_frame.find('#media-order-folder').on('change', function () { let a = $(this).val(); if (typeof a !== "undefined" && a !== "undefined" && a !== "null" && a !== '') { wpmfFoldersModule.setCookie('media-order-folder' + wpmf.vars.host, a, 365); } wpmfFoldersModule.setFolderOrdering(this.value); wpmfFoldersFiltersModule.trigger('foldersOrderChanged'); }); }); }, /** * Initialize the media ordering for list view */ initListFolderOrderFilter: function () { let filter_order = ''; $('#wpmf-media-category').after(filter_order); if (wpmf.vars.wpmf_order_f && wpmf.vars.wpmf_order_f !== '') { $('.wpmf-order-folder option[value="' + wpmf.vars.wpmf_order_f + '"]').prop('selected', true); } }, /** * Initialize media ordering */ initFilesOrderFilter: function () { let myMediaViewAttachmentsBrowser = wp.media.view.AttachmentsBrowser; // render filter to toolbar wp.media.view.AttachmentsBrowser = wp.media.view.AttachmentsBrowser.extend({ createToolbar: function () { // call the original method myMediaViewAttachmentsBrowser.prototype.createToolbar.apply(this, arguments); // add our custom filter wpmfFoldersModule.attachments_browser.toolbar.set('ordermediatags', new wp.media.view.AttachmentFilters['wpmf_order_media']({ controller: this.controller, model: this.collection.props, priority: -74 }).render()); } }); /* Filter sort media */ wp.media.view.AttachmentFilters['wpmf_order_media'] = wp.media.view.AttachmentFilters.extend({ className: 'wpmf-order-media attachment-filters', id: 'media-order-media', createFilters: function () { let filters = {}; _.each(wpmf.l18n.order_media || [], function (text, key) { switch (key) { case 'date|asc': filters[key] = { text: text, props: { orderby: false, wpmf_orderby: 'date', order: 'ASC' } }; break; case 'date|desc': filters[key] = { text: text, props: { orderby: false, wpmf_orderby: 'date', order: 'DESC' } }; break; case 'title|asc': filters[key] = { text: text, props: { meta_key: '', orderby: false, wpmf_orderby: 'title', order: 'ASC' } }; break; case 'title|desc': filters[key] = { text: text, props: { meta_key: '', orderby: false, wpmf_orderby: 'title', order: 'DESC' } }; break; case 'size|asc': filters[key] = { text: text, props: { meta_key: 'wpmf_size', orderby: false, wpmf_orderby: 'meta_value_num', order: 'ASC' } }; break; case 'size|desc': filters[key] = { text: text, props: { meta_key: 'wpmf_size', orderby: false, wpmf_orderby: 'meta_value_num', order: 'DESC' } }; break; case 'filetype|asc': filters[key] = { text: text, props: { meta_key: 'wpmf_filetype', orderby: false, wpmf_orderby: 'meta_value', order: 'ASC' } }; break; case 'filetype|desc': filters[key] = { text: text, props: { meta_key: 'wpmf_filetype', orderby: false, wpmf_orderby: 'meta_value', order: 'DESC' } }; break; case 'custom': filters[key] = { text: text, props: { meta_key: 'wpmf_order', orderby: false, wpmf_orderby: 'meta_value_num', order: 'ASC' } }; break; } }); filters.all = { text: wpmf.l18n.sort_media, props: { orderby: 'date', order: 'DESC' }, priority: 10 }; this.filters = filters; } }); }, initListFilesOrderFilter: function () { let filter_order = ''; $('#wpmf-media-category').after(filter_order); if (wpmf.vars.wpmf_order_media && wpmf.vars.wpmf_order_media !== '') { $('.wpmf-order-folder option[value="' + wpmf.vars.wpmf_order_media + '"]').prop('selected', true); } }, /** * Initialize own user media filtering */ initMyMediasFilter: function () { let myMediaViewAttachmentsBrowser = wp.media.view.AttachmentsBrowser; // render filter to toolbar wp.media.view.AttachmentsBrowser = wp.media.view.AttachmentsBrowser.extend({ createToolbar: function () { // call the original method myMediaViewAttachmentsBrowser.prototype.createToolbar.apply(this, arguments); this.toolbar.set('displaymediatags', new wp.media.view.AttachmentFilters['wpmf_filter_display_media']({ controller: this.controller, model: this.collection.props, priority: -80 }).render()); } }); wp.media.view.AttachmentFilters['wpmf_filter_display_media'] = wp.media.view.AttachmentFilters.extend({ className: 'wpmf-filter-display-media attachment-filters', id: 'wpmf-display-media-filters', createFilters: function () { let filters = {}; filters['yes'] = { text: 'Yes', props: { wpmf_display_media: 'yes' } }; filters.all = { text: 'No', props: { wpmf_display_media: 'no' }, priority: 10 }; this.filters = filters; } }); }, /** * Initialize own user media filtering for list view */ initListMyMediasFilter: function () { let filter_media = ''; $('#wpmf-media-category').after(filter_media); }, /** * Initialize own user media filtering for list view */ initListAllMediasFilter: function () { let filter_media = ''; $('#wpmf-media-category').after(filter_media); }, /** * Generate the dropdown button which replace the filters */ generateDropdown: function ($current_frame) { let clear_filters, my_medias = '', all_medias = '', filter_type = '', filter_date = '', filter_size = '', filter_weight = '', sort_folder = '', sort_file = ''; // Add folder ordering const folder_order_options = $current_frame.find('#media-order-folder option'); if (folder_order_options.length) { sort_folder = '
  • sortarrow_right
  • '; } // Add media sorting const media_sort_options = $current_frame.find('#media-order-media option'); if (media_sort_options.length) { sort_file = '
  • sortarrow_right
  • '; } // add custom media type if (wpmfFoldersModule.page_type === 'upload-list') { if (typeof wpmf.vars.wpmfcount_pdf !== "undefined" && typeof wpmf.vars.wpmfcount_zip !== "undefined" && typeof wpmf.vars.wpmf_file !== "undefined") { let wpmfoption = ``; wpmfoption += ``; $('select[name="attachment-filter"] option[value="detached"]').before(wpmfoption); if (wpmf.vars.wpmf_file !== '') { $(`select[name="attachment-filter"] option[value="${wpmf.vars.wpmf_file}"]`).prop('selected', true); } } } // Add type filtering for both grid and list views if (wpmfFoldersModule.page_type === 'upload-list') { var media_filter_options = $current_frame.find('#attachment-filter option'); } else { media_filter_options = $current_frame.find('#media-attachment-filters option'); } if (media_filter_options.length) { filter_type = '
  • play_lessonarrow_right
  • '; } // Add date filtering const date_filter_options = $current_frame.find('#media-attachment-date-filters option, #filter-by-date option'); if (date_filter_options.length) { filter_date = '
  • date_rangearrow_right
  • '; } // Add size filtering const size_filter_options = $current_frame.find('#media-attachment-size-filters option'); if (size_filter_options.length) { if (size_filter_options.length <= 3) { filter_size = '
  • aspect_ratioarrow_right