📄 ajaxtags.js
字号:
initialize: function() {
this.type = "xmltohtmllist";
},
load: function(request) {
this.xml = request.responseXML;
this.parse();
},
parse: function() {
var ul = '<ul>';
var root = this.xml.documentElement;
var responseNodes = root.getElementsByTagName("response");
if (responseNodes.length > 0) {
var responseNode = responseNodes[0];
var itemNodes = responseNode.getElementsByTagName("item");
for (var i=0; i<itemNodes.length; i++) {
var nameNodes = itemNodes[i].getElementsByTagName("name");
var valueNodes = itemNodes[i].getElementsByTagName("value");
if (nameNodes.length > 0 && valueNodes.length > 0) {
var name = nameNodes[0].firstChild.nodeValue;
var value = valueNodes[0].firstChild.nodeValue;
ul += '<li id="' + value + '">' + name + '</li>';
}
}
}
ul += '</ul>';
this.content = ul;
}
});
ResponseXmlToHtmlLinkListParser = Class.create();
ResponseXmlToHtmlLinkListParser.prototype = Object.extend(new AbstractResponseParser(), {
initialize: function() {
this.type = "xmltohtmllinklist";
},
load: function(request) {
this.xml = request.responseXML;
this.collapsedClass = request.collapsedClass;
this.treeClass = request.treeClass;
this.nodeClass = request.nodeClass;
this.expandedNodes = new Array();
this.parse();
},
parse: function() {
var ul = document.createElement('ul');
ul.className = this.treeClass;
var root = this.xml.documentElement;
var responseNodes = root.getElementsByTagName("response");
if (responseNodes.length > 0) {
var responseNode = responseNodes[0];
var itemNodes = responseNode.getElementsByTagName("item");
for (var i=0; i<itemNodes.length; i++) {
var nameNodes = itemNodes[i].getElementsByTagName("name");
var valueNodes = itemNodes[i].getElementsByTagName("value");
var urlNodes = itemNodes[i].getElementsByTagName("url");
var collapsedNodes = itemNodes[i].getElementsByTagName("collapsed");
if (nameNodes.length > 0 && valueNodes.length > 0) {
var name = nameNodes[0].firstChild.nodeValue;
var value = valueNodes[0].firstChild.nodeValue;
var url = urlNodes[0].firstChild.nodeValue;
var collapsed = collapsedNodes[0].firstChild.nodeValue.toLowerCase() == "true";
var li = document.createElement('li');
ul.appendChild(li);
var img = document.createElement('img');
li.appendChild(img);
img.id = 'img_' + value;
img.className = this.collapsedClass;
var link = document.createElement('a');
li.appendChild(link);
link.href = url;
link.className = this.nodeClass;
link.appendChild(document.createTextNode(name));
var div = document.createElement('div');
li.appendChild(div);
div.id = value;
if(!collapsed)
this.expandedNodes.push(value);
}
}
}
this.content = ul;
}
});
/**
* AjaxTags
*/
AjaxJspTag.Base = function() {};
AjaxJspTag.Base.prototype = {
resolveParameters: function() {
// Strip URL of querystring and append it to parameters
var qs = delimitQueryString(extractQueryString(this.url));
if (this.options.parameters) {
this.options.parameters += ',' + qs;
} else {
this.options.parameters = qs;
}
this.url = trimQueryString(this.url);
if (this.options.parameters.length > 0
&& this.options.parameters.charAt(this.options.parameters.length-1) == ',') {
this.options.parameters = this.options.parameters.substr(0,this.options.parameters.length-1);
}
}
}
/**
* UPDATEFIELD TAG
*/
AjaxJspTag.UpdateField = Class.create();
AjaxJspTag.UpdateField.prototype = Object.extend(new AjaxJspTag.Base(), {
initialize: function(url, options) {
this.url = url;
this.setOptions(options);
this.setListeners();
},
setOptions: function(options) {
this.options = Object.extend({
parameters: options.parameters || '',
eventType: options.eventType ? options.eventType : "click",
parser: options.parser ? options.parser : new ResponseTextParser(),
handler: options.handler ? options.handler : this.handler
}, options || {});
},
setListeners: function() {
eval("$(this.options.action).on"+this.options.eventType+" = this.execute.bindAsEventListener(this)");
},
execute: function(e) {
if (this.options.preFunction != null) this.options.preFunction();
// parse parameters and do replacements
var params = buildParameterString(this.options.parameters);
// parse targets
var targetList = this.options.target.split(',');
var obj = this; // required because 'this' conflict with Ajax.Request
var setFunc = this.setField;
var aj = new Ajax.Request(this.url, {
asynchronous: true,
method: 'get',
evalScripts: true,
parameters: params,
onSuccess: function(request) {
obj.options.parser.load(request);
var results = obj.options.parser.itemList;
obj.options.handler(request, {targets: targetList, items: results});
},
onFailure: function(request) {
if (obj.options.errorFunction != null) obj.options.errorFunction(request);
},
onComplete: function(request) {
if (obj.options.postFunction != null) obj.options.postFunction(request);
}
});
},
handler: function(request, options) {
for (var i=0; i<options.targets.length && i<options.items.length; i++) {
$(options.targets[i]).value = options.items[i][1];
}
}
});
/**
* SELECT TAG
*/
AjaxJspTag.Select = Class.create();
AjaxJspTag.Select.prototype = Object.extend(new AjaxJspTag.Base(), {
initialize: function(url, options) {
this.url = url;
this.setOptions(options);
this.setListeners();
if (this.options.executeOnLoad == "true") {
this.execute();
}
},
setOptions: function(options) {
this.options = Object.extend({
parameters: options.parameters || '',
eventType: options.eventType ? options.eventType : "change",
parser: options.parser ? options.parser : new ResponseXmlParser(),
handler: options.handler ? options.handler : this.handler
}, options || {});
},
setListeners: function() {
Event.observe($(this.options.source),
this.options.eventType,
this.execute.bindAsEventListener(this),
false);
eval("$(this.options.source).on"+this.options.eventType+" = function(){return false;};");
},
execute: function(e) {
if (this.options.preFunction != null) this.options.preFunction();
// parse parameters and do replacements
var params = buildParameterString(this.options.parameters);
var obj = this; // required because 'this' conflict with Ajax.Request
var aj = new Ajax.Request(this.url, {
asynchronous: true,
method: 'get',
evalScripts: true,
parameters: params,
onSuccess: function(request) {
obj.options.parser.load(request);
var results = obj.options.parser.itemList;
obj.options.handler(request, {target: obj.options.target,
items: results,
defaultOptions: obj.options.defaultOptions});
},
onFailure: function(request) {
if (obj.options.errorFunction != null) obj.options.errorFunction(request);
},
onComplete: function(request) {
if (obj.options.postFunction != null) obj.options.postFunction(request);
}
});
},
handler: function(request, options) {
// build an array of option values to be set as selected
var defaultSelectedValues = (options.defaultOptions || '').split(",");
$(options.target).options.length = 0;
$(options.target).disabled = false;
for (var i=0; i<options.items.length; i++) {
var newOption = new Option(options.items[i][0], options.items[i][1]);
//$(options.target).options[i] = new Option(options.items[i][0], options.items[i][1]);
// set the option as selected if it is in the default list
for (j=0; j<defaultSelectedValues.length && newOption.selected == false; j++) {
if (defaultSelectedValues[j] == options.items[i][1]) {
newOption.selected = true;
}
}
$(options.target).options[i] = newOption;
}
}
});
/**
* HTMLCONTENT TAG
*/
AjaxJspTag.HtmlContent = Class.create();
AjaxJspTag.HtmlContent.prototype = Object.extend(new AjaxJspTag.Base(), {
initialize: function(url, options) {
this.url = url;
this.setOptions(options);
this.setListeners();
},
setOptions: function(options) {
this.options = Object.extend({
parameterName: options.parameterName ? options.parameterName : AJAX_DEFAULT_PARAMETER,
parameters: options.parameters || '',
eventType: options.eventType ? options.eventType : "click",
parser: options.parser ? options.parser : new ResponseHtmlParser(),
handler: options.handler ? options.handler : this.handler
}, options || {});
},
setListeners: function() {
if (this.options.source) {
eval("$(this.options.source).on"+this.options.eventType+" = this.execute.bindAsEventListener(this)");
} else if (this.options.sourceClass) {
var elementArray = document.getElementsByClassName(this.options.sourceClass);
for (var i=0; i<elementArray.length; i++) {
eval("elementArray[i].on"+this.options.eventType+" = this.execute.bindAsEventListener(this)");
}
}
},
execute: function(e) {
if (this.options.preFunction != null) this.options.preFunction();
// replace default parameter with value/content of source element selected
var ajaxParameters = this.options.parameters;
if (this.options.sourceClass) {
var re = new RegExp("(\\{"+this.options.parameterName+"\\})", 'g');
var elem = Event.element(e);
if (elem.type) {
ajaxParameters = ajaxParameters.replace(re, $F(elem));
} else {
ajaxParameters = ajaxParameters.replace(re, elem.innerHTML);
}
}
// parse parameters and do replacements
var params = buildParameterString(ajaxParameters);
var obj = this; // required because 'this' conflict with Ajax.Request
var aj = new Ajax.Updater(this.options.target, this.url, {
asynchronous: true,
method: 'get',
evalScripts: true,
parameters: params,
onFailure: function(request) {
if (obj.options.errorFunction != null) obj.options.errorFunction(request);
},
onComplete: function(request) {
if (obj.options.postFunction != null) obj.options.postFunction(request);
}
});
}
});
/**
* TREE TAG
*/
AjaxJspTag.Tree = Class.create();
AjaxJspTag.Tree.prototype = Object.extend(new AjaxJspTag.Base(), {
initialize: function(url, options) {
this.url = url;
this.setOptions(options);
this.execute();
},
setOptions: function(options) {
this.options = Object.extend({
parameters: options.parameters || '',
eventType: options.eventType ? options.eventType : "click",
parser: options.parser ? options.parser : new ResponseXmlToHtmlLinkListParser(),
handler: options.handler ? options.handler : this.handler,
collapsedClass: options.collapsedClass ? options.collapsedClass : "collapsedNode",
expandedClass: options.expandedClass ? options.expandedClass : "expandedNode",
treeClass: options.treeClass ? options.treeClass : "tree",
nodeClass: options.nodeClass || ''
}, options || {});
this.calloutParameter = AJAX_DEFAULT_PARAMETER;
},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -