jQuery EasyUI源码结构分析

memo

  • 两个jQuery的静态成员(插件)
    $.messager
    $.parser
    其调用方法的格式:$.pluginName.methodName(...)
    而原型成员$.fn.xxx调用方法的格式为:${selector}.pluginName(methodName, ?args)

intro

  • 50个自调用函数
    EasyUI for jQuery 1.7.6
    EasyUI源码中共有50个自调用函数,格式皆为:
(function($) {
  // ...
})(jQuery);

其中:

第1个自调用函数:用于定义jQuery的静态成员 . x x x .xxx和原型成员 .fn.xxx。
第2个自调用函数:事件监听器eventListener相关。
第3~50个(共48个),每个自调用函数中,定义一种plugins的细节。

但是$.parser.plugins数组中只定义了47种插件名称,
经过集合运算,过滤出自调用函数中多出来的一种插件是messager
区别:
$.messager 静态成员(插件)
$.fn.plugins 原型属性(插件)
求差集

  • 第1个自调用函数
(function($) {
    /** 定义了jQuery的两个g静态成员属性:$.easyui和$.parser。 */
    $.easyui = {};
    #.parser = {
        /** $.parser.plugins定义了47种EasyUI插件的名称。如datagrid, pagination等 */
        plugins: ["draggable", "droppable", "resizable", "pagination", "tooltip", "linkbutton", "menu", "sidemenu", "menubutton", "splitbutton", "switchbutton", "progressbar", "radiobutton", "checkbox", "tree", "textbox", "passwordbox", "maskedbox", "filebox", "combo", "combobox", "combotree", "combogrid", "combotreegrid", "tagbox", "numberbox", "validatebox", "searchbox", "spinner", "numberspinner", "timespinner", "datetimespinner", "calendar", "datebox", "datetimebox", "slider", "layout", "panel", "datagrid", "propertygrid", "treegrid", "datalist", "tabs", "accordion", "window", "dialog", "form"]
        /** 其他成员 */
    };

    /** 一个匿名函数。。。也没有自调用。不知道在干什么 */
    $(function() {});

    /** jQuery的原型成员:
     *  1个原型属性:$.fn._propAttr
     *  4个原型方法:$.fn._outerWidth, $.fn._outerHeight, $.fn._scrollLeft, $.fn._size。
     */
    $.fn._outerWidth = function() {};
    $.fn._outerHeight = function() {};
    $.fn._scrollLeft = function() {};
    $.fn._propAttr = $.fn.prop || $.fn.attr;
    $.fn._size = function() {};

})(jQuery);
  • 第2个自调用函数
    事件监听器eventListener相关。

  • 其余48个用于定义插件细节的自调用函数
    插件名:xxx,每个插件的自调用函数中都有的部分是:
    $.fn.xxx = function() {...};
    $.fn.xxx.methods = {};
    $.fn.xxx.parseOptions = function() {...};
    $.fn.xxx.defaults = {};

其中:

  • $.fn.xxx.methods 中定义了插件的方法methods
  • $.fn.xxx.defaults 中定义了插件的属性Properties和事件Events
    插件的方法,属性和事件皆可扩展:jQuery.extend(target, ...sources)
    $.fn.pluginName.methods对象作为target,对齐进行扩展。
    且新方法至少有一个参数,第一个参数为jquery对象(主要是为了链式调用)。
$.extend($.fn.dialog.methods, {
    mymove: function(jq, newposition){
		return jq.each(function(){
			$(this).dialog('move', newposition);
		});
    }
});
  • 插件使用
    • 修改插件属性|事件$(selector).plugiinName({propertyList});
    • 调用插件方法 $(selector).pluginName("funcName", parameter)

源码结构

(function($) {
    $.easyui = {};
    $.parser = {};

    $(function() {});

    $.fn._outerWidth = function() {};
    $.fn._outerHeight = function() {};
    $.fn._scrollLeft = function() {};
    $.fn._propAttr = $.fn.prop || $.fn.attr;
    $.fn._size = function() {};
    
})(jQuery);

/** 2. 事件处理器相关 */
(function($) {
    /** ... */
})(jQuery);

