|
|
Line 52: |
Line 52: |
| </style> | | </style> |
| | | |
- | <script type="text/javascript"> | + | <script type="text/javascript" src="http://users.tpg.com.au/j_birch/plugins/superfish/js/superfish.js"></script> |
- | | + | <script type="text/javascript" src="http://users.tpg.com.au/j_birch/plugins/supersubs/js/supersubs.js"></script> |
- | /*
| + | |
- | * Supersubs v0.2b - jQuery plugin
| + | |
- | * Copyright (c) 2008 Joel Birch
| + | |
- | *
| + | |
- | * Dual licensed under the MIT and GPL licenses:
| + | |
- | * http://www.opensource.org/licenses/mit-license.php
| + | |
- | * http://www.gnu.org/licenses/gpl.html
| + | |
- | *
| + | |
- | *
| + | |
- | * This plugin automatically adjusts submenu widths of suckerfish-style menus to that of
| + | |
- | * their longest list item children. If you use this, please expect bugs and report them
| + | |
- | * to the jQuery Google Group with the word 'Superfish' in the subject line.
| + | |
- | *
| + | |
- | */
| + | |
- | | + | |
- | ;(function($){ // $ will refer to jQuery within this closure
| + | |
- | | + | |
- | $.fn.supersubs = function(options){
| + | |
- | var opts = $.extend({}, $.fn.supersubs.defaults, options);
| + | |
- | // return original object to support chaining
| + | |
- | return this.each(function() {
| + | |
- | // cache selections
| + | |
- | var $$ = $(this);
| + | |
- | // support metadata
| + | |
- | var o = $.meta ? $.extend({}, opts, $$.data()) : opts;
| + | |
- | // get the font size of menu.
| + | |
- | // .css('fontSize') returns various results cross-browser, so measure an em dash instead
| + | |
- | var fontsize = $('<li id="menu-fontsize">—</li>').css({
| + | |
- | 'padding' : 0,
| + | |
- | 'position' : 'absolute',
| + | |
- | 'top' : '-999em',
| + | |
- | 'width' : 'auto'
| + | |
- | }).appendTo($$).width(); //clientWidth is faster, but was incorrect here
| + | |
- | // remove em dash
| + | |
- | $('#menu-fontsize').remove();
| + | |
- | // cache all ul elements
| + | |
- | $ULs = $$.find('ul');
| + | |
- | // loop through each ul in menu
| + | |
- | $ULs.each(function(i) {
| + | |
- | // cache this ul
| + | |
- | var $ul = $ULs.eq(i);
| + | |
- | // get all (li) children of this ul
| + | |
- | var $LIs = $ul.children();
| + | |
- | // get all anchor grand-children
| + | |
- | var $As = $LIs.children('a');
| + | |
- | // force content to one line and save current float property
| + | |
- | var liFloat = $LIs.css('white-space','nowrap').css('float');
| + | |
- | // remove width restrictions and floats so elements remain vertically stacked
| + | |
- | var emWidth = $ul.add($LIs).add($As).css({
| + | |
- | 'float' : 'none',
| + | |
- | 'width' : 'auto'
| + | |
- | })
| + | |
- | // this ul will now be shrink-wrapped to longest li due to position:absolute
| + | |
- | // so save its width as ems. Clientwidth is 2 times faster than .width() - thanks Dan Switzer
| + | |
- | .end().end()[0].clientWidth / fontsize;
| + | |
- | // add more width to ensure lines don't turn over at certain sizes in various browsers
| + | |
- | emWidth += o.extraWidth;
| + | |
- | // restrict to at least minWidth and at most maxWidth
| + | |
- | if (emWidth > o.maxWidth) { emWidth = o.maxWidth; }
| + | |
- | else if (emWidth < o.minWidth) { emWidth = o.minWidth; }
| + | |
- | emWidth += 'em';
| + | |
- | // set ul to width in ems
| + | |
- | $ul.css('width',emWidth);
| + | |
- | // restore li floats to avoid IE bugs
| + | |
- | // set li width to full width of this ul
| + | |
- | // revert white-space to normal
| + | |
- | $LIs.css({
| + | |
- | 'float' : liFloat,
| + | |
- | 'width' : '100%',
| + | |
- | 'white-space' : 'normal'
| + | |
- | })
| + | |
- | // update offset position of descendant ul to reflect new width of parent
| + | |
- | .each(function(){
| + | |
- | var $childUl = $('>ul',this);
| + | |
- | var offsetDirection = $childUl.css('left')!==undefined ? 'left' : 'right';
| + | |
- | $childUl.css(offsetDirection,emWidth);
| + | |
- | });
| + | |
- | });
| + | |
- |
| + | |
- | });
| + | |
- | };
| + | |
- | // expose defaults
| + | |
- | $.fn.supersubs.defaults = {
| + | |
- | minWidth : 9, // requires em unit.
| + | |
- | maxWidth : 25, // requires em unit.
| + | |
- | extraWidth : 0 // extra width can ensure lines don't sometimes turn over due to slight browser differences in how they round-off values
| + | |
- | };
| + | |
- |
| + | |
- | })(jQuery); // plugin code ends
| + | |
- | | + | |
- | </script> | + | |
| <script type="text/javascript"> | | <script type="text/javascript"> |
| // custom.js | | // custom.js |