X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fplugins%2Fauto%2Fariane2%2Fjs%2Fjquery.jBreadCrumb.1.1.js;fp=www%2Fplugins%2Fauto%2Fariane2%2Fjs%2Fjquery.jBreadCrumb.1.1.js;h=44936e7fa39794ee0a961db5c45276ac8d9dc393;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/plugins/auto/ariane2/js/jquery.jBreadCrumb.1.1.js b/www/plugins/auto/ariane2/js/jquery.jBreadCrumb.1.1.js new file mode 100644 index 0000000..44936e7 --- /dev/null +++ b/www/plugins/auto/ariane2/js/jquery.jBreadCrumb.1.1.js @@ -0,0 +1,240 @@ +/** + * @author Jason Roy for CompareNetworks Inc. + * Thanks to mikejbond for suggested udaptes + * + * Version 1.1 + * Copyright (c) 2009 CompareNetworks Inc. + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + */ +(function($) +{ + + // Private variables + + var _options = {}; + var _container = {}; + var _breadCrumbElements = {}; + var _autoIntervalArray = []; + var _easingEquation; + + // Public functions + + jQuery.fn.jBreadCrumb = function(options) + { + _options = $.extend({}, $.fn.jBreadCrumb.defaults, options); + + return this.each(function() + { + _container = $(this); + setupBreadCrumb(); + }); + + }; + + // Private functions + + function setupBreadCrumb() + { + //Check if easing plugin exists. If it doesn't, use "swing" + if(typeof(jQuery.easing) == 'object') + { + _easingEquation = 'easeOutQuad' + } + else + { + _easingEquation = 'swing' + } + + //The reference object containing all of the breadcrumb elements + _breadCrumbElements = jQuery(_container).find('li'); + + //Keep it from overflowing in ie6 & 7 + jQuery(_container).find('ul').wrap('
'); + //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' + }); + if (isIE6OrLess()) + { + fixPNG(jQuery(listElement).find('.' + _options.overlayClass).css( + { + width: '20px', + right: "-1px" + })); + } + 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; + }; + + function isIE6OrLess() + { + var isIE6 = $.browser.msie && /MSIE\s(5\.5|6\.)/.test(navigator.userAgent); + return isIE6; + }; + // Fix The Overlay for IE6 + function fixPNG(element) + { + var image; + if (jQuery(element).is('img')) + { + image = jQuery(element).attr('src'); + } + else + { + image = $(element).css('backgroundImage'); + image.match(/^url\(["']?(.*\.png)["']?\)$/i); + image = RegExp.$1; + ; + } + $(element).css( + { + 'backgroundImage': 'none', + 'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src='" + image + "')" + }); + }; + + // 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: 5 + }; + +})(jQuery);