Upgrade to Rails 1.2, only this JavaScript file changed in the application itself

git-svn-id: https://svn.apache.org/repos/asf/lucene/solr/trunk@498511 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Erik Hatcher 2007-01-22 02:38:55 +00:00
parent da5722fa35
commit 0e560eccfa
1 changed files with 215 additions and 126 deletions

View File

@ -1,4 +1,4 @@
/* Prototype JavaScript framework, version 1.5.0_rc2
/* Prototype JavaScript framework, version 1.5.0
* (c) 2005-2007 Sam Stephenson
*
* Prototype is freely distributable under the terms of an MIT-style license.
@ -7,7 +7,7 @@
/*--------------------------------------------------------------------------*/
var Prototype = {
Version: '1.5.0_rc2',
Version: '1.5.0',
BrowserFeatures: {
XPath: !!document.evaluate
},
@ -629,11 +629,43 @@ if(window.opera){
return array;
}
}
var Hash = {
var Hash = function(obj) {
Object.extend(this, obj || {});
};
Object.extend(Hash, {
toQueryString: function(obj) {
var parts = [];
this.prototype._each.call(obj, function(pair) {
if (!pair.key) return;
if (pair.value && pair.value.constructor == Array) {
var values = pair.value.compact();
if (values.length < 2) pair.value = values.reduce();
else {
key = encodeURIComponent(pair.key);
values.each(function(value) {
value = value != undefined ? encodeURIComponent(value) : '';
parts.push(key + '=' + encodeURIComponent(value));
});
return;
}
}
if (pair.value == undefined) pair[1] = '';
parts.push(pair.map(encodeURIComponent).join('='));
});
return parts.join('&');
}
});
Object.extend(Hash.prototype, Enumerable);
Object.extend(Hash.prototype, {
_each: function(iterator) {
for (var key in this) {
var value = this[key];
if (typeof value == 'function') continue;
if (value && value == Hash.prototype[key]) continue;
var pair = [key, value];
pair.key = key;
@ -657,26 +689,24 @@ var Hash = {
});
},
toQueryString: function() {
return this.map(function(pair) {
if (!pair.key) return null;
if (pair.value && pair.value.constructor == Array) {
pair.value = pair.value.compact();
if (pair.value.length < 2) {
pair.value = pair.value.reduce();
} else {
var key = encodeURIComponent(pair.key);
return pair.value.map(function(value) {
return key + '=' + encodeURIComponent(value);
}).join('&');
remove: function() {
var result;
for(var i = 0, length = arguments.length; i < length; i++) {
var value = this[arguments[i]];
if (value !== undefined){
if (result === undefined) result = value;
else {
if (result.constructor != Array) result = [result];
result.push(value)
}
}
delete this[arguments[i]];
}
return result;
},
if (pair.value == undefined) pair[1] = '';
return pair.map(encodeURIComponent).join('=');
}).join('&');
toQueryString: function() {
return Hash.toQueryString(this);
},
inspect: function() {
@ -684,14 +714,12 @@ var Hash = {
return pair.map(Object.inspect).join(': ');
}).join(', ') + '}>';
}
}
});
function $H(object) {
var hash = Object.extend({}, object || {});
Object.extend(hash, Enumerable);
Object.extend(hash, Hash);
return hash;
}
if (object && object.constructor == Hash) return object;
return new Hash(object);
};
ObjectRange = Class.create();
Object.extend(ObjectRange.prototype, Enumerable);
Object.extend(ObjectRange.prototype, {
@ -785,8 +813,8 @@ Ajax.Base.prototype = {
Object.extend(this.options, options || {});
this.options.method = this.options.method.toLowerCase();
this.options.parameters = $H(typeof this.options.parameters == 'string' ?
this.options.parameters.toQueryParams() : this.options.parameters);
if (typeof this.options.parameters == 'string')
this.options.parameters = this.options.parameters.toQueryParams();
}
}
@ -804,26 +832,27 @@ Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
},
request: function(url) {
this.url = url;
this.method = this.options.method;
var params = this.options.parameters;
if (params.any()) params['_'] = '';
if (!['get', 'post'].include(this.options.method)) {
if (!['get', 'post'].include(this.method)) {
// simulate other verbs over post
params['_method'] = this.options.method;
this.options.method = 'post';
params['_method'] = this.method;
this.method = 'post';
}
this.url = url;
params = Hash.toQueryString(params);
if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) params += '&_='
// when GET, append parameters to URL
if (this.options.method == 'get' && params.any())
this.url += (this.url.indexOf('?') >= 0 ? '&' : '?') +
params.toQueryString();
if (this.method == 'get' && params)
this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + params;
try {
Ajax.Responders.dispatch('onCreate', this, this.transport);
this.transport.open(this.options.method.toUpperCase(), this.url,
this.transport.open(this.method.toUpperCase(), this.url,
this.options.asynchronous);
if (this.options.asynchronous)
@ -832,8 +861,7 @@ Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
this.transport.onreadystatechange = this.onStateChange.bind(this);
this.setRequestHeaders();
var body = this.options.method == 'post' ?
(this.options.postBody || params.toQueryString()) : null;
var body = this.method == 'post' ? (this.options.postBody || params) : null;
this.transport.send(body);
@ -860,7 +888,7 @@ Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
};
if (this.options.method == 'post') {
if (this.method == 'post') {
headers['Content-type'] = this.options.contentType +
(this.options.encoding ? '; charset=' + this.options.encoding : '');
@ -1054,7 +1082,7 @@ if (Prototype.BrowserFeatures.XPath) {
for (var i = 0, length = query.snapshotLength; i < length; i++)
results.push(query.snapshotItem(i));
return results;
}
};
}
document.getElementsByClassName = function(className, parentElement) {
@ -1071,7 +1099,7 @@ document.getElementsByClassName = function(className, parentElement) {
}
return elements;
}
}
};
/*--------------------------------------------------------------------------*/
@ -1100,7 +1128,7 @@ Element.extend = function(element) {
element._extended = true;
return element;
}
};
Element.extend.cache = {
findOrStore: function(value) {
@ -1108,7 +1136,7 @@ Element.extend.cache = {
return value.apply(null, [this].concat($A(arguments)));
}
}
}
};
Element.Methods = {
visible: function(element) {
@ -1146,6 +1174,7 @@ Element.Methods = {
replace: function(element, html) {
element = $(element);
html = typeof html == 'undefined' ? '' : html.toString();
if (element.outerHTML) {
element.outerHTML = html.stripScripts();
} else {
@ -1238,11 +1267,23 @@ Element.Methods = {
},
readAttribute: function(element, name) {
return $(element).getAttribute(name);
element = $(element);
if (document.all && !window.opera) {
var t = Element._attributeTranslations;
if (t.values[name]) return t.values[name](element, name);
if (t.names[name]) name = t.names[name];
var attribute = element.attributes[name];
if(attribute) return attribute.nodeValue;
}
return element.getAttribute(name);
},
getHeight: function(element) {
return $(element).offsetHeight;
return $(element).getDimensions().height;
},
getWidth: function(element) {
return $(element).getDimensions().width;
},
classNames: function(element) {
@ -1304,7 +1345,7 @@ Element.Methods = {
return $(element).innerHTML.match(/^\s*$/);
},
childOf: function(element, ancestor) {
descendantOf: function(element, ancestor) {
element = $(element), ancestor = $(ancestor);
while (element = element.parentNode)
if (element == ancestor) return true;
@ -1320,15 +1361,16 @@ Element.Methods = {
getStyle: function(element, style) {
element = $(element);
var camelizedStyle = (style == 'float' ?
(typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat') : style).camelize();
var value = element.style[camelizedStyle];
if (['float','cssFloat'].include(style))
style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat');
style = style.camelize();
var value = element.style[style];
if (!value) {
if (document.defaultView && document.defaultView.getComputedStyle) {
var css = document.defaultView.getComputedStyle(element, null);
value = css ? css[camelizedStyle] : null;
value = css ? css[style] : null;
} else if (element.currentStyle) {
value = element.currentStyle[camelizedStyle];
value = element.currentStyle[style];
}
}
@ -1356,13 +1398,16 @@ Element.Methods = {
!/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0;
if(/MSIE/.test(navigator.userAgent) && !window.opera)
element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');
} else if(value == '') {
if(/MSIE/.test(navigator.userAgent) && !window.opera)
element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');
} else {
if(value < 0.00001) value = 0;
if(/MSIE/.test(navigator.userAgent) && !window.opera)
element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') +
'alpha(opacity='+value*100+')';
}
} else if(name == 'float') name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat';
} else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat';
element.style[name.camelize()] = value;
}
return element;
@ -1370,7 +1415,8 @@ Element.Methods = {
getDimensions: function(element) {
element = $(element);
if (Element.getStyle(element, 'display') != 'none')
var display = $(element).getStyle('display');
if (display != 'none' && display != null) // Safari bug
return {width: element.offsetWidth, height: element.offsetHeight};
// All *Width and *Height properties give 0 on elements with display none,
@ -1378,12 +1424,13 @@ Element.Methods = {
var els = element.style;
var originalVisibility = els.visibility;
var originalPosition = els.position;
var originalDisplay = els.display;
els.visibility = 'hidden';
els.position = 'absolute';
els.display = '';
els.display = 'block';
var originalWidth = element.clientWidth;
var originalHeight = element.clientHeight;
els.display = 'none';
els.display = originalDisplay;
els.position = originalPosition;
els.visibility = originalVisibility;
return {width: originalWidth, height: originalHeight};
@ -1434,16 +1481,63 @@ Element.Methods = {
element._overflow = null;
return element;
}
}
};
Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf});
Element._attributeTranslations = {};
Element._attributeTranslations.names = {
colspan: "colSpan",
rowspan: "rowSpan",
valign: "vAlign",
datetime: "dateTime",
accesskey: "accessKey",
tabindex: "tabIndex",
enctype: "encType",
maxlength: "maxLength",
readonly: "readOnly",
longdesc: "longDesc"
};
Element._attributeTranslations.values = {
_getAttr: function(element, attribute) {
return element.getAttribute(attribute, 2);
},
_flag: function(element, attribute) {
return $(element).hasAttribute(attribute) ? attribute : null;
},
style: function(element) {
return element.style.cssText.toLowerCase();
},
title: function(element) {
var node = element.getAttributeNode('title');
return node.specified ? node.nodeValue : null;
}
};
Object.extend(Element._attributeTranslations.values, {
href: Element._attributeTranslations.values._getAttr,
src: Element._attributeTranslations.values._getAttr,
disabled: Element._attributeTranslations.values._flag,
checked: Element._attributeTranslations.values._flag,
readonly: Element._attributeTranslations.values._flag,
multiple: Element._attributeTranslations.values._flag
});
Element.Methods.Simulated = {
hasAttribute: function(element, attribute) {
var t = Element._attributeTranslations;
attribute = t.names[attribute] || attribute;
return $(element).getAttributeNode(attribute).specified;
}
}
};
// IE is missing .innerHTML support for TABLE-related elements
if(document.all){
if (document.all && !window.opera){
Element.Methods.update = function(element, html) {
element = $(element);
html = typeof html == 'undefined' ? '' : html.toString();
@ -1477,7 +1571,7 @@ if(document.all){
setTimeout(function() {html.evalScripts()}, 10);
return element;
}
}
};
Object.extend(Element, Element.Methods);
@ -1644,7 +1738,7 @@ Element.ClassNames.prototype = {
toString: function() {
return $A(this).join(' ');
}
}
};
Object.extend(Element.ClassNames.prototype, Enumerable);
var Selector = Class.create();
@ -1691,15 +1785,15 @@ Selector.prototype = {
if (params.wildcard)
conditions.push('true');
if (clause = params.id)
conditions.push('element.getAttribute("id") == ' + clause.inspect());
conditions.push('element.readAttribute("id") == ' + clause.inspect());
if (clause = params.tagName)
conditions.push('element.tagName.toUpperCase() == ' + clause.inspect());
if ((clause = params.classNames).length > 0)
for (var i = 0, length = clause.length; i < length; i++)
conditions.push('Element.hasClassName(element, ' + clause[i].inspect() + ')');
conditions.push('element.hasClassName(' + clause[i].inspect() + ')');
if (clause = params.attributes) {
clause.each(function(attribute) {
var value = 'element.getAttribute(' + attribute.name.inspect() + ')';
var value = 'element.readAttribute(' + attribute.name.inspect() + ')';
var splitValueBy = function(delimiter) {
return value + ' && ' + value + '.split(' + delimiter.inspect() + ')';
}
@ -1712,7 +1806,7 @@ Selector.prototype = {
); break;
case '!=': conditions.push(value + ' != ' + attribute.value.inspect()); break;
case '':
case undefined: conditions.push(value + ' != null'); break;
case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break;
default: throw 'Unknown operator ' + attribute.operator + ' in selector';
}
});
@ -1723,6 +1817,7 @@ Selector.prototype = {
compileMatcher: function() {
this.match = new Function('element', 'if (!element.tagName) return false; \
element = $(element); \
return ' + this.buildMatchExpression());
},
@ -1762,7 +1857,7 @@ Object.extend(Selector, {
findChildElements: function(element, expressions) {
return expressions.map(function(expression) {
return expression.strip().split(/\s+/).inject([null], function(results, expr) {
return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) {
var selector = new Selector(expr);
return results.inject([], function(elements, result) {
return elements.concat(selector.findElements(result || element));
@ -1781,18 +1876,28 @@ var Form = {
return form;
},
serializeElements: function(elements) {
return elements.inject([], function(queryComponents, element) {
var queryComponent = Form.Element.serialize(element);
if (queryComponent) queryComponents.push(queryComponent);
return queryComponents;
}).join('&');
serializeElements: function(elements, getHash) {
var data = elements.inject({}, function(result, element) {
if (!element.disabled && element.name) {
var key = element.name, value = $(element).getValue();
if (value != undefined) {
if (result[key]) {
if (result[key].constructor != Array) result[key] = [result[key]];
result[key].push(value);
}
else result[key] = value;
}
}
return result;
});
return getHash ? data : Hash.toQueryString(data);
}
};
Form.Methods = {
serialize: function(form) {
return Form.serializeElements(Form.getElements(form));
serialize: function(form, getHash) {
return Form.serializeElements(Form.getElements(form), getHash);
},
getElements: function(form) {
@ -1807,15 +1912,13 @@ Form.Methods = {
getInputs: function(form, typeName, name) {
form = $(form);
var inputs = form.getElementsByTagName('input'), matchingInputs = [];
var inputs = form.getElementsByTagName('input');
if (!typeName && !name)
return $A(inputs).map(Element.extend);
if (!typeName && !name) return $A(inputs).map(Element.extend);
for (var i = 0, length = inputs.length; i < length; i++) {
for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
var input = inputs[i];
if ((typeName && input.type != typeName) ||
(name && input.name != name))
if ((typeName && input.type != typeName) || (name && input.name != name))
continue;
matchingInputs.push(Element.extend(input));
}
@ -1873,30 +1976,21 @@ Form.Element = {
Form.Element.Methods = {
serialize: function(element) {
element = $(element);
if (element.disabled) return '';
var method = element.tagName.toLowerCase();
var parameter = Form.Element.Serializers[method](element);
if (parameter) {
var key = encodeURIComponent(parameter[0]);
if (key.length == 0) return;
if (parameter[1].constructor != Array)
parameter[1] = [parameter[1]];
return parameter[1].map(function(value) {
return key + '=' + encodeURIComponent(value);
}).join('&');
if (!element.disabled && element.name) {
var value = element.getValue();
if (value != undefined) {
var pair = {};
pair[element.name] = value;
return Hash.toQueryString(pair);
}
}
return '';
},
getValue: function(element) {
element = $(element);
var method = element.tagName.toLowerCase();
var parameter = Form.Element.Serializers[method](element);
if (parameter)
return parameter[1];
return Form.Element.Serializers[method](element);
},
clear: function(element) {
@ -1933,6 +2027,7 @@ Form.Element.Methods = {
Object.extend(Form.Element, Form.Element.Methods);
var Field = Form.Element;
var $F = Form.Element.getValue;
/*--------------------------------------------------------------------------*/
@ -1945,51 +2040,45 @@ Form.Element.Serializers = {
default:
return Form.Element.Serializers.textarea(element);
}
return false;
},
inputSelector: function(element) {
if (element.checked)
return [element.name, element.value];
return element.checked ? element.value : null;
},
textarea: function(element) {
return [element.name, element.value];
return element.value;
},
select: function(element) {
return Form.Element.Serializers[element.type == 'select-one' ?
return this[element.type == 'select-one' ?
'selectOne' : 'selectMany'](element);
},
selectOne: function(element) {
var value = '', opt, index = element.selectedIndex;
if (index >= 0) {
opt = Element.extend(element.options[index]);
// Uses the new potential extension if hasAttribute isn't native.
value = opt.hasAttribute('value') ? opt.value : opt.text;
}
return [element.name, value];
var index = element.selectedIndex;
return index >= 0 ? this.optionValue(element.options[index]) : null;
},
selectMany: function(element) {
var value = [];
for (var i = 0, length = element.length; i < length; i++) {
var opt = Element.extend(element.options[i]);
if (opt.selected)
// Uses the new potential extension if hasAttribute isn't native.
value.push(opt.hasAttribute('value') ? opt.value : opt.text);
var values, length = element.length;
if (!length) return null;
for (var i = 0, values = []; i < length; i++) {
var opt = element.options[i];
if (opt.selected) values.push(this.optionValue(opt));
}
return [element.name, value];
return values;
},
optionValue: function(opt) {
// extend element because hasAttribute may not be native
return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
}
}
/*--------------------------------------------------------------------------*/
var $F = Form.Element.getValue;
/*--------------------------------------------------------------------------*/
Abstract.TimedObserver = function() {}
Abstract.TimedObserver.prototype = {
initialize: function(element, frequency, callback) {
@ -2382,10 +2471,10 @@ var Position = {
element._originalHeight = element.style.height;
element.style.position = 'absolute';
element.style.top = top + 'px';;
element.style.left = left + 'px';;
element.style.width = width + 'px';;
element.style.height = height + 'px';;
element.style.top = top + 'px';
element.style.left = left + 'px';
element.style.width = width + 'px';
element.style.height = height + 'px';
},
relativize: function(element) {