📄 ajaxtags-1.1.js
字号:
/**
* Copyright 2005 Darren L. Spurgeon
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var AjaxJspTag = {
Version: '1.1'
}
var isSafari = false;
var isMoz = false;
var isIE = false;
if (navigator.userAgent.indexOf("Safari") > 0) {
isSafari = true;
isMoz = false;
isIE = false;
}
else if (navigator.product == "Gecko") {
isSafari = false;
isMoz = true;
isIE = false;
} else {
isSafari = false;
isMoz = false;
isIE = true;
}
AJAX_METHOD_UPDATER = "updater";
AJAX_METHOD_REQUEST = "request";
AJAX_DEFAULT_PARAMETER = "ajaxParameter";
AJAX_PORTLET_MAX = 1;
AJAX_PORTLET_MIN = 2;
AJAX_PORTLET_CLOSE = 3;
/* ---------------------------------------------------------------------- */
/* Example File From "_JavaScript and DHTML Cookbook"
Published by O'Reilly & Associates
Copyright 2003 Danny Goodman
*/
// utility function to retrieve a future expiration date in proper format;
// pass three integer parameters for the number of days, hours,
// and minutes from now you want the cookie to expire; all three
// parameters required, so use zeros where appropriate
function getExpDate(days, hours, minutes) {
var expDate = new Date();
if (typeof days == "number" && typeof hours == "number" && typeof hours == "number") {
expDate.setDate(expDate.getDate() + parseInt(days));
expDate.setHours(expDate.getHours() + parseInt(hours));
expDate.setMinutes(expDate.getMinutes() + parseInt(minutes));
return expDate.toGMTString();
}
}
// utility function called by getCookie()
function getCookieVal(offset) {
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1) {
endstr = document.cookie.length;
}
return unescape(document.cookie.substring(offset, endstr));
}
// primary function to retrieve cookie by name
function getCookie(name) {
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (document.cookie.substring(i, j) == arg) {
return getCookieVal(j);
}
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
// store cookie value with optional details as needed
function setCookie(name, value, expires, path, domain, secure) {
document.cookie = name + "=" + escape (value) +
((expires) ? "; expires=" + expires : "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
// remove the cookie by setting ancient expiration date
function deleteCookie(name,path,domain) {
if (getCookie(name)) {
document.cookie = name + "=" +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
"; expires=Thu, 01-Jan-70 00:00:01 GMT";
}
}
/* ---------------------------------------------------------------------- */
/* End Copyright 2003 Danny Goodman */
/* ---------------------------------------------------------------------- */
/* UTILITY FUNCTIONS
*/
/**
* Type Detection
*/
function isAlien(a) {
return isObject(a) && typeof a.constructor != 'function';
}
function isArray(a) {
return isObject(a) && a.constructor == Array;
}
function isBoolean(a) {
return typeof a == 'boolean';
}
function isEmpty(o) {
var i, v;
if (isObject(o)) {
for (i in o) {
v = o[i];
if (isUndefined(v) && isFunction(v)) {
return false;
}
}
}
return true;
}
function isFunction(a) {
return typeof a == 'function';
}
function isNull(a) {
return typeof a == 'object' && !a;
}
function isNumber(a) {
return typeof a == 'number' && isFinite(a);
}
function isObject(a) {
return (a && typeof a == 'object') || isFunction(a);
}
function isString(a) {
return typeof a == 'string';
}
function isUndefined(a) {
return typeof a == 'undefined';
}
function getPropertyByName(node, nodeName) {
var arr = new Array();
var items = node.getElementsByTagName("name");
for (var i=0; i<items.length; i++) {
if (nodeName == items[i].firstChild.nodeValue) {
arr[0] = items[i].firstChild.nodeValue;
arr[1] = items[i].parentNode.getElementsByTagName("value")[0].firstChild.nodeValue;
return arr;
}
}
return null;
}
function getValueForNode(node, nodeName) {
var arr = getPropertyByName(node, nodeName);
return arr != null ? arr[1] : null;
}
function evalBoolean(value, defaultValue) {
if (!isNull(value) && isString(value)) {
return ("true" == value.toLowerCase() || "yes" == value.toLowerCase()) ? "true" : "false";
} else {
return defaultValue == true ? "true" : "false";
}
}
/*
* Extract querystring from a URL
*/
function extractQueryString(url) {
var ret = (url.indexOf('?') >= 0 && url.indexOf('?') < (url.length-1))
? url.substr(url.indexOf('?')+1)
: '';
return ret;
}
/*
* Trim the querystring from a URL
*/
function trimQueryString(url) {
var ret = url.indexOf('?') >= 0
? url.substring(0, url.indexOf('?'))
: url;
return ret;
}
/*
*
*/
function delimitQueryString(qs) {
var ret = '';
if (qs.length > 0) {
var params = qs.split('&');
for (var i=0; i<params.length; i++) {
if (i > 0) ret += ',';
ret += params[i];
}
}
//alert('delimitQueryString = ' + ret );
return ret;
}
function getElementsByClassName(node, className) {
var children = node.getElementsByTagName('*');
var elements = new Array();
for (var i = 0; i < children.length; i++) {
var child = children[i];
var classNames = child.className.split(' ');
for (var j = 0; j < classNames.length; j++) {
if (classNames[j] == className) {
elements.push(child);
break;
}
}
}
return elements;
}
/*
* Add multiple onLoad Events
*/
function addOnLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}
function getElementY(element){
var targetTop = 0;
if (element.offsetParent) {
while (element.offsetParent) {
targetTop += element.offsetTop;
element = element.offsetParent;
}
} else if (element.y) {
targetTop += element.y;
}
return targetTop;
}
function getElementX(element){
var targetLeft = 0;
if (element.offsetParent) {
while (element.offsetParent) {
targetLeft += element.offsetLeft;
element = element.offsetParent;
}
} else if (element.x) {
targetLeft += element.yx;
}
return targetLeft;
}
function findNextElementByTagName(element, tagName) {
var children = element.getElementsByTagName('*');
for (var i = 0; i < children.length; i++) {
var child = children[i];
if (child.tagName.toLowerCase() == tagName.toLowerCase())
return child;
}
return null;
}
/**
* Returns true if an element has a specified class name
*/
function hasClass(node, className) {
if (node.className == className) {
return true;
}
var reg = new RegExp('(^| )'+ className +'($| )')
if (reg.test(node.className)) {
return true;
}
return false;
}
/**
* Emulate PHP's ereg_replace function in javascript
*/
function eregReplace(search, replace, subject) {
return subject.replace(new RegExp(search,'g'), replace);
}
function arrayToParameterString(array) {
var str = '';
for (var i=0; i<array.length; i++) {
str += (i >= 0 ? '&' : '') + array[i];
}
return str;
}
function replaceWithValue(sourceString, regExp, element) {
var retString = "";
switch (element.type) {
case 'checkbox':
case 'radio':
case 'text':
case 'textarea':
case 'password':
case 'hidden':
case 'select-one':
case 'select-multiple':
//alert('1' + $F(element));
retString = sourceString.replace(regExp, $F(element));
break;
default:
//alert(element.innerHTML);
retString = sourceString.replace(regExp, element.innerHTML);
break;
}
//alert('replaceWithValue =' + retString);
return retString;
}
function decodeHtml(sourceString) {
var retString = sourceString.replace(/&/, "&");
retString = retString.replace(/</, "<");
retString = retString.replace(/>/, ">");
return retString;
}
/* ---------------------------------------------------------------------- */
/* AJAXJSPTAG.BASE
*/
AjaxJspTag.Base = function() {};
AjaxJspTag.Base.prototype = {
resolveParameters: function() {
// Strip URL of querystring and append it to parameters
var qs = delimitQueryString(extractQueryString(this.baseUrl));
if (this.options.parameters) {
this.options.parameters += ',' + qs;
} else {
this.options.parameters = qs;
}
this.baseUrl = trimQueryString(this.baseUrl);
},
setAjaxOptions: function(ajaxOptions) {
this.ajaxOptions = {
asynchronous: true,
method: 'get',
evalScripts: true,
onComplete: this.onRequestComplete.bind(this)
}.extend(ajaxOptions || {});
},
sendRequest: function() {
new Ajax.Request(this.baseUrl, this.ajaxOptions);
},
sendUpdateRequest: function(target) {
this.ajaxUpdater = new Ajax.Updater(target, this.baseUrl, this.ajaxOptions);
},
sendPeriodicalUpdateRequest: function(target) {
this.ajaxPeriodicalUpdater =
new Ajax.PeriodicalUpdater(target, this.baseUrl, this.ajaxOptions);
},
onRequestComplete: function(request) {
if (request != null && request.status == 200) {
var xmlDoc = request.responseXML;
if (this.options.ajaxMethod != AJAX_METHOD_UPDATER
&& this.isEmptyResponse(request.responseXML)) {
if (this.options.emptyFunction) {
this.options.emptyFunction(request);
}
} else if (this.options.ajaxMethod != AJAX_METHOD_UPDATER
&& this.isErrorResponse(request.responseXML)) {
this.options.errorFunction(request.responseXML);
} else {
this.handlerFunction(request.responseXML);
}
} else {
if (this.options.errorFunction) {
this.options.errorFunction(request);
}
}
},
isEmptyResponse: function(xml) {
var root = xml.documentElement;
if (root.getElementsByTagName("response").length == 0
|| root.getElementsByTagName("response")[0].getElementsByTagName("item").length == 0) {
return true;
}
return false;
},
isErrorResponse: function(xml) {
var root = xml.documentElement;
if (root.nodeName == "parsererror"
|| root.getElementsByTagName("error").length == 1
|| root.getElementsByTagName("response").length == 0) {
return true;
}
return false;
},
buildParameterString: function(parameterList) {
var ajaxParameters = parameterList || '';
var re = new RegExp("(\\{[^,]*\\})", 'g'); // should retrieve each {} group
var results = ajaxParameters.match(re);
if (results != null) {
for (var r=0; r<results.length; r++) {
//alert("r=" + r + " : " + results[r]);
var nre = new RegExp(results[r], 'g');
var field = $(results[r].substring(1, results[r].length-1));
ajaxParameters = replaceWithValue(ajaxParameters, nre, field);
}
}
return ajaxParameters;
},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -