var X = {};
X.hook = function() {
var pre_init_str = 'xn_init_hook_';
for ( var h in window) {
if (0 != h.indexOf(pre_init_str))
continue;
var func = window[h];
if (typeof func == 'function') {
try {
func();
} catch (e) {
}
}
}
};
jQuery(document).ready(X.hook);X.get = function(u) {
return X.ajax(u, 'GET');
};
X.post = function(u) {
return X.ajax(u, 'POST');
};
X.ajax = function(u, method) {
jQuery.ajax({
type : method,
url : u,
dataType : "json",
success : X.json
});
return false;
};
X.json = function(r) {
var type = r['data']['type'];
var data = r['data']['data'];
if (type == 'alert') {
alert(data);
} else if (type == 'eval') {
eval(data);
} else if (type == 'refresh') {
window.location.reload();
} else if (type == 'updater') {
var id = data['id'];
var inner = data['html'];
jQuery('#' + id).html(inner);
} else if (type == 'dialog') {
X.boxShow(data, true);
} else if (type == 'mix') {
for ( var x in data) {
r['data'] = data[x];
X.json(r);
}
}
};X.getXY = function() {
var x, y;
if (document.body.scrollTop) {
x = document.body.scrollLeft;
y = document.body.scrollTop;
} else {
x = document.documentElement.scrollLeft;
y = document.documentElement.scrollTop;
}
return {
x : x,
y : y
};
};X.boxMask = function(display) {
var height = jQuery('body').height() + 'px';
var width = jQuery(window).width() + 'px';
jQuery('#boxmask').css({
'position' : 'absolute',
'z-index' : '3000',
'width' : width,
'height' : height,
'filter' : 'alpha(opacity=0.5)',
'opacity' : 0.5,
'top' : 0,
'left' : 0,
'background' : '#CCC',
'display' : display
});
jQuery('#dialog').css('display', display);
};X.boxShow = function(innerHTML, mask) {
var dialog = jQuery('#dialog');
dialog.html(innerHTML); if (mask) {
X.boxMask('block');
}
var ew = dialog.get(0).scrollWidth;
var ww = jQuery(window).width();
var lt = (ww / 2 - ew / 2) + 'px';
var wh = jQuery(window).height();
var xy = X.getXY();
var tp = (wh * 0.15 + xy.y) + 'px'; dialog.css('background-color', '#FFF');
dialog.css('left', lt);
dialog.css('top', tp);
dialog.css('z-index', 9999);
dialog.css('display', 'block'); return false;
};X.boxClose = function() {
jQuery('#dialog').html('').css('z-index', -9999);
X.boxMask('none');
return false;
};window.xn_init_hook_validator = function() {
jQuery('form.validator').each(function() {
jQuery.fn.checkForm(this);
});
};
window.xn_init_hook_click = function() {
jQuery('#layout-msg-success span.msg-top-close').click(function() {
return !jQuery('#layout-msg-success').remove();
});
jQuery('#layout-msg-error span.msg-top-close').click(function() {
return !jQuery('#layout-msg-error').remove();
});
jQuery('a.ajaxlink').click(function() {
if (jQuery(this).attr('no') == 'yes') {
return false;
}
var ask = jQuery(this).attr('ask');
if (ask && !confirm(ask)) {
return false;
}
X.get(jQuery(this).attr('href'));
return false;
});
};X.misc = {};
X.misc.copyToCB = function(tid) {
var o = jQuery('#' + tid);
o.select();
var maintext = o.val();
if (window.clipboardData) {
if ((window.clipboardData.setData("Text", maintext))) {
var tip = o.attr('tip');
if (tip)
alert(tip);
return true;
}
} else if (window.netscape) {
netscape.security.PrivilegeManager
.enablePrivilege('UniversalXPConnect');
var clip = Components.classes['@mozilla.org/widget/clipboard;1']
.createInstance(Components.interfaces.nsIClipboard);
if (!clip)
return;
var trans = Components.classes['@mozilla.org/widget/transferable;1']
.createInstance(Components.interfaces.nsITransferable);
if (!trans)
return;
trans.addDataFlavor('text/unicode');
var str = new Object();
var len = new Object();
var str = Components.classes["@mozilla.org/supports-string;1"]
.createInstance(Components.interfaces.nsISupportsString);
var copytext = maintext;
str.data = copytext;
trans.setTransferData("text/unicode", str, copytext.length * 2);
var clipid = Components.interfaces.nsIClipboard;
if (!clip)
return false;
clip.setData(trans, null, clipid.kGlobalClipboard);
var tip = o.attr('tip');
if (tip)
alert(tip);
return true;
}
return false;
};
X.misc.scaleimage = function(o, mw) {
var w = jQuery(o).width();
if (w > mw)
jQuery(o).css('width', mw + 'px');
};jQuery.fn.json2select = function(json, dft, name, deep, curvalue) {
var _this = this, name = name || "sel", deep = deep || 0, dft = dft || [];
curvalue = curvalue || 0;
$("[name=" + name + deep + "]", _this).nextAll().remove();
if (json[0]) {
var slct = $("<select name='" + name + $("select", _this).length
+ "'></select>");
$("<option value=''>--无--</option>").appendTo(slct);
$.each(json, function(i, sd) {
if (sd.v != curvalue)
$("<option value='" + sd.v + "'>" + sd.k + "</option>")
.appendTo(slct).data("s", sd.s || []);
});
slct.change(
function(e, dftflag) {
$(this).val()
&& _this.json2select(
$(":selected", this).data("s"),
dftflag ? dft.slice(1) : [], name, $(this)
.attr("name").match(/\d+/)[0],
curvalue);
}).appendTo(_this).val(dft[0] || 0).trigger("change", [ true ]);
}
return _this;
};
jQuery.buildMultiSelect = function(setting) {
if (!setting) {
return;
}
var domdataname = "seldata";
var key_value = setting.keyValue;
var key_text = setting.keyText;
var m_jsonData = setting.jsonData;
this.selskeys = setting.selskeys;
this.selsids = setting.selsids;
this.showValues = setting.showValues || Array(3);
this.sellen = this.selsids.length;
var instance = this; var jsonobj = m_jsonData;
var curidx = 0;
for ( var i = 0; i < instance.sellen; i++) {
var selobj = $("#" + instance.selsids[i]); if (i == 0) {
jsonobj = jsonobj[instance.selskeys[i]];
} else {
if (!jsonobj[curidx]) {
break;
}
jsonobj = jsonobj[curidx][instance.selskeys[i]];
}
if (!jsonobj) {
break;
}
for ( var j = 0, l = jsonobj.length; j < l; j++) {
try {
if (jsonobj[j][key_value] == instance.showValues[i] || 0) {
curidx = j;
selobj.append("<option value='" + jsonobj[j][key_value]
+ "' selected>" + jsonobj[j][key_text]
+ "</option>");
} else {
selobj.append("<option value='" + jsonobj[j][key_value]
+ "'>" + jsonobj[j][key_text] + "</option>");
}
} catch (e) {
}
}
selobj.data(domdataname, {
json : jsonobj,
selidx : i
});
selobj.bind("change", function() {
flushsel($(this).data(domdataname), $(this).get(0).selectedIndex);
});
selobj.css("zoom", 1);
} function flushsel(seljsondata, selectedidx) {
var jsonobj = seljsondata['json'][selectedidx];
var selidx = seljsondata['selidx'];
for ( var i = selidx + 1; i < instance.sellen; i++) {
var selobj = $("#" + instance.selsids[i]);
selobj.empty();
try {
if (i == selidx + 1) {
jsonobj = jsonobj[instance.selskeys[i]];
} else {
if (!jsonobj || jsonobj.length == 0) {
break;
}
jsonobj = jsonobj[0][instance.selskeys[i]];
}
if (!jsonobj) {
break;
}
for ( var j = 0, l = jsonobj.length; j < l; j++) {
selobj.append("<option value='" + jsonobj[j][key_value]
+ "'>" + jsonobj[j][key_text] + "</option>");
}
} catch (e) {
}
selobj.data(domdataname, {
json : jsonobj,
selidx : i
});
}
$("#" + instance.selsids[0]).parent().css("zoom", 1);
}
}
X.hook = function() {
var pre_init_str = 'xn_init_hook_';
for ( var h in window) {
if (0 != h.indexOf(pre_init_str))
continue;
var func = window[h];
if (typeof func == 'function') {
try {
func();
} catch (e) {
}
}
}
};
jQuery(document).ready(X.hook);X.get = function(u) {
return X.ajax(u, 'GET');
};
X.post = function(u) {
return X.ajax(u, 'POST');
};
X.ajax = function(u, method) {
jQuery.ajax({
type : method,
url : u,
dataType : "json",
success : X.json
});
return false;
};
X.json = function(r) {
var type = r['data']['type'];
var data = r['data']['data'];
if (type == 'alert') {
alert(data);
} else if (type == 'eval') {
eval(data);
} else if (type == 'refresh') {
window.location.reload();
} else if (type == 'updater') {
var id = data['id'];
var inner = data['html'];
jQuery('#' + id).html(inner);
} else if (type == 'dialog') {
X.boxShow(data, true);
} else if (type == 'mix') {
for ( var x in data) {
r['data'] = data[x];
X.json(r);
}
}
};X.getXY = function() {
var x, y;
if (document.body.scrollTop) {
x = document.body.scrollLeft;
y = document.body.scrollTop;
} else {
x = document.documentElement.scrollLeft;
y = document.documentElement.scrollTop;
}
return {
x : x,
y : y
};
};X.boxMask = function(display) {
var height = jQuery('body').height() + 'px';
var width = jQuery(window).width() + 'px';
jQuery('#boxmask').css({
'position' : 'absolute',
'z-index' : '3000',
'width' : width,
'height' : height,
'filter' : 'alpha(opacity=0.5)',
'opacity' : 0.5,
'top' : 0,
'left' : 0,
'background' : '#CCC',
'display' : display
});
jQuery('#dialog').css('display', display);
};X.boxShow = function(innerHTML, mask) {
var dialog = jQuery('#dialog');
dialog.html(innerHTML); if (mask) {
X.boxMask('block');
}
var ew = dialog.get(0).scrollWidth;
var ww = jQuery(window).width();
var lt = (ww / 2 - ew / 2) + 'px';
var wh = jQuery(window).height();
var xy = X.getXY();
var tp = (wh * 0.15 + xy.y) + 'px'; dialog.css('background-color', '#FFF');
dialog.css('left', lt);
dialog.css('top', tp);
dialog.css('z-index', 9999);
dialog.css('display', 'block'); return false;
};X.boxClose = function() {
jQuery('#dialog').html('').css('z-index', -9999);
X.boxMask('none');
return false;
};window.xn_init_hook_validator = function() {
jQuery('form.validator').each(function() {
jQuery.fn.checkForm(this);
});
};
window.xn_init_hook_click = function() {
jQuery('#layout-msg-success span.msg-top-close').click(function() {
return !jQuery('#layout-msg-success').remove();
});
jQuery('#layout-msg-error span.msg-top-close').click(function() {
return !jQuery('#layout-msg-error').remove();
});
jQuery('a.ajaxlink').click(function() {
if (jQuery(this).attr('no') == 'yes') {
return false;
}
var ask = jQuery(this).attr('ask');
if (ask && !confirm(ask)) {
return false;
}
X.get(jQuery(this).attr('href'));
return false;
});
};X.misc = {};
X.misc.copyToCB = function(tid) {
var o = jQuery('#' + tid);
o.select();
var maintext = o.val();
if (window.clipboardData) {
if ((window.clipboardData.setData("Text", maintext))) {
var tip = o.attr('tip');
if (tip)
alert(tip);
return true;
}
} else if (window.netscape) {
netscape.security.PrivilegeManager
.enablePrivilege('UniversalXPConnect');
var clip = Components.classes['@mozilla.org/widget/clipboard;1']
.createInstance(Components.interfaces.nsIClipboard);
if (!clip)
return;
var trans = Components.classes['@mozilla.org/widget/transferable;1']
.createInstance(Components.interfaces.nsITransferable);
if (!trans)
return;
trans.addDataFlavor('text/unicode');
var str = new Object();
var len = new Object();
var str = Components.classes["@mozilla.org/supports-string;1"]
.createInstance(Components.interfaces.nsISupportsString);
var copytext = maintext;
str.data = copytext;
trans.setTransferData("text/unicode", str, copytext.length * 2);
var clipid = Components.interfaces.nsIClipboard;
if (!clip)
return false;
clip.setData(trans, null, clipid.kGlobalClipboard);
var tip = o.attr('tip');
if (tip)
alert(tip);
return true;
}
return false;
};
X.misc.scaleimage = function(o, mw) {
var w = jQuery(o).width();
if (w > mw)
jQuery(o).css('width', mw + 'px');
};jQuery.fn.json2select = function(json, dft, name, deep, curvalue) {
var _this = this, name = name || "sel", deep = deep || 0, dft = dft || [];
curvalue = curvalue || 0;
$("[name=" + name + deep + "]", _this).nextAll().remove();
if (json[0]) {
var slct = $("<select name='" + name + $("select", _this).length
+ "'></select>");
$("<option value=''>--无--</option>").appendTo(slct);
$.each(json, function(i, sd) {
if (sd.v != curvalue)
$("<option value='" + sd.v + "'>" + sd.k + "</option>")
.appendTo(slct).data("s", sd.s || []);
});
slct.change(
function(e, dftflag) {
$(this).val()
&& _this.json2select(
$(":selected", this).data("s"),
dftflag ? dft.slice(1) : [], name, $(this)
.attr("name").match(/\d+/)[0],
curvalue);
}).appendTo(_this).val(dft[0] || 0).trigger("change", [ true ]);
}
return _this;
};
jQuery.buildMultiSelect = function(setting) {
if (!setting) {
return;
}
var domdataname = "seldata";
var key_value = setting.keyValue;
var key_text = setting.keyText;
var m_jsonData = setting.jsonData;
this.selskeys = setting.selskeys;
this.selsids = setting.selsids;
this.showValues = setting.showValues || Array(3);
this.sellen = this.selsids.length;
var instance = this; var jsonobj = m_jsonData;
var curidx = 0;
for ( var i = 0; i < instance.sellen; i++) {
var selobj = $("#" + instance.selsids[i]); if (i == 0) {
jsonobj = jsonobj[instance.selskeys[i]];
} else {
if (!jsonobj[curidx]) {
break;
}
jsonobj = jsonobj[curidx][instance.selskeys[i]];
}
if (!jsonobj) {
break;
}
for ( var j = 0, l = jsonobj.length; j < l; j++) {
try {
if (jsonobj[j][key_value] == instance.showValues[i] || 0) {
curidx = j;
selobj.append("<option value='" + jsonobj[j][key_value]
+ "' selected>" + jsonobj[j][key_text]
+ "</option>");
} else {
selobj.append("<option value='" + jsonobj[j][key_value]
+ "'>" + jsonobj[j][key_text] + "</option>");
}
} catch (e) {
}
}
selobj.data(domdataname, {
json : jsonobj,
selidx : i
});
selobj.bind("change", function() {
flushsel($(this).data(domdataname), $(this).get(0).selectedIndex);
});
selobj.css("zoom", 1);
} function flushsel(seljsondata, selectedidx) {
var jsonobj = seljsondata['json'][selectedidx];
var selidx = seljsondata['selidx'];
for ( var i = selidx + 1; i < instance.sellen; i++) {
var selobj = $("#" + instance.selsids[i]);
selobj.empty();
try {
if (i == selidx + 1) {
jsonobj = jsonobj[instance.selskeys[i]];
} else {
if (!jsonobj || jsonobj.length == 0) {
break;
}
jsonobj = jsonobj[0][instance.selskeys[i]];
}
if (!jsonobj) {
break;
}
for ( var j = 0, l = jsonobj.length; j < l; j++) {
selobj.append("<option value='" + jsonobj[j][key_value]
+ "'>" + jsonobj[j][key_text] + "</option>");
}
} catch (e) {
}
selobj.data(domdataname, {
json : jsonobj,
selidx : i
});
}
$("#" + instance.selsids[0]).parent().css("zoom", 1);
}
}
X.hook = function() {
var pre_init_str = 'xn_init_hook_';
for ( var h in window) {
if (0 != h.indexOf(pre_init_str))
continue;
var func = window[h];
if (typeof func == 'function') {
try {
func();
} catch (e) {
}
}
}
};
jQuery(document).ready(X.hook);X.get = function(u) {
return X.ajax(u, 'GET');
};
X.post = function(u) {
return X.ajax(u, 'POST');
};
X.ajax = function(u, method) {
jQuery.ajax({
type : method,
url : u,
dataType : "json",
success : X.json
});
return false;
};
X.json = function(r) {
var type = r['data']['type'];
var data = r['data']['data'];
if (type == 'alert') {
alert(data);
} else if (type == 'eval') {
eval(data);
} else if (type == 'refresh') {
window.location.reload();
} else if (type == 'updater') {
var id = data['id'];
var inner = data['html'];
jQuery('#' + id).html(inner);
} else if (type == 'dialog') {
X.boxShow(data, true);
} else if (type == 'mix') {
for ( var x in data) {
r['data'] = data[x];
X.json(r);
}
}
};X.getXY = function() {
var x, y;
if (document.body.scrollTop) {
x = document.body.scrollLeft;
y = document.body.scrollTop;
} else {
x = document.documentElement.scrollLeft;
y = document.documentElement.scrollTop;
}
return {
x : x,
y : y
};
};X.boxMask = function(display) {
var height = jQuery('body').height() + 'px';
var width = jQuery(window).width() + 'px';
jQuery('#boxmask').css({
'position' : 'absolute',
'z-index' : '3000',
'width' : width,
'height' : height,
'filter' : 'alpha(opacity=0.5)',
'opacity' : 0.5,
'top' : 0,
'left' : 0,
'background' : '#CCC',
'display' : display
});
jQuery('#dialog').css('display', display);
};X.boxShow = function(innerHTML, mask) {
var dialog = jQuery('#dialog');
dialog.html(innerHTML);if (mask) {
X.boxMask('block');
}
var ew = dialog.get(0).scrollWidth;
var ww = jQuery(window).width();
var lt = (ww / 2 - ew / 2) + 'px';
var wh = jQuery(window).height();
var xy = X.getXY();
var tp = (wh * 0.15 + xy.y) + 'px';dialog.css('background-color', '#FFF');
dialog.css('left', lt);
dialog.css('top', tp);
dialog.css('z-index', 9999);
dialog.css('display', 'block');return false;
};X.boxClose = function() {
jQuery('#dialog').html('').css('z-index', -9999);
X.boxMask('none');
return false;
};window.xn_init_hook_validator = function() {
jQuery('form.validator').each(function() {
jQuery.fn.checkForm(this);
});
};
window.xn_init_hook_click = function() {
jQuery('#layout-msg-success span.msg-top-close').click(function() {
return !jQuery('#layout-msg-success').remove();
});
jQuery('#layout-msg-error span.msg-top-close').click(function() {
return !jQuery('#layout-msg-error').remove();
});
jQuery('a.ajaxlink').click(function() {
if (jQuery(this).attr('no') == 'yes') {
return false;
}
var ask = jQuery(this).attr('ask');
if (ask && !confirm(ask)) {
return false;
}
X.get(jQuery(this).attr('href'));
return false;
});
};X.misc = {};
X.misc.copyToCB = function(tid) {
var o = jQuery('#' + tid);
o.select();
var maintext = o.val();
if (window.clipboardData) {
if ((window.clipboardData.setData("Text", maintext))) {
var tip = o.attr('tip');
if (tip)
alert(tip);
return true;
}
} else if (window.netscape) {
netscape.security.PrivilegeManager
.enablePrivilege('UniversalXPConnect');
var clip = Components.classes['@mozilla.org/widget/clipboard;1']
.createInstance(Components.interfaces.nsIClipboard);
if (!clip)
return;
var trans = Components.classes['@mozilla.org/widget/transferable;1']
.createInstance(Components.interfaces.nsITransferable);
if (!trans)
return;
trans.addDataFlavor('text/unicode');
var str = new Object();
var len = new Object();
var str = Components.classes["@mozilla.org/supports-string;1"]
.createInstance(Components.interfaces.nsISupportsString);
var copytext = maintext;
str.data = copytext;
trans.setTransferData("text/unicode", str, copytext.length * 2);
var clipid = Components.interfaces.nsIClipboard;
if (!clip)
return false;
clip.setData(trans, null, clipid.kGlobalClipboard);
var tip = o.attr('tip');
if (tip)
alert(tip);
return true;
}
return false;
};
X.misc.scaleimage = function(o, mw) {
var w = jQuery(o).width();
if (w > mw)
jQuery(o).css('width', mw + 'px');
};jQuery.fn.json2select = function(json, dft, name, deep, curvalue) {
var _this = this, name = name || "sel", deep = deep || 0, dft = dft || [];
curvalue = curvalue || 0;
$("[name=" + name + deep + "]", _this).nextAll().remove();
if (json[0]) {
var slct = $("<select name='" + name + $("select", _this).length
+ "'></select>");
$("<option value=''>--无--</option>").appendTo(slct);
$.each(json, function(i, sd) {
if (sd.v != curvalue)
$("<option value='" + sd.v + "'>" + sd.k + "</option>")
.appendTo(slct).data("s", sd.s || []);
});
slct.change(
function(e, dftflag) {
$(this).val()
&& _this.json2select(
$(":selected", this).data("s"),
dftflag ? dft.slice(1) : [], name, $(this)
.attr("name").match(/\d+/)[0],
curvalue);
}).appendTo(_this).val(dft[0] || 0).trigger("change", [ true ]);
}
return _this;
};
jQuery.buildMultiSelect = function(setting) {
if (!setting) {
return;
}
var domdataname = "seldata";
var key_value = setting.keyValue;
var key_text = setting.keyText;
var m_jsonData = setting.jsonData;
this.selskeys = setting.selskeys;
this.selsids = setting.selsids;
this.showValues = setting.showValues || Array(3);
this.sellen = this.selsids.length;
var instance = this;var jsonobj = m_jsonData;
var curidx = 0;
for ( var i = 0; i < instance.sellen; i++) {
var selobj = $("#" + instance.selsids[i]);if (i == 0) {
jsonobj = jsonobj[instance.selskeys[i]];
} else {
if (!jsonobj[curidx]) {
break;
}
jsonobj = jsonobj[curidx][instance.selskeys[i]];
}
if (!jsonobj) {
break;
}
for ( var j = 0, l = jsonobj.length; j < l; j++) {
try {
if (jsonobj[j][key_value] == instance.showValues[i] || 0) {
curidx = j;
selobj.append("<option value='" + jsonobj[j][key_value]
+ "' selected>" + jsonobj[j][key_text]
+ "</option>");
} else {
selobj.append("<option value='" + jsonobj[j][key_value]
+ "'>" + jsonobj[j][key_text] + "</option>");
}
} catch (e) {
}
}
selobj.data(domdataname, {
json : jsonobj,
selidx : i
});
selobj.bind("change", function() {
flushsel($(this).data(domdataname), $(this).get(0).selectedIndex);
});
selobj.css("zoom", 1);
}function flushsel(seljsondata, selectedidx) {
var jsonobj = seljsondata['json'][selectedidx];
var selidx = seljsondata['selidx'];
for ( var i = selidx + 1; i < instance.sellen; i++) {
var selobj = $("#" + instance.selsids[i]);
selobj.empty();
try {
if (i == selidx + 1) {
jsonobj = jsonobj[instance.selskeys[i]];
} else {
if (!jsonobj || jsonobj.length == 0) {
break;
}
jsonobj = jsonobj[0][instance.selskeys[i]];
}
if (!jsonobj) {
break;
}
for ( var j = 0, l = jsonobj.length; j < l; j++) {
selobj.append("<option value='" + jsonobj[j][key_value]
+ "'>" + jsonobj[j][key_text] + "</option>");
}
} catch (e) {
}
selobj.data(domdataname, {
json : jsonobj,
selidx : i
});
}
$("#" + instance.selsids[0]).parent().css("zoom", 1);
}
}
/*
X.hook在页面加载完成的时候调用
主要作用是执行前缀带有xn_init_hook_的函数,
比如下面的:xn_init_hook_validator,xn_init_hook_click
*/
X.hook = function () {
var pre_init_str = 'xn_init_hook_';
for (var h in window) {
if (0 != h.indexOf(pre_init_str))
continue;
var func = window[h];
if (typeof func == 'function') {
try {
func();
} catch (e) {}
}
}
};
//把X.hook函数传入ready,当页面加载完成的时候会调用X.hook函数
jQuery(document).ready(X.hook);
/***************************把get,post,ajax再封装一下,其实就是规定响应的数据为json,回调函数设置为X.json***********************************/
X.get = function (u) {
return X.ajax(u, 'GET');
};
X.post = function (u) {
return X.ajax(u, 'POST');
};
X.ajax = function (u, method) {
jQuery.ajax({
type : method,
url : u,
dataType : "json",
success : X.json
});
return false;
};
/***************************把get,post,ajax再封装一下,其实就是规定响应的数据为json,回调函数设置为X.json***********************************//*
ajax的回调函数
根据type来做出相应的处理
*/
X.json = function (r) {
var type = r['data']['type'];
var data = r['data']['data'];
if (type == 'alert') {
alert(data);
} else if (type == 'eval') {
eval(data);
} else if (type == 'refresh') {
window.location.reload();
} else if (type == 'updater') {
var id = data['id'];
var inner = data['html'];
jQuery('#' + id).html(inner);
} else if (type == 'dialog') {
X.boxShow(data, true);
} else if (type == 'mix') {
for (var x in data) {
r['data'] = data[x];
X.json(r);
}
}
};
//获取滚动的left和top用的,boxShow那里会用到
X.getXY = function () {
var x,
y;
if (document.body.scrollTop) {
x = document.body.scrollLeft;
y = document.body.scrollTop;
} else {
x = document.documentElement.scrollLeft;
y = document.documentElement.scrollTop;
}
return {
x : x,
y : y
};
};
/*
遮罩DIV
参数display来控制遮罩DIV的显示和隐藏
*/
X.boxMask = function (display) {
var height = jQuery('body').height() + 'px';
var width = jQuery(window).width() + 'px';
jQuery('#boxmask').css({
'position' : 'absolute',
'z-index' : '3000',
'width' : width,
'height' : height,
'filter' : 'alpha(opacity=0.5)',
'opacity' : 0.5,
'top' : 0,
'left' : 0,
'background' : '#CCC',
'display' : display
});
jQuery('#dialog').css('display', display);
};
/*
显示窗口
innerHTML string 窗口的内容
mask boolean 是否是模态窗口
*/
X.boxShow = function (innerHTML, mask) {
var dialog = jQuery('#dialog');
dialog.html(innerHTML); if (mask) {
X.boxMask('block');
}
var ew = dialog.get(0).scrollWidth;
var ww = jQuery(window).width();
var lt = (ww / 2 - ew / 2) + 'px';
var wh = jQuery(window).height();
var xy = X.getXY();
var tp = (wh * 0.15 + xy.y) + 'px'; dialog.css('background-color', '#FFF');
dialog.css('left', lt);
dialog.css('top', tp);
dialog.css('z-index', 9999);
dialog.css('display', 'block'); return false;
};
/*
关闭窗口用的
*/
X.boxClose = function () {
jQuery('#dialog').html('').css('z-index', -9999);
X.boxMask('none');
return false;
};
/*
页面加载完成后X.hook调用
迭代form标签class为validator的所有元素,执行jQuery.fn.checkForm(this);(这个东西没有见过)
*/
window.xn_init_hook_validator = function () {
jQuery('form.validator').each(function () {
jQuery.fn.checkForm(this);
});
};
/*
页面加载完成后X.hook调用
就是注册一些事件
*/
window.xn_init_hook_click = function () {
jQuery('#layout-msg-success span.msg-top-close').click(function () {
return !jQuery('#layout-msg-success').remove();
});
jQuery('#layout-msg-error span.msg-top-close').click(function () {
return !jQuery('#layout-msg-error').remove();
});
jQuery('a.ajaxlink').click(function () {
if (jQuery(this).attr('no') == 'yes') {
return false;
}
var ask = jQuery(this).attr('ask');
if (ask && !confirm(ask)) {
return false;
}
X.get(jQuery(this).attr('href'));
return false;
});
};
//在X命名空间下再一层misc
X.misc = {};
/*
下面这个好像是复制到剪贴板的
*/
X.misc.copyToCB = function (tid) {
var o = jQuery('#' + tid);
o.select();
var maintext = o.val();
if (window.clipboardData) {
if ((window.clipboardData.setData("Text", maintext))) {
var tip = o.attr('tip');
if (tip)
alert(tip);
return true;
}
} else if (window.netscape) {
netscape.security.PrivilegeManager
.enablePrivilege('UniversalXPConnect');
var clip = Components.classes['@mozilla.org/widget/clipboard;1']
.createInstance(Components.interfaces.nsIClipboard);
if (!clip)
return;
var trans = Components.classes['@mozilla.org/widget/transferable;1']
.createInstance(Components.interfaces.nsITransferable);
if (!trans)
return;
trans.addDataFlavor('text/unicode');
var str = new Object();
var len = new Object();
var str = Components.classes["@mozilla.org/supports-string;1"]
.createInstance(Components.interfaces.nsISupportsString);
var copytext = maintext;
str.data = copytext;
trans.setTransferData("text/unicode", str, copytext.length * 2);
var clipid = Components.interfaces.nsIClipboard;
if (!clip)
return false;
clip.setData(trans, null, clipid.kGlobalClipboard);
var tip = o.attr('tip');
if (tip)
alert(tip);
return true;
}
return false;
};
/*
限定元素(命名来看,应该是控制图片的)的最大宽度用的,
如果o元素的宽度超过了mw,那么就以mw做为o元素宽度
*/
X.misc.scaleimage = function (o, mw) {
var w = jQuery(o).width();
if (w > mw)
jQuery(o).css('width', mw + 'px');
};/*
一个jQuery实例插件
功能:把一个json对象转换成一个select
json 格式[{k:'显示的内容',v:'option的值'}...]
dft 好像是默认值,但是看到是用来干什么的
name 新生成select的name前缀
deep 深度
curvalue 如果值为curvalue就不在新生成的select里面出现*/
jQuery.fn.json2select = function (json, dft, name, deep, curvalue) {
var _this = this,
name = name || "sel",
deep = deep || 0,
dft = dft || [];
curvalue = curvalue || 0;
$("[name=" + name + deep + "]", _this).nextAll().remove();
if (json[0]) {
var slct = $("<select name='" + name + $("select", _this).length
+ "'></select>");
$("<option value=''>--无--</option>").appendTo(slct);
$.each(json, function (i, sd) {
if (sd.v != curvalue)
$("<option value='" + sd.v + "'>" + sd.k + "</option>")
.appendTo(slct).data("s", sd.s || []);
});
slct.change(
function (e, dftflag) {
$(this).val()
&& _this.json2select(
$(":selected", this).data("s"),
dftflag ? dft.slice(1) : [], name, $(this)
.attr("name").match(/\d+/)[0],
curvalue);
}).appendTo(_this).val(dft[0] || 0).trigger("change", [true]);
}
return _this;
};
/*
一个jQuery静态插件
生成一个多选框
*/
jQuery.buildMultiSelect = function (setting) {
if (!setting) {
return;
}
var domdataname = "seldata";
var key_value = setting.keyValue;
var key_text = setting.keyText;
var m_jsonData = setting.jsonData;
this.selskeys = setting.selskeys;
this.selsids = setting.selsids;
this.showValues = setting.showValues || Array(3);
this.sellen = this.selsids.length;
var instance = this; var jsonobj = m_jsonData;
var curidx = 0;
for (var i = 0; i < instance.sellen; i++) {
var selobj = $("#" + instance.selsids[i]); if (i == 0) {
jsonobj = jsonobj[instance.selskeys[i]];
} else {
if (!jsonobj[curidx]) {
break;
}
jsonobj = jsonobj[curidx][instance.selskeys[i]];
}
if (!jsonobj) {
break;
}
for (var j = 0, l = jsonobj.length; j < l; j++) {
try {
if (jsonobj[j][key_value] == instance.showValues[i] || 0) {
curidx = j;
selobj.append("<option value='" + jsonobj[j][key_value]
+ "' selected>" + jsonobj[j][key_text]
+ "</option>");
} else {
selobj.append("<option value='" + jsonobj[j][key_value]
+ "'>" + jsonobj[j][key_text] + "</option>");
}
} catch (e) {}
}
selobj.data(domdataname, {
json : jsonobj,
selidx : i
});
selobj.bind("change", function () {
flushsel($(this).data(domdataname), $(this).get(0).selectedIndex);
});
selobj.css("zoom", 1);
} function flushsel(seljsondata, selectedidx) {
var jsonobj = seljsondata['json'][selectedidx];
var selidx = seljsondata['selidx'];
for (var i = selidx + 1; i < instance.sellen; i++) {
var selobj = $("#" + instance.selsids[i]);
selobj.empty();
try {
if (i == selidx + 1) {
jsonobj = jsonobj[instance.selskeys[i]];
} else {
if (!jsonobj || jsonobj.length == 0) {
break;
}
jsonobj = jsonobj[0][instance.selskeys[i]];
}
if (!jsonobj) {
break;
}
for (var j = 0, l = jsonobj.length; j < l; j++) {
selobj.append("<option value='" + jsonobj[j][key_value]
+ "'>" + jsonobj[j][key_text] + "</option>");
}
} catch (e) {}
selobj.data(domdataname, {
json : jsonobj,
selidx : i
});
}
$("#" + instance.selsids[0]).parent().css("zoom", 1);
}
}
X.hook = function() {
var pre_init_str = 'xn_init_hook_';
for (var h in window) {
if (0 != h.indexOf(pre_init_str)) continue;
var func = window[h];
if (typeof func == 'function') {
try {
func();
} catch(e) {}
}
}
};
jQuery(document).ready(X.hook);//文档加载时调用方法 注意参数X.get = function(u) {//get 方法调用ajax(u,'GET') 注意参数
return X.ajax(u, 'GET');
};
X.post = function(u) {//get 方法调用ajax(u,'POST') 注意参数
return X.ajax(u, 'POST');
};
X.ajax = function(u, method) {//自定义的ajax方法调用jQuery.ajax方法 注意参数
jQuery.ajax({
type: method,
url: u,
dataType: "json",
success: X.json
});
return false;
};
X.json = function(r) {//r参数是多维数组,通过多维数组调用方法
var type = r['data']['type'];
var data = r['data']['data'];
if (type == 'alert') {
alert(data);//输出
} else if (type == 'eval') {
eval(data);//计算数值 eval()方法说明 http://www.w3school.com.cn/js/jsref_eval.asp
} else if (type == 'refresh') {
window.location.reload();//页面刷新
} else if (type == 'updater') {
var id = data['id'];
var inner = data['html'];
jQuery('#' + id).html(inner);//修改标签内容 jQuery('').html('')方法 http://www.w3school.com.cn/jquery/manipulation_html.asp
} else if (type == 'dialog') {
X.boxShow(data, true);//调用自定义boxShow() 函数
} else if (type == 'mix') {
for (var x in data) {
r['data'] = data[x];
X.json(r);//递归方法调用 应该是,这个地方有疑问?
}
}
};X.getXY = function() {//控制页面滚动条
var x, y;
if (document.body.scrollTop) {
x = document.body.scrollLeft;//设置<body>元素中滚动条的水平偏移
y = document.body.scrollTop;//设置 <body> 元素中滚动条的垂直偏移:
} else {
x = document.documentElement.scrollLeft;
y = document.documentElement.scrollTop;
}
return {
x: x,
y: y
};
};X.boxMask = function(display) {//修改body高度,window页面宽度,id为boxmask样式,id为dialog显示
var height = jQuery('body').height() + 'px';
var width = jQuery(window).width() + 'px';
jQuery('#boxmask').css({
'position': 'absolute',
'z-index': '3000',
'width': width,
'height': height,
'filter': 'alpha(opacity=0.5)',
'opacity': 0.5,
'top': 0,
'left': 0,
'background': '#CCC',
'display': display
});
jQuery('#dialog').css('display', display);
};X.boxShow = function(innerHTML, mask) {//略 估计你能看懂
var dialog = jQuery('#dialog');
dialog.html(innerHTML); if (mask) {
X.boxMask('block');//隐藏
}
var ew = dialog.get(0).scrollWidth;
var ww = jQuery(window).width();
var lt = (ww / 2 - ew / 2) + 'px';
var wh = jQuery(window).height();
var xy = X.getXY();
var tp = (wh * 0.15 + xy.y) + 'px'; dialog.css('background-color', '#FFF');
dialog.css('left', lt);
dialog.css('top', tp);
dialog.css('z-index', 9999);
dialog.css('display', 'block'); return false;
};X.boxClose = function() {//清除内容,隐藏标签
jQuery('#dialog').html('').css('z-index', -9999);
X.boxMask('none');
return false;
};window.xn_init_hook_validator = function() {//页面内xn_init_hook_validator js函数调用方法
jQuery('form.validator').each(function() {//each() 方法规定为每个匹配元素规定运行的函数
jQuery.fn.checkForm(this);
});
};
window.xn_init_hook_click = function() {//页面内xn_init_hook_click js函数调用方法
jQuery('#layout-msg-success span.msg-top-close').click(function() {
return ! jQuery('#layout-msg-success').remove();
});
jQuery('#layout-msg-error span.msg-top-close').click(function() {
return ! jQuery('#layout-msg-error').remove();
});
jQuery('a.ajaxlink').click(function() {
if (jQuery(this).attr('no') == 'yes') {
return false;
}
var ask = jQuery(this).attr('ask');
if (ask && !confirm(ask)) {//confirm() 方法用于显示一个带有指定消息和 OK 及取消按钮的对话框 点ok 返回true 点取消返回false
return false;
}
X.get(jQuery(this).attr('href'));
return false;
});
};X.misc = {};
X.misc.copyToCB = function(tid) {//copy 估计是复制内容
var o = jQuery('#' + tid);//选择id 标签
o.select();//标签内容全选
var maintext = o.val();//val() 方法返回或设置被选元素的值
if (window.clipboardData) {
if ((window.clipboardData.setData("Text", maintext))) {//拖放是一种常见的特性,即抓取对象以后拖到另一个位置。 http://www.w3school.com.cn/html5/html_5_draganddrop.asp
var tip = o.attr('tip');
if (tip) alert(tip);
return true;
}
} else if (window.netscape) {//不太懂
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
if (!clip) return;
var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
if (!trans) return;
trans.addDataFlavor('text/unicode');
var str = new Object();
var len = new Object();
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
var copytext = maintext;
str.data = copytext;
trans.setTransferData("text/unicode", str, copytext.length * 2);
var clipid = Components.interfaces.nsIClipboard;
if (!clip) return false;
clip.setData(trans, null, clipid.kGlobalClipboard);
var tip = o.attr('tip');
if (tip) alert(tip);
return true;
}
return false;
};
X.misc.scaleimage = function(o, mw) {//修改标签宽度
var w = jQuery(o).width();
if (w > mw) jQuery(o).css('width', mw + 'px');
};jQuery.fn.json2select = function(json, dft, name, deep, curvalue) {
var _this = this,
name = name || "sel",//不懂
deep = deep || 0,
dft = dft || [];
curvalue = curvalue || 0;
$("[name=" + name + deep + "]", _this).nextAll().remove();//name属性 等于 name + deep的元素
if (json[0]) {
var slct = $("<select name='" + name + $("select", _this).length + "'></select>");
$("<option value=''>--无--</option>").appendTo(slct);//添加select option 元素
$.each(json,
function(i, sd) {
if (sd.v != curvalue) $("<option value='" + sd.v + "'>" + sd.k + "</option>").appendTo(slct).data("s", sd.s || []);
});
slct.change(function(e, dftflag) {
$(this).val() && _this.json2select($(":selected", this).data("s"), dftflag ? dft.slice(1) : [], name, $(this).attr("name").match(/\d+/)[0], curvalue);
}).appendTo(_this).val(dft[0] || 0).trigger("change", [true]);
}
return _this;
};
jQuery.buildMultiSelect = function(setting) {
if (!setting) {
return;
}
var domdataname = "seldata";
var key_value = setting.keyValue;
var key_text = setting.keyText;
var m_jsonData = setting.jsonData;
this.selskeys = setting.selskeys;
this.selsids = setting.selsids;
this.showValues = setting.showValues || Array(3);
this.sellen = this.selsids.length;
var instance = this; var jsonobj = m_jsonData;
var curidx = 0;
for (var i = 0; i < instance.sellen; i++) {
var selobj = $("#" + instance.selsids[i]); if (i == 0) {
jsonobj = jsonobj[instance.selskeys[i]];
} else {
if (!jsonobj[curidx]) {
break;
}
jsonobj = jsonobj[curidx][instance.selskeys[i]];
}
if (!jsonobj) {
break;
}
for (var j = 0,
l = jsonobj.length; j < l; j++) {
try {
if (jsonobj[j][key_value] == instance.showValues[i] || 0) {
curidx = j;
selobj.append("<option value='" + jsonobj[j][key_value] + "' selected>" + jsonobj[j][key_text] + "</option>");
} else {
selobj.append("<option value='" + jsonobj[j][key_value] + "'>" + jsonobj[j][key_text] + "</option>");
}
} catch(e) {}
}
selobj.data(domdataname, {
json: jsonobj,
selidx: i
});
selobj.bind("change",
function() {
flushsel($(this).data(domdataname), $(this).get(0).selectedIndex);
});
selobj.css("zoom", 1);
} function flushsel(seljsondata, selectedidx) {
var jsonobj = seljsondata['json'][selectedidx];
var selidx = seljsondata['selidx'];
for (var i = selidx + 1; i < instance.sellen; i++) {
var selobj = $("#" + instance.selsids[i]);
selobj.empty();
try {
if (i == selidx + 1) {
jsonobj = jsonobj[instance.selskeys[i]];
} else {
if (!jsonobj || jsonobj.length == 0) {
break;
}
jsonobj = jsonobj[0][instance.selskeys[i]];
}
if (!jsonobj) {
break;
}
for (var j = 0,
l = jsonobj.length; j < l; j++) {
selobj.append("<option value='" + jsonobj[j][key_value] + "'>" + jsonobj[j][key_text] + "</option>");
}
} catch(e) {}
selobj.data(domdataname, {
json: jsonobj,
selidx: i
});
}
$("#" + instance.selsids[0]).parent().css("zoom", 1);
}
}