(function ($) { $(document).ready(function () { /** * options * @type {{root: string, showroot: string, onclick: onclick, oncheck: oncheck, usecheckboxes: boolean, expandSpeed: number, collapseSpeed: number, expandEasing: null, collapseEasing: null, canselect: boolean}} */ var optionsuser = { 'root': '/', 'showroot': wpmfoption.l18n.media_library, 'onclick': function (elem, type, file) { }, 'oncheck': function (elem, checked, type, file) { }, 'usecheckboxes': true, //can be true files dirs or false 'expandSpeed': 500, 'collapseSpeed': 500, 'expandEasing': null, 'collapseEasing': null, 'canselect': true }; /** * Main folder tree function for user media root feature * @type {{init: init, open: open, close: close, getchecked: getchecked, getselected: getselected}} */ var methods_users = { /** * Folder tree init */ init: function () { $userimagetree = $('#wpmfjaouser'); if ($userimagetree.length === 0) { return; } var attachment_id = $('.attachment-details').data('id'); if (typeof attachment_id === "undefined") attachment_id = $('#post_ID').val(); if (optionsuser.showroot !== '') { var tree_init = ''; tree_init += ''; $userimagetree.html(tree_init); } openfolderuser(attachment_id, optionsuser.root); }, /** * open folder tree by dir name * @param dir */ open: function (dir) { var attachment_id = $('.attachment-details').data('id'); if (typeof attachment_id === "undefined") attachment_id = $('#post_ID').val(); openfolderuser(attachment_id, dir); }, /** * close folder tree by dir name * @param dir */ close: function (dir) { closediruser(dir); }, /** * Get selected * @returns {Array} */ getselected: function () { var list = []; var ik = 0; $userimagetree.find('li.selected > a').each(function () { list[ik] = { type: $(this).attr('data-type'), file: $(this).attr('data-file') }; ik++; }); return list; } }; /** * open folder tree by dir name * @param attachment_id attachment id * @param dir dir name * @param callback */ var openfolderuser = function (attachment_id, dir, callback) { if (typeof $userimagetree === "undefined") return; var id = $userimagetree.find('a[data-file="' + dir + '"]').data('id'); if ($userimagetree.find('a[data-file="' + dir + '"]').closest('li').hasClass('expanded_users') || $userimagetree.find('a[data-file="' + dir + '"]').closest('li').hasClass('wait')) { if (typeof callback === 'function') callback(); return; } /* Ajax get user media */ var ret; ret = $.ajax({ method: 'POST', url: ajaxurl, data: { dir: dir, id: id, attachment_id: attachment_id, action: 'wpmf', task: 'get_user_media_tree', wpmf_nonce: wpmf.vars.wpmf_nonce }, context: $userimagetree, dataType: 'json', beforeSend: function () { this.find('a[data-file="' + dir + '"]').closest('li').addClass('wait'); } }).done(function (res) { var selectedId = $('#wpmfjaouser').find('.directory_users.selected').data('id'); ret = ''; this.find('a[data-file="' + dir + '"]').closest('li').removeClass('wait').removeClass('collapsed_users').addClass('expanded_users'); this.find('a[data-file="' + dir + '"]').closest('li').append(ret); this.find('a[data-file="' + dir + '"]').closest('li').children('.jaofiletree').slideDown(optionsuser.expandSpeed, optionsuser.expandEasing, function () { $userimagetree.trigger('afteropen'); $userimagetree.trigger('afterupdate'); if (typeof callback === 'function') callback(); }); seteventsuser(); }).done(function () { $userimagetree.trigger('afteropen'); $userimagetree.trigger('afterupdate'); }); }; /** * close folder tree by dir name * @param dir */ var closediruser = function (dir) { if (typeof $userimagetree === "undefined") return; $userimagetree.find('a[data-file="' + dir + '"]').closest('li').children('.jaofiletree').slideUp(optionsuser.collapseSpeed, optionsuser.collapseEasing, function () { $(this).remove(); }); $userimagetree.find('a[data-file="' + dir + '"]').closest('li').removeClass('expanded_users').addClass('collapsed_users'); seteventsuser(); //Trigger custom event $userimagetree.trigger('afterclose'); $userimagetree.trigger('afterupdate'); }; /** * init event click to open/close folder tree */ var seteventsuser = function () { var $userimagetree = $('#wpmfjaouser'); $userimagetree.find('li a,li .icon-open-close').unbind('click'); //Bind for collapse or expand elements $userimagetree.find('li.directory_users a').bind('click', function (e) { e.preventDefault(); if (!$(this).hasClass('wpmfaddFolder')) { $userimagetree.find('li').removeClass('selected'); $userimagetree.find('i.zmdi').removeClass('wpmf-zmdi-folder-open').addClass("zmdi-folder"); $(this).closest('li').addClass("selected"); $(this).closest('li').find(' > .pure-checkbox i.zmdi').removeClass("zmdi-folder").addClass("wpmf-zmdi-folder-open"); methods_users.open($(this).attr('data-file')); } }); /* open folder tree use icon */ $userimagetree.find('li.directory_users.collapsed_users .icon-open-close').bind('click', function () { methods_users.open($(this).attr('data-file')); }); /* close folder tree use icon */ $userimagetree.find('li.directory_users.expanded_users .icon-open-close').bind('click', function () { methods_users.close($(this).attr('data-file')); }); /* Check/uncheck folder */ $userimagetree.find('li.directory_users.expanded_users .wpmf_checkbox_tree').bind('click', function () { $('.wpmf_checkbox_tree').not($(this)).prop('checked', false); if ($(this).is(':checked')) { $(this).closest('.pure-checkbox').find('label').removeClass('pchecked').addClass('checked'); } else { $(this).closest('.pure-checkbox').find('label').removeClass('checked'); } }); }; /** * Folder tree function */ methods_users.init(); }); }(jQuery));