1svDocReady(function () { 2 jQuery.fn.iwMenu = function (options) { 3 function init($menuContainer, config) { 4 var namespace = config.namespace; 5 6 if ($menuContainer.data('loaded') === true) { 7 return; 8 } 9 $menuContainer.data('loaded', true); 10 11 if (typeof config.menudata === 'object') { 12 renderMenu(config.menudata); 13 } else if (typeof config.menudata === 'undefined' && typeof $menuContainer.data('iw-menu-uri') !== 'undefined') { 14 var menuURI = $menuContainer.data('iw-menu-uri'); 15 $svjq.get({ 16 datatype: 'json', 17 url: menuURI, 18 success: function (data) { 19 renderMenu(data); 20 } 21 }).fail(function () { 22 console.error('Mobilemenu ' + menuURI + ' fail to load'); 23 }); 24 } else if (typeof config.menudata === 'function') { 25 config.menudata(renderMenu); 26 } else { 27 console.warn('No menudata specified.'); 28 return; 29 } 30 31 function renderMenu(menudata) { 32 var $menu = $svjq('<div></div>'); 33 renderMenuTree($menu, menudata.children, 1, 'mobilemenu'); 34 35 $menu.find('> ul').addClass(namespace + '__list--expanded').attr("role", "menu"); 36 $menuContainer.append($menu.children()); 37 38 setCurrentPage(); 39 } 40 41 function setCurrentPage() { 42 var currentPageURI = $menuContainer.data('iw-menu-current-page'); 43 if (typeof currentPageURI === 'undefined') { 44 return; 45 } 46 47 var $currentPageMenuLink = $menuContainer.find('a[href="' + currentPageURI + '"]'); 48 if ($currentPageMenuLink.length === 0) { 49 return; 50 } 51 52 $currentPageMenuLink.addClass(namespace + '__link--active'); 53 $currentPageMenuLink.attr('aria-current', 'page'); 54 $currentPageMenuLink.parents('li').each(function () { 55 var $expander = $svjq(this).find(' > div .' + namespace + '__expander'); 56 $expander.iwButton('open', { transition: 'show' }); 57 }); 58 } 59 60 function renderMenuTree($container, children, depth, parentBranchId) { 61 var $ul = $svjq('<ul id="' + parentBranchId + '" class="' + namespace + '__list ' + namespace + '__list-' + depth + '"></ul>'); 62 $container.append($ul); 63 64 for (var i = 0; i < children.length; i++) { 65 var page = children[i]; 66 var $li = $svjq('<li></li>'); 67 $li.addClass(namespace + '__item ' + namespace + '__item-' + depth).attr("role", "presentation"); 68 var $div = $svjq('<div></div>').attr("role", "presentation"); 69 $div.addClass(namespace + '__link-wrapper ' + namespace + '__link-wrapper-' + depth); 70 $li.append($div); 71 $ul.append($li); 72 73 if (page.cssClass) { 74 $li.addClass(namespace + '__item--' + page.cssClass); 75 } 76 77 var branchId = parentBranchId + '-' + i; 78 79 var hasChildren = page.children && page.children.length > 0; 80 var $link = $svjq('<a role="menuitem" href="#" class="' + namespace + '__link ' + namespace + '__link-' + depth + '"><span class="' + namespace + '__link-text">' + page.name + '</span></a>'); 81 82 $div.append($link); 83 84 if (typeof (page.locale) !== 'undefined') { 85 $link.attr('lang', page.locale); 86 } 87 88 var $expander = null; 89 90 if (typeof (page.url) !== 'undefined') { 91 $link.attr('href', page.url); 92 93 if (hasChildren) { 94 $expander = $svjq('<a href="#" role="button" class="' + namespace + '__expander"></a>'); 95 $div.append($expander); 96 } 97 } else { 98 $expander = $link; 99 $link.addClass(namespace + '__expander'); 100 } 101 102 if ($expander) { 103 var $expanderIcon = $svjq('<span class="' + namespace + '__expander-icon"><span class="' + namespace + '__expander-icon-image"></span></span>'); 104 $expander.append($expanderIcon); 105 $expander.iwButton({ 106 type: 'toggle-button', 107 controlsId: branchId, 108 transition: config.transition, 109 pressedClass: namespace + '__expander--expanded', 110 text: 'Ãppna', 111 pressedText: 'Stäng' 112 }); 113 114 renderMenuTree($li, page.children, depth + 1, branchId); 115 } 116 } 117 } 118 } 119 120 var settings = $svjq.extend({ 121 namespace: 'iw-menu', 122 transition: 'slideDown' 123 }, options); 124 125 return this.each(function () { 126 init($svjq(this), settings); 127 }); 128 }; 129});
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.