/** 插件 1: draggable */
(function($) {
    /** 几个_数值命名的function */
    $.fn.draggable = function() {};
    $.fn.draggable.methods = {};
    $.fn.draggable.parseOptions = function() {};
    $.fn.draggable.default = {};
    $.fn.draggable.isDragging = false;
})(jQuery);

/** 插件 2: groppable */
(function($) {
    /** 几个_数值命名的function */
    $.fn.droppable = function() {};
    $.fn.droppable.methods = {};
    $.fn.droppable.parseOptions = function() {};
    $.fn.droppable.defaults = {};
})(jQuery);

/** 插件 3: resizable */
(function($) {
    /** 几个_数值命名的function */
    $.fn.resizable = function() {};
    $.fn.resizable.methods = {};
    $.fn.resizable.parseOptions = function() {};
    $.fn.resizable.defaults = {};
    $.fn.resizable.isResizing = false;
})(jQuery);

/** 以上是3个插件(共5个自调用函数),
 * 后面有格式相似的45个自调用函数,每个里面都是一个easyui plugins(顺序见后) 
 */

48种$.fn.parser.plugins

细节会后续补充。

  • draggable
  • droppable
  • resizable
  • linkbutton
  • pagination
  • tree
  • progressbar
  • tooltip
  • panel
  • window
  • dialog
  • messager
  • accordion
  • tabs
  • layout
  • menu
  • sidemenu
  • menubutton
  • splitbutton
  • switchbutton
  • radiobutton
  • checkbox
  • validatebox
  • textbox
  • passwordbox
  • maskedbox
  • filebox
  • searchbox
  • form
  • numberbox
  • calendar
  • spinner
  • numberspinner
  • timespinner
  • datetimespinner
  • datagrid
  • propertygrid
  • treegrid
  • datalist
  • combo
  • combobox
  • combotree
  • combogrid
  • combotreegrid
  • tagbox
  • datebox
  • datetimebox
  • slider

jQuery EasyUI 文档

zh
en

部分自调用函数源码

最典型的自调用函数:

第一个(用于向jQuery对象添加静态成员$.xxx和原型成员$.fn.xxx)
第二个(eventListener相关)
其余48种插件源码中的pagination

  • 第一个
