PluginProbe ʕ •ᴥ•ʔ
Strong Testimonials / 3.3.5
Strong Testimonials v3.3.5
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 / assets / public / js / lib / strongpager / jquery-strongpager.js
strong-testimonials / assets / public / js / lib / strongpager Last commit date
jquery-strongpager.js 1 year ago jquery-strongpager.min.js 1 year ago
jquery-strongpager.js
231 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().done( function( instance ) {
54 setup();
55 });
56 } else {
57 setup();
58 }
59
60 // Store reference to self in order to access public functions later
61 $(el).data('strongPager', this);
62
63 // Set initialized flag
64 el.attr("data-state", "init");
65
66 };
67
68 /**
69 * Scroll upon navigation
70 */
71 var scroll = function () {
72 if (pager.settings.scrollTop) {
73 $('html, body').animate({scrollTop: pager.scrollto}, 800);
74 }
75 };
76
77 /**
78 * Paginate
79 */
80 var paginate = function () {
81 var pageCounter = 1;
82
83 pager.div.wrap('<div class="simplePagerContainer"></div>');
84
85 pager.div.children().each(function (i) {
86 var rangeEnd = pageCounter * pager.settings.pageSize - 1;
87 if (i > rangeEnd) {
88 pageCounter++;
89 }
90 $(this).addClass('simplePagerPage' + pageCounter);
91 });
92
93 pager.pageCounter = pageCounter;
94 };
95
96 /**
97 * Calculate offset for scrolling
98 */
99 var findOffset = function () {
100 var containerOffset;
101
102 // WooCommerce product tabs
103 if (el.closest('.woocommerce-tabs').length) {
104 containerOffset = el.closest('.woocommerce-tabs').offset();
105 } else {
106 containerOffset = el.find('.simplePagerContainer').offset();
107 }
108
109 pager.scrollto = ~~(containerOffset.top - pager.settings.offset);
110
111 // WordPress admin bar
112 if (document.getElementById('#wpadminbar')) {
113 pager.scrollto -= 32;
114 }
115 };
116
117 /**
118 * Hide all and show current
119 */
120 var switchPages = function (fade) {
121 // Hide the pages
122 pager.div.children().hide();
123
124 // Show the container which now has paging controls
125 el.show();
126
127 // Show the current page
128 var newPage = pager.div.children('.simplePagerPage' + pager.currentPage);
129 if (fade) {
130 newPage.fadeIn();
131 } else {
132 newPage.show();
133 }
134 };
135
136 /**
137 * Add navigation
138 */
139 var addNavigation = function () {
140 var nav = '<ul class="simplePagerNav">';
141 var cssClass;
142
143 for (var i = 1; i <= pager.pageCounter; i++) {
144 cssClass = '';
145 if (i === pager.currentPage) {
146 cssClass = 'currentPage ';
147 }
148 nav += '<li class="' + cssClass + 'simplePageNav' + i + '"><a rel="' + i + '" href="#">' + i + '</a></li>';
149 }
150 nav += '</ul>';
151 nav = '<div class="simplePagerList">' + nav + '</div>';
152
153 switch (pager.settings.pagerLocation) {
154 case 'before':
155 pager.div.before(nav);
156 break;
157 case 'both':
158 pager.div.before(nav);
159 pager.div.after(nav);
160 break;
161 default:
162 pager.div.after(nav);
163 }
164 };
165
166 /**
167 * Navigation behavior
168 */
169 var navigationHandler = function () {
170 el.find('.simplePagerNav a').on('click', function (e) {
171 var $this = $(e.target);
172 var container;
173
174 container = $this.closest('.simplePagerContainer');
175
176 // Get the REL attribute
177 pager.currentPage = $this.attr('rel');
178
179 // Remove current page highlight
180 container.find('li.currentPage').removeClass('currentPage');
181
182 // Add current page highlight
183 container.find('a[rel="' + pager.currentPage + '"]').parent('li').addClass('currentPage');
184
185 // Switch pages
186 switchPages(true);
187
188 // Scroll up for any nav click
189 scroll();
190
191 return false;
192 });
193 };
194
195 /**
196 * Visibility check.
197 */
198 var visibilityCheck = function () {
199 if (el.is(':visible')) {
200 clearInterval(pager.visibilityInterval);
201 findOffset();
202 }
203 };
204
205 /**
206 * Setup
207 */
208 var setup = function () {
209 paginate();
210 // Bail if only one page
211 if (pager.pageCounter > 1) {
212 addNavigation();
213 navigationHandler();
214 }
215
216 switchPages();
217
218 // Set up timer to calculate offset which is dependent on visibility
219 pager.visibilityInterval = setInterval(visibilityCheck, 500);
220 };
221
222 /**
223 * Start it up
224 */
225 init();
226
227 return this;
228 };
229
230 })(jQuery);
231