Update prototype.js to fix IE 10 issues

Updated to commit @8c9ead49ec of
https://github.com/sstephenson/prototype/
This commit is contained in:
Francis Lachapelle
2014-01-20 15:43:33 -05:00
parent a3e1d4813a
commit 3090448fcb

View File

@@ -399,7 +399,7 @@ Object.extend(Function.prototype, (function() {
var __method = this, args = slice.call(arguments, 1);
var bound = function() {
var a = merge(args, arguments), c = context;
var a = merge(args, arguments);
var c = this instanceof bound ? this : context;
return __method.apply(c, a);
};
@@ -577,7 +577,8 @@ Object.extend(String.prototype, (function() {
}
while (source.length > 0) {
if (match = source.match(pattern)) {
match = source.match(pattern)
if (match && match[0].length > 0) {
result += source.slice(0, match.index);
result += String.interpret(replacement(match));
source = source.slice(match.index + match[0].length);
@@ -652,7 +653,10 @@ Object.extend(String.prototype, (function() {
var key = decodeURIComponent(pair.shift()),
value = pair.length > 1 ? pair.join('=') : pair[0];
if (value != undefined) value = decodeURIComponent(value);
if (value != undefined) {
value = value.gsub('+', ' ');
value = decodeURIComponent(value);
}
if (key in hash) {
if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
@@ -746,12 +750,17 @@ Object.extend(String.prototype, (function() {
return this.indexOf(pattern) > -1;
}
function startsWith(pattern) {
return this.lastIndexOf(pattern, 0) === 0;
function startsWith(pattern, position) {
position = Object.isNumber(position) ? position : 0;
return this.lastIndexOf(pattern, position) === position;
}
function endsWith(pattern) {
var d = this.length - pattern.length;
function endsWith(pattern, position) {
pattern = String(pattern);
position = Object.isNumber(position) ? position : this.length;
if (position < 0) position = 0;
if (position > this.length) position = this.length;
var d = position - pattern.length;
return d >= 0 && this.indexOf(pattern, d) === d;
}
@@ -793,8 +802,8 @@ Object.extend(String.prototype, (function() {
isJSON: isJSON,
evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON,
include: include,
startsWith: startsWith,
endsWith: endsWith,
startsWith: String.prototype.startsWith || startsWith,
endsWith: String.prototype.endsWith || endsWith,
empty: empty,
blank: blank,
interpolate: interpolate
@@ -921,8 +930,8 @@ var Enumerable = (function() {
}
function include(object) {
if (Object.isFunction(this.indexOf))
if (this.indexOf(object) != -1) return true;
if (Object.isFunction(this.indexOf) && this.indexOf(object) != -1)
return true;
var found = false;
this.each(function(value) {
@@ -1406,11 +1415,13 @@ var Hash = Class.create(Enumerable, (function() {
function _each(iterator, context) {
var i = 0;
for (var key in this._object) {
var value = this._object[key], pair = [key, value];
pair.key = key;
pair.value = value;
iterator.call(context, pair);
iterator.call(context, pair, i);
i++;
}
}
@@ -1464,7 +1475,7 @@ var Hash = Class.create(Enumerable, (function() {
function toQueryPair(key, value) {
if (Object.isUndefined(value)) return key;
var value = String.interpret(value);
value = String.interpret(value);
value = value.gsub(/(\r)?\n/, '\r\n');
value = encodeURIComponent(value);
@@ -1580,9 +1591,9 @@ var ObjectRange = Class.create(Enumerable, (function() {
}
function _each(iterator, context) {
var value = this.start;
while (this.include(value)) {
iterator.call(context, value);
var value = this.start, i;
for (i = 0; this.include(value); i++) {
iterator.call(context, value, i);
value = value.succ();
}
}
@@ -1777,7 +1788,8 @@ Ajax.Request = Class.create(Ajax.Base, {
}
for (var name in headers)
this.transport.setRequestHeader(name, headers[name]);
if (headers[name] != null)
this.transport.setRequestHeader(name, headers[name]);
},
success: function() {
@@ -2628,6 +2640,7 @@ Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
}
function down(element, expression, index) {
if (arguments.length === 1) return firstDescendant(element);
element = $(element), expression = expression || 0, index = index || 0;
if (Object.isNumber(expression))
@@ -2755,9 +2768,9 @@ Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
}
var PROBLEMATIC_ATTRIBUTE_READING = (function() {
DIV.setAttribute('onclick', Prototype.emptyFunction);
DIV.setAttribute('onclick', []);
var value = DIV.getAttribute('onclick');
var isFunction = (typeof value === 'function');
var isFunction = Object.isArray(value);
DIV.removeAttribute('onclick');
return isFunction;
})();
@@ -2783,7 +2796,7 @@ Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
name = table.names[attr] || attr;
value = attributes[attr];
if (table.values[attr])
name = table.values[attr](element, value);
name = table.values[attr](element, value) || name;
if (value === false || value === null)
element.removeAttribute(name);
else if (value === true)
@@ -3104,7 +3117,7 @@ Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
}
function hasLayout_IE(element) {
if (!element.currentStyle.hasLayout)
if (!element.currentStyle || !element.currentStyle.hasLayout)
element.style.zoom = 1;
return element;
}
@@ -3432,6 +3445,14 @@ Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
Element.addMethods(methods);
function destroyCache_IE() {
DIV = null;
ELEMENT_CACHE = null;
}
if (window.attachEvent)
window.attachEvent('onunload', destroyCache_IE);
})(this);
(function() {
@@ -4066,7 +4087,8 @@ Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
function viewportOffset(forElement) {
var valueT = 0, valueL = 0, docBody = document.body;
var element = $(forElement);
forElement = $(forElement);
var element = forElement;
do {
valueT += element.offsetTop || 0;
valueL += element.offsetLeft || 0;
@@ -4099,10 +4121,11 @@ Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
var layout = element.getLayout();
element.store('prototype_absolutize_original_styles', {
left: element.getStyle('left'),
top: element.getStyle('top'),
width: element.getStyle('width'),
height: element.getStyle('height')
position: element.getStyle('position'),
left: element.getStyle('left'),
top: element.getStyle('top'),
width: element.getStyle('width'),
height: element.getStyle('height')
});
element.setStyle({
@@ -5799,18 +5822,23 @@ var Form = {
accumulator = function(result, key, value) {
if (key in result) {
if (!Object.isArray(result[key])) result[key] = [result[key]];
result[key].push(value);
result[key] = result[key].concat(value);
} else result[key] = value;
return result;
};
} else {
initial = '';
accumulator = function(result, key, value) {
value = value.gsub(/(\r)?\n/, '\r\n');
value = encodeURIComponent(value);
value = value.gsub(/%20/, '+');
return result + (result ? '&' : '') + encodeURIComponent(key) + '=' + value;
}
accumulator = function(result, key, values) {
if (!Object.isArray(values)) {values = [values];}
if (!values.length) {return result;}
var encodedKey = encodeURIComponent(key).gsub(/%20/, '+');
return result + (result ? "&" : "") + values.map(function (value) {
value = value.gsub(/(\r)?\n/, '\r\n');
value = encodeURIComponent(value);
value = value.gsub(/%20/, '+');
return encodedKey + "=" + value;
}).join("&");
};
}
return elements.inject(initial, function(result, element) {
@@ -6244,17 +6272,14 @@ Form.EventObserver = Class.create(Abstract.EventObserver, {
node = currentTarget;
}
if (node.nodeType == Node.TEXT_NODE)
node = node.parentNode;
return Element.extend(node);
return node.nodeType == Node.TEXT_NODE ? node.parentNode : node;
}
function findElement(event, expression) {
var element = _element(event), match = Prototype.Selector.match;
var element = _element(event), selector = Prototype.Selector;
if (!expression) return Element.extend(element);
while (element) {
if (Object.isElement(element) && match(element, expression))
if (Object.isElement(element) && selector.match(element, expression))
return Element.extend(element);
element = element.parentNode;
}
@@ -6535,8 +6560,8 @@ Form.EventObserver = Class.create(Abstract.EventObserver, {
function stopObservingElement(element) {
var uid = getUniqueElementID(element),
registry = getRegistryForElement(element, uid);
var uid = getUniqueElementID(element), registry = GLOBAL.Event.cache[uid];
if (!registry) return;
destroyRegistryForElement(element, uid);
@@ -6716,9 +6741,9 @@ Form.EventObserver = Class.create(Abstract.EventObserver, {
return createMouseEnterLeaveResponder(uid, eventName, handler);
return function(event) {
var cacheEntry = Event.cache[uid];
var element = cacheEntry.element;
if (!Event.cache) return;
var element = Event.cache[uid].element;
Event.extend(event, element);
handler.call(element, event);
};
@@ -6726,7 +6751,7 @@ Form.EventObserver = Class.create(Abstract.EventObserver, {
function createResponderForCustomEvent(uid, eventName, handler) {
return function(event) {
var cacheEntry = Event.cache[uid], element = cacheEntry.element;
var element = Event.cache[uid].element;
if (Object.isUndefined(event.eventName))
return false;
@@ -6741,7 +6766,7 @@ Form.EventObserver = Class.create(Abstract.EventObserver, {
function createMouseEnterLeaveResponder(uid, eventName, handler) {
return function(event) {
var cacheEntry = Event.cache[uid], element = cacheEntry.element;
var element = Event.cache[uid].element;
Event.extend(event, element);
var parent = event.relatedTarget;
@@ -6791,6 +6816,12 @@ Form.EventObserver = Class.create(Abstract.EventObserver, {
fireContentLoadedEvent();
}
if (document.readyState === 'complete') {
fireContentLoadedEvent();
return;
}
if (document.addEventListener) {
document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
} else {