(function ($) {
    
    $.easyui = {
        indexOfArray: function (a, o, id) {
            for (var i = 0, _1 = a.length; i < _1; i++) {
                if (id == undefined) {
                    if (a[i] == o) {
                        return i;
                    }
                } else {
                    if (a[i][o] == id) {
                        return i;
                    }
                }
            }
            return -1;
        }, removeArrayItem: function (a, o, id) {
            if (typeof o == "string") {
                for (var i = 0, _2 = a.length; i < _2; i++) {
                    if (a[i][o] == id) {
                        a.splice(i, 1);
                        return;
                    }
                }
            } else {
                var _3 = this.indexOfArray(a, o);
                if (_3 != -1) {
                    a.splice(_3, 1);
                }
            }
        }, addArrayItem: function (a, o, r) {
            var _4 = this.indexOfArray(a, o, r ? r[o] : undefined);
            if (_4 == -1) {
                a.push(r ? r : o);
            } else {
                a[_4] = r ? r : o;
            }
        }, getArrayItem: function (a, o, id) {
            var _5 = this.indexOfArray(a, o, id);
            return _5 == -1 ? null : a[_5];
        }, forEach: function (_6, _7, _8) {
            var _9 = [];
            for (var i = 0; i < _6.length; i++) {
                _9.push(_6[i]);
            }
            while (_9.length) {
                var _a = _9.shift();
                if (_8(_a) == false) {
                    return;
                }
                if (_7 && _a.children) {
                    for (var i = _a.children.length - 1; i >= 0; i--) {
                        _9.unshift(_a.children[i]);
                    }
                }
            }
        }
    };
    
    $.parser = {
        auto: true, 
        emptyFn: function () {
        }, 
        onComplete: function (_b) {
        }, 
        plugins: ["draggable", "droppable", "resizable", "pagination", "tooltip", "linkbutton", "menu", "sidemenu", "menubutton", "splitbutton", "switchbutton", "progressbar", "radiobutton", "checkbox", "tree", "textbox", "passwordbox", "maskedbox", "filebox", "combo", "combobox", "combotree", "combogrid", "combotreegrid", "tagbox", "numberbox", "validatebox", "searchbox", "spinner", "numberspinner", "timespinner", "datetimespinner", "calendar", "datebox", "datetimebox", "slider", "layout", "panel", "datagrid", "propertygrid", "treegrid", "datalist", "tabs", "accordion", "window", "dialog", "form"], 
        parse: function (_c) {
            var aa = [];
            for (var i = 0; i < $.parser.plugins.length; i++) {
                var _d = $.parser.plugins[i];
                var r = $(".easyui-" + _d, _c);
                if (r.length) {
                    if (r[_d]) {
                        r.each(function () {
                            $(this)[_d]($.data(this, "options") || {});
                        });
                    } else {
                        aa.push({ name: _d, jq: r });
                    }
                }
            }
            if (aa.length && window.easyloader) {
                var _e = [];
                for (var i = 0; i < aa.length; i++) {
                    _e.push(aa[i].name);
                }
                easyloader.load(_e, function () {
                    for (var i = 0; i < aa.length; i++) {
                        var _f = aa[i].name;
                        var jq = aa[i].jq;
                        jq.each(function () {
                            $(this)[_f]($.data(this, "options") || {});
                        });
                    }
                    $.parser.onComplete.call($.parser, _c);
                });
            } else {
                $.parser.onComplete.call($.parser, _c);
            }
        }, parseValue: function (_10, _11, _12, _13) {
            _13 = _13 || 0;
            var v = $.trim(String(_11 || ""));
            var _14 = v.substr(v.length - 1, 1);
            if (_14 == "%") {
                v = parseFloat(v.substr(0, v.length - 1));
                if (_10.toLowerCase().indexOf("width") >= 0) {
                    _13 += _12[0].offsetWidth - _12[0].clientWidth;
                    v = Math.floor((_12.width() - _13) * v / 100);
                } else {
                    _13 += _12[0].offsetHeight - _12[0].clientHeight;
                    v = Math.floor((_12.height() - _13) * v / 100);
                }
            } else {
                v = parseInt(v) || undefined;
            }
            return v;
        }, parseOptions: function (_15, _16) {
            var t = $(_15);
            var _17 = {};
            var s = $.trim(t.attr("data-options"));
            if (s) {
                if (s.substring(0, 1) != "{") {
                    s = "{" + s + "}";
                }
                _17 = (new Function("return " + s))();
            }
            $.map(["width", "height", "left", "top", "minWidth", "maxWidth", "minHeight", "maxHeight"], function (p) {
                var pv = $.trim(_15.style[p] || "");
                if (pv) {
                    if (pv.indexOf("%") == -1) {
                        pv = parseInt(pv);
                        if (isNaN(pv)) {
                            pv = undefined;
                        }
                    }
                    _17[p] = pv;
                }
            });
            if (_16) {
                var _18 = {};
                for (var i = 0; i < _16.length; i++) {
                    var pp = _16[i];
                    if (typeof pp == "string") {
                        _18[pp] = t.attr(pp);
                    } else {
                        for (var _19 in pp) {
                            var _1a = pp[_19];
                            if (_1a == "boolean") {
                                _18[_19] = t.attr(_19) ? (t.attr(_19) == "true") : undefined;
                            } else {
                                if (_1a == "number") {
                                    _18[_19] = t.attr(_19) == "0" ? 0 : parseFloat(t.attr(_19)) || undefined;
                                }
                            }
                        }
                    }
                }
                $.extend(_17, _18);
            }
            return _17;
        }
    };

    $(function () {
        var d = $("<div style=\"position:absolute;top:-1000px;width:100px;height:100px;padding:5px\"></div>").appendTo("body");
        $._boxModel = d.outerWidth() != 100;
        d.remove();
        d = $("<div style=\"position:fixed\"></div>").appendTo("body");
        $._positionFixed = (d.css("position") == "fixed");
        d.remove();
        if (!window.easyloader && $.parser.auto) {
            $.parser.parse();
        }
    });

    $.fn._outerWidth = function (_1b) {
        if (_1b == undefined) {
            if (this[0] == window) {
                return this.width() || document.body.clientWidth;
            }
            return this.outerWidth() || 0;
        }
        return this._size("width", _1b);
    };

    $.fn._outerHeight = function (_1c) {
        if (_1c == undefined) {
            if (this[0] == window) {
                return this.height() || document.body.clientHeight;
            }
            return this.outerHeight() || 0;
        }
        return this._size("height", _1c);
    };

    $.fn._scrollLeft = function (_1d) {
        if (_1d == undefined) {
            return this.scrollLeft();
        } else {
            return this.each(function () {
                $(this).scrollLeft(_1d);
            });
        }
    };
    
    $.fn._propAttr = $.fn.prop || $.fn.attr;

    $.fn._size = function (_1e, _1f) {
        if (typeof _1e == "string") {
            if (_1e == "clear") {
                return this.each(function () {
                    $(this).css({ width: "", minWidth: "", maxWidth: "", height: "", minHeight: "", maxHeight: "" });
                });
            } else {
                if (_1e == "fit") {
                    return this.each(function () {
                        _20(this, this.tagName == "BODY" ? $("body") : $(this).parent(), true);
                    });
                } else {
                    if (_1e == "unfit") {
                        return this.each(function () {
                            _20(this, $(this).parent(), false);
                        });
                    } else {
                        if (_1f == undefined) {
                            return _21(this[0], _1e);
                        } else {
                            return this.each(function () {
                                _21(this, _1e, _1f);
                            });
                        }
                    }
                }
            }
        } else {
            return this.each(function () {
                _1f = _1f || $(this).parent();
                $.extend(_1e, _20(this, _1f, _1e.fit) || {});
                var r1 = _22(this, "width", _1f, _1e);
                var r2 = _22(this, "height", _1f, _1e);
                if (r1 || r2) {
                    $(this).addClass("easyui-fluid");
                } else {
                    $(this).removeClass("easyui-fluid");
                }
            });
        }
        function _20(_23, _24, fit) {
            if (!_24.length) {
                return false;
            }
            var t = $(_23)[0];
            var p = _24[0];
            var _25 = p.fcount || 0;
            if (fit) {
                if (!t.fitted) {
                    t.fitted = true;
                    p.fcount = _25 + 1;
                    $(p).addClass("panel-noscroll");
                    if (p.tagName == "BODY") {
                        $("html").addClass("panel-fit");
                    }
                }
                return { width: ($(p).width() || 1), height: ($(p).height() || 1) };
            } else {
                if (t.fitted) {
                    t.fitted = false;
                    p.fcount = _25 - 1;
                    if (p.fcount == 0) {
                        $(p).removeClass("panel-noscroll");
                        if (p.tagName == "BODY") {
                            $("html").removeClass("panel-fit");
                        }
                    }
                }
                return false;
            }
        };
        function _22(_26, _27, _28, _29) {
            var t = $(_26);
            var p = _27;
            var p1 = p.substr(0, 1).toUpperCase() + p.substr(1);
            var min = $.parser.parseValue("min" + p1, _29["min" + p1], _28);
            var max = $.parser.parseValue("max" + p1, _29["max" + p1], _28);
            var val = $.parser.parseValue(p, _29[p], _28);
            var _2a = (String(_29[p] || "").indexOf("%") >= 0 ? true : false);
            if (!isNaN(val)) {
                var v = Math.min(Math.max(val, min || 0), max || 99999);
                if (!_2a) {
                    _29[p] = v;
                }
                t._size("min" + p1, "");
                t._size("max" + p1, "");
                t._size(p, v);
            } else {
                t._size(p, "");
                t._size("min" + p1, min);
                t._size("max" + p1, max);
            }
            return _2a || _29.fit;
        };
        function _21(_2b, _2c, _2d) {
            var t = $(_2b);
            if (_2d == undefined) {
                _2d = parseInt(_2b.style[_2c]);
                if (isNaN(_2d)) {
                    return undefined;
                }
                if ($._boxModel) {
                    _2d += _2e();
                }
                return _2d;
            } else {
                if (_2d === "") {
                    t.css(_2c, "");
                } else {
                    if ($._boxModel) {
                        _2d -= _2e();
                        if (_2d < 0) {
                            _2d = 0;
                        }
                    }
                    t.css(_2c, _2d + "px");
                }
            }
            function _2e() {
                if (_2c.toLowerCase().indexOf("width") >= 0) {
                    return t.outerWidth() - t.width();
                } else {
                    return t.outerHeight() - t.height();
                }
            };
        };
    };
})(jQuery);
  • 第二个
