function EnhancedCategoriesPlugin() {
this._settings = {
expandText : '»',
contractText : '«',
leafText : '-',
expandImage : '',
contractImage : '',
leafImage : '',
buttonColor : '#CC0000',
buttonWidth : '10px',
buttonMargin : '0 5px 0 0',
isButtonAfter : false
};
}
jQuery.extend(EnhancedCategoriesPlugin.prototype, {
setSettings: function(newSettings) {
jQuery.extend(this._settings, newSettings || {});
},
getSettings: function() {
return this._settings;
},
getButtonText: function(text, image) {
var output = '';
if (image=='') {
output += text;
} else {
output += '
';
}
return output;
}
});
jQuery(document).ready(function() {
enhancedCategoriesPlugin = new EnhancedCategoriesPlugin();
});
jQuery.fn.enhancedCategories = function(args) {
var defaults = enhancedCategoriesPlugin.getSettings();
jQuery.extend(defaults, args);
return jQuery('li.cat-item', this).each(function() {
var childrenUl = jQuery(this).children('ul');
var hasChildren = (childrenUl.length > 0);
var button = '';
// Add some padding to the RSS images
jQuery('img', this)
.css({ margin: '0 5px',
padding: '0'
});
// Make button text
if (hasChildren) {
if (defaults.contractChildren==1) {
button += '';
button += enhancedCategoriesPlugin.getButtonText(defaults.expandText, defaults.expandImage);
button += '';
} else {
button += '';
button += enhancedCategoriesPlugin.getButtonText(defaults.contractText, defaults.contractImage);
button += '';
}
} else {
button += '';
button += enhancedCategoriesPlugin.getButtonText(defaults.leafText, defaults.leafImage);
button += '';
}
// Add the button before or after the category
if (defaults.isButtonAfter) {
if (hasChildren) {
jQuery(this).children('ul').before(button);
} else {
jQuery(this).append(button);
}
} else {
jQuery(this).prepend(button);
}
// Behaviour of the category
jQuery(this)
.css({listStyleType: 'none'})
.children('span.button')
.css({ width: defaults.buttonWidth,
margin: defaults.buttonMargin,
color: defaults.buttonColor
})
.click(function() {
jQuery(this)
.siblings('ul')
.slideToggle()
.end()
.each(function() {
if (jQuery(this).hasClass('is_expanded')) {
jQuery(this)
.html(enhancedCategoriesPlugin.getButtonText(defaults.contractText, defaults.contractImage))
.removeClass('is_expanded')
.addClass('is_contracted');
} else {
jQuery(this)
.html(enhancedCategoriesPlugin.getButtonText(defaults.expandText, defaults.expandImage))
.removeClass('is_contracted')
.addClass('is_expanded');
}
return this;
});
});
jQuery(this).children('ul')
.css({ paddingLeft: defaults.buttonWidth });
// Contract child categories if asked
if (defaults.contractChildren==1) {
jQuery(this).children('ul').hide();
}
return this;
});
};