1/* 2 * Convert navigation to select 3 */ 4;(function($) { 5 function NavigationSelect(options) { 6 this.options = $.extend({ 7 list: null, 8 levelIndentHTML: ' • ', 9 defaultOptionAttr: 'title', 10 defaultOptionText: '...', 11 selectClass: 'nav-select', 12 activeClass: 'nav-active', 13 defaultOptionClass: 'opt-default', 14 hasDropClass: 'opt-sublevel', 15 levelPrefixClass: 'opt-level-', 16 useDefaultOption: true 17 }, options); 18 if(this.options.list) { 19 this.createSelect(); 20 this.attachEvents(); 21 } 22 } 23 24 NavigationSelect.prototype = { 25 createSelect: function() { 26 var self = this; 27 this.startIndex = 0; 28 this.navigation = $(this.options.list); 29 this.select = $('<select>').addClass(this.options.selectClass); 30 this.createDefaultOption(); 31 this.createList(this.navigation, 0); 32 this.select.insertBefore(this.navigation); 33 }, 34 createDefaultOption: function() { 35 if(this.options.useDefaultOption) { 36 var attrText = this.navigation.attr(this.options.defaultOptionAttr); 37 var defaultOption = $('<option>').addClass(this.options.defaultOptionClass).text(attrText || this.options.defaultOptionText); 38 this.navigation.removeAttr(this.options.defaultOptionAttr); 39 this.select.append(defaultOption); 40 this.startIndex = 1; 41 } 42 }, 43 createList: function(list, level) { 44 var self = this; 45 list.children().each(function(index, item) { 46 var listItem = $(this), 47 listLink = listItem.find('a').eq(0), 48 listDrop = listItem.find('ul').eq(0), 49 hasDrop = listDrop.length > 0; 50 51 if(listLink.length) { 52 self.select.append(self.createOption(listLink, hasDrop, level, listLink.hasClass(self.options.activeClass))); 53 } 54 if(hasDrop) { 55 self.createList(listDrop, level + 1); 56 } 57 }); 58 }, 59 createOption: function(link, hasDrop, level, selected) { 60 var optionHTML = this.getLevelIndent(level) + link.html(); 61 return $('<option>').html(optionHTML) 62 .addClass(this.options.levelPrefixClass + (level + 1)) 63 .toggleClass(this.options.hasDropClass, hasDrop) 64 .val(link.attr('href')).attr('selected', selected ? 'selected' : false); 65 }, 66 getLevelIndent: function(level) { 67 return (new Array(level + 1)).join(this.options.levelIndentHTML); 68 }, 69 attachEvents: function() { 70 // redirect on select change 71 var self = this; 72 this.select.change(function() { 73 if(this.selectedIndex >= self.startIndex) { 74 location.href = this.value; 75 } 76 }); 77 } 78 }; 79 80 // jquery plugin interface 81 $.fn.navigationSelect = function(opt) { 82 return this.each(function() { 83 new NavigationSelect($.extend({list: this}, opt)); 84 }); 85 }; 86}(jQuery)); 87 88// page init 89jQuery(function(){ 90 jQuery('.pagination--mobile .pagination-list').navigationSelect({ 91 useDefaultOption: false, 92 selectClass: 'pagination-select', 93 activeClass: 'active' 94 }); 95 96 jQuery('.articles__pagination-item--link').each(function(){ 97 if($(this).attr('href') === '#') { 98 $(this).click(function(e){ 99 e.preventDefault(); 100 }) 101 } 102 }) 103});
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.