(function ($) {
    var _2f = null;
    var _30 = null;
    var _31 = false;
    function _32(e) {
        if (e.touches.length != 1) {
            return;
        }
        if (!_31) {
            _31 = true;
            dblClickTimer = setTimeout(function () {
                _31 = false;
            }, 500);
        } else {
            clearTimeout(dblClickTimer);
            _31 = false;
            _33(e, "dblclick");
        }
        _2f = setTimeout(function () {
            _33(e, "contextmenu", 3);
        }, 1000);
        _33(e, "mousedown");
        if ($.fn.draggable.isDragging || $.fn.resizable.isResizing) {
            e.preventDefault();
        }
    };
    function _34(e) {
        if (e.touches.length != 1) {
            return;
        }
        if (_2f) {
            clearTimeout(_2f);
        }
        _33(e, "mousemove");
        if ($.fn.draggable.isDragging || $.fn.resizable.isResizing) {
            e.preventDefault();
        }
    };
    function _35(e) {
        if (_2f) {
            clearTimeout(_2f);
        }
        _33(e, "mouseup");
        if ($.fn.draggable.isDragging || $.fn.resizable.isResizing) {
            e.preventDefault();
        }
    };
    function _33(e, _36, _37) {
        var _38 = new $.Event(_36);
        _38.pageX = e.changedTouches[0].pageX;
        _38.pageY = e.changedTouches[0].pageY;
        _38.which = _37 || 1;
        $(e.target).trigger(_38);
    };
    if (document.addEventListener) {
        document.addEventListener("touchstart", _32, true);
        document.addEventListener("touchmove", _34, true);
        document.addEventListener("touchend", _35, true);
    }
})(jQuery);(function ($) {
    var _2f = null;
    var _30 = null;
    var _31 = false;
    function _32(e) {
        if (e.touches.length != 1) {
            return;
        }
        if (!_31) {
            _31 = true;
            dblClickTimer = setTimeout(function () {
                _31 = false;
            }, 500);
        } else {
            clearTimeout(dblClickTimer);
            _31 = false;
            _33(e, "dblclick");
        }
        _2f = setTimeout(function () {
            _33(e, "contextmenu", 3);
        }, 1000);
        _33(e, "mousedown");
        if ($.fn.draggable.isDragging || $.fn.resizable.isResizing) {
            e.preventDefault();
        }
    };
    function _34(e) {
        if (e.touches.length != 1) {
            return;
        }
        if (_2f) {
            clearTimeout(_2f);
        }
        _33(e, "mousemove");
        if ($.fn.draggable.isDragging || $.fn.resizable.isResizing) {
            e.preventDefault();
        }
    };
    function _35(e) {
        if (_2f) {
            clearTimeout(_2f);
        }
        _33(e, "mouseup");
        if ($.fn.draggable.isDragging || $.fn.resizable.isResizing) {
            e.preventDefault();
        }
    };
    function _33(e, _36, _37) {
        var _38 = new $.Event(_36);
        _38.pageX = e.changedTouches[0].pageX;
        _38.pageY = e.changedTouches[0].pageY;
        _38.which = _37 || 1;
        $(e.target).trigger(_38);
    };
    if (document.addEventListener) {
        document.addEventListener("touchstart", _32, true);
        document.addEventListener("touchmove", _34, true);
        document.addEventListener("touchend", _35, true);
    }
})(jQuery);
  • pagination插件
