1var PollTabsJQuery = { 2 3 scrollOffset: 50, 4 5 initialize: function () { 6 jQuery.each(jQuery('div[data-poll-tabs]'), function () { 7 var wrapper = jQuery(this); 8 var poll = wrapper.attr('data-poll-tabs'); 9 var pollTab = parseInt(wrapper.attr('data-poll-tab'), 10); 10 var navigation = jQuery('ul[data-poll-tab-navigation=\'' + poll + '\']'); 11 jQuery.each(jQuery('a.btn', navigation), function () { 12 var button = jQuery(this); 13 if (button.attr('data-poll-tab') === 'previous') { 14 button.on('click', function () { 15 PollTabsJQuery.previous(poll); 16 event.preventDefault(); 17 return false; 18 }); 19 } else if (button.attr('data-poll-tab') === 'next') { 20 button.on('click', function () { 21 PollTabsJQuery.next(poll); 22 event.preventDefault(); 23 return false; 24 }); 25 } else { 26 button.on('click', function () { 27 PollTabsJQuery.page(poll, parseInt(button.attr('data-poll-tab'), 10)); 28 event.preventDefault(); 29 return false; 30 }); 31 } 32 }); 33 PollTabsJQuery.page(poll, pollTab); 34 }); 35 }, 36 37 previous: function (poll) { 38 var pollTabNoActive = jQuery('div[data-poll-tabs=\'' + poll + '\']').attr('data-poll-tab'); 39 pollTabNoActive = parseInt(pollTabNoActive, 10) - 1; 40 PollTabsJQuery.page(poll, pollTabNoActive); 41 }, 42 43 next: function (poll) { 44 var pollTabNoActive = jQuery('div[data-poll-tabs=\'' + poll + '\']').attr('data-poll-tab'); 45 pollTabNoActive = parseInt(pollTabNoActive, 10) + 1; 46 PollTabsJQuery.page(poll, pollTabNoActive); 47 }, 48 49 page: function (poll, no) { 50 var navigation = jQuery('ul[data-poll-tab-navigation=\'' + poll + '\']'); 51 if (navigation.length !== 1) { 52 console.error('invalid ul[data-poll-tab-navigation=\'' + poll + '\']') 53 } 54 var tabsWrapper = jQuery('div[data-poll-tabs=\'' + poll + '\']'); 55 if (tabsWrapper.length !== 1) { 56 console.error('invalid div[data-poll-tabs=\'' + poll + '\']') 57 } 58 var tabs = jQuery('div[data-poll-tab]', tabsWrapper); 59 if (tabs.length === 0) { 60 console.error('invalid div[data-poll-tabs=\'' + poll + '\'] in div[data-poll-tab]') 61 } 62 // 63 // Validate tab number 64 if (no < 1) { 65 no = 1; 66 } else if (no > tabs.length) { 67 no = tabs.length; 68 } 69 // 70 // Tabs 71 jQuery('div[data-poll-tab]', tabsWrapper).hide(); 72 jQuery('div[data-poll-tab=\'' + no + '\']', tabsWrapper).show(); 73 // 74 // Navigation 75 jQuery('a.btn', navigation).removeClass('active'); 76 jQuery('a.btn[data-poll-tab=\'' + no + '\']', navigation).addClass('active'); 77 if (no > 1) { 78 jQuery('a.btn[data-poll-tab=\'previous\']', navigation).removeClass('disabled'); 79 } else { 80 jQuery('a.btn[data-poll-tab=\'previous\']', navigation).addClass('disabled'); 81 } 82 if (no < tabs.length) { 83 jQuery('a.btn[data-poll-tab=\'next\']', navigation).removeClass('disabled'); 84 } else { 85 jQuery('a.btn[data-poll-tab=\'next\']', navigation).addClass('disabled'); 86 } 87 // 88 // Set current tab number 89 tabsWrapper.attr('data-poll-tab', no); 90 // 91 // Scroll to tab start 92 PollTabsJQuery.scrollTo('div[data-poll-tabs=\'' + poll + '\']'); 93 }, 94 95 scrollTo: function (selector) { 96 let element = jQuery(selector); 97 jQuery('html, body').animate({ 98 scrollTop: element.offset().top - PollTabsJQuery.scrollOffset 99 }, 500); 100 } 101 102}; 103jQuery(document).ready(function () { 104 PollTabsJQuery.initialize(); 105});
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.