mirror of
https://codeberg.org/nobody/LocalCDN.git
synced 2025-06-05 21:49:31 +02:00
11 lines
14 KiB
JavaScript
11 lines
14 KiB
JavaScript
/*
|
|
* pagination.js 2.3.0
|
|
* A jQuery plugin to provide simple yet fully customisable pagination
|
|
* https://github.com/superRaytin/paginationjs
|
|
|
|
* Homepage: http://pagination.js.org
|
|
*
|
|
* Copyright 2014-2100, superRaytin
|
|
* Released under the MIT license.
|
|
*/
|
|
!function(n,u){void 0===u&&g("Pagination requires jQuery.");var r="pagination",s="__pagination-",c=(u.fn.pagination&&g('plugin conflicted, the name "pagination" has been taken by another jQuery plugin.'),u.fn[r]=function(a){if(void 0!==a){var t,l=u(this),S=u.extend({},u.fn[r].defaults,a),e={initialize:function(){var e,t=this;l.data("pagination")||l.data("pagination",{}),!1!==t.callHook("beforeInit")&&(l.data("pagination").initialized&&u(".paginationjs",l).remove(),t.disabled=!!S.disabled,e=t.model={pageRange:S.pageRange,pageSize:S.pageSize},t.parseDataSource(S.dataSource,function(a){t.isAsync=c.isString(a),c.isArray(a)&&(e.totalNumber=S.totalNumber=a.length),t.isDynamicTotalNumber=t.isAsync&&S.totalNumberLocator;a=t.render(!0);S.className&&a.addClass(S.className),e.el=a,l["bottom"===S.position?"append":"prepend"](a),t.observer(),l.data("pagination").initialized=!0,t.callHook("afterInit",a)}))},render:function(a){var e=this,t=e.model,o=t.el||u('<div class="paginationjs"></div>'),a=!0!==a,t=(e.callHook("beforeRender",a),t.pageNumber||S.pageNumber),i=S.pageRange||0,n=e.getTotalPage(),r=t-i,s=t+i;return(r=n<s?(r=(s=n)-2*i)<1?1:r:r)<=1&&(r=1,s=Math.min(2*i+1,n)),o.html(e.generateHTML({currentPage:t,pageRange:i,rangeStart:r,rangeEnd:s})),S.hideOnlyOnePage&&o[n<=1?"hide":"show"](),e.callHook("afterRender",a),o},generatePageNumbersHTML:function(a){var e,t=a.currentPage,o=this.getTotalPage(),i=a.rangeStart,n=a.rangeEnd,r="",s=S.pageLink,a=S.ellipsisText,l=S.classPrefix,u=S.pageClassName,c=S.activeClassName,g=S.disableClassName;if(null===S.pageRange)for(e=1;e<=o;e++)r+=e==t?`<li class="${l}-page J-paginationjs-page ${u} ${c}" data-num="${e}"><a>${e}</a></li>`:`<li class="${l}-page J-paginationjs-page ${u}" data-num="${e}"><a href="${s}">${e}</a></li>`;else{if(i<=3)for(e=1;e<i;e++)r+=e==t?`<li class="${l}-page J-paginationjs-page ${u} ${c}" data-num="${e}"><a>${e}</a></li>`:`<li class="${l}-page J-paginationjs-page ${u}" data-num="${e}"><a href="${s}">${e}</a></li>`;else S.hideFirstOnEllipsisShow||(r+=`<li class="${l}-page ${l}-first J-paginationjs-page ${u}" data-num="1"><a href="${s}">1</a></li>`),r+=`<li class="${l}-ellipsis ${g}"><a>${a}</a></li>`;for(e=i;e<=n;e++)r+=e==t?`<li class="${l}-page J-paginationjs-page ${u} ${c}" data-num="${e}"><a>${e}</a></li>`:`<li class="${l}-page J-paginationjs-page ${u}" data-num="${e}"><a href="${s}">${e}</a></li>`;if(o-2<=n)for(e=n+1;e<=o;e++)r+=`<li class="${l}-page J-paginationjs-page ${u}" data-num="${e}"><a href="${s}">${e}</a></li>`;else r+=`<li class="${l}-ellipsis ${g}"><a>${a}</a></li>`,S.hideLastOnEllipsisShow||(r+=`<li class="${l}-page ${l}-last J-paginationjs-page ${u}" data-num="${o}"><a href="${s}">${o}</a></li>`)}return r},generateHTML:function(a){var e=this,t=a.currentPage,o=e.getTotalPage(),i=e.getTotalNumber(),n=S.showPrevious,r=S.showNext,s=S.showPageNumbers,l=S.showNavigator,u=S.showGoInput,c=S.showGoButton,g=S.pageLink,p=S.prevText,f=S.nextText,d=S.goButtonText,m=S.classPrefix,b=S.disableClassName,h=S.ulClassName,v=S.prevClassName,y=S.nextClassName,N="",$='<input type="text" class="J-paginationjs-go-pagenumber">',d=`<input type="button" class="J-paginationjs-go-button" value="${d}">`,k="function"==typeof S.formatNavigator?S.formatNavigator(t,o,i):S.formatNavigator,P="function"==typeof S.formatGoInput?S.formatGoInput($,t,o,i):S.formatGoInput,x="function"==typeof S.formatGoButton?S.formatGoButton(d,t,o,i):S.formatGoButton,j="function"==typeof S.autoHidePrevious?S.autoHidePrevious():S.autoHidePrevious,T="function"==typeof S.autoHideNext?S.autoHideNext():S.autoHideNext,H="function"==typeof S.header?S.header(t,o,i):S.header,w="function"==typeof S.footer?S.footer(t,o,i):S.footer;return H&&(N+=e.replaceVariables(H,{currentPage:t,totalPage:o,totalNumber:i})),(n||s||r)&&(N=N+'<div class="paginationjs-pages">'+(h?`<ul class="${h}">`:"<ul>"),n&&(t<=1?j||(N+=`<li class="${m}-prev ${b} ${v}"><a>${p}</a></li>`):N+=`<li class="${m}-prev J-paginationjs-previous ${v}" data-num="${t-1}" title="Previous page"><a href="${g}">${p}</a></li>`),s&&(N+=e.generatePageNumbersHTML(a)),r&&(o<=t?T||(N+=`<li class="${m}-next ${b} ${y}"><a>${f}</a></li>`):N+=`<li class="${m}-next J-paginationjs-next ${y}" data-num="${t+1}" title="Next page"><a href="${g}">${f}</a></li>`),N+="</ul></div>"),l&&k&&(N+=`<div class="${m}-nav J-paginationjs-nav">${e.replaceVariables(k,{currentPage:t,totalPage:o,totalNumber:i})}</div>`),u&&P&&(N+=`<div class="${m}-go-input">${e.replaceVariables(P,{currentPage:t,totalPage:o,totalNumber:i,input:$})}</div>`),c&&x&&(N+=`<div class="${m}-go-button">${e.replaceVariables(x,{currentPage:t,totalPage:o,totalNumber:i,button:d})}</div>`),w&&(N+=e.replaceVariables(w,{currentPage:t,totalPage:o,totalNumber:i})),N},findTotalNumberFromRemoteResponse:function(a){this.model.totalNumber=S.totalNumberLocator(a)},go:function(a,t){var e,o,i,n=this,r=n.model;function s(a){var e;!1!==n.callHook("beforePaging",i)&&(r.direction=void 0===r.pageNumber?0:i>r.pageNumber?1:-1,r.pageNumber=i,n.render(),n.disabled&&n.isAsync&&n.enable(),l.data("pagination").model=r,S.formatResult&&(e=u.extend(!0,[],a),c.isArray(a=S.formatResult(e))||(a=e)),l.data("pagination").currentPageData=a,n.doCallback(a,t),n.callHook("afterPaging",i),1==i?n.callHook("afterIsFirstPage"):i==n.getTotalPage()&&n.callHook("afterIsLastPage"))}n.disabled||(i=a,!(i=parseInt(i)))||i<1||(a=S.pageSize,e=n.getTotalNumber(),o=n.getTotalPage(),0<e&&o<i)||(n.isAsync?((e={})[(o=S.alias||{}).pageSize||"pageSize"]=a,e[o.pageNumber||"pageNumber"]=i,a="function"==typeof S.ajax?S.ajax():S.ajax,u.extend(!0,o={type:"get",cache:!1,data:{},contentType:"application/x-www-form-urlencoded; charset=UTF-8",dataType:"json",async:!0},a),u.extend(o.data,e),o.url=S.dataSource,o.success=function(a){n.isDynamicTotalNumber?n.findTotalNumberFromRemoteResponse(a):n.model.totalNumber=S.totalNumber,s(n.filterDataByLocator(a))},o.error=function(a,e,t){S.formatAjaxError&&S.formatAjaxError(a,e,t),n.enable()},n.disable(),u.ajax(o)):s(n.getPagingData(i)))},doCallback:function(a,e){var t=this.model;"function"==typeof e?e(a,t):"function"==typeof S.callback&&S.callback(a,t)},destroy:function(){!1!==this.callHook("beforeDestroy")&&(this.model.el.remove(),l.off(),u("#paginationjs-style").remove(),this.callHook("afterDestroy"))},previous:function(a){this.go(this.model.pageNumber-1,a)},next:function(a){this.go(this.model.pageNumber+1,a)},disable:function(){var a=this,e=a.isAsync?"async":"sync";!1!==a.callHook("beforeDisable",e)&&(a.disabled=!0,a.model.disabled=!0,a.callHook("afterDisable",e))},enable:function(){var a=this,e=a.isAsync?"async":"sync";!1!==a.callHook("beforeEnable",e)&&(a.disabled=!1,a.model.disabled=!1,a.callHook("afterEnable",e))},refresh:function(a){this.go(this.model.pageNumber,a)},show:function(){this.model.el.is(":visible")||this.model.el.show()},hide:function(){this.model.el.is(":visible")&&this.model.el.hide()},replaceVariables:function(a,e){for(var t in e)var o=e[t],t=new RegExp("<%=\\s*"+t+"\\s*%>","img"),i=(i||a).replace(t,o);return i},getPagingData:function(a){var e=S.pageSize,t=S.dataSource,o=this.getTotalNumber(),i=e*(a-1)+1,a=Math.min(a*e,o);return t.slice(i-1,a)},getTotalNumber:function(){return this.model.totalNumber||S.totalNumber||0},getTotalPage:function(){return Math.ceil(this.getTotalNumber()/S.pageSize)},getLocator:function(a){var e;return"string"==typeof a?e=a:"function"==typeof a?e=a():g('"locator" is incorrect. Expect string or function type.'),e},filterDataByLocator:function(t){var o,a=this.getLocator(S.locator);if(c.isObject(t)){try{u.each(a.split("."),function(a,e){o=(o||t)[e]})}catch(a){}o?c.isArray(o)||g("dataSource."+a+" should be an Array."):g("dataSource."+a+" is undefined.")}return o||t},parseDataSource:function(a,e){var t=this;c.isObject(a)?e(S.dataSource=t.filterDataByLocator(a)):c.isArray(a)?e(S.dataSource=a):"function"==typeof a?S.dataSource(function(a){c.isArray(a)||g('The parameter of "done" Function should be an Array.'),t.parseDataSource.call(t,a,e)}):"string"==typeof a?(/^https?|file:/.test(a)&&(S.ajaxDataType="jsonp"),e(a)):g("Unexpected dataSource type")},callHook:function(a){var t,e=l.data("pagination")||{},o=Array.prototype.slice.apply(arguments);return o.shift(),S[a]&&"function"==typeof S[a]&&!1===S[a].apply(n,o)&&(t=!1),e.hooks&&e.hooks[a]&&u.each(e.hooks[a],function(a,e){!1===e.apply(n,o)&&(t=!1)}),!1!==t},observer:function(){var o=this,t=o.model.el,a=(l.on(s+"go",function(a,e,t){(e="string"==typeof e?parseInt(e.trim()):e)&&("number"!=typeof e&&g('"pageNumber" is incorrect. (Number)'),o.go(e,t))}),t.on("click",".J-paginationjs-page",function(a){var e=u(a.currentTarget),t=e.attr("data-num").trim();if(t&&!e.hasClass(S.disableClassName)&&!e.hasClass(S.activeClassName))return!1!==o.callHook("beforePageOnClick",a,t)&&(o.go(t),o.callHook("afterPageOnClick",a,t),!!S.pageLink)&&void 0}),t.on("click",".J-paginationjs-previous",function(a){var e=u(a.currentTarget),t=e.attr("data-num").trim();if(t&&!e.hasClass(S.disableClassName))return!1!==o.callHook("beforePreviousOnClick",a,t)&&(o.go(t),o.callHook("afterPreviousOnClick",a,t),!!S.pageLink)&&void 0}),t.on("click",".J-paginationjs-next",function(a){var e=u(a.currentTarget),t=e.attr("data-num").trim();if(t&&!e.hasClass(S.disableClassName))return!1!==o.callHook("beforeNextOnClick",a,t)&&(o.go(t),o.callHook("afterNextOnClick",a,t),!!S.pageLink)&&void 0}),t.on("click",".J-paginationjs-go-button",function(a){var e=u(".J-paginationjs-go-pagenumber",t).val();if(!1===o.callHook("beforeGoButtonOnClick",a,e))return!1;l.trigger(s+"go",e),o.callHook("afterGoButtonOnClick",a,e)}),t.on("keyup",".J-paginationjs-go-pagenumber",function(a){if(13===a.which){var e=u(a.currentTarget).val();if(!1===o.callHook("beforeGoInputOnEnter",a,e))return!1;l.trigger(s+"go",e),u(".J-paginationjs-go-pagenumber",t).focus(),o.callHook("afterGoInputOnEnter",a,e)}}),l.on(s+"previous",function(a,e){o.previous(e)}),l.on(s+"next",function(a,e){o.next(e)}),l.on(s+"disable",function(){o.disable()}),l.on(s+"enable",function(){o.enable()}),l.on(s+"refresh",function(a,e){o.refresh(e)}),l.on(s+"show",function(){o.show()}),l.on(s+"hide",function(){o.hide()}),l.on(s+"destroy",function(){o.destroy()}),Math.max(o.getTotalPage(),1)),e=S.pageNumber;o.isDynamicTotalNumber&&S.resetPageNumberOnInit&&(e=1),S.triggerPagingOnInit&&l.trigger(s+"go",Math.min(e,a))}};if(l.data("pagination")&&!0===l.data("pagination").initialized){if(p(a))return l.trigger.call(this,s+"go",a,arguments[1]),this;if("string"==typeof a){var o=Array.prototype.slice.apply(arguments);switch(o[0]=s+o[0],a){case"previous":case"next":case"go":case"disable":case"enable":case"refresh":case"show":case"hide":case"destroy":l.trigger.apply(this,o);break;case"getCurrentPageNum":return(l.data("pagination").model?l.data("pagination").model:l.data("pagination").attributes).pageNumber;case"getTotalPage":return Math.ceil(l.data("pagination").model.totalNumber/l.data("pagination").model.pageSize);case"getCurrentPageData":return l.data("pagination").currentPageData;case"isDisabled":return!0===l.data("pagination").model.disabled;default:g("Unknown action: "+a)}return this}t=l,u.each(["go","previous","next","disable","enable","refresh","show","hide","destroy"],function(a,e){t.off(s+e)}),t.data("pagination",{}),u(".paginationjs",t).remove()}else c.isObject(a)||g("Illegal options");var i=S;i.dataSource||g('"dataSource" is required.'),"string"==typeof i.dataSource?void 0===i.totalNumberLocator?void 0===i.totalNumber?g('"totalNumber" is required.'):p(i.totalNumber)||g('"totalNumber" is incorrect. Expect numberic type'):"function"!=typeof i.totalNumberLocator&&g('"totalNumberLocator" should be a Function.'):c.isObject(i.dataSource)&&(void 0===i.locator?g('"dataSource" is an Object, please specify a "locator".'):"string"!=typeof i.locator&&"function"!=typeof i.locator&&g(i.locator+" is incorrect. Expect string or function type")),void 0!==i.formatResult&&"function"!=typeof i.formatResult&&g('"formatResult" should be a Function.'),e.initialize()}return this},u.fn[r].defaults={totalNumber:0,pageNumber:1,pageSize:10,pageRange:2,showPrevious:!0,showNext:!0,showPageNumbers:!0,showNavigator:!1,showGoInput:!1,showGoButton:!1,pageLink:"",prevText:"«",nextText:"»",ellipsisText:"...",goButtonText:"Go",classPrefix:"paginationjs",activeClassName:"active",disableClassName:"disabled",formatNavigator:"<%= currentPage %> / <%= totalPage %>",formatGoInput:"<%= input %>",formatGoButton:"<%= button %>",position:"bottom",autoHidePrevious:!1,autoHideNext:!1,triggerPagingOnInit:!0,resetPageNumberOnInit:!0,hideOnlyOnePage:!1,hideFirstOnEllipsisShow:!1,hideLastOnEllipsisShow:!1,callback:function(){}},u.fn.addHook=function(a,e){arguments.length<2&&g("Expect 2 arguments at least."),"function"!=typeof e&&g("callback should be a function.");var t=u(this),o=t.data("pagination");o||(t.data("pagination",{}),o=t.data("pagination")),o.hooks||(o.hooks={}),o.hooks[a]=o.hooks[a]||[],o.hooks[a].push(e)},u[r]=function(a,e){var t;if(arguments.length<2&&g("Requires two parameters."),(t="string"!=typeof a&&a instanceof jQuery?a:u(a)).length)return t.pagination(e),t},{});function g(a){throw new Error("Pagination: "+a)}function p(a){return!isNaN(parseFloat(a))&&isFinite(a)}u.each(["Object","Array","String"],function(a,t){c["is"+t]=function(a){return("object"==(e=typeof(a=a))?null==a?"null":Object.prototype.toString.call(a).slice(8,-1):e).toLowerCase()===t.toLowerCase();var e}}),"function"==typeof define&&define.amd&&define(function(){return u})}(this,window.jQuery); |