(function ($) {
    function _ac(_ad) {
        var _ae = $.data(_ad, "pagination");
        var _af = _ae.options;
        var bb = _ae.bb = {};
        if (_af.buttons && !$.isArray(_af.buttons)) {
            $(_af.buttons).insertAfter(_ad);
        }
        var _b0 = $(_ad).addClass("pagination").html("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tr></tr></table>");
        var tr = _b0.find("tr");
        var aa = $.extend([], _af.layout);
        if (!_af.showPageList) {
            _b1(aa, "list");
        }
        if (!_af.showPageInfo) {
            _b1(aa, "info");
        }
        if (!_af.showRefresh) {
            _b1(aa, "refresh");
        }
        if (aa[0] == "sep") {
            aa.shift();
        }
        if (aa[aa.length - 1] == "sep") {
            aa.pop();
        }
        for (var _b2 = 0; _b2 < aa.length; _b2++) {
            var _b3 = aa[_b2];
            if (_b3 == "list") {
                var ps = $("<select class=\"pagination-page-list\"></select>");
                ps.bind("change", function () {
                    _af.pageSize = parseInt($(this).val());
                    _af.onChangePageSize.call(_ad, _af.pageSize);
                    _b9(_ad, _af.pageNumber);
                });
                for (var i = 0; i < _af.pageList.length; i++) {
                    $("<option></option>").text(_af.pageList[i]).appendTo(ps);
                }
                $("<td></td>").append(ps).appendTo(tr);
            } else {
                if (_b3 == "sep") {
                    $("<td><div class=\"pagination-btn-separator\"></div></td>").appendTo(tr);
                } else {
                    if (_b3 == "first") {
                        bb.first = _b4("first");
                    } else {
                        if (_b3 == "prev") {
                            bb.prev = _b4("prev");
                        } else {
                            if (_b3 == "next") {
                                bb.next = _b4("next");
                            } else {
                                if (_b3 == "last") {
                                    bb.last = _b4("last");
                                } else {
                                    if (_b3 == "manual") {
                                        $("<span style=\"padding-left:6px;\"></span>").html(_af.beforePageText).appendTo(tr).wrap("<td></td>");
                                        bb.num = $("<input class=\"pagination-num\" type=\"text\" value=\"1\" size=\"2\">").appendTo(tr).wrap("<td></td>");
                                        bb.num.unbind(".pagination").bind("keydown.pagination", function (e) {
                                            if (e.keyCode == 13) {
                                                var _b5 = parseInt($(this).val()) || 1;
                                                _b9(_ad, _b5);
                                                return false;
                                            }
                                        });
                                        bb.after = $("<span style=\"padding-right:6px;\"></span>").appendTo(tr).wrap("<td></td>");
                                    } else {
                                        if (_b3 == "refresh") {
                                            bb.refresh = _b4("refresh");
                                        } else {
                                            if (_b3 == "links") {
                                                $("<td class=\"pagination-links\"></td>").appendTo(tr);
                                            } else {
                                                if (_b3 == "info") {
                                                    if (_b2 == aa.length - 1) {
                                                        $("<div class=\"pagination-info\"></div>").appendTo(_b0);
                                                    } else {
                                                        $("<td><div class=\"pagination-info\"></div></td>").appendTo(tr);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        if (_af.buttons) {
            $("<td><div class=\"pagination-btn-separator\"></div></td>").appendTo(tr);
            if ($.isArray(_af.buttons)) {
                for (var i = 0; i < _af.buttons.length; i++) {
                    var btn = _af.buttons[i];
                    if (btn == "-") {
                        $("<td><div class=\"pagination-btn-separator\"></div></td>").appendTo(tr);
                    } else {
                        var td = $("<td></td>").appendTo(tr);
                        var a = $("<a href=\"javascript:;\"></a>").appendTo(td);
                        a[0].onclick = eval(btn.handler || function () {
                        });
                        a.linkbutton($.extend({}, btn, { plain: true }));
                    }
                }
            } else {
                var td = $("<td></td>").appendTo(tr);
                $(_af.buttons).appendTo(td).show();
            }
        }
        $("<div style=\"clear:both;\"></div>").appendTo(_b0);
        function _b4(_b6) {
            var btn = _af.nav[_b6];
            var a = $("<a href=\"javascript:;\"></a>").appendTo(tr);
            a.wrap("<td></td>");
            a.linkbutton({ iconCls: btn.iconCls, plain: true }).unbind(".pagination").bind("click.pagination", function () {
                btn.handler.call(_ad);
            });
            return a;
        };
        function _b1(aa, _b7) {
            var _b8 = $.inArray(_b7, aa);
            if (_b8 >= 0) {
                aa.splice(_b8, 1);
            }
            return aa;
        };
    };
    function _b9(_ba, _bb) {
        var _bc = $.data(_ba, "pagination").options;
        _bd(_ba, { pageNumber: _bb });
        _bc.onSelectPage.call(_ba, _bc.pageNumber, _bc.pageSize);
    };
    function _bd(_be, _bf) {
        var _c0 = $.data(_be, "pagination");
        var _c1 = _c0.options;
        var bb = _c0.bb;
        $.extend(_c1, _bf || {});
        var ps = $(_be).find("select.pagination-page-list");
        if (ps.length) {
            ps.val(_c1.pageSize + "");
            _c1.pageSize = parseInt(ps.val());
        }
        var _c2 = Math.ceil(_c1.total / _c1.pageSize) || 1;
        if (_c1.pageNumber < 1) {
            _c1.pageNumber = 1;
        }
        if (_c1.pageNumber > _c2) {
            _c1.pageNumber = _c2;
        }
        if (_c1.total == 0) {
            _c1.pageNumber = 0;
            _c2 = 0;
        }
        if (bb.num) {
            bb.num.val(_c1.pageNumber);
        }
        if (bb.after) {
            bb.after.html(_c1.afterPageText.replace(/{pages}/, _c2));
        }
        var td = $(_be).find("td.pagination-links");
        if (td.length) {
            td.empty();
            var _c3 = _c1.pageNumber - Math.floor(_c1.links / 2);
            if (_c3 < 1) {
                _c3 = 1;
            }
            var _c4 = _c3 + _c1.links - 1;
            if (_c4 > _c2) {
                _c4 = _c2;
            }
            _c3 = _c4 - _c1.links + 1;
            if (_c3 < 1) {
                _c3 = 1;
            }
            for (var i = _c3; i <= _c4; i++) {
                var a = $("<a class=\"pagination-link\" href=\"javascript:;\"></a>").appendTo(td);
                a.linkbutton({ plain: true, text: i });
                if (i == _c1.pageNumber) {
                    a.linkbutton("select");
                } else {
                    a.unbind(".pagination").bind("click.pagination", { pageNumber: i }, function (e) {
                        _b9(_be, e.data.pageNumber);
                    });
                }
            }
        }
        var _c5 = _c1.displayMsg;
        _c5 = _c5.replace(/{from}/, _c1.total == 0 ? 0 : _c1.pageSize * (_c1.pageNumber - 1) + 1);
        _c5 = _c5.replace(/{to}/, Math.min(_c1.pageSize * (_c1.pageNumber), _c1.total));
        _c5 = _c5.replace(/{total}/, _c1.total);
        $(_be).find("div.pagination-info").html(_c5);
        if (bb.first) {
            bb.first.linkbutton({ disabled: ((!_c1.total) || _c1.pageNumber == 1) });
        }
        if (bb.prev) {
            bb.prev.linkbutton({ disabled: ((!_c1.total) || _c1.pageNumber == 1) });
        }
        if (bb.next) {
            bb.next.linkbutton({ disabled: (_c1.pageNumber == _c2) });
        }
        if (bb.last) {
            bb.last.linkbutton({ disabled: (_c1.pageNumber == _c2) });
        }
        _c6(_be, _c1.loading);
    };
    function _c6(_c7, _c8) {
        var _c9 = $.data(_c7, "pagination");
        var _ca = _c9.options;
        _ca.loading = _c8;
        if (_ca.showRefresh && _c9.bb.refresh) {
            _c9.bb.refresh.linkbutton({ iconCls: (_ca.loading ? "pagination-loading" : "pagination-load") });
        }
    };
    $.fn.pagination = function (_cb, _cc) {
        if (typeof _cb == "string") {
            return $.fn.pagination.methods[_cb](this, _cc);
        }
        _cb = _cb || {};
        return this.each(function () {
            var _cd;
            var _ce = $.data(this, "pagination");
            if (_ce) {
                _cd = $.extend(_ce.options, _cb);
            } else {
                _cd = $.extend({}, $.fn.pagination.defaults, $.fn.pagination.parseOptions(this), _cb);
                $.data(this, "pagination", { options: _cd });
            }
            _ac(this);
            _bd(this);
        });
    };
    $.fn.pagination.methods = {
        options: function (jq) {
            return $.data(jq[0], "pagination").options;
        }, loading: function (jq) {
            return jq.each(function () {
                _c6(this, true);
            });
        }, loaded: function (jq) {
            return jq.each(function () {
                _c6(this, false);
            });
        }, refresh: function (jq, _cf) {
            return jq.each(function () {
                _bd(this, _cf);
            });
        }, select: function (jq, _d0) {
            return jq.each(function () {
                _b9(this, _d0);
            });
        }
    };
    $.fn.pagination.parseOptions = function (_d1) {
        var t = $(_d1);
        return $.extend({}, $.parser.parseOptions(_d1, [{ total: "number", pageSize: "number", pageNumber: "number", links: "number" }, { loading: "boolean", showPageList: "boolean", showPageInfo: "boolean", showRefresh: "boolean" }]), { pageList: (t.attr("pageList") ? eval(t.attr("pageList")) : undefined) });
    };
    $.fn.pagination.defaults = {
        total: 1, pageSize: 10, pageNumber: 1, pageList: [10, 20, 30, 50], loading: false, buttons: null, showPageList: true, showPageInfo: true, showRefresh: true, links: 10, layout: ["list", "sep", "first", "prev", "sep", "manual", "sep", "next", "last", "sep", "refresh", "info"], onSelectPage: function (_d2, _d3) {
        }, onBeforeRefresh: function (_d4, _d5) {
        }, onRefresh: function (_d6, _d7) {
        }, onChangePageSize: function (_d8) {
        }, beforePageText: "Page", afterPageText: "of {pages}", displayMsg: "Displaying {from} to {to} of {total} items", nav: {
            first: {
                iconCls: "pagination-first", handler: function () {
                    var _d9 = $(this).pagination("options");
                    if (_d9.pageNumber > 1) {
                        $(this).pagination("select", 1);
                    }
                }
            }, prev: {
                iconCls: "pagination-prev", handler: function () {
                    var _da = $(this).pagination("options");
                    if (_da.pageNumber > 1) {
                        $(this).pagination("select", _da.pageNumber - 1);
                    }
                }
            }, next: {
                iconCls: "pagination-next", handler: function () {
                    var _db = $(this).pagination("options");
                    var _dc = Math.ceil(_db.total / _db.pageSize);
                    if (_db.pageNumber < _dc) {
                        $(this).pagination("select", _db.pageNumber + 1);
                    }
                }
            }, last: {
                iconCls: "pagination-last", handler: function () {
                    var _dd = $(this).pagination("options");
                    var _de = Math.ceil(_dd.total / _dd.pageSize);
                    if (_dd.pageNumber < _de) {
                        $(this).pagination("select", _de);
                    }
                }
            }, refresh: {
                iconCls: "pagination-refresh", handler: function () {
                    var _df = $(this).pagination("options");
                    if (_df.onBeforeRefresh.call(this, _df.pageNumber, _df.pageSize) != false) {
                        $(this).pagination("select", _df.pageNumber);
                        _df.onRefresh.call(this, _df.pageNumber, _df.pageSize);
                    }
                }
            }
        }
    };
})(jQuery);
发布了283 篇原创文章 · 获赞 156 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/wuyujin1997/article/details/89343489