0
-/* Prototype JavaScript framework, version 1.6.0.
10
+/* Prototype JavaScript framework, version 1.6.0.
20
* (c) 2005-2007 Sam Stephenson
0
* Prototype is freely distributable under the terms of an MIT-style license.
0
*--------------------------------------------------------------------------*/
0
IE: !!(window.attachEvent && !window.opera),
0
@@ -110,7 +110,7 @@ Object.extend(Object, {
0
if (Object.isUndefined(object)) return 'undefined';
0
if (object === null) return 'null';
0
- return object.inspect ? object.inspect() :
object.toString();
0
+ return object.inspect ? object.inspect() :
String(object);
0
if (e instanceof RangeError) return '...';
0
@@ -171,7 +171,8 @@ Object.extend(Object, {
0
isArray: function(object) {
0
- return object && object.constructor === Array;
0
+ return object != null && typeof object == "object" &&
0
+ 'splice' in object && 'join' in object;
0
isHash: function(object) {
0
@@ -578,7 +579,7 @@ var Template = Class.create({
0
return before + String.interpret(ctx);
0
Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
0
@@ -812,14 +813,14 @@ function $A(iterable) {
0
if (Prototype.Browser.WebKit) {
0
-
function $A(iterable) {
0
+
$A = function(iterable) {
0
if (!iterable) return [];
0
if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') &&
0
iterable.toArray) return iterable.toArray();
0
var length = iterable.length || 0, results = new Array(length);
0
while (length--) results[length] = iterable[length];
0
@@ -1298,7 +1299,7 @@ Ajax.Request = Class.create(Ajax.Base, {
0
var contentType = response.getHeader('Content-type');
0
if (this.options.evalJS == 'force'
0
- || (this.options.evalJS &&
contentType
0
+ || (this.options.evalJS &&
this.isSameOrigin() && contentType
0
&& contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
0
@@ -1316,6 +1317,15 @@ Ajax.Request = Class.create(Ajax.Base, {
0
+ isSameOrigin: function() {
0
+ var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
0
+ return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
0
+ protocol: location.protocol,
0
+ domain: document.domain,
0
+ port: location.port ? ':' + location.port : ''
0
getHeader: function(name) {
0
return this.transport.getResponseHeader(name) || null;
0
@@ -1391,7 +1401,8 @@ Ajax.Response = Class.create({
0
if (!json) return null;
0
json = decodeURIComponent(escape(json));
0
- return json.evalJSON(this.request.options.sanitizeJSON);
0
+ return json.evalJSON(this.request.options.sanitizeJSON ||
0
+ !this.request.isSameOrigin());
0
this.request.dispatchException(e);
0
@@ -1404,7 +1415,8 @@ Ajax.Response = Class.create({
0
this.responseText.blank())
0
- return this.responseText.evalJSON(options.sanitizeJSON);
0
+ return this.responseText.evalJSON(options.sanitizeJSON ||
0
+ !this.request.isSameOrigin());
0
this.request.dispatchException(e);
0
@@ -1610,7 +1622,7 @@ Element.Methods = {
0
var content, insert, tagName, childNodes;
0
- for (
position in insertions) {
0
+ for (
var position in insertions) {
0
content = insertions[position];
0
position = position.toLowerCase();
0
insert = Element._insertionTranslations[position];
0
@@ -1674,7 +1686,7 @@ Element.Methods = {
0
descendants: function(element) {
0
- return $(element).
getElementsBySelector("*");
0
+ return $(element).
select("*");
0
firstDescendant: function(element) {
0
@@ -1863,7 +1875,8 @@ Element.Methods = {
0
do { ancestor = ancestor.parentNode; }
0
while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode);
0
- if (nextAncestor) return (e > a && e < nextAncestor.sourceIndex);
0
+ if (nextAncestor && nextAncestor.sourceIndex)
0
+ return (e > a && e < nextAncestor.sourceIndex);
0
while (element = element.parentNode)
0
@@ -2007,7 +2020,7 @@ Element.Methods = {
0
if (element.tagName == 'BODY') break;
0
var p = Element.getStyle(element, 'position');
0
- if (p
== 'relative' || p == 'absolute') break;
0
+ if (p
!== 'static') break;
0
return Element._returnOffset(valueL, valueT);
0
@@ -2200,12 +2213,31 @@ if (Prototype.Browser.Opera) {
0
else if (Prototype.Browser.IE) {
0
- $w('positionedOffset getOffsetParent viewportOffset').each(function(method) {
0
+ // IE doesn't report offsets correctly for static elements, so we change them
0
+ // to "relative" to get the values, then change them back.
0
+ Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
0
+ function(proceed, element) {
0
+ var position = element.getStyle('position');
0
+ if (position !== 'static') return proceed(element);
0
+ element.setStyle({ position: 'relative' });
0
+ var value = proceed(element);
0
+ element.setStyle({ position: position });
0
+ $w('positionedOffset viewportOffset').each(function(method) {
0
Element.Methods[method] = Element.Methods[method].wrap(
0
function(proceed, element) {
0
var position = element.getStyle('position');
0
- if (position != 'static') return proceed(element);
0
+ if (position !== 'static') return proceed(element);
0
+ // Trigger hasLayout on the offset parent so that IE6 reports
0
+ // accurate offsetTop and offsetLeft values for position: fixed.
0
+ var offsetParent = element.getOffsetParent();
0
+ if (offsetParent && offsetParent.getStyle('position') === 'fixed')
0
+ offsetParent.setStyle({ zoom: 1 });
0
element.setStyle({ position: 'relative' });
0
var value = proceed(element);
0
element.setStyle({ position: position });
0
@@ -2287,7 +2319,10 @@ else if (Prototype.Browser.IE) {
0
Element._attributeTranslations.write = {
0
- names: Object.clone(Element._attributeTranslations.read.names),
0
+ names: Object.extend({
0
+ cellpadding: 'cellPadding',
0
+ cellspacing: 'cellSpacing'
0
+ }, Element._attributeTranslations.read.names),
0
checked: function(element, value) {
0
element.checked = !!value;
0
@@ -2407,7 +2442,7 @@ if (Prototype.Browser.IE || Prototype.Browser.Opera) {
0
-if (
document.createElement('div').outerHTML) {
0
+if (
'outerHTML' in document.createElement('div')) {
0
Element.Methods.replace = function(element, content) {
0
@@ -2901,13 +2936,13 @@ Object.extend(Selector, {
0
- tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
0
- className: 'n = h.className(n, r, "#{1}", c); c = false;',
0
- id: 'n = h.id(n, r, "#{1}", c); c = false;',
0
- attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
0
+ tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
0
+ className: 'n = h.className(n, r, "#{1}", c); c = false;',
0
+ id: 'n = h.id(n, r, "#{1}", c); c = false;',
0
+ attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
0
- return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"
); c = false;').evaluate(m);
0
+ return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"
, c); c = false;').evaluate(m);
0
if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
0
@@ -2957,7 +2992,7 @@ Object.extend(Selector, {
0
attr: function(element, matches) {
0
var nodeValue = Element.readAttribute(element, matches[1]);
0
- return
Selector.operators[matches[2]](nodeValue, matches[3]);
0
+ return
nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
0
@@ -2972,14 +3007,15 @@ Object.extend(Selector, {
0
// marks an array of nodes for counting
0
mark: function(nodes) {
0
+ var _true = Prototype.emptyFunction;
0
for (var i = 0, node; node = nodes[i]; i++)
0
+ node._counted
ByPrototype = _true;
0
unmark: function(nodes) {
0
for (var i = 0, node; node = nodes[i]; i++)
0
- node._counted
= undefined;
0
+ node._counted
ByPrototype = undefined;
0
@@ -2987,15 +3023,15 @@ Object.extend(Selector, {
0
// "ofType" flag indicates whether we're indexing for nth-of-type
0
// rather than nth-child
0
index: function(parentNode, reverse, ofType) {
0
- parentNode._counted
= true;
0
+ parentNode._counted
ByPrototype = Prototype.emptyFunction;
0
for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
0
- if (node.nodeType == 1 && (!ofType || node._counted
)) node.nodeIndex = j++;
0
+ if (node.nodeType == 1 && (!ofType || node._counted
ByPrototype)) node.nodeIndex = j++;
0
for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
0
- if (node.nodeType == 1 && (!ofType || node._counted
)) node.nodeIndex = j++;
0
+ if (node.nodeType == 1 && (!ofType || node._counted
ByPrototype)) node.nodeIndex = j++;
0
@@ -3004,8 +3040,8 @@ Object.extend(Selector, {
0
if (nodes.length == 0) return nodes;
0
for (var i = 0, l = nodes.length; i < l; i++)
0
- if (!(n = nodes[i])._counted) {
0
+ if (!(n = nodes[i])._countedByPrototype) {
0
+ n._countedByPrototype = Prototype.emptyFunction;
0
results.push(Element.extend(n));
0
return Selector.handlers.unmark(results);
0
@@ -3117,16 +3153,18 @@ Object.extend(Selector, {
0
- attrPresence: function(nodes, root, attr
) {
0
+ attrPresence: function(nodes, root, attr
, combinator) {
0
if (!nodes) nodes = root.getElementsByTagName("*");
0
+ if (nodes && combinator) nodes = this[combinator](nodes);
0
for (var i = 0, node; node = nodes[i]; i++)
0
if (Element.hasAttribute(node, attr)) results.push(node);
0
- attr: function(nodes, root, attr, value, operator
) {
0
+ attr: function(nodes, root, attr, value, operator
, combinator) {
0
if (!nodes) nodes = root.getElementsByTagName("*");
0
+ if (nodes && combinator) nodes = this[combinator](nodes);
0
var handler = Selector.operators[operator], results = [];
0
for (var i = 0, node; node = nodes[i]; i++) {
0
var nodeValue = Element.readAttribute(node, attr);
0
@@ -3205,7 +3243,7 @@ Object.extend(Selector, {
0
var h = Selector.handlers, results = [], indexed = [], m;
0
for (var i = 0, node; node = nodes[i]; i++) {
0
- if (!node.parentNode._counted
) {
0
+ if (!node.parentNode._counted
ByPrototype) {
0
h.index(node.parentNode, reverse, ofType);
0
indexed.push(node.parentNode);
0
@@ -3243,7 +3281,7 @@ Object.extend(Selector, {
0
var exclusions = new Selector(selector).findElements(root);
0
for (var i = 0, results = [], node; node = nodes[i]; i++)
0
- if (!node._counted
) results.push(node);
0
+ if (!node._counted
ByPrototype) results.push(node);
0
@@ -3277,11 +3315,19 @@ Object.extend(Selector, {
0
'|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
0
+ split: function(expression) {
0
+ expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
0
+ expressions.push(m[1].strip());
0
matchElements: function(elements, expression) {
0
- var matches =
new Selector(expression).findElements(), h = Selector.handlers;
0
+ var matches =
$$(expression), h = Selector.handlers;
0
for (var i = 0, results = [], element; element = elements[i]; i++)
0
- if (element._counted
) results.push(element);
0
+ if (element._counted
ByPrototype) results.push(element);
0
@@ -3294,11 +3340,7 @@ Object.extend(Selector, {
0
findChildElements: function(element, expressions) {
0
- var exprs = expressions.join(',');
0
- exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
0
- expressions.push(m[1].strip());
0
+ expressions = Selector.split(expressions.join(','));
0
var results = [], h = Selector.handlers;
0
for (var i = 0, l = expressions.length, selector; i < l; i++) {
0
selector = new Selector(expressions[i].strip());
0
@@ -3309,13 +3351,22 @@ Object.extend(Selector, {
0
if (Prototype.Browser.IE) {
0
- // IE returns comment nodes on getElementsByTagName("*").
0
- Selector.handlers.concat = function(a, b) {
0
- for (var i = 0, node; node = b[i]; i++)
0
- if (node.tagName !== "!") a.push(node);
0
+ Object.extend(Selector.handlers, {
0
+ // IE returns comment nodes on getElementsByTagName("*").
0
+ concat: function(a, b) {
0
+ for (var i = 0, node; node = b[i]; i++)
0
+ if (node.tagName !== "!") a.push(node);
0
+ // IE improperly serializes _countedByPrototype in (inner|outer)HTML.
0
+ unmark: function(nodes) {
0
+ for (var i = 0, node; node = nodes[i]; i++)
0
+ node.removeAttribute('_countedByPrototype');
0
@@ -3793,9 +3844,9 @@ Object.extend(Event, (function() {
0
var cache = Event.cache;
0
function getEventID(element) {
0
- if (element._
eventID) return element._eventID;
0
+ if (element._
prototypeEventID) return element._prototypeEventID[0];
0
arguments.callee.id = arguments.callee.id || 1;
0
- return element._
eventID = ++arguments.callee.id;
0
+ return element._
prototypeEventID = [++arguments.callee.id];
0
function getDOMEventName(eventName) {
Comments
No one has commented yet.