Ignore:
Timestamp:
Aug 23, 2012, 1:33:24 AM (9 years ago)
Author:
real3t@…
Message:

Le menu déroulant accessible devient multi niveaux
Inspiré de http://users.tpg.com.au/j_birch/plugins/superfish/
Menu accessible : http://aquelito.fr/truc/menu3/

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _squelettes_/soyezcreateurs_net/plugins_2.1/plugins/soyezcreateurs/javascripts.js.html

    r63495 r65130  
    351351}
    352352
    353 // Menu accessible : http://aquelito.fr/truc/menu/
     353/*
     354 * Supersubs v0.2b - jQuery plugin
     355 * Copyright (c) 2008 Joel Birch
     356 *
     357 * Dual licensed under the MIT and GPL licenses:
     358 *      http://www.opensource.org/licenses/mit-license.php
     359 *      http://www.gnu.org/licenses/gpl.html
     360 *
     361 *
     362 * This plugin automatically adjusts submenu widths of suckerfish-style menus to that of
     363 * their longest list item children. If you use this, please expect bugs and report them
     364 * to the jQuery Google Group with the word 'Superfish' in the subject line.
     365 *
     366 */
     367
     368;(function($){ // $ will refer to jQuery within this closure
     369
     370        $.fn.supersubs = function(options){
     371                var opts = $.extend({}, $.fn.supersubs.defaults, options);
     372                // return original object to support chaining
     373                return this.each(function() {
     374                        // cache selections
     375                        var $$ = $(this);
     376                        // support metadata
     377                        var o = $.meta ? $.extend({}, opts, $$.data()) : opts;
     378                        // get the font size of menu.
     379                        // .css('fontSize') returns various results cross-browser, so measure an em dash instead
     380                        var fontsize = $('<li id="menu-fontsize">&#8212;</li>').css({
     381                                'padding' : 0,
     382                                'position' : 'absolute',
     383                                'top' : '-999em',
     384                                'width' : 'auto'
     385                        }).appendTo($$).width(); //clientWidth is faster, but was incorrect here
     386                        // remove em dash
     387                        $('#menu-fontsize').remove();
     388                        // cache all ul elements
     389                        $ULs = $$.find('ul');
     390                        // loop through each ul in menu
     391                        $ULs.each(function(i) {
     392                                // cache this ul
     393                                var $ul = $ULs.eq(i);
     394                                // get all (li) children of this ul
     395                                var $LIs = $ul.children();
     396                                // get all anchor grand-children
     397                                var $As = $LIs.children('a');
     398                                // force content to one line and save current float property
     399                                var liFloat = $LIs.css('white-space','nowrap').css('float');
     400                                // remove width restrictions and floats so elements remain vertically stacked
     401                                var emWidth = $ul.add($LIs).add($As).css({
     402                                        'float' : 'none',
     403                                        'width' : 'auto'
     404                                })
     405                                // this ul will now be shrink-wrapped to longest li due to position:absolute
     406                                // so save its width as ems. Clientwidth is 2 times faster than .width() - thanks Dan Switzer
     407                                .end().end()[0].clientWidth / fontsize;
     408                                // add more width to ensure lines don't turn over at certain sizes in various browsers
     409                                emWidth += o.extraWidth;
     410                                // restrict to at least minWidth and at most maxWidth
     411                                if (emWidth > o.maxWidth)               { emWidth = o.maxWidth; }
     412                                else if (emWidth < o.minWidth)  { emWidth = o.minWidth; }
     413                                emWidth += 'em';
     414                                // set ul to width in ems
     415                                $ul.css('width',emWidth);
     416                                // restore li floats to avoid IE bugs
     417                                // set li width to full width of this ul
     418                                // revert white-space to normal
     419                                $LIs.css({
     420                                        'float' : liFloat,
     421                                        'width' : '100%',
     422                                        'white-space' : 'normal'
     423                                })
     424                                // update offset position of descendant ul to reflect new width of parent
     425                                .each(function(){
     426                                        var $childUl = $('>ul',this);
     427                                        var offsetDirection = $childUl.css('left')!==undefined ? 'left' : 'right';
     428                                        $childUl.css(offsetDirection,emWidth);
     429                                });
     430                        });
     431                       
     432                });
     433        };
     434        // expose defaults
     435        $.fn.supersubs.defaults = {
     436                minWidth                : 9,            // requires em unit.
     437                maxWidth                : 25,           // requires em unit.
     438                extraWidth              : 0                     // extra width can ensure lines don't sometimes turn over due to slight browser differences in how they round-off values
     439        };
     440       
     441})(jQuery); // plugin code ends
     442
     443// Inspiré de http://users.tpg.com.au/j_birch/plugins/superfish/
     444// Menu accessible : http://aquelito.fr/truc/menu3/
     445/*
     446 * Superfish v1.4.8 - jQuery menu widget
     447 * Copyright (c) 2008 Joel Birch
     448 *
     449 * Dual licensed under the MIT and GPL licenses:
     450 *      http://www.opensource.org/licenses/mit-license.php
     451 *      http://www.gnu.org/licenses/gpl.html
     452 *
     453 * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt
     454 */
     455
     456
     457;(function($){
     458        $.fn.superfish = function(op){
     459                var sf = $.fn.superfish,
     460                        c = sf.c,
     461                        $arrow = $(['<span class="'+ c.arrowClass +'"></span>'].join('')),
     462                        over = function(){
     463                                var $$ = $(this), menu = getMenu($$);
     464                                clearTimeout(menu.sfTimer);
     465                                $$.showSuperfishUl().siblings().hideSuperfishUl();
     466                        },
     467                        out = function(){
     468                                var $$ = $(this), menu = getMenu($$), o = sf.op;
     469                                clearTimeout(menu.sfTimer);
     470                                menu.sfTimer=setTimeout(function(){
     471                                        o.retainPath=($.inArray($$[0],o.$path)>-1);
     472                                        $$.hideSuperfishUl();
     473                                        if (o.$path.length && $$.parents([ 'li.', o.hoverClass ].join('')).length<1){over.call(o.$path);}
     474                                },o.delay);     
     475                        },
     476                        getMenu = function($menu){
     477                                var menu = $menu.parents([ 'ul.', c.menuClass, ':first' ].join(''))[0];
     478                                sf.op = sf.o[menu.serial];
     479                                return menu;
     480                        },
     481                        addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };
     482                       
     483                return this.each(function() {
     484                        var s = this.serial = sf.o.length;
     485                        var o = $.extend({},sf.defaults,op);
     486                        o.$path = $('li.'+ o.pathClass,this).slice(0, o.pathLevels).each(function(){
     487                                $(this).addClass([o.hoverClass,c.bcClass].join(' '))
     488                                        .filter('li:has(ul)').removeClass(o.pathClass);
     489                        });
     490                        sf.o[s] = sf.op = o;
     491                       
     492                        $('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
     493                                if (o.autoArrows) {
     494                                        addArrow( $(' > a:first-child',this) );
     495                                        addArrow( $(' > strong > a:first-child',this) );
     496                                }
     497                        })
     498                        .not('.'+c.bcClass)
     499                                .hideSuperfishUl();
     500                       
     501                        var $a = $('a',this);
     502                        $a.each(function(i){
     503                                var $li = $a.eq(i).parents('li');
     504                                $a.eq(i).focus(function() { over.call($li); } ).blur(function() { out.call($li); });
     505                        });
     506                        o.onInit.call(this);
     507                       
     508                }).each(function() {
     509                        var menuClasses = [c.menuClass];
     510                        if (sf.op.dropShadows  && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass);
     511                        $(this).addClass(menuClasses.join(' '));
     512                });
     513        };
     514
     515        var sf = $.fn.superfish;
     516        sf.o = [];
     517        sf.op = {};
     518        sf.IE7fix = function(){
     519                var o = sf.op;
     520                if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity != undefined)
     521                        this.toggleClass(sf.c.shadowClass + '-off');
     522                };
     523        sf.c = {
     524                bcClass     : 'sf-breadcrumb',
     525                menuClass   : 'drop',
     526                anchorClass : 'sf-with-ul',
     527                arrowClass  : 'sf-sub-indicator',
     528                shadowClass : 'sf-shadow'
     529        };
     530        sf.defaults = {
     531                hoverClass      : 'sfhover',
     532                pathClass       : 'overideThisToUse',
     533                pathLevels      : 1,
     534                delay           : 800,
     535                animation       : {opacity:'show'},
     536                speed           : 'normal',
     537                autoArrows      : true,
     538                dropShadows : true,
     539                disableHI       : false,                // true disables hoverIntent detection
     540                onInit          : function(){}, // callback functions
     541                onBeforeShow: function(){},
     542                onShow          : function(){},
     543                onHide          : function(){}
     544        };
     545        $.fn.extend({
     546                hideSuperfishUl : function(){
     547                        var o = sf.op,
     548                                not = (o.retainPath===true) ? o.$path : '';
     549                        o.retainPath = false;
     550                        var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass).find(' > ul');
     551                        o.onHide.call($ul);
     552                        return this;
     553                },
     554                showSuperfishUl : function(){
     555                        var o = sf.op,
     556                                sh = sf.c.shadowClass+'-off',
     557                                $ul = this.addClass(o.hoverClass).find(' > ul:hidden');
     558                        sf.IE7fix.call($ul);
     559                        o.onBeforeShow.call($ul);
     560                        $ul.animate(o.animation, o.speed, function(){ sf.IE7fix.call($ul); o.onShow.call($ul); });
     561                        return this;
     562                }
     563        });
     564})(jQuery);
     565
     566/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
     567 * Licensed under the MIT License (LICENSE.txt).
     568 *
     569 * Version 2.1.2
     570 */
     571
    354572(function($){
    355 $.fn.aquelou = function(element, options) {
    356         // Default settings
    357         var defaults = {
    358                 arrowfff : "<span class='downarrow'>▼</span>",
    359                 dropClass : 'drop',
    360                 subClass : 'sub',
    361                 hoverClass : 'hover'
    362         };
    363         var $element = $(element), element = element;
    364         var menu = this;
    365         menu.set = {}
    366         menu.init = function() {
    367                         menu.set = $.extend({}, defaults, options);
    368                        
    369                         /* Les roles ARIA */
    370                         $(this).parent('div').attr('role','navigation');
    371                         $(this).attr('role','menubar');
    372                        
    373                         $(this).addClass(menu.set.dropClass);
    374                         $('li',this).each(function () {
    375                                 var menuParent = $(this).closest('ul').parent();
    376                                 var lienSousMenu = $(this).find('a').first();
    377                                 // si l'item est suivi d'un sous menu
    378                                 if($(this).hasClass(menu.set.subClass)) {
    379                                         lienSousMenu.append(menu.set.arrowfff);
    380                                 }                       
    381                                 // actions
    382                                 lienSousMenu.bind("mouseenter focus", function () {
    383                                         menu.show( this );
    384                                         menu.show( menuParent );
    385                                 return false;
    386                                 }).bind("mouseleave blur", function () {
    387                                         menu.hide( this );
    388                                         if ($(menuParent).hasClass(menu.set.hoverClass)) {
    389                                                 menu.hide( menuParent );
    390                                         }
    391                                 return false;
    392                                 });     
    393                         });//end               
    394         }
    395         menu.show = function(vars) { $(vars).addClass( menu.set.hoverClass ); }// Ajouter la class hover
    396         menu.hide = function(vars) { $(vars).removeClass( menu.set.hoverClass ); }// Supprime la class hover
    397 
    398         menu.init();
    399 }
     573
     574$.fn.bgiframe = ($.browser.msie && /msie 6\.0/i.test(navigator.userAgent) ? function(s) {
     575    s = $.extend({
     576        top     : 'auto', // auto == .currentStyle.borderTopWidth
     577        left    : 'auto', // auto == .currentStyle.borderLeftWidth
     578        width   : 'auto', // auto == offsetWidth
     579        height  : 'auto', // auto == offsetHeight
     580        opacity : true,
     581        src     : 'javascript:false;'
     582    }, s);
     583    var html = '<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+
     584                   'style="display:block;position:absolute;z-index:-1;'+
     585                       (s.opacity !== false?'filter:Alpha(Opacity=\'0\');':'')+
     586                       'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+
     587                       'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+
     588                       'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+
     589                       'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+
     590                '"/>';
     591    return this.each(function() {
     592        if ( $(this).children('iframe.bgiframe').length === 0 )
     593            this.insertBefore( document.createElement(html), this.firstChild );
     594    });
     595} : function() { return this; });
     596
     597// old alias
     598$.fn.bgIframe = $.fn.bgiframe;
     599
     600function prop(n) {
     601    return n && n.constructor === Number ? n + 'px' : n;
     602}
     603
    400604})(jQuery);
    401605
     
    407611        }
    408612        if (jQuery('#menuh').size() > 0) {
    409                 $("ul#menuh").aquelou( {});
     613                $(document).ready(function(){
     614                  $("#menuh").attr('role','navigation').supersubs({
     615            minWidth:    12,   // minimum width of sub-menus in em units
     616            maxWidth:    24,   // maximum width of sub-menus in em units
     617            extraWidth:  1     // extra width can ensure lines don't sometimes turn over
     618                               // due to slight rounding differences and font-family
     619        }).superfish({
     620                        hoverClass: 'hover',
     621                        delay: 800,
     622                        disableHI: true,
     623                        dropShadows: false
     624                  }).find('ul').bgIframe({opacity:false});
     625
     626                  $("#switch-css option").click(function() {
     627                                $("link").attr("href",$(this).attr('value'));
     628                                return false;
     629                        });
     630                });
    410631        }
    411632        if (jQuery('#arretSurImg .mainCarousels').size() > 0) { homeCarousel('.mainCarousels'); }
Note: See TracChangeset for help on using the changeset viewer.