PluginProbe ʕ •ᴥ•ʔ
Strong Testimonials / 2.33
Strong Testimonials v2.33
3.3.6 3.3.5 3.3.4 3.3.3 3.3.2 3.3.1 trunk 1.0.1 2.30.9 2.31.10 2.32 2.32.1 2.32.2 2.32.3 2.32.4 2.33 2.34 2.35 2.36 2.37 2.38 2.38.1 2.39 2.39.1 2.39.2 2.39.3 2.40.0 2.40.1 2.40.2 2.40.3 2.40.4 2.40.5 2.40.6 2.40.7 2.41.0 2.41.1 2.50.0 2.50.1 2.50.2 2.50.3 2.50.4 2.51.0 2.51.1 2.51.2 2.51.3 2.51.4 2.51.5 2.51.6 2.51.7 2.51.8 2.51.9 3.0.0 3.0.1 3.0.2 3.0.3 3.1.0 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.20 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.17 3.2.18 3.2.19 3.2.2 3.2.20 3.2.21 3.2.22 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 3.3.0
strong-testimonials / public / js / lib / strongpager / jquery.strongpager.js
strong-testimonials / public / js / lib / strongpager Last commit date
jquery.strongpager.js 8 years ago jquery.strongpager.min.js 8 years ago
jquery.strongpager.js
229 lines
1 /*!
2 * jQuery Strong Pager Plugin
3 * Version 2.1
4 *
5 * Copyright (c) 2017 Chris Dillon
6 * Released under the MIT license
7 */
8 ;(function ($) {
9
10 var defaults = {
11 pageSize: 10,
12 currentPage: 1,
13 pagerLocation: 'after',
14 scrollTop: 1,
15 offset: 40,
16 div: '.strong-content',
17 imagesLoaded: true
18 };
19
20 $.fn.strongPager = function (options) {
21
22 if (this.length === 0) {
23 return this;
24 }
25
26 // create a namespace to be used throughout the plugin
27 var pager = {};
28 // set a reference to our view container
29 var el = this;
30
31 /**
32 * Initialize
33 */
34 var init = function () {
35 var pagerVar = el.data('pager-var');
36 var config = {};
37
38 if (typeof(window[pagerVar]) !== 'undefined') {
39 config = window[pagerVar].config;
40 }
41
42 // Merge user options with the defaults
43 pager.settings = $.extend({}, defaults, config, options);
44
45 pager.div = el.find(pager.settings.div);
46 pager.pageCounter = 0;
47 pager.scrollto = 0;
48 pager.currentPage = pager.settings.currentPage;
49 pager.visibilityInterval = 0;
50
51 // Wait for images loaded
52 if (pager.settings.imagesLoaded) {
53 el.imagesLoaded(setup);
54 } else {
55 setup();
56 }
57
58 // Store reference to self in order to access public functions later
59 $(el).data('strongPager', this);
60
61 // Set initialized flag
62 el.attr("data-state", "init");
63
64 };
65
66 /**
67 * Scroll upon navigation
68 */
69 var scroll = function () {
70 if (pager.settings.scrollTop) {
71 $('html, body').animate({scrollTop: pager.scrollto}, 800);
72 }
73 };
74
75 /**
76 * Paginate
77 */
78 var paginate = function () {
79 var pageCounter = 1;
80
81 pager.div.wrap('<div class="simplePagerContainer"></div>');
82
83 pager.div.children().each(function (i) {
84 var rangeEnd = pageCounter * pager.settings.pageSize - 1;
85 if (i > rangeEnd) {
86 pageCounter++;
87 }
88 $(this).addClass('simplePagerPage' + pageCounter);
89 });
90
91 pager.pageCounter = pageCounter;
92 };
93
94 /**
95 * Calculate offset for scrolling
96 */
97 var findOffset = function () {
98 var containerOffset;
99
100 // WooCommerce product tabs
101 if (el.closest('.woocommerce-tabs').length) {
102 containerOffset = el.closest('.woocommerce-tabs').offset();
103 } else {
104 containerOffset = el.find('.simplePagerContainer').offset();
105 }
106
107 pager.scrollto = ~~(containerOffset.top - pager.settings.offset);
108
109 // WordPress admin bar
110 if (document.getElementById('#wpadminbar')) {
111 pager.scrollto -= 32;
112 }
113 };
114
115 /**
116 * Hide all and show current
117 */
118 var switchPages = function (fade) {
119 // Hide the pages
120 pager.div.children().hide();
121
122 // Show the container which now has paging controls
123 el.show();
124
125 // Show the current page
126 var newPage = pager.div.children('.simplePagerPage' + pager.currentPage);
127 if (fade) {
128 newPage.fadeIn();
129 } else {
130 newPage.show();
131 }
132 };
133
134 /**
135 * Add navigation
136 */
137 var addNavigation = function () {
138 var nav = '<ul class="simplePagerNav">';
139 var cssClass;
140
141 for (var i = 1; i <= pager.pageCounter; i++) {
142 cssClass = '';
143 if (i === pager.currentPage) {
144 cssClass = 'currentPage ';
145 }
146 nav += '<li class="' + cssClass + 'simplePageNav' + i + '"><a rel="' + i + '" href="#">' + i + '</a></li>';
147 }
148 nav += '</ul>';
149 nav = '<div class="simplePagerList">' + nav + '</div>';
150
151 switch (pager.settings.pagerLocation) {
152 case 'before':
153 pager.div.before(nav);
154 break;
155 case 'both':
156 pager.div.before(nav);
157 pager.div.after(nav);
158 break;
159 default:
160 pager.div.after(nav);
161 }
162 };
163
164 /**
165 * Navigation behavior
166 */
167 var navigationHandler = function () {
168 el.find('.simplePagerNav a').click(function (e) {
169 var $this = $(e.target);
170 var container;
171
172 container = $this.closest('.simplePagerContainer');
173
174 // Get the REL attribute
175 pager.currentPage = $this.attr('rel');
176
177 // Remove current page highlight
178 container.find('li.currentPage').removeClass('currentPage');
179
180 // Add current page highlight
181 container.find('a[rel="' + pager.currentPage + '"]').parent('li').addClass('currentPage');
182
183 // Switch pages
184 switchPages(true);
185
186 // Scroll up for any nav click
187 scroll();
188
189 return false;
190 });
191 };
192
193 /**
194 * Visibility check.
195 */
196 var visibilityCheck = function () {
197 if (el.is(':visible')) {
198 clearInterval(pager.visibilityInterval);
199 findOffset();
200 }
201 };
202
203 /**
204 * Setup
205 */
206 var setup = function () {
207 paginate();
208 // Bail if only one page
209 if (pager.pageCounter > 1) {
210 addNavigation();
211 navigationHandler();
212 }
213
214 switchPages();
215
216 // Set up timer to calculate offset which is dependent on visibility
217 pager.visibilityInterval = setInterval(visibilityCheck, 500);
218 };
219
220 /**
221 * Start it up
222 */
223 init();
224
225 return this;
226 };
227
228 })(jQuery);
229