📄 ajaxtags.js
字号:
}
/**
* 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);
}
});
}
});
/**
* TABPANEL TAG
*/
AjaxJspTag.TabPanel = Class.create();
AjaxJspTag.TabPanel.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 ResponseHtmlParser(),
handler: options.handler ? options.handler : this.handler
}, options || {});
},
execute: function(e) {
if (this.options.preFunction != null) this.options.preFunction();
// parse parameters and do replacements
this.resolveParameters();
var params = buildParameterString(this.options.parameters);
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,
onSuccess: function(request) {
var src;
if (obj.options.source) {
src = obj.options.source;
} else {
src = document.getElementsByClassName(obj.options.currentStyleClass,
$(obj.options.panelStyleId))[0];
}
obj.options.handler(request, {source: src,
panelStyleId: obj.options.panelStyleId,
currentStyleClass: obj.options.currentStyleClass});
},
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) {
// find current anchor
var cur = document.getElementsByClassName(options.currentStyleClass, $(options.panelStyleId));
// remove class
cur[0].className = '';
// add class to selected tab
options.source.className = options.currentStyleClass;
}
});
/**
* PORTLET TAG
*/
AjaxJspTag.Portlet = Class.create();
AjaxJspTag.Portlet.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();
}
if (this.preserveState) this.checkCookie();
},
setOptions: function(options) {
this.options = Object.extend({
parameters: options.parameters || '',
target: options.source+"Content",
close: options.source+"Close",
refresh: options.source+"Refresh",
toggle: options.source+"Size",
isMaximized: true,
expireDays: options.expireDays || "0",
expireHours: options.expireHours || "0",
expireMinutes: options.expireMinutes || "0",
executeOnLoad: evalBoolean(options.executeOnLoad, true),
refreshPeriod: options.refreshPeriod || null,
eventType: options.eventType ? options.eventType : "click",
parser: options.parser ? options.parser : new ResponseHtmlParser(),
handler: options.handler ? options.handler : this.handler
}, options || {});
if (parseInt(this.options.expireDays) > 0
|| parseInt(this.options.expireHours) > 0
|| parseInt(this.options.expireMinutes) > 0) {
this.preserveState = true;
this.options.expireDate = getExpDate(
parseInt(this.options.expireDays),
parseInt(this.options.expireHours),
parseInt(this.options.expireMinutes));
}
this.isAutoRefreshSet = false;
},
setListeners: function() {
if (this.options.imageClose) {
eval("$(this.options.close).on"+this.options.eventType+" = this.closePortlet.bindAsEventListener(this)");
}
if (this.options.imageRefresh) {
eval("$(this.options.refresh).on"+this.options.eventType+" = this.refreshPortlet.bindAsEventListener(this)");
}
if (this.options.imageMaximize && this.options.imageMinimize) {
eval("$(this.options.toggle).on"+this.options.eventType+" = this.togglePortlet.bindAsEventListener(this)");
}
},
execute: function(e) {
if (this.options.preFunction != null) this.options.preFunction();
// parse parameters and do replacements
this.resolveParameters();
var params = buildParameterString(this.options.parameters);
var obj = this; // required because 'this' conflict with Ajax.Request
if (this.options.refreshPeriod && this.isAutoRefreshSet == false) {
// periodic updater
var freq = this.options.refreshPeriod;
this.ajaxPeriodicalUpdater = new Ajax.PeriodicalUpdater(this.options.target, this.url, {
asynchronous: true,
method: 'get',
evalScripts: true,
parameters: params,
frequency: freq,
onFailure: function(request) {
if (obj.options.errorFunction != null) obj.options.errorFunction(request);
},
onComplete: function(request) {},
onSuccess: function(request) {
if (obj.options.postFunction != null) obj.options.postFunction(request);
}
});
this.isAutoRefreshSet = true;
} else {
// normal updater
this.ajaxUpdater = new Ajax.Updater(this.options.target, this.url, {
asynchronous: true,
method: 'get',
parameters: params,
evalScripts: true,
onFailure: function(request) {
if (obj.options.errorFunction != null) obj.options.errorFunction(request);
},
onComplete: function(request) {
if (obj.options.postFunction != null) obj.options.postFunction(request);
}
});
}
},
checkCookie: function() {
// Check cookie for save state
var cVal = getCookie("AjaxJspTag.Portlet."+this.options.source);
if (cVal != null) {
if (cVal == AJAX_PORTLET_MIN) {
this.togglePortlet();
} else if (cVal == AJAX_PORTLET_CLOSE) {
this.closePortlet();
}
}
},
stopAutoRefresh: function() {
// stop auto-update if present
if (this.ajaxPeriodicalUpdater != null
&& this.options.refreshPeriod
&& this.isAutoRefreshSet == true) {
this.ajaxPeriodicalUpdater.stop();
}
},
startAutoRefresh: function() {
// stop auto-update if present
if (this.ajaxPeriodicalUpdater != null && this.options.refreshPeriod) {
this.ajaxPeriodicalUpdater.start();
}
},
refreshPortlet: function(e) {
// clear existing updater
this.stopAutoRefresh();
if (this.ajaxPeriodicalUpdater != null) {
this.startAutoRefresh();
} else {
this.execute();
}
},
closePortlet: function(e) {
this.stopAutoRefresh();
Element.remove(this.options.source);
// Save state in cookie
if (this.preserveState) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -