function EnhancedLinksPlugin() {
this._settings = {
expandText : '»',
contractText : '«',
leafText : '-',
expandImage : '',
contractImage : '',
leafImage : '',
buttonColor : '#CC0000',
buttonWidth : '10px',
buttonMargin : '0 5px 0 0',
isButtonAfter : false
};
}
jQuery.extend(EnhancedLinksPlugin.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() {
EnhancedLinksPlugin = new EnhancedLinksPlugin();
});
jQuery.fn.enhancedLinks = function(args) {
var defaults = EnhancedLinksPlugin.getSettings();
jQuery.extend(defaults, args);
return jQuery('li.linkcat', this).each(function() {
var hasChildren = (jQuery(this).children('ul').length > 0);
var button = '';
// Make button text
if (hasChildren) {
if (defaults.contractChildren==1) {
button += '';
button += EnhancedLinksPlugin.getButtonText(defaults.expandText, defaults.expandImage);
button += '';
} else {
button += '';
button += EnhancedLinksPlugin.getButtonText(defaults.contractText, defaults.contractImage);
button += '';
}
} else {
button += '';
button += EnhancedLinksPlugin.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, span.link-cat-title')
.css({ width: defaults.buttonWidth,
margin: defaults.buttonMargin,
color: defaults.buttonColor
})
.click(function() {
jQuery(this).siblings('ul').slideToggle();
if (jQuery(this).hasClass('link-cat-title'))
var buttons = jQuery(this).siblings('span.button');
else
var buttons = jQuery(this);
buttons
.filter('span.button')
.each(function() {
if (jQuery(this).hasClass('is_expanded')) {
jQuery(this)
.html(EnhancedLinksPlugin.getButtonText(defaults.contractText, defaults.contractImage))
.removeClass('is_expanded')
.addClass('is_contracted');
} else {
jQuery(this)
.html(EnhancedLinksPlugin.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;
});
};