');
//Set an arbitrary width width to avoid float drop on the animation
jQuery(_container).find('ul').width(5000);
//If the breadcrumb contains nothing, don't do anything
if (_breadCrumbElements.length > 0)
{
jQuery(_breadCrumbElements[_breadCrumbElements.length - 1]).addClass('last');
jQuery(_breadCrumbElements[0]).addClass('first');
//If the breadcrumb object length is long enough, compress.
if (_breadCrumbElements.length > _options.minimumCompressionElements)
{
compressBreadCrumb();
};
};
};
function compressBreadCrumb()
{
// Factor to determine if we should compress the element at all
var finalElement = jQuery(_breadCrumbElements[_breadCrumbElements.length - 1]);
// If the final element is really long, compress more elements
if (jQuery(finalElement).width() > _options.maxFinalElementLength)
{
if (_options.beginingElementsToLeaveOpen > 0)
{
_options.beginingElementsToLeaveOpen--;
}
if (_options.endElementsToLeaveOpen > 0)
{
_options.endElementsToLeaveOpen--;
}
}
// If the final element is within the short and long range, compress to the default end elements and 1 less beginning elements
if (jQuery(finalElement).width() < _options.maxFinalElementLength && jQuery(finalElement).width() > _options.minFinalElementLength)
{
if (_options.beginingElementsToLeaveOpen > 0)
{
_options.beginingElementsToLeaveOpen--;
}
}
var itemsToRemove = _breadCrumbElements.length - 1 - _options.endElementsToLeaveOpen;
// We compress only elements determined by the formula setting below
//TODO : Make this smarter, it's only checking the final elements length. It could also check the amount of elements.
jQuery(_breadCrumbElements[_breadCrumbElements.length - 1]).css(
{
background: 'none'
});
$(_breadCrumbElements).each(function(i, listElement)
{
if (i > _options.beginingElementsToLeaveOpen && i < itemsToRemove)
{
jQuery(listElement).find('a').wrap('
').width(jQuery(listElement).find('a').width() + 10);
// Add the overlay png.
// jQuery(listElement).append(jQuery('
').css(
// {
// display: 'block'
// })).css(
// {
// background: 'none'
// });
var options =
{
id: i,
width: jQuery(listElement).width(),
listElement: jQuery(listElement).find('span'),
isAnimating: false,
element: jQuery(listElement).find('span')
};
jQuery(listElement).bind('mouseover', options, expandBreadCrumb).bind('mouseout', options, shrinkBreadCrumb);
jQuery(listElement).find('a').unbind('mouseover', expandBreadCrumb).unbind('mouseout', shrinkBreadCrumb);
listElement.autoInterval = setInterval(function()
{
clearInterval(listElement.autoInterval);
jQuery(listElement).find('span').animate(
{
width: _options.previewWidth
}, _options.timeInitialCollapse, _options.easing);
}, (150 * (i - 2)));
}
});
};
function expandBreadCrumb(e)
{
var elementID = e.data.id;
var originalWidth = e.data.width;
jQuery(e.data.element).stop();
jQuery(e.data.element).animate(
{
width: originalWidth
},
{
duration: _options.timeExpansionAnimation,
easing: _options.easing,
queue: false
});
return false;
};
function shrinkBreadCrumb(e)
{
var elementID = e.data.id;
jQuery(e.data.element).stop();
jQuery(e.data.element).animate(
{
width: _options.previewWidth
},
{
duration: _options.timeCompressionAnimation,
easing: _options.easing,
queue: false
});
return false;
};
// Public global variables
jQuery.fn.jBreadCrumb.defaults =
{
maxFinalElementLength: 400,
minFinalElementLength: 200,
minimumCompressionElements: 4,
endElementsToLeaveOpen: 1,
beginingElementsToLeaveOpen: 1,
timeExpansionAnimation: 800,
timeCompressionAnimation: 500,
timeInitialCollapse: 600,
easing: _easingEquation,
overlayClass: 'chevronOverlay',
previewWidth: 40
};
})(jQuery);