PageSourceSearch

https://www.asexuality.org/sites/all/libraries/superfish/supersubs.js?qulpfc

js asexuality.org collected 2026-09-24 17:51:27 UTC 4,835 bytes, 115 lines download raw bytes

1/*
2 * Supersubs v0.4b - jQuery plugin
3 * Copyright (c) 2013 Joel Birch
4 *
5 * Dual licensed under the MIT and GPL licenses:
6 *  http://www.opensource.org/licenses/mit-license.php
7 *  http://www.gnu.org/licenses/gpl.html
8 *
9 * This plugin automatically adjusts submenu widths of suckerfish-style menus to that of
10 * their longest list item children. If you use this, please expect bugs and report them
11 * to the jQuery Google Group with the word 'Superfish' in the subject line.
12 *
13 */
14/*
15 * This is not the original jQuery Supersubs plugin.
16 * Please refer to the README for more information.
17 */
18
19(function($){ // $ will refer to jQuery within this closure
20  $.fn.supersubs = function(options){
21    var opts = $.extend({}, $.fn.supersubs.defaults, options);
22    // return original object to support chaining
23    // Although this is unnecessary due to the way the module uses these plugins.
24    for (var a = 0; a < this.length; a++) {
25      // cache selections
26      var $$ = $(this).eq(a),
27      // support metadata
28      o = $.meta ? $.extend({}, opts, $$.data()) : opts;
29      // Jump one level if it's a "NavBar"
30      if ($$.hasClass('sf-navbar')) {
31        $$ = $$.children('li').children('ul');
32      }
33      // cache all ul elements
34      var $ULs = $$.find('ul'),
35      // get the font size of menu.
36      // .css('fontSize') returns various results cross-browser, so measure an em dash instead
37      fontsize = $('<li id="menu-fontsize">&#8212;</li>'),
38      size = fontsize.attr('style','padding:0;position:absolute;top:-99999em;width:auto;')
39      .appendTo($$)[0].clientWidth; //clientWidth is faster than width()
40      // remove em dash
41      fontsize.remove();
42
43      // loop through each ul in menu
44      for (var b = 0; b < $ULs.length; b++) {
45        var
46        // cache this ul
47        $ul = $ULs.eq(b);
48        // If a multi-column sub-menu, and only if correctly configured.
49        if (o.megamenu && $ul.hasClass('sf-megamenu') && $ul.find('.sf-megamenu-column').length > 0){
50          // Look through each column.
51          var $column = $ul.find('div.sf-megamenu-column > ol'),
52          // Overall width.
53          mwWidth = 0;
54          for (var d = 0; d < $column.length; d++){
55            resize($column.eq(d));
56            // New column width, in pixels.
57            var colWidth = $column.width();
58            // Just a trick to convert em unit to px.
59            $column.css({width:colWidth})
60            // Making column parents the same size.
61            .parents('.sf-megamenu-column').css({width:colWidth});
62            // Overall width.
63            mwWidth += parseInt(colWidth);
64          }
65          // Resizing the columns container too.
66          $ul.add($ul.find('li.sf-megamenu-wrapper, li.sf-megamenu-wrapper > ol')).css({width:mwWidth});
67        }
68        else {
69          resize($ul);
70        }
71      }
72    }
73    function resize($ul){
74      var
75      // get all (li) children of this ul
76      $LIs = $ul.children(),
77      // get all anchor grand-children
78      $As = $LIs.children('a');
79      // force content to one line and save current float property
80      $LIs.css('white-space','nowrap');
81      // remove width restrictions and floats so elements remain vertically stacked
82      $ul.add($LIs).add($As).css({float:'none',width:'auto'});
83      // this ul will now be shrink-wrapped to longest li due to position:absolute
84      // so save its width as ems.
85      var emWidth = $ul.get(0).clientWidth / size;
86      // add more width to ensure lines don't turn over at certain sizes in various browsers
87      emWidth += o.extraWidth;
88      // restrict to at least minWidth and at most maxWidth
89      if (emWidth > o.maxWidth) {emWidth = o.maxWidth;}
90      else if (emWidth < o.minWidth) {emWidth = o.minWidth;}
91      emWidth += 'em';
92      // set ul to width in ems
93      $ul.css({width:emWidth});
94      // restore li floats to avoid IE bugs
95      // set li width to full width of this ul
96      // revert white-space to normal
97      $LIs.add($As).css({float:'',width:'',whiteSpace:''});
98      // update offset position of descendant ul to reflect new width of parent.
99      // set it to 100% in case it isn't already set to this in the CSS
100      for (var c = 0; c < $LIs.length; c++) {
101        var $childUl = $LIs.eq(c).children('ul');
102        var offsetDirection = $childUl.css('left') !== undefined ? 'left' : 'right';
103        $childUl.css(offsetDirection,'100%');
104      }
105    }
106    return this;
107  };
108  // expose defaults
109  $.fn.supersubs.defaults = {
110    megamenu: true, // define width for multi-column sub-menus and their columns.
111    minWidth: 12, // requires em unit.
112    maxWidth: 27, // requires em unit.
113    extraWidth: 1 // extra width can ensure lines don't sometimes turn over due to slight browser differences in how they round-off values
114  };
115})(jQuery); // plugin code ends

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.