AvocadoAmber/AvocadoEdition_Light/js/jquery.sms_paging.js

93 lines
3.4 KiB
JavaScript

/**************************************************************************************
* jQuery Paging 0.1.7
* by composite (ukjinplant@msn.com)
* http://composite.tistory.com
* This project licensed under a MIT License.
**************************************************************************************/;
(function ($) {
//default properties.
var a = /a/i, defs = {
liitem: 'li', item: 'a', next: '[>{5}]', prev: '[{4}<]', format: '[{0}]',
itemClass: '', appendhtml: '', sideClass: 'paging-side', prevClass: 'paging-side',
itemCurrent: 'active', length: 10, max: 1, current: 1, append: false
, href: '#{0}', event: true, first: '[1<<]', last: '[>>{6}]'
}, InStr = function (strSearch, charSearchFor) {
return strSearch.indexOf(charSearchFor);
}, format = function (str) {
var arg = arguments;
return str.replace(/\{(\d+)\}/g, function (m, d) {
if (+d < 0) return m;
else return arg[+d + 1] || "";
});
}, item, make = function (op, page, cls, str) {
var is_current = false;
if (InStr(cls, op.itemCurrent) > -1) {
item = document.createElement("strong");
is_current = true;
} else {
item = document.createElement(op.item);
}
item.className = cls;
item.innerHTML = format(str, page, op.length, op.start, op.end, op.start - 1, op.end + 1, op.max);
if (a.test(op.item)) item.href = format(op.href, page);
if (op.event) {
$(item).bind('click', function (e) {
var fired = true;
if ($.isFunction(op.onclick)) fired = op.onclick.call(item, e, page, op);
if (fired == undefined || fired)
op.origin.paging($.extend({}, op, { current: page }));
return fired;
});
/*
$liitem= $(document.createElement(op.liitem));
$liitem.addClass(cls);
$liitem.append($(item));
*/
if (op.appendhtml) {
$(item).append(op.appendhtml);
}
$(item).appendTo(op.origin);
if (is_current) {
$(item).prepend('<span class="sound_only">열린</span>');
} else {
(op.origin).append('\n');
}
//bind event for each elements.
var ev = 'on';
switch (str) {
case op.prev: ev += 'prev'; break;
case op.next: ev += 'next'; break;
case op.first: ev += 'first'; break;
case op.last: ev += 'last'; break;
default: ev += 'item'; break;
}
if ($.isFunction(op[ev])) op[ev].call(item, page, op);
}
return item;
};
$.fn.paging = function (op) {
op = $.extend({ origin: this }, defs, op || {}); this.html('');
if (op.max < 1) op.max = 1; if (op.current < 1) op.current = 1;
op.start = Math.floor((op.current - 1) / op.length) * op.length + 1;
op.end = op.start - 1 + op.length;
if (op.end > op.max) op.end = op.max;
if (!op.append) this.empty();
//prev button
if (op.current > op.length) {
//if(op.first!==false) make(op,1,op.sideClass,op.first);
make(op, op.start - 1, op.prevClass, op.prev);
}
//pages button
for (var i = op.start; i <= op.end; i++) {
make(op, i, op.itemClass + (i == op.current ? ' ' + op.itemCurrent : ''), op.format);
}
//next button
if (op.current <= Math.floor(op.max / op.length) * op.length) {
if (op.max > op.length && op.max > op.end) { make(op, op.end + 1, op.sideClass, op.next); }
//if(op.last!==false) make(op,op.max,op.sideClass,op.last);
}
//last button
};
})(jQuery);