📄 ajaxtags-1.1.js
字号:
if (options.sourceClass) {
list = document.getElementsByClassName(options.sourceClass);
} else {
list = new Array();
list.push($(options.source));
}
this.options = {
sourceElementList: list,
classNamePrefix: options.classNamePrefix ? options.classNamePrefix : "callout",
eventType: options.eventType ? options.eventType : "click"
}.extend(options || {});
if (options.timeout) {
if (Number(options.timeout) > 250)
this.options.timeout = Number(options.timeout)
else
this.options.timeout = 250;
}
if (options.title) {
this.options.useTitleBar = "true";
} else if (options.useTitleBar) {
this.options.useTitleBar = evalBoolean(options.useTitleBar);
} else {
this.options.useTitleBar = "false";
}
if (!options.boxPosition) this.options.boxPosition = "top right";
this.calloutContainer = "calloutContainer";
this.calloutParameter = AJAX_DEFAULT_PARAMETER;
},
callout: function(xml) {
var root = xml.documentElement;
var items = root.getElementsByTagName("item");
if (items.length > 0) {
var name = items[0].getElementsByTagName("name")[0].firstChild.nodeValue;
var value = items[0].getElementsByTagName("value")[0].firstChild.nodeValue;
// fill text (if present)
if (this.options.useTitleBar == "true") {
if (!this.options.title) {
this.targetElem.childNodes[1].innerHTML = name;
} else {
this.targetElem.childNodes[1].innerHTML = this.options.title;
}
this.targetElem.childNodes[2].innerHTML = value;
} else {
this.targetElem.childNodes[1].innerHTML = value;
}
// size box
if (isIE) {
this.targetElem.style.width = "250px";
} else {
this.targetElem.style.minWidth = "250px";
}
this.targetElem.style.overflow = "visible";
// bring box to front
this.targetElem.style.display = "block";
this.targetElem.style.visibility = "visible";
// move box to new location
this.moveBox(this.activeElem, this.targetElem);
// hook events
this.targetElem.childNodes[0].onclick = this.handleCloseClick.bindAsEventListener(this);
window.onclick = this.checkBoxPosition.bindAsEventListener(this); // when clicked outside callout
if (this.options.timeout) {
if (this.timer)
clearTimeout(this.timer);
this.timer = setTimeout(this.handleHover.bind(this), this.options.timeout);
}
}
},
sourceElemClicked: function(e) {
// replace unique parameter 'ajaxCallout' with inner content of containing element
// ONLY IF we are using the class as the identifier; otherwise, treat it like a field
this.activeElem = Event.element(e);
this.resolveParameters();
var ajaxParameters = this.options.parameters || '';
var re = new RegExp("(\\{"+this.calloutParameter+"\\})", 'g');
ajaxParameters = replaceWithValue(ajaxParameters, re, this.activeElem);
// set the rest of the parameters generically
this.setAjaxOptions({
parameters: arrayToParameterString(this.buildParameterString(ajaxParameters).split(','))
});
this.sendRequest();
},
handlerFunction: function(xml) {
this.callout(xml);
if (this.options.postFunction) {
this.options.postFunction(this.activeElem);
}
},
createContainer: function() {
new Insertion.Top(
document.getElementsByTagName("body")[0],
"<div id=\""+this.calloutContainer+"\" style=\"position: absolute; top: 0; left: 0\"></div>");
},
constructBox: function() {
// create base
var eBox = document.createElement("div");
eBox.className = this.options.classNamePrefix+"Box";
eBox.setAttribute("style", "position: absolute; top: 0; left: 0");
document.documentElement.appendChild(eBox);
// add elements
var eClose = document.createElement("div");
eClose.className = this.options.classNamePrefix+"Close";
eClose.appendChild(document.createTextNode("X"));
eBox.appendChild(eClose);
if (this.options.useTitleBar == "true") {
var eTitle = document.createElement("div");
eTitle.className = this.options.classNamePrefix+"Title";
eBox.appendChild(eTitle);
}
var eContent = document.createElement("div");
eContent.className = this.options.classNamePrefix+"Content";
eBox.appendChild(eContent);
eBox.style.display = "none";
$(this.calloutContainer).appendChild(eBox);
return eBox;
},
moveBox: function(anchor, box) {
box.style.position = "absolute";
var posXY = Position.cumulativeOffset(anchor);
if (this.options.boxPosition.indexOf("top") >= 0) {
box.style.top = (posXY[1] - (box.offsetHeight) - 10) + "px";
} else {
box.style.top = (posXY[1] + (anchor.offsetHeight) + 10) + "px";
}
if (this.options.boxPosition.indexOf("right") >= 0) {
box.style.left = (posXY[0] + 10) + "px";
} else {
box.style.left = (posXY[0] - (box.offsetWidth) - 10) + "px";
}
// Check for off-screen position
if (box.offsetLeft < 0) {
box.style.left = 0;
}
if (box.offsetTop < 0) {
box.style.top = 0;
}
},
handleCloseClick: function(e) {
clearTimeout(this.timer);
if (window.captureEvents) {
window.releaseEvents(Event.MOUSEMOVE);
}
window.onmousemove = null;
this.targetElem.style.display = "none";
},
checkBoxPosition: function(e) {
var outsideContainer = false;
var outsideSource = false;
// evaluate if cursor is over box
var clickX = e.clientX; // cursor X position
var clickY = e.clientY; // cursor Y position
var boundX1 = this.targetElem.offsetLeft;
var boundX2 = boundX1 + this.targetElem.offsetWidth;
var boundY1 = this.targetElem.offsetTop;
var boundY2 = boundY1 + this.targetElem.offsetHeight;
if (clickX < boundX1 || clickX > boundX2 || clickY < boundY1 || clickY > boundY2) {
outsideContainer = true;
}
// evaluate if cursor is over source
boundX1 = this.activeElem.offsetLeft;
boundX2 = boundX1 + this.activeElem.offsetWidth;
boundY1 = this.activeElem.offsetTop;
boundY2 = boundY1 + this.activeElem.offsetHeight;
if (clickX < boundX1 || clickX > boundX2 || clickY < boundY1 || clickY > boundY2) {
outsideSource = true;
}
if (outsideContainer && outsideSource) {
this.handleCloseClick();
}
},
handleHover: function(e) {
if (window.captureEvents) {
window.captureEvents(Event.MOUSEMOVE);
}
window.onmousemove = this.checkBoxPosition.bindAsEventListener(this);
}
});
/* ---------------------------------------------------------------------- */
/* HTML CONTENT TAG
*/
AjaxJspTag.HtmlContent = Class.create();
AjaxJspTag.HtmlContent.prototype = (new AjaxJspTag.Base()).extend({
initialize: function(url, options) {
this.baseUrl = url;
this.setOptions(options);
this.attachBehaviors(this.options.sourceElementList,
this.options.eventType,
this.sourceElemClicked,
this);
},
setOptions: function(options) {
var list;
if (options.sourceClass) {
list = document.getElementsByClassName(options.sourceClass);
} else {
list = new Array();
list.push($(options.source));
}
this.options = {
sourceElementList: list,
targetElem: $(options.target),
eventType: options.eventType ? options.eventType : "click",
ajaxMethod: AJAX_METHOD_UPDATER
}.extend(options || {});
this.contentParameter = AJAX_DEFAULT_PARAMETER;
},
sourceElemClicked: function(e) {
this.resolveParameters();
var ajaxParameters = this.options.parameters || '';
if (this.options.sourceClass) {
this.activeElem = Event.element(e);
//alert(this.activeElem.tagName);
var re = new RegExp("(\\{"+this.contentParameter+"\\})", 'g');
ajaxParameters = replaceWithValue(ajaxParameters, re, this.activeElem);
//alert('ajaxParameters=' + ajaxParameters);
}
this.setAjaxOptions({
parameters: arrayToParameterString(this.buildParameterString(ajaxParameters).split(','))
});
this.sendUpdateRequest(this.options.target);
},
handlerFunction: function(xml) {
if (this.options.postFunction) {
//alert("post");
this.options.postFunction(xml);
}
}
});
/* ---------------------------------------------------------------------- */
/* TAB PANEL TAG
*/
AjaxJspTag.TabPanel = Class.create();
AjaxJspTag.TabPanel.prototype = (new AjaxJspTag.Base()).extend({
initialize: function(url, options) {
this.baseUrl = url;
this.setOptions(options);
this.execute();
},
setOptions: function(options) {
this.options = {
ajaxMethod: AJAX_METHOD_UPDATER
}.extend(options || {});
},
execute: function() {
this.resolveParameters();
this.setAjaxOptions({
parameters: arrayToParameterString(this.buildParameterString(this.options.parameters).split(','))
});
this.sendUpdateRequest(this.options.target);
$(this.options.currentStyleId).id = '';
this.options.source.id = this.options.currentStyleId;
},
handlerFunction: function(xml) {
if (this.options.postFunction) {
this.options.postFunction(xml);
}
}
});
/* ---------------------------------------------------------------------- */
/* PORTLET TAG
*/
AjaxJspTag.Portlet = Class.create();
AjaxJspTag.Portlet.prototype = (new AjaxJspTag.Base()).extend({
initialize: function(url, options) {
this.baseUrl = url;
this.setOptions(options);
if (this.options.executeOnLoad == "true") {
this.execute();
}
if (this.preserveState) this.checkCookie();
// Attach events to icons if defined
if (this.options.imageClose) {
this.attachBehaviors(this.options.closeElement, "click", this.closePortlet, this);
}
if (this.options.imageRefresh) {
this.attachBehaviors(this.options.refreshElement, "click", this.refreshPortlet, this);
}
if (this.options.imageMaximize && this.options.imageMinimize) {
this.attachBehaviors(this.options.toggleElement, "click", this.togglePortlet, this);
}
},
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();
}
}
},
setOptions: function(options) {
this.options = {
ajaxMethod: AJAX_METHOD_UPDATER,
targetElement: options.classNamePrefix+"Content",
closeElement: getElementsByClassName($(options.source), (options.classNamePrefix+"Close"))[0],
refreshElement: getElementsByClassName($(options.source), (options.classNamePrefix+"Refresh"))[0],
toggleElement: getElementsByClassName($(options.source), (options.classNamePrefix+"Size"))[0],
executeOnLoad: evalBoolean(options.executeOnLoad, true),
preserveState: evalBoolean(options.preserveState),
expireDays: options.expireDays || "0",
expireHours: options.expireHours || "0",
expireMinutes: options.expireMinutes || "0",
isMaximized: true
}.extend(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.autoRefreshSet = false;
},
execute: function() {
this.resolveParameters();
this.setAjaxOptions({
frequency: this.options.refreshPeriod ? (this.options.refreshPeriod) : null,
parameters: arrayToParameterString(this.buildParameterString(this.options.parameters).split(','))
});
if (this.options.refreshPeriod && this.autoRefreshSet == false) {
this.sendPeriodicalUpdateRequest(
getElementsByClassName($(this.options.source), this.options.targetElement)[0]);
this.autoRefreshSet = true;
} else {
this.sendUpdateRequest(
getElementsByClassName($(this.options.source), this.options.targetElement)[0]);
}
},
stopAutoRefresh: function() {
// stop auto-update if present
if (this.ajaxPeriodicalUpdater != null
&& this.options.refreshPeriod
&& this.autoRefreshSet == 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) {
setCookie("AjaxJspTag.Portlet."+this.options.source,
AJAX_PORTLET_CLOSE,
this.options.expireDate);
}
},
togglePortlet: function(e) {
Element.toggle(getElementsByClassName($(this.options.source), this.options.targetElement)[0]);
var image = this.options.toggleElement;
if (this.options.isMaximized) {
image.src = this.options.imageMaximize;
this.stopAutoRefresh();
} else {
image.src = this.options.imageMinimize;
this.startAutoRefresh();
}
this.options.isMaximized = !this.options.isMaximized;
// Save state in cookie
if (this.preserveState) {
setCookie("AjaxJspTag.Portlet."+this.options.source,
(this.options.isMaximized == true ? AJAX_PORTLET_MAX : AJAX_PORTLET_MIN),
this.options.expireDate);
}
},
handlerFunction: function(xml) {
if (this.options.postFunction) {
this.options.postFunction(xml);
}
}
});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -