(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 += '
';
tree_init += '- ';
tree_init += '';
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 = '';
if (res.status) {
var datas = res.dirs;
for (var ij = 0; ij < datas.length; ij++) {
if (parseInt(wpmfoption.vars.root_media_root) !== datas[ij].id) {
var classe = '';
if (datas[ij].type === 'dir') {
classe = 'directory_users collapsed_users';
} else {
classe = 'file ext_' + datas[ij].ext;
}
if (parseInt(datas[ij].id) === parseInt(selectedId)) {
classe += ' selected';
}
ret += '- ';
if (datas[ij].count_child > 0) {
ret += '';
} else {
ret += '';
}
ret += '';
ret += '
';
}
}
}
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));