PageSourceSearch

https://www.opax.com/Themes/standartv2/assets/js/pagination/pagination.js?v=1.26.01.05

js opax.com collected 2026-10-09 03:49:16 UTC 33,848 bytes, 1,061 lines download raw bytes

1/*
2 * pagination.js 2.0.7
3 * A jQuery plugin to provide simple yet fully customisable pagination.
4 * https://github.com/superRaytin/paginationjs
5 *
6 * Homepage: http://paginationjs.com
7 *
8 * Copyright 2014-2100, superRaytin
9 * Released under the MIT license.
10 */
11
12(function(global, $) {
13
14  if (typeof $ === 'undefined') {
15    throwError('Pagination requires jQuery.');
16  }
17
18  var pluginName = 'pagination';
19
20  var pluginHookMethod = 'addHook';
21
22  var eventPrefix = '__pagination-';
23
24  // Conflict, use backup
25  if ($.fn.pagination) {
26    pluginName = 'pagination2';
27  }
28
29  $.fn[pluginName] = function(options) {
30
31    if (typeof options === 'undefined') {
32      return this;
33    }
34
35    var container = $(this);
36
37    var pagination = {
38
39      initialize: function() {
40        var self = this;
41
42        // Save attributes of current instance
43        if (!container.data('pagination')) {
44          container.data('pagination', {});
45        }
46
47        // Before initialize
48        if (self.callHook('beforeInit') === false) return;
49
50        // If pagination has been initialized, destroy it
51        if (container.data('pagination').initialized) {
52          $('.paginationjs', container).remove();
53        }
54
55        // Whether to disable Pagination at the initialization
56        self.disabled = !!attributes.disabled;
57
58        // Passed to the callback function
59        var model = self.model = {
60          pageRange: attributes.pageRange,
61          pageSize: attributes.pageSize
62        };
63
64        // "dataSource"`s type is unknown, parse it to find true data
65        self.parseDataSource(attributes.dataSource, function(dataSource) {
66
67          // Whether pagination is sync mode
68          self.sync = Helpers.isArray(dataSource);
69          if (self.sync) {
70            model.totalNumber = attributes.totalNumber = dataSource.length;
71          }
72
73          // Obtain the total number of pages
74          model.totalPage = self.getTotalPage();
75
76          // Less than one page
77          if (attributes.hideWhenLessThanOnePage) {
78            if (model.totalPage <= 1) return;
79          }
80
81          var el = self.render(true);
82
83          // Extra className
84          if (attributes.className) {
85            el.addClass(attributes.className);
86          }
87
88          model.el = el;
89
90          // Load template
91          container[attributes.position === 'bottom' ? 'append' : 'prepend'](el);
92
93          // Binding events
94          self.observer();
95
96          // initialized flag
97          container.data('pagination').initialized = true;
98
99          // After initialized
100          self.callHook('afterInit', el);
101        });
102      },
103
104      render: function(isBoot) {
105        var self = this;
106        var model = self.model;
107        var el = model.el || $('<div class="paginationjs"></div>');
108        var isForced = isBoot !== true;
109
110        // Before render
111        self.callHook('beforeRender', isForced);
112
113        var currentPage = model.pageNumber || attributes.pageNumber;
114        var pageRange = attributes.pageRange;
115        var totalPage = model.totalPage;
116
117        var rangeStart = currentPage - pageRange;
118        var rangeEnd = currentPage + pageRange;
119
120        if (rangeEnd > totalPage) {
121          rangeEnd = totalPage;
122          rangeStart = totalPage - pageRange * 2;
123          rangeStart = rangeStart < 1 ? 1 : rangeStart;
124        }
125
126        if (rangeStart <= 1) {
127          rangeStart = 1;
128
129          rangeEnd = Math.min(pageRange * 2 + 1, totalPage);
130        }
131
132        el.html(self.createTemplate({
133          currentPage: currentPage,
134          pageRange: pageRange,
135          totalPage: totalPage,
136          rangeStart: rangeStart,
137          rangeEnd: rangeEnd
138        }));
139
140        // After render
141        self.callHook('afterRender', isForced);
142
143        return el;
144      },
145
146      // Create template
147      createTemplate: function(args) {
148        var self = this;
149        var currentPage = args.currentPage;
150        var totalPage = args.totalPage;
151        var rangeStart = args.rangeStart;
152        var rangeEnd = args.rangeEnd;
153
154        var totalNumber = attributes.totalNumber;
155
156        var showPrevious = attributes.showPrevious;
157        var showNext = attributes.showNext;
158        var showPageNumbers = attributes.showPageNumbers;
159        var showNavigator = attributes.showNavigator;
160        var showGoInput = attributes.showGoInput;
161        var showGoButton = attributes.showGoButton;
162
163        var pageLink = attributes.pageLink;
164        var prevText = attributes.prevText;
165        var nextText = attributes.nextText;
166        var ellipsisText = attributes.ellipsisText;
167        var goButtonText = attributes.goButtonText;
168
169        var classPrefix = attributes.classPrefix;
170        var activeClassName = attributes.activeClassName;
171        var disableClassName = attributes.disableClassName;
172        var ulClassName = attributes.ulClassName;
173
174        var formatNavigator = $.isFunction(attributes.formatNavigator) ? attributes.formatNavigator() : attributes.formatNavigator;
175        var formatGoInput = $.isFunction(attributes.formatGoInput) ? attributes.formatGoInput() : attributes.formatGoInput;
176        var formatGoButton = $.isFunction(attributes.formatGoButton) ? attributes.formatGoButton() : attributes.formatGoButton;
177
178        var autoHidePrevious = $.isFunction(attributes.autoHidePrevious) ? attributes.autoHidePrevious() : attributes.autoHidePrevious;
179        var autoHideNext = $.isFunction(attributes.autoHideNext) ? attributes.autoHideNext() : attributes.autoHideNext;
180
181        var header = $.isFunction(attributes.header) ? attributes.header() : attributes.header;
182        var footer = $.isFunction(attributes.footer) ? attributes.footer() : attributes.footer;
183
184        var html = '';
185        var goInput = '<input type="text" class="J-paginationjs-go-pagenumber">';
186        var goButton = '<input type="button" class="J-paginationjs-go-button" value="' + goButtonText + '">';
187        var formattedString;
188        var i;
189
190        if (header) {
191          formattedString = self.replaceVariables(header, {
192            currentPage: currentPage,
193            totalPage: totalPage,
194            totalNumber: totalNumber
195          });
196          html += formattedString;
197        }
198
199        if (showPrevious || showPageNumbers || showNext) {
200          html += '<div class="paginationjs-pages">';
201
202          if (ulClassName) {
203            html += '<ul class="' + ulClassName + '">';
204          } else {
205            html += '<ul>';
206          }
207
208          // Previous page button
209          if (showPrevious) {
210            if (currentPage === 1) {
211              if (!autoHidePrevious) {
212                  html += '<li class="' + classPrefix + '-prev ' + disableClassName + '"><a style="cursor:no-drop;" data-href="#">&#171;<\/a><\/li>';
213                  html += '<li class="' + classPrefix + '-prev ' + disableClassName + '"><a style="cursor:no-drop;" data-href="#">
213' + prevText + '<\/a><\/li>';
214              }
215            } else {
216                html += '<li class="' + classPrefix + '-prev J-paginationjs-previous" data-num="' + 1 + '"><a style="cursor:pointer;" data-href="' + pageLink + '">&#171;<\/a><\/li>';
217                html += '<li class="' + classPrefix + '-prev J-paginationjs-previous" data-num="' + (currentPage - 1) + '"><a style="cursor:pointer;" data-href="' + pageLink + '">' + prevText + '<\/a><\/li>';
218            }
219          }
220
221          // Page numbers
222          if (showPageNumbers) {
223            if (rangeStart <= 3) {
224              for (i = 1; i < rangeStart; i++) {
225                if (i == currentPage) {
226                  html += '<li class="' + classPrefix + '-page J-paginationjs-page ' + activeClassName + '" data-num="' + i + '"><a>' + i + '<\/a><\/li>';
227                } else {
228                  html += '<li class="' + classPrefix + '-page J-paginationjs-page" data-num="' + i + '"><a style="cursor:pointer;" data-href="' + pageLink + '">' + i + '<\/a><\/li>';
229                }
230              }
231            } else {
232              if (attributes.showFirstOnEllipsisShow) {
233                html += '<li class="' + classPrefix + '-page ' + classPrefix + '-first J-paginationjs-page" data-num="1"><a style="cursor:pointer;" data-href="' + pageLink + '">1<\/a><\/li>';
234              }
235              html += '<li class="' + classPrefix + '-ellipsis ' + disableClassName + '"><a>' + ellipsisText + '<\/a><\/li>';
236            }
237
238            // Main loop
239            for (i = rangeStart; i <= rangeEnd; i++) {
240              if (i == currentPage) {
241                html += '<li class="' + classPrefix + '-page J-paginationjs-page ' + activeClassName + '" data-num="' + i + '"><a>' + i + '<\/a><\/li>';
242              } else {
243                html += '<li class="' + classPrefix + '-page J-paginationjs-page" data-num="' + i + '"><a style="cursor:pointer;" data-href="' + pageLink + '">' + i + '<\/a><\/li>';
244              }
245            }
246
247            if (rangeEnd >= totalPage - 2) {
248              for (i = rangeEnd + 1; i <= totalPage; i++) {
249                html += '<li class="' + classPrefix + '-page J-paginationjs-page" data-num="' + i + '"><a style="cursor:pointer;" data-href="' + pageLink + '">' + i + '<\/a><\/li>';
250              }
251            } else {
252              html += '<li class="' + classPrefix + '-ellipsis ' + disableClassName + '"><a>' + ellipsisText + '<\/a><\/li>';
253
254              if (attributes.showLastOnEllipsisShow) {
255                html += '<li class="' + classPrefix + '-page ' + classPrefix + '-last J-paginationjs-page" data-num="' + totalPage + '"><a style="cursor:pointer;" data-href="' + pageLink + '">' + totalPage + '<\/a><\/li>';
256              }
257            }
258          }
259
260          // Next page button
261          if (showNext) {
262            if (currentPage == totalPage) {
263              if (!autoHideNext) {
264                  html += '<li class="' + classPrefix + '-next ' + disableClassName + '"><a style="cursor:no-drop;" data-href="#">
264' + nextText + '<\/a><\/li>';
265                  html += '<li class="' + classPrefix + '-next ' + disableClassName + '"><a style="cursor:no-drop;" data-href="#">&#187;<\/a><\/li>';
266              }
267            } else {
268                html += '<li class="' + classPrefix + '-next J-paginationjs-next" data-num="' + (currentPage + 1) + '"><a style="cursor:pointer;" data-href="' + pageLink + '">' + nextText + '<\/a><\/li>'; 
269                html += '<li class="' + classPrefix + '-next J-paginationjs-next" data-num="' + totalPage + '"><a style="cursor:pointer;" data-href="' + pageLink + '">&#187;<\/a><\/li>';
270            }
271          }
272          html += '<\/ul><\/div>';
273        }
274
275        // Navigator
276        if (showNavigator) {
277          if (formatNavigator) {
278            formattedString = self.replaceVariables(formatNavigator, {
279              currentPage: currentPage,
280              totalPage: totalPage,
281              totalNumber: totalNumber
282            });
283            html += '<div class="' + classPrefix + '-nav J-paginationjs-nav">' + formattedString + '<\/div>';
284          }
285        }
286
287        // Go input
288        if (showGoInput) {
289          if (formatGoInput) {
290            formattedString = self.replaceVariables(formatGoInput, {
291              currentPage: currentPage,
292              totalPage: totalPage,
293              totalNumber: totalNumber,
294              input: goInput
295            });
296            html += '<div class="' + classPrefix + '-go-input">' + formattedString + '</div>';
297          }
298        }
299
300        // Go button
301        if (showGoButton) {
302          if (formatGoButton) {
303            formattedString = self.replaceVariables(formatGoButton, {
304              currentPage: currentPage,
305              totalPage: totalPage,
306              totalNumber: totalNumber,
307              button: goButton
308            });
309            html += '<div class="' + classPrefix + '-go-button">' + formattedString + '</div>';
310          }
311        }
312
313        if (footer) {
314          formattedString = self.replaceVariables(footer, {
315            currentPage: currentPage,
316            totalPage: totalPage,
317            totalNumber: totalNumber
318          });
319          html += formattedString;
320        }
321
322        return html;
323      },
324
325      // Go to the specified page
326      go: function(number, callback) {
327        var self = this;
328        var model = self.model;
329
330        if (self.disabled) return;
331
332        var pageNumber = number;
333        var pageSize = attributes.pageSize;
334        var totalPage = model.totalPage;
335
336        pageNumber = parseInt(pageNumber);
337
338        // Page number out of bounds
339        if (!pageNumber || pageNumber < 1 || pageNumber > totalPage) return;
340
341        // Sync mode
342        if (self.sync) {
343          render(self.getDataSegment(pageNumber));
344          return;
345        }
346
347        var postData = {};
348        var alias = attributes.alias || {};
349
350        postData[alias.pageSize ? alias.pageSize : 'pageSize'] = pageSize;
351        postData[alias.pageNumber ? alias.pageNumber : 'pageNumber'] = pageNumber;
352
353        var formatAjaxParams = {
354          type: 'get',
355          cache: false,
356          data: {},
357          contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
358          dataType: 'json',
359          async: true
360        };
361
362        $.extend(true, formatAjaxParams, attributes.ajax);
363        $.extend(formatAjaxParams.data || {}, postData);
364
365        formatAjaxParams.url = attributes.dataSource;
366        formatAjaxParams.success = function(response) {
367          render(self.filterDataByLocator(response));
368        };
369        formatAjaxParams.error = function(jqXHR, textStatus, errorThrown) {
370          attributes.formatAjaxError && attributes.formatAjaxError(jqXHR, textStatus, errorThrown);
371          self.enable();
372        };
373
374        self.disable();
375
376        $.ajax(formatAjaxParams);
377
378        function render(data) {
379          // Before paging
380          if (self.callHook('beforePaging', pageNumber) === false) return false;
381
382          // Pagination direction
383          model.direction = typeof model.pageNumber === 'undefined' ? 0 : (pageNumber > model.pageNumber ? 1 : -1);
384
385          model.pageNumber = pageNumber;
386
387          self.render();
388
389          if (self.disabled && !self.sync) {
390            // enable
391            self.enable();
392          }
393
394          // cache model data
395          container.data('pagination').model = model;
396
397          // format result before execute callback
398          if ($.isFunction(attributes.formatResult)) {
399            var cloneData = $.extend(true, [], data);
400            if (!Helpers.isArray(data = attributes.formatResult(cloneData))) {
401              data = cloneData;
402            }
403          }
404
405          container.data('pagination').currentPageData = data;
406
407          // callback
408          self.doCallback(data, callback);
409
410          // After pageing
411          self.callHook('afterPaging', pageNumber);
412
413          // Already the first page
414          if (pageNumber == 1) {
415            self.callHook('afterIsFirstPage');
416          }
417
418          // Already the last page
419          if (pageNumber == model.totalPage) {
420            self.callHook('afterIsLastPage');
421          }
422        }
423      },
424
425      doCallback: function(data, customCallback) {
426        var self = this;
427        var model = self.model;
428
429        if ($.isFunction(customCallback)) {
430          customCallback(data, model);
431        } else if ($.isFunction(attributes.callback)) {
432          attributes.callback(data, model);
433        }
434      },
435
436      destroy: function() {
437        // Before destroy
438        if (this.callHook('beforeDestroy') === false) return;
439
440        this.model.el.remove();
441        container.off();
442
443        // Remove style element
444        $('#paginationjs-style').remove();
445
446        // After destroy
447        this.callHook('afterDestroy');
448      },
449
450      previous: function(callback) {
451        this.go(this.model.pageNumber - 1, callback);
452      },
453
454      next: function(callback) {
455        this.go(this.model.pageNumber + 1, callback);
456      },
457
458      disable: function() {
459        var self = this;
460        var source = self.sync ? 'sync' : 'async';
461
462        // Before disabling
463        if (self.callHook('beforeDisable', source) === false) return;
464
465        self.disabled = true;
466        self.model.disabled = true;
467
468        // After disabling
469        self.callHook('afterDisable', source);
470      },
471
472      enable: function() {
473        var self = this;
474        var source = self.sync ? 'sync' : 'async';
475
476        // Before enabling
477        if (self.callHook('beforeEnable', source) === false) return;
478
479        self.disabled = false;
480        self.model.disabled = false;
481
482        // After enabling
483        self.callHook('afterEnable', source);
484      },
485
486      refresh: function(callback) {
vendor: 8,671 bytes, lines 487-764
487        this.go(this.model.pageNumber, callback);
488      },
489
490      show: function() {
491        var self = this;
492
493        if (self.model.el.is(':visible')) return;
494
495        self.model.el.show();
496      },
497
498      hide: function() {
499        var self = this;
500
501        if (!self.model.el.is(':visible')) return;
502
503        self.model.el.hide();
504      },
505
506      // Replace variables of template
507      replaceVariables: function(template, variables) {
508        var formattedString;
509
510        for (var key in variables) {
511          var value = variables[key];
512          var regexp = new RegExp('<%=\\s*' + key + '\\s*%>', 'img');
513
514          formattedString = (formattedString || template).replace(regexp, value);
515        }
516
517        return formattedString;
518      },
519
520      // Get data segments
521      getDataSegment: function(number) {
522        var pageSize = attributes.pageSize;
523        var dataSource = attributes.dataSource;
524        var totalNumber = attributes.totalNumber;
525
526        var start = pageSize * (number - 1) + 1;
527        var end = Math.min(number * pageSize, totalNumber);
528
529        return dataSource.slice(start - 1, end);
530      },
531
532      // Get total page
533      getTotalPage: function() {
534        return Math.ceil(attributes.totalNumber / attributes.pageSize);
535      },
536
537      // Get locator
538      getLocator: function(locator) {
539        var result;
540
541        if (typeof locator === 'string') {
542          result = locator;
543        } else if ($.isFunction(locator)) {
544          result = locator();
545        } else {
546          throwError('"locator" is incorrect. (String | Function)');
547        }
548
549        return result;
550      },
551
552      // Filter data by "locator"
553      filterDataByLocator: function(dataSource) {
554        var locator = this.getLocator(attributes.locator);
555        var filteredData;
556
557        // Data source is an Object, use "locator" to locate the true data
558        if (Helpers.isObject(dataSource)) {
559          try {
560            $.each(locator.split('.'), function(index, item) {
561              filteredData = (filteredData ? filteredData : dataSource)[item];
562            });
563          }
564          catch (e) {
565          }
566
567          if (!filteredData) {
568            throwError('dataSource.' + locator + ' is undefined.');
569          } else if (!Helpers.isArray(filteredData)) {
570            throwError('dataSource.' + locator + ' must be an Array.');
571          }
572        }
573
574        return filteredData || dataSource;
575      },
576
577      // Parse dataSource
578      parseDataSource: function(dataSource, callback) {
579        var self = this;
580        var args = arguments;
581
582        if (Helpers.isObject(dataSource)) {
583          callback(attributes.dataSource = self.filterDataByLocator(dataSource));
584        } else if (Helpers.isArray(dataSource)) {
585          callback(attributes.dataSource = dataSource);
586        } else if ($.isFunction(dataSource)) {
587          attributes.dataSource(function(data) {
588            if ($.isFunction(data)) {
589              throwError('Unexpect parameter of the "done" Function.');
590            }
591            args.callee.call(self, data, callback);
592          });
593        } else if (typeof dataSource === 'string') {
594          if (/^https?|file:/.test(dataSource)) {
595            attributes.ajaxDataType = 'jsonp';
596          }
597          callback(dataSource);
598        } else {
599          throwError('Unexpect data type of the "dataSource".');
600        }
601      },
602
603      callHook: function(hook) {
604        var paginationData = container.data('pagination');
605        var result;
606
607        var args = Array.prototype.slice.apply(arguments);
608        args.shift();
609
610        if (attributes[hook] && $.isFunction(attributes[hook])) {
611          if (attributes[hook].apply(global, args) === false) {
612            result = false;
613          }
614        }
615
616        if (paginationData.hooks && paginationData.hooks[hook]) {
617          $.each(paginationData.hooks[hook], function(index, item) {
618            if (item.apply(global, args) === false) {
619              result = false;
620            }
621          });
622        }
623
624        return result !== false;
625      },
626
627      observer: function() {
628        var self = this;
629        var el = self.model.el;
630
631        // Go to page
632        container.on(eventPrefix + 'go', function(event, pageNumber, done) {
633          pageNumber = parseInt($.trim(pageNumber));
634
635          if (!pageNumber) return;
636
637          if (!$.isNumeric(pageNumber)) {
638            throwError('"pageNumber" is incorrect. (Number)');
639          }
640
641          self.go(pageNumber, done);
642        });
643
644        // Page click
645        el.delegate('.J-paginationjs-page', 'click', function(event) {
646          var current = $(event.currentTarget);
647          var pageNumber = $.trim(current.attr('data-num'));
648
649          if (!pageNumber || current.hasClass(attributes.disableClassName) || current.hasClass(attributes.activeClassName)) return;
650
651          // Before page button clicked
652          if (self.callHook('beforePageOnClick', event, pageNumber) === false) return false;
653
654          self.go(pageNumber);
655
656          // After page button clicked
657          self.callHook('afterPageOnClick', event, pageNumber);
658
659          if (!attributes.pageLink) return false;
660        });
661
662        // Previous click
663        el.delegate('.J-paginationjs-previous', 'click', function(event) {
664          var current = $(event.currentTarget);
665          var pageNumber = $.trim(current.attr('data-num'));
666
667          if (!pageNumber || current.hasClass(attributes.disableClassName)) return;
668
669          // Before previous clicked
670          if (self.callHook('beforePreviousOnClick', event, pageNumber) === false) return false;
671
672          self.go(pageNumber);
673
674          // After previous clicked
675          self.callHook('afterPreviousOnClick', event, pageNumber);
676
677          if (!attributes.pageLink) return false;
678        });
679
680        // Next click
681        el.delegate('.J-paginationjs-next', 'click', function(event) {
682          var current = $(event.currentTarget);
683          var pageNumber = $.trim(current.attr('data-num'));
684
685          if (!pageNumber || current.hasClass(attributes.disableClassName)) return;
686
687          // Before next clicked
688          if (self.callHook('beforeNextOnClick', event, pageNumber) === false) return false;
689
690          self.go(pageNumber);
691
692          // After next clicked
693          self.callHook('afterNextOnClick', event, pageNumber);
694
695          if (!attributes.pageLink) return false;
696        });
697
698        // Go button click
699        el.delegate('.J-paginationjs-go-button', 'click', function() {
700          var pageNumber = $('.J-paginationjs-go-pagenumber', el).val();
701
702          // Before Go button clicked
703          if (self.callHook('beforeGoButtonOnClick', event, pageNumber) === false) return false;
704
705          container.trigger(eventPrefix + 'go', pageNumber);
706
707          // After Go button clicked
708          self.callHook('afterGoButtonOnClick', event, pageNumber);
709        });
710
711        // go input enter
712        el.delegate('.J-paginationjs-go-pagenumber', 'keyup', function(event) {
713          if (event.which === 13) {
714            var pageNumber = $(event.currentTarget).val();
715
716            // Before Go input enter
717            if (self.callHook('beforeGoInputOnEnter', event, pageNumber) === false) return false;
718
719            container.trigger(eventPrefix + 'go', pageNumber);
720
721            // Regains focus
722            $('.J-paginationjs-go-pagenumber', el).focus();
723
724            // After Go input enter
725            self.callHook('afterGoInputOnEnter', event, pageNumber);
726          }
727        });
728
729        // Previous page
730        container.on(eventPrefix + 'previous', function(event, done) {
731          self.previous(done);
732        });
733
734        // Next page
735        container.on(eventPrefix + 'next', function(event, done) {
736          self.next(done);
737        });
738
739        // Disable
740        container.on(eventPrefix + 'disable', function() {
741          self.disable();
742        });
743
744        // Enable
745        container.on(eventPrefix + 'enable', function() {
746          self.enable();
747        });
748
749        // Refresh
750        container.on(eventPrefix + 'refresh', function(event, done) {
751          self.refresh(done);
752        });
753
754        // Show
755        container.on(eventPrefix + 'show', function() {
756          self.show();
757        });
758
759        // Hide
760        container.on(eventPrefix + 'hide', function() {
761          self.hide();
762        });
763
764        // Destroy
765        container.on(eventPrefix + 'destroy', function() {
766          self.destroy();
767        });
768
769        // Whether to load the default page
770        if (attributes.triggerPagingOnInit) {
771          container.trigger(eventPrefix + 'go', Math.min(attributes.pageNumber, self.model.totalPage));
772        }
773      }
774    };
775
776    // If initial
777    if (container.data('pagination') && container.data('pagination').initialized === true) {
778      // Handling events
779      if ($.isNumeric(options)) {
780        // container.pagination(5)
781        container.trigger.call(this, eventPrefix + 'go', options, arguments[1]);
782        return this;
783      } else if (typeof options === 'string') {
784        var args = Array.prototype.slice.apply(arguments);
785        args[0] = eventPrefix + args[0];
786
787        switch (options) {
788          case 'previous':
789          case 'next':
790          case 'go':
791          case 'disable':
792          case 'enable':
793          case 'refresh':
794          case 'show':
795          case 'hide':
796          case 'destroy':
797            container.trigger.apply(this, args);
798            break;
799          // Get selected page number
800          case 'getSelectedPageNum':
801            if (container.data('pagination').model) {
802              return container.data('pagination').model.pageNumber;
803            } else {
804              return container.data('pagination').attributes.pageNumber;
805            }
806          // Get total page
807          case 'getTotalPage':
808            return container.data('pagination').model.totalPage;
809          // Get selected page data
810          case 'getSelectedPageData':
811            return container.data('pagination').currentPageData;
812          // Whether pagination was be disabled
813          case 'isDisabled':
814            return container.data('pagination').model.disabled === true;
815          default:
816            throwError('Pagination do not provide action: ' + options);
817        }
818        return this;
819      } else {
820        // Uninstall the old instance before initialize a new one
821        uninstallPlugin(container);
822      }
823    } else {
824      if (!Helpers.isObject(options)) throwError('Illegal options');
825    }
826
827    // Attributes
828    var attributes = $.extend({}, arguments.callee.defaults, options);
829
830    // Check parameters
831    parameterChecker(attributes);
832
833    pagination.initialize();
834
835    return this;
836  };
837
838  // Instance defaults
839  $.fn[pluginName].defaults = {
840
841    // Data source
842    // Array | String | Function | Object
843    //dataSource: '',
844
845    // String | Function
846    //locator: 'data',
847
848    // Total entries, must be specified when the pagination is asynchronous
849    totalNumber: 1,
850
851    // Default page
852    pageNumber: 1,
853
854    // entries of per page
855    pageSize: 10,
856
857    // Page range (pages on both sides of the current page)
858    pageRange: 2,
859
860    // Whether to display the 'Previous' button
861    showPrevious: true,
862
863    // Whether to display the 'Next' button
864    showNext: true,
865
866    // Whether to display the page buttons
867    showPageNumbers: true,
868
869    showNavigator: false,
870
871    // Whether to display the 'Go' input
872    showGoInput: false,
873
874    // Whether to display the 'Go' button
875    showGoButton: false,
876
877    // Page link
878    pageLink: '',
879
880    // 'Previous' text
881    prevText: '&laquo;',
882
883    // 'Next' text
884    nextText: '&raquo;',
885
886    // Ellipsis text
887    ellipsisText: '...',
888
889    // 'Go' button text
890    goButtonText: 'Go',
891
892    // Additional className for Pagination element
893    //className: '',
894
895    classPrefix: 'paginationjs',
896
897    // Default active class
898    activeClassName: 'active',
899
900    // Default disable class
901    disableClassName: 'disabled',
902
903    //ulClassName: '',
904
905    // Whether to insert inline style
906    inlineStyle: true,
907
908    formatNavigator: '<%= currentPage %> / <%= totalPage %>',
909
910    formatGoInput: '<%= input %>',
911
912    formatGoButton: '<%= button %>',
913
914    // Pagination element's position in the container
915    position: 'bottom',
916
917    // Auto hide previous button when current page is the first page
918    autoHidePrevious: false,
919
920    // Auto hide next button when current page is the last page
921    autoHideNext: false,
922
923    //header: '',
924
925    //footer: '',
926
927    // Aliases for custom pagination parameters
928    //alias: {},
929
930    // Whether to trigger pagination at initialization
931    triggerPagingOnInit: true,
932
933    // Whether to hide pagination when less than one page
934    hideWhenLessThanOnePage: false,
935
936    showFirstOnEllipsisShow: true,
937
938    showLastOnEllipsisShow: true,
939
940    // Pagging callback
941    callback: function() {
942    }
943  };
944
945  // Hook register
946  $.fn[pluginHookMethod] = function(hook, callback) {
947    if (arguments.length < 2) {
948      throwError('Missing argument.');
949    }
950
951    if (!$.isFunction(callback)) {
952      throwError('callback must be a function.');
953    }
954
955    var container = $(this);
956    var paginationData = container.data('pagination');
957
958    if (!paginationData) {
959      container.data('pagination', {});
960      paginationData = container.data('pagination');
961    }
962
963    !paginationData.hooks && (paginationData.hooks = {});
964
965    //paginationData.hooks[hook] = callback;
966    paginationData.hooks[hook] = paginationData.hooks[hook] || [];
967    paginationData.hooks[hook].push(callback);
968
969  };
970
971  // Static method
972  $[pluginName] = function(selector, options) {
973    if (arguments.length < 2) {
974      throwError('Requires two parameters.');
975    }
976
977    var container;
978
979    // 'selector' is a jQuery object
980    if (typeof selector !== 'string' && selector instanceof jQuery) {
981      container = selector;
982    } else {
983      container = $(selector);
984    }
985
986    if (!container.length) return;
987
988    container.pagination(options);
989
990    return container;
991  };
992
993  // ============================================================
994  // helpers
995  // ============================================================
996
997  var Helpers = {};
998
999  // Throw error
1000  function throwError(content) {
1001    throw new Error('Pagination: ' + content);
1002  }
1003
1004  // Check parameters
1005  function parameterChecker(args) {
1006    if (!args.dataSource) {
1007      throwError('"dataSource" is required.');
1008    }
1009
1010    if (typeof args.dataSource === 'string') {
1011      if (typeof args.totalNumber === 'undefined') {
1012        throwError('"totalNumber" is required.');
1013      } else if (!$.isNumeric(args.totalNumber)) {
1014        throwError('"totalNumber" is incorrect. (Number)');
1015      }
1016    } else if (Helpers.isObject(args.dataSource)) {
1017      if (typeof args.locator === 'undefined') {
1018        throwError('"dataSource" is an Object, please specify "locator".');
1019      } else if (typeof args.locator !== 'string' && !$.isFunction(args.locator)) {
1020        throwError('' + args.locator + ' is incorrect. (String | Function)');
1021      }
1022    }
1023  }
1024
1025  // uninstall plugin
1026  function uninstallPlugin(target) {
1027    var events = ['go', 'previous', 'next', 'disable', 'enable', 'refresh', 'show', 'hide', 'destroy'];
1028
1029    // off events of old instance
1030    $.each(events, function(index, value) {
1031      target.off(eventPrefix + value);
1032    });
1033
1034    // reset pagination data
1035    target.data('pagination', {});
1036
1037    // remove old
1038    $('.paginationjs', target).remove();
1039  }
1040
1041  // Object type detection
1042  function getObjectType(object, tmp) {
1043    return ( (tmp = typeof(object)) == "object" ? object == null && "null" || Object.prototype.toString.call(object).slice(8, -1) : tmp ).toLowerCase();
1044  }
1045
1046  $.each(['Object', 'Array'], function(index, name) {
1047    Helpers['is' + name] = function(object) {
1048      return getObjectType(object) === name.toLowerCase();
1049    };
1050  });
1051
1052  /*
1053   * export via AMD or CommonJS
1054   * */
1055  if (typeof define === 'function' && define.amd) {
1056    define(function() {
1057      return $;
1058    });
1059  }
1060
1061})(this, window.jQuery); 

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.