You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
3.6 KiB
Plaintext

/**
* parser - jQuery EasyUI
*
* Licensed under the GPL terms
* To use it on other terms please contact us
*
* Copyright(c) 2009-2012 stworthy [ stworthy@gmail.com ]
*
*/
(function($){
$.parser = {
auto: true,
onComplete: function(context){},
plugins:['draggable','droppable','resizable','pagination',
'linkbutton','menu','menubutton','splitbutton','progressbar',
'tree','combobox','combotree','combogrid','numberbox','validatebox','searchbox',
'numberspinner','timespinner','calendar','datebox','datetimebox','slider',
'layout','panel','datagrid','propertygrid','treegrid','tabs','accordion','window','dialog'
],
parse: function(context){
var aa = [];
for(var i=0; i<$.parser.plugins.length; i++){
var name = $.parser.plugins[i];
var r = $('.easyui-' + name, context);
if (r.length){
if (r[name]){
r[name]();
} else {
aa.push({name:name,jq:r});
}
}
}
if (aa.length && window.easyloader){
var names = [];
for(var i=0; i<aa.length; i++){
names.push(aa[i].name);
}
easyloader.load(names, function(){
for(var i=0; i<aa.length; i++){
var name = aa[i].name;
var jq = aa[i].jq;
jq[name]();
}
$.parser.onComplete.call($.parser, context);
});
} else {
$.parser.onComplete.call($.parser, context);
}
},
/**
* parse options, including standard 'data-options' attribute.
*
* calling examples:
* $.parser.parseOptions(target);
* $.parser.parseOptions(target, ['id','title','width',{fit:'boolean',border:'boolean'},{min:'number'}]);
*/
parseOptions: function(target, properties){
var t = $(target);
var options = {};
var s = $.trim(t.attr('data-options'));
if (s){
var first = s.substring(0,1);
var last = s.substring(s.length-1,1);
if (first != '{') s = '{' + s;
if (last != '}') s = s + '}';
options = (new Function('return ' + s))();
}
if (properties){
var opts = {};
for(var i=0; i<properties.length; i++){
var pp = properties[i];
if (typeof pp == 'string'){
if (pp == 'width' || pp == 'height' || pp == 'left' || pp == 'top'){
opts[pp] = parseInt(target.style[pp]) || undefined;
} else {
opts[pp] = t.attr(pp);
}
} else {
for(var name in pp){
var type = pp[name];
if (type == 'boolean'){
opts[name] = t.attr(name) ? (t.attr(name) == 'true') : undefined;
} else if (type == 'number'){
opts[name] = t.attr(name)=='0' ? 0 : parseFloat(t.attr(name)) || undefined;
}
}
}
}
$.extend(options, opts);
}
return options;
}
};
$(function(){
if (!window.easyloader && $.parser.auto){
$.parser.parse();
}
});
/**
* extend plugin to set box model width
*/
$.fn._outerWidth = function(width){
if (width == undefined){
if (this[0] == window){
return this.width() || document.body.clientWidth;
}
return this.outerWidth()||0;
}
return this.each(function(){
if (!$.support.boxModel && $.browser.msie){
$(this).width(width);
} else {
$(this).width(width - ($(this).outerWidth() - $(this).width()));
}
});
};
/**
* extend plugin to set box model height
*/
$.fn._outerHeight = function(height){
if (height == undefined){
if (this[0] == window){
return this.height() || document.body.clientHeight;
}
return this.outerHeight()||0;
}
return this.each(function(){
if (!$.support.boxModel && $.browser.msie){
$(this).height(height);
} else {
$(this).height(height - ($(this).outerHeight() - $(this).height()));
}
});
};
$.fn._propAttr = $.fn.prop || $.fn.attr;
})(jQuery);