Files
Studio-42-elFinder/js/ui/sortbutton.js
T
Dmitry (dio) Levashov e1c2c2a7f9 optimization
2012-06-23 00:54:49 +04:00

90 lines
2.7 KiB
JavaScript

"use strict"
/**
* @class elFinder toolbar button menu with sort variants.
*
* @author Dmitry (dio) Levashov
**/
$.fn.elfindersortbutton = function(cmd) {
return this.each(function() {
var fm = cmd.fm,
name = cmd.name,
c = 'class',
disabled = fm.res(c, 'disabled'),
hover = fm.res(c, 'hover'),
item = 'elfinder-button-menu-item',
selected = item+'-selected',
asc = selected+'-asc',
desc = selected+'-desc',
button = $(this).addClass('ui-state-default elfinder-button elfinder-menubutton elfiner-button-'+name)
.attr('title', cmd.title)
.append('<span class="elfinder-button-icon elfinder-button-icon-'+name+'"/>')
.hover(function(e) { !button.is('.'+disabled) && button.toggleClass(hover); })
.click(function(e) {
if (!button.is('.'+disabled)) {
e.stopPropagation();
menu.is(':hidden') && cmd.fm.getUI().click();
menu.slideToggle(100);
}
}),
menu = $('<div class="ui-widget ui-widget-content elfinder-button-menu ui-corner-all"/>')
.hide()
.appendTo(button)
.zIndex(12+button.zIndex())
.delegate('.'+item, 'hover', function() { $(this).toggleClass(hover) })
.delegate('.'+item, 'click', function(e) {
e.preventDefault();
e.stopPropagation();
hide();
}),
update = function() {
menu.children(':not(:last)').removeClass(selected+' '+asc+' '+desc)
.filter('[rel="'+fm.sortType+'"]')
.addClass(selected+' '+(fm.sortOrder == 'asc' ? asc : desc));
menu.children(':last').toggleClass(selected, fm.sortStickFolders);
},
hide = function() { menu.hide(); };
$.each(fm.sortRules, function(name, value) {
menu.append($('<div class="'+item+'" rel="'+name+'"><span class="ui-icon ui-icon-arrowthick-1-n"/><span class="ui-icon ui-icon-arrowthick-1-s"/>'+fm.i18n('sort'+name)+'</div>').data('type', name));
});
menu.children().click(function(e) {
var type = $(this).attr('rel');
cmd.exec([], {
type : type,
order : type == fm.sortType ? fm.sortOrder == 'asc' ? 'desc' : 'asc' : fm.sortOrder,
stick : fm.sortStickFolders
});
})
$('<div class="'+item+' '+item+'-separated"><span class="ui-icon ui-icon-check"/>'+fm.i18n('sortFoldersFirst')+'</div>')
.appendTo(menu)
.click(function() {
cmd.exec([], {type : fm.sortType, order : fm.sortOrder, stick : !fm.sortStickFolders});
});
fm.bind('disable select', hide).getUI().click(hide);
fm.bind('sortchange', update)
if (menu.children().length > 1) {
cmd.change(function() {
button.toggleClass(disabled, cmd.disabled());
update();
})
.change();
} else {
button.addClass(disabled);
}
});
}