2011-12-07 12:51:23 +01:00
|
|
|
/**
|
|
|
|
* Client script for the Kolab folder management/listing extension
|
|
|
|
*
|
|
|
|
* @author Aleksander Machniak <machniak@kolabsys.com>
|
|
|
|
*
|
2014-04-28 09:12:29 +02:00
|
|
|
* @licstart The following is the entire license notice for the
|
|
|
|
* JavaScript code in this file.
|
|
|
|
*
|
2011-12-07 12:51:23 +01:00
|
|
|
* Copyright (C) 2011, Kolab Systems AG <contact@kolabsys.com>
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Affero General Public License as
|
|
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
|
|
* License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Affero General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
2014-04-28 09:12:29 +02:00
|
|
|
*
|
|
|
|
* @licend The above is the entire license notice
|
|
|
|
* for the JavaScript code in this file.
|
2011-12-07 12:51:23 +01:00
|
|
|
*/
|
|
|
|
|
2014-08-11 18:55:50 +02:00
|
|
|
window.rcmail && rcmail.env.action == 'folders' && rcmail.addEventListener('init', function() {
|
|
|
|
var filter = $(rcmail.gui_objects.foldersfilter),
|
|
|
|
optgroup = $('<optgroup>').attr('label', rcmail.gettext('kolab_folders.folderctype'));
|
|
|
|
|
|
|
|
// remove disabled namespaces
|
|
|
|
filter.children('option').each(function(i, opt) {
|
|
|
|
$.each(rcmail.env.skip_roots || [], function() {
|
|
|
|
if (opt.value == this) {
|
|
|
|
$(opt).remove();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
// add type options to the filter
|
|
|
|
$.each(rcmail.env.foldertypes, function() {
|
|
|
|
optgroup.append($('<option>').attr('value', 'type-' + this).text(rcmail.gettext('kolab_folders.foldertype' + this)));
|
|
|
|
});
|
|
|
|
|
|
|
|
// overwrite default onchange handler
|
|
|
|
filter.attr('onchange', '')
|
|
|
|
.on('change', function() { return kolab_folders_filter(this.value); })
|
|
|
|
.append(optgroup);
|
|
|
|
});
|
|
|
|
|
|
|
|
window.rcmail && rcmail.env.action != 'folders' && $(document).ready(function() {
|
2011-05-19 12:40:46 +02:00
|
|
|
// IE doesn't allow setting OPTION's display/visibility
|
|
|
|
// We'll need to remove SELECT's options, see below
|
|
|
|
if (bw.ie) {
|
|
|
|
rcmail.env.subtype_html = $('#_subtype').html();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add onchange handler for folder type SELECT, and call it on form init
|
|
|
|
$('#_ctype').change(function() {
|
|
|
|
var type = $(this).val(),
|
|
|
|
sub = $('#_subtype'),
|
|
|
|
subtype = sub.val();
|
|
|
|
|
|
|
|
// For IE we need to revert the whole SELECT to the original state
|
|
|
|
if (bw.ie) {
|
|
|
|
sub.html(rcmail.env.subtype_html).val(subtype);
|
|
|
|
}
|
|
|
|
|
|
|
|
// For non-mail folders we must hide mail-specific subtypes
|
|
|
|
$('option', sub).each(function() {
|
|
|
|
var opt = $(this), val = opt.val();
|
2011-07-07 19:39:34 +02:00
|
|
|
if (val == '')
|
2011-05-19 12:40:46 +02:00
|
|
|
return;
|
2011-07-07 19:39:34 +02:00
|
|
|
// there's no mail.default
|
|
|
|
if (val == 'default' && type != 'mail') {
|
|
|
|
opt.show();
|
|
|
|
return;
|
|
|
|
};
|
2011-05-19 12:40:46 +02:00
|
|
|
|
2011-07-07 19:39:34 +02:00
|
|
|
if (type == 'mail' && val != 'default')
|
2011-05-19 12:40:46 +02:00
|
|
|
opt.show();
|
|
|
|
else if (bw.ie)
|
|
|
|
opt.remove();
|
|
|
|
else
|
|
|
|
opt.hide();
|
|
|
|
});
|
|
|
|
|
|
|
|
// And re-set subtype
|
|
|
|
if (type != 'mail' && subtype != '' && subtype != 'default') {
|
|
|
|
sub.val('');
|
|
|
|
}
|
|
|
|
}).change();
|
|
|
|
});
|
2014-08-11 18:55:50 +02:00
|
|
|
|
|
|
|
function kolab_folders_filter(filter)
|
|
|
|
{
|
|
|
|
var type = filter.match(/^type-([a-z]+)$/) ? RegExp.$1 : null;
|
|
|
|
|
|
|
|
rcmail.subscription_list.reset_search();
|
|
|
|
|
|
|
|
if (!type) {
|
|
|
|
// clear type filter
|
|
|
|
if (rcmail.folder_filter_type) {
|
|
|
|
$('li', rcmail.subscription_list.container).removeData('filtered').show();
|
|
|
|
rcmail.folder_filter_type = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
// apply namespace filter
|
|
|
|
rcmail.folder_filter(filter);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
rcmail.folder_filter_type = type;
|
|
|
|
rcmail.subscription_list.container.children('li').each(function() {
|
|
|
|
kolab_folder_filter_match(this, type);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
function kolab_folder_filter_match(elem, type, display)
|
|
|
|
{
|
|
|
|
var t, found = 0, cl = elem.className || '',
|
|
|
|
$elem = $(elem),
|
|
|
|
sub = $('ul', elem),
|
|
|
|
disp = sub.css('display') == 'none',
|
|
|
|
children = sub.children('li');
|
|
|
|
|
|
|
|
// subfolders...
|
|
|
|
children.each(function() {
|
|
|
|
found += kolab_folder_filter_match(this, type);
|
|
|
|
});
|
|
|
|
|
|
|
|
if (found || cl.match(new RegExp('type-' + type))
|
|
|
|
|| (type == 'mail' && !children.length && !cl.match(/(^| )type-([a-z]+)/) && !$elem.is('.virtual'))
|
|
|
|
) {
|
|
|
|
if (found || !$elem.is('.virtual')) {
|
|
|
|
found++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (found) {
|
|
|
|
$elem.removeData('filtered').show();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$elem.data('filtered', true).hide();
|
|
|
|
}
|
|
|
|
|
|
|
|
return found;
|
|
|
|
}
|