Commit 0f63ee794a315a3ad48349c5bf3ab2cbc0c24a12

Authored by Antonio Terceiro
1 parent 37a3c256

ActionItem1178: upgrading rails files

with `rake rails:update`
1 vendor/rails/ 1 vendor/rails/
  2 +doc/api
  3 +doc/plugins
  4 +tmp
config/boot.rb
@@ -24,9 +24,8 @@ module Rails @@ -24,9 +24,8 @@ module Rails
24 File.exist?("#{RAILS_ROOT}/vendor/rails") 24 File.exist?("#{RAILS_ROOT}/vendor/rails")
25 end 25 end
26 26
27 - # FIXME : Ruby 1.9  
28 def preinitialize 27 def preinitialize
29 - load(preinitializer_path) if File.exists?(preinitializer_path) 28 + load(preinitializer_path) if File.exist?(preinitializer_path)
30 end 29 end
31 30
32 def preinitializer_path 31 def preinitializer_path
@@ -44,6 +43,7 @@ module Rails @@ -44,6 +43,7 @@ module Rails
44 class VendorBoot < Boot 43 class VendorBoot < Boot
45 def load_initializer 44 def load_initializer
46 require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer" 45 require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
  46 + Rails::Initializer.run(:install_gem_spec_stubs)
47 end 47 end
48 end 48 end
49 49
public/javascripts/controls.js
1 -// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) 1 +// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
2 // (c) 2005-2007 Ivan Krstic (http://blogs.law.harvard.edu/ivan) 2 // (c) 2005-2007 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
3 // (c) 2005-2007 Jon Tirsen (http://www.tirsen.com) 3 // (c) 2005-2007 Jon Tirsen (http://www.tirsen.com)
4 // Contributors: 4 // Contributors:
public/javascripts/dragdrop.js
1 -// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) 1 +// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
2 // (c) 2005-2007 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz) 2 // (c) 2005-2007 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
3 // 3 //
4 // script.aculo.us is freely distributable under the terms of an MIT-style license. 4 // script.aculo.us is freely distributable under the terms of an MIT-style license.
public/javascripts/effects.js
1 -// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) 1 +// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
2 // Contributors: 2 // Contributors:
3 // Justin Palmer (http://encytemedia.com/) 3 // Justin Palmer (http://encytemedia.com/)
4 // Mark Pilgrim (http://diveintomark.org/) 4 // Mark Pilgrim (http://diveintomark.org/)
public/javascripts/prototype.js
1 -/* Prototype JavaScript framework, version 1.6.0.1  
2 - * (c) 2005-2007 Sam Stephenson 1 +/* Prototype JavaScript framework, version 1.6.0.2
  2 + * (c) 2005-2008 Sam Stephenson
3 * 3 *
4 * Prototype is freely distributable under the terms of an MIT-style license. 4 * Prototype is freely distributable under the terms of an MIT-style license.
5 * For details, see the Prototype web site: http://www.prototypejs.org/ 5 * For details, see the Prototype web site: http://www.prototypejs.org/
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 *--------------------------------------------------------------------------*/ 7 *--------------------------------------------------------------------------*/
8 8
9 var Prototype = { 9 var Prototype = {
10 - Version: '1.6.0.1', 10 + Version: '1.6.0.2',
11 11
12 Browser: { 12 Browser: {
13 IE: !!(window.attachEvent && !window.opera), 13 IE: !!(window.attachEvent && !window.opera),
@@ -110,7 +110,7 @@ Object.extend(Object, { @@ -110,7 +110,7 @@ Object.extend(Object, {
110 try { 110 try {
111 if (Object.isUndefined(object)) return 'undefined'; 111 if (Object.isUndefined(object)) return 'undefined';
112 if (object === null) return 'null'; 112 if (object === null) return 'null';
113 - return object.inspect ? object.inspect() : object.toString(); 113 + return object.inspect ? object.inspect() : String(object);
114 } catch (e) { 114 } catch (e) {
115 if (e instanceof RangeError) return '...'; 115 if (e instanceof RangeError) return '...';
116 throw e; 116 throw e;
@@ -171,7 +171,8 @@ Object.extend(Object, { @@ -171,7 +171,8 @@ Object.extend(Object, {
171 }, 171 },
172 172
173 isArray: function(object) { 173 isArray: function(object) {
174 - return object && object.constructor === Array; 174 + return object != null && typeof object == "object" &&
  175 + 'splice' in object && 'join' in object;
175 }, 176 },
176 177
177 isHash: function(object) { 178 isHash: function(object) {
@@ -578,7 +579,7 @@ var Template = Class.create({ @@ -578,7 +579,7 @@ var Template = Class.create({
578 } 579 }
579 580
580 return before + String.interpret(ctx); 581 return before + String.interpret(ctx);
581 - }.bind(this)); 582 + });
582 } 583 }
583 }); 584 });
584 Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; 585 Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
@@ -806,20 +807,20 @@ Object.extend(Enumerable, { @@ -806,20 +807,20 @@ Object.extend(Enumerable, {
806 function $A(iterable) { 807 function $A(iterable) {
807 if (!iterable) return []; 808 if (!iterable) return [];
808 if (iterable.toArray) return iterable.toArray(); 809 if (iterable.toArray) return iterable.toArray();
809 - var length = iterable.length, results = new Array(length); 810 + var length = iterable.length || 0, results = new Array(length);
810 while (length--) results[length] = iterable[length]; 811 while (length--) results[length] = iterable[length];
811 return results; 812 return results;
812 } 813 }
813 814
814 if (Prototype.Browser.WebKit) { 815 if (Prototype.Browser.WebKit) {
815 - function $A(iterable) { 816 + $A = function(iterable) {
816 if (!iterable) return []; 817 if (!iterable) return [];
817 if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') && 818 if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') &&
818 iterable.toArray) return iterable.toArray(); 819 iterable.toArray) return iterable.toArray();
819 - var length = iterable.length, results = new Array(length); 820 + var length = iterable.length || 0, results = new Array(length);
820 while (length--) results[length] = iterable[length]; 821 while (length--) results[length] = iterable[length];
821 return results; 822 return results;
822 - } 823 + };
823 } 824 }
824 825
825 Array.from = $A; 826 Array.from = $A;
@@ -1298,7 +1299,7 @@ Ajax.Request = Class.create(Ajax.Base, { @@ -1298,7 +1299,7 @@ Ajax.Request = Class.create(Ajax.Base, {
1298 1299
1299 var contentType = response.getHeader('Content-type'); 1300 var contentType = response.getHeader('Content-type');
1300 if (this.options.evalJS == 'force' 1301 if (this.options.evalJS == 'force'
1301 - || (this.options.evalJS && contentType 1302 + || (this.options.evalJS && this.isSameOrigin() && contentType
1302 && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) 1303 && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
1303 this.evalResponse(); 1304 this.evalResponse();
1304 } 1305 }
@@ -1316,9 +1317,18 @@ Ajax.Request = Class.create(Ajax.Base, { @@ -1316,9 +1317,18 @@ Ajax.Request = Class.create(Ajax.Base, {
1316 } 1317 }
1317 }, 1318 },
1318 1319
  1320 + isSameOrigin: function() {
  1321 + var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
  1322 + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
  1323 + protocol: location.protocol,
  1324 + domain: document.domain,
  1325 + port: location.port ? ':' + location.port : ''
  1326 + }));
  1327 + },
  1328 +
1319 getHeader: function(name) { 1329 getHeader: function(name) {
1320 try { 1330 try {
1321 - return this.transport.getResponseHeader(name); 1331 + return this.transport.getResponseHeader(name) || null;
1322 } catch (e) { return null } 1332 } catch (e) { return null }
1323 }, 1333 },
1324 1334
@@ -1391,7 +1401,8 @@ Ajax.Response = Class.create({ @@ -1391,7 +1401,8 @@ Ajax.Response = Class.create({
1391 if (!json) return null; 1401 if (!json) return null;
1392 json = decodeURIComponent(escape(json)); 1402 json = decodeURIComponent(escape(json));
1393 try { 1403 try {
1394 - return json.evalJSON(this.request.options.sanitizeJSON); 1404 + return json.evalJSON(this.request.options.sanitizeJSON ||
  1405 + !this.request.isSameOrigin());
1395 } catch (e) { 1406 } catch (e) {
1396 this.request.dispatchException(e); 1407 this.request.dispatchException(e);
1397 } 1408 }
@@ -1404,7 +1415,8 @@ Ajax.Response = Class.create({ @@ -1404,7 +1415,8 @@ Ajax.Response = Class.create({
1404 this.responseText.blank()) 1415 this.responseText.blank())
1405 return null; 1416 return null;
1406 try { 1417 try {
1407 - return this.responseText.evalJSON(options.sanitizeJSON); 1418 + return this.responseText.evalJSON(options.sanitizeJSON ||
  1419 + !this.request.isSameOrigin());
1408 } catch (e) { 1420 } catch (e) {
1409 this.request.dispatchException(e); 1421 this.request.dispatchException(e);
1410 } 1422 }
@@ -1608,24 +1620,28 @@ Element.Methods = { @@ -1608,24 +1620,28 @@ Element.Methods = {
1608 Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML))) 1620 Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
1609 insertions = {bottom:insertions}; 1621 insertions = {bottom:insertions};
1610 1622
1611 - var content, t, range; 1623 + var content, insert, tagName, childNodes;
1612 1624
1613 - for (position in insertions) { 1625 + for (var position in insertions) {
1614 content = insertions[position]; 1626 content = insertions[position];
1615 position = position.toLowerCase(); 1627 position = position.toLowerCase();
1616 - t = Element._insertionTranslations[position]; 1628 + insert = Element._insertionTranslations[position];
1617 1629
1618 if (content && content.toElement) content = content.toElement(); 1630 if (content && content.toElement) content = content.toElement();
1619 if (Object.isElement(content)) { 1631 if (Object.isElement(content)) {
1620 - t.insert(element, content); 1632 + insert(element, content);
1621 continue; 1633 continue;
1622 } 1634 }
1623 1635
1624 content = Object.toHTML(content); 1636 content = Object.toHTML(content);
1625 1637
1626 - range = element.ownerDocument.createRange();  
1627 - t.initializeRange(element, range);  
1628 - t.insert(element, range.createContextualFragment(content.stripScripts())); 1638 + tagName = ((position == 'before' || position == 'after')
  1639 + ? element.parentNode : element).tagName.toUpperCase();
  1640 +
  1641 + childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
  1642 +
  1643 + if (position == 'top' || position == 'after') childNodes.reverse();
  1644 + childNodes.each(insert.curry(element));
1629 1645
1630 content.evalScripts.bind(content).defer(); 1646 content.evalScripts.bind(content).defer();
1631 } 1647 }
@@ -1670,7 +1686,7 @@ Element.Methods = { @@ -1670,7 +1686,7 @@ Element.Methods = {
1670 }, 1686 },
1671 1687
1672 descendants: function(element) { 1688 descendants: function(element) {
1673 - return $(element).getElementsBySelector("*"); 1689 + return $(element).select("*");
1674 }, 1690 },
1675 1691
1676 firstDescendant: function(element) { 1692 firstDescendant: function(element) {
@@ -1709,32 +1725,31 @@ Element.Methods = { @@ -1709,32 +1725,31 @@ Element.Methods = {
1709 element = $(element); 1725 element = $(element);
1710 if (arguments.length == 1) return $(element.parentNode); 1726 if (arguments.length == 1) return $(element.parentNode);
1711 var ancestors = element.ancestors(); 1727 var ancestors = element.ancestors();
1712 - return expression ? Selector.findElement(ancestors, expression, index) :  
1713 - ancestors[index || 0]; 1728 + return Object.isNumber(expression) ? ancestors[expression] :
  1729 + Selector.findElement(ancestors, expression, index);
1714 }, 1730 },
1715 1731
1716 down: function(element, expression, index) { 1732 down: function(element, expression, index) {
1717 element = $(element); 1733 element = $(element);
1718 if (arguments.length == 1) return element.firstDescendant(); 1734 if (arguments.length == 1) return element.firstDescendant();
1719 - var descendants = element.descendants();  
1720 - return expression ? Selector.findElement(descendants, expression, index) :  
1721 - descendants[index || 0]; 1735 + return Object.isNumber(expression) ? element.descendants()[expression] :
  1736 + element.select(expression)[index || 0];
1722 }, 1737 },
1723 1738
1724 previous: function(element, expression, index) { 1739 previous: function(element, expression, index) {
1725 element = $(element); 1740 element = $(element);
1726 if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element)); 1741 if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
1727 var previousSiblings = element.previousSiblings(); 1742 var previousSiblings = element.previousSiblings();
1728 - return expression ? Selector.findElement(previousSiblings, expression, index) :  
1729 - previousSiblings[index || 0]; 1743 + return Object.isNumber(expression) ? previousSiblings[expression] :
  1744 + Selector.findElement(previousSiblings, expression, index);
1730 }, 1745 },
1731 1746
1732 next: function(element, expression, index) { 1747 next: function(element, expression, index) {
1733 element = $(element); 1748 element = $(element);
1734 if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element)); 1749 if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
1735 var nextSiblings = element.nextSiblings(); 1750 var nextSiblings = element.nextSiblings();
1736 - return expression ? Selector.findElement(nextSiblings, expression, index) :  
1737 - nextSiblings[index || 0]; 1751 + return Object.isNumber(expression) ? nextSiblings[expression] :
  1752 + Selector.findElement(nextSiblings, expression, index);
1738 }, 1753 },
1739 1754
1740 select: function() { 1755 select: function() {
@@ -1860,7 +1875,8 @@ Element.Methods = { @@ -1860,7 +1875,8 @@ Element.Methods = {
1860 do { ancestor = ancestor.parentNode; } 1875 do { ancestor = ancestor.parentNode; }
1861 while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode); 1876 while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode);
1862 } 1877 }
1863 - if (nextAncestor) return (e > a && e < nextAncestor.sourceIndex); 1878 + if (nextAncestor && nextAncestor.sourceIndex)
  1879 + return (e > a && e < nextAncestor.sourceIndex);
1864 } 1880 }
1865 1881
1866 while (element = element.parentNode) 1882 while (element = element.parentNode)
@@ -2004,7 +2020,7 @@ Element.Methods = { @@ -2004,7 +2020,7 @@ Element.Methods = {
2004 if (element) { 2020 if (element) {
2005 if (element.tagName == 'BODY') break; 2021 if (element.tagName == 'BODY') break;
2006 var p = Element.getStyle(element, 'position'); 2022 var p = Element.getStyle(element, 'position');
2007 - if (p == 'relative' || p == 'absolute') break; 2023 + if (p !== 'static') break;
2008 } 2024 }
2009 } while (element); 2025 } while (element);
2010 return Element._returnOffset(valueL, valueT); 2026 return Element._returnOffset(valueL, valueT);
@@ -2153,46 +2169,6 @@ Element._attributeTranslations = { @@ -2153,46 +2169,6 @@ Element._attributeTranslations = {
2153 } 2169 }
2154 }; 2170 };
2155 2171
2156 -  
2157 -if (!document.createRange || Prototype.Browser.Opera) {  
2158 - Element.Methods.insert = function(element, insertions) {  
2159 - element = $(element);  
2160 -  
2161 - if (Object.isString(insertions) || Object.isNumber(insertions) ||  
2162 - Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))  
2163 - insertions = { bottom: insertions };  
2164 -  
2165 - var t = Element._insertionTranslations, content, position, pos, tagName;  
2166 -  
2167 - for (position in insertions) {  
2168 - content = insertions[position];  
2169 - position = position.toLowerCase();  
2170 - pos = t[position];  
2171 -  
2172 - if (content && content.toElement) content = content.toElement();  
2173 - if (Object.isElement(content)) {  
2174 - pos.insert(element, content);  
2175 - continue;  
2176 - }  
2177 -  
2178 - content = Object.toHTML(content);  
2179 - tagName = ((position == 'before' || position == 'after')  
2180 - ? element.parentNode : element).tagName.toUpperCase();  
2181 -  
2182 - if (t.tags[tagName]) {  
2183 - var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());  
2184 - if (position == 'top' || position == 'after') fragments.reverse();  
2185 - fragments.each(pos.insert.curry(element));  
2186 - }  
2187 - else element.insertAdjacentHTML(pos.adjacency, content.stripScripts());  
2188 -  
2189 - content.evalScripts.bind(content).defer();  
2190 - }  
2191 -  
2192 - return element;  
2193 - };  
2194 -}  
2195 -  
2196 if (Prototype.Browser.Opera) { 2172 if (Prototype.Browser.Opera) {
2197 Element.Methods.getStyle = Element.Methods.getStyle.wrap( 2173 Element.Methods.getStyle = Element.Methods.getStyle.wrap(
2198 function(proceed, element, style) { 2174 function(proceed, element, style) {
@@ -2237,12 +2213,31 @@ if (Prototype.Browser.Opera) { @@ -2237,12 +2213,31 @@ if (Prototype.Browser.Opera) {
2237 } 2213 }
2238 2214
2239 else if (Prototype.Browser.IE) { 2215 else if (Prototype.Browser.IE) {
2240 - $w('positionedOffset getOffsetParent viewportOffset').each(function(method) { 2216 + // IE doesn't report offsets correctly for static elements, so we change them
  2217 + // to "relative" to get the values, then change them back.
  2218 + Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
  2219 + function(proceed, element) {
  2220 + element = $(element);
  2221 + var position = element.getStyle('position');
  2222 + if (position !== 'static') return proceed(element);
  2223 + element.setStyle({ position: 'relative' });
  2224 + var value = proceed(element);
  2225 + element.setStyle({ position: position });
  2226 + return value;
  2227 + }
  2228 + );
  2229 +
  2230 + $w('positionedOffset viewportOffset').each(function(method) {
2241 Element.Methods[method] = Element.Methods[method].wrap( 2231 Element.Methods[method] = Element.Methods[method].wrap(
2242 function(proceed, element) { 2232 function(proceed, element) {
2243 element = $(element); 2233 element = $(element);
2244 var position = element.getStyle('position'); 2234 var position = element.getStyle('position');
2245 - if (position != 'static') return proceed(element); 2235 + if (position !== 'static') return proceed(element);
  2236 + // Trigger hasLayout on the offset parent so that IE6 reports
  2237 + // accurate offsetTop and offsetLeft values for position: fixed.
  2238 + var offsetParent = element.getOffsetParent();
  2239 + if (offsetParent && offsetParent.getStyle('position') === 'fixed')
  2240 + offsetParent.setStyle({ zoom: 1 });
2246 element.setStyle({ position: 'relative' }); 2241 element.setStyle({ position: 'relative' });
2247 var value = proceed(element); 2242 var value = proceed(element);
2248 element.setStyle({ position: position }); 2243 element.setStyle({ position: position });
@@ -2324,7 +2319,10 @@ else if (Prototype.Browser.IE) { @@ -2324,7 +2319,10 @@ else if (Prototype.Browser.IE) {
2324 }; 2319 };
2325 2320
2326 Element._attributeTranslations.write = { 2321 Element._attributeTranslations.write = {
2327 - names: Object.clone(Element._attributeTranslations.read.names), 2322 + names: Object.extend({
  2323 + cellpadding: 'cellPadding',
  2324 + cellspacing: 'cellSpacing'
  2325 + }, Element._attributeTranslations.read.names),
2328 values: { 2326 values: {
2329 checked: function(element, value) { 2327 checked: function(element, value) {
2330 element.checked = !!value; 2328 element.checked = !!value;
@@ -2444,7 +2442,7 @@ if (Prototype.Browser.IE || Prototype.Browser.Opera) { @@ -2444,7 +2442,7 @@ if (Prototype.Browser.IE || Prototype.Browser.Opera) {
2444 }; 2442 };
2445 } 2443 }
2446 2444
2447 -if (document.createElement('div').outerHTML) { 2445 +if ('outerHTML' in document.createElement('div')) {
2448 Element.Methods.replace = function(element, content) { 2446 Element.Methods.replace = function(element, content) {
2449 element = $(element); 2447 element = $(element);
2450 2448
@@ -2482,45 +2480,25 @@ Element._returnOffset = function(l, t) { @@ -2482,45 +2480,25 @@ Element._returnOffset = function(l, t) {
2482 2480
2483 Element._getContentFromAnonymousElement = function(tagName, html) { 2481 Element._getContentFromAnonymousElement = function(tagName, html) {
2484 var div = new Element('div'), t = Element._insertionTranslations.tags[tagName]; 2482 var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
2485 - div.innerHTML = t[0] + html + t[1];  
2486 - t[2].times(function() { div = div.firstChild }); 2483 + if (t) {
  2484 + div.innerHTML = t[0] + html + t[1];
  2485 + t[2].times(function() { div = div.firstChild });
  2486 + } else div.innerHTML = html;
2487 return $A(div.childNodes); 2487 return $A(div.childNodes);
2488 }; 2488 };
2489 2489
2490 Element._insertionTranslations = { 2490 Element._insertionTranslations = {
2491 - before: {  
2492 - adjacency: 'beforeBegin',  
2493 - insert: function(element, node) {  
2494 - element.parentNode.insertBefore(node, element);  
2495 - },  
2496 - initializeRange: function(element, range) {  
2497 - range.setStartBefore(element);  
2498 - } 2491 + before: function(element, node) {
  2492 + element.parentNode.insertBefore(node, element);
2499 }, 2493 },
2500 - top: {  
2501 - adjacency: 'afterBegin',  
2502 - insert: function(element, node) {  
2503 - element.insertBefore(node, element.firstChild);  
2504 - },  
2505 - initializeRange: function(element, range) {  
2506 - range.selectNodeContents(element);  
2507 - range.collapse(true);  
2508 - } 2494 + top: function(element, node) {
  2495 + element.insertBefore(node, element.firstChild);
2509 }, 2496 },
2510 - bottom: {  
2511 - adjacency: 'beforeEnd',  
2512 - insert: function(element, node) {  
2513 - element.appendChild(node);  
2514 - } 2497 + bottom: function(element, node) {
  2498 + element.appendChild(node);
2515 }, 2499 },
2516 - after: {  
2517 - adjacency: 'afterEnd',  
2518 - insert: function(element, node) {  
2519 - element.parentNode.insertBefore(node, element.nextSibling);  
2520 - },  
2521 - initializeRange: function(element, range) {  
2522 - range.setStartAfter(element);  
2523 - } 2500 + after: function(element, node) {
  2501 + element.parentNode.insertBefore(node, element.nextSibling);
2524 }, 2502 },
2525 tags: { 2503 tags: {
2526 TABLE: ['<table>', '</table>', 1], 2504 TABLE: ['<table>', '</table>', 1],
@@ -2532,7 +2510,6 @@ Element._insertionTranslations = { @@ -2532,7 +2510,6 @@ Element._insertionTranslations = {
2532 }; 2510 };
2533 2511
2534 (function() { 2512 (function() {
2535 - this.bottom.initializeRange = this.top.initializeRange;  
2536 Object.extend(this.tags, { 2513 Object.extend(this.tags, {
2537 THEAD: this.tags.TBODY, 2514 THEAD: this.tags.TBODY,
2538 TFOOT: this.tags.TBODY, 2515 TFOOT: this.tags.TBODY,
@@ -2959,13 +2936,13 @@ Object.extend(Selector, { @@ -2959,13 +2936,13 @@ Object.extend(Selector, {
2959 }, 2936 },
2960 2937
2961 criteria: { 2938 criteria: {
2962 - tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',  
2963 - className: 'n = h.className(n, r, "#{1}", c); c = false;',  
2964 - id: 'n = h.id(n, r, "#{1}", c); c = false;',  
2965 - attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;', 2939 + tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
  2940 + className: 'n = h.className(n, r, "#{1}", c); c = false;',
  2941 + id: 'n = h.id(n, r, "#{1}", c); c = false;',
  2942 + attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
2966 attr: function(m) { 2943 attr: function(m) {
2967 m[3] = (m[5] || m[6]); 2944 m[3] = (m[5] || m[6]);
2968 - return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m); 2945 + return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
2969 }, 2946 },
2970 pseudo: function(m) { 2947 pseudo: function(m) {
2971 if (m[6]) m[6] = m[6].replace(/"/g, '\\"'); 2948 if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
@@ -2989,7 +2966,8 @@ Object.extend(Selector, { @@ -2989,7 +2966,8 @@ Object.extend(Selector, {
2989 tagName: /^\s*(\*|[\w\-]+)(\b|$)?/, 2966 tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
2990 id: /^#([\w\-\*]+)(\b|$)/, 2967 id: /^#([\w\-\*]+)(\b|$)/,
2991 className: /^\.([\w\-\*]+)(\b|$)/, 2968 className: /^\.([\w\-\*]+)(\b|$)/,
2992 - pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s)|(?=:))/, 2969 + pseudo:
  2970 +/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
2993 attrPresence: /^\[([\w]+)\]/, 2971 attrPresence: /^\[([\w]+)\]/,
2994 attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ 2972 attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
2995 }, 2973 },
@@ -3014,7 +2992,7 @@ Object.extend(Selector, { @@ -3014,7 +2992,7 @@ Object.extend(Selector, {
3014 2992
3015 attr: function(element, matches) { 2993 attr: function(element, matches) {
3016 var nodeValue = Element.readAttribute(element, matches[1]); 2994 var nodeValue = Element.readAttribute(element, matches[1]);
3017 - return Selector.operators[matches[2]](nodeValue, matches[3]); 2995 + return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
3018 } 2996 }
3019 }, 2997 },
3020 2998
@@ -3029,14 +3007,15 @@ Object.extend(Selector, { @@ -3029,14 +3007,15 @@ Object.extend(Selector, {
3029 3007
3030 // marks an array of nodes for counting 3008 // marks an array of nodes for counting
3031 mark: function(nodes) { 3009 mark: function(nodes) {
  3010 + var _true = Prototype.emptyFunction;
3032 for (var i = 0, node; node = nodes[i]; i++) 3011 for (var i = 0, node; node = nodes[i]; i++)
3033 - node._counted = true; 3012 + node._countedByPrototype = _true;
3034 return nodes; 3013 return nodes;
3035 }, 3014 },
3036 3015
3037 unmark: function(nodes) { 3016 unmark: function(nodes) {
3038 for (var i = 0, node; node = nodes[i]; i++) 3017 for (var i = 0, node; node = nodes[i]; i++)
3039 - node._counted = undefined; 3018 + node._countedByPrototype = undefined;
3040 return nodes; 3019 return nodes;
3041 }, 3020 },
3042 3021
@@ -3044,15 +3023,15 @@ Object.extend(Selector, { @@ -3044,15 +3023,15 @@ Object.extend(Selector, {
3044 // "ofType" flag indicates whether we're indexing for nth-of-type 3023 // "ofType" flag indicates whether we're indexing for nth-of-type
3045 // rather than nth-child 3024 // rather than nth-child
3046 index: function(parentNode, reverse, ofType) { 3025 index: function(parentNode, reverse, ofType) {
3047 - parentNode._counted = true; 3026 + parentNode._countedByPrototype = Prototype.emptyFunction;
3048 if (reverse) { 3027 if (reverse) {
3049 for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) { 3028 for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
3050 var node = nodes[i]; 3029 var node = nodes[i];
3051 - if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++; 3030 + if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
3052 } 3031 }
3053 } else { 3032 } else {
3054 for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++) 3033 for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
3055 - if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++; 3034 + if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
3056 } 3035 }
3057 }, 3036 },
3058 3037
@@ -3061,8 +3040,8 @@ Object.extend(Selector, { @@ -3061,8 +3040,8 @@ Object.extend(Selector, {
3061 if (nodes.length == 0) return nodes; 3040 if (nodes.length == 0) return nodes;
3062 var results = [], n; 3041 var results = [], n;
3063 for (var i = 0, l = nodes.length; i < l; i++) 3042 for (var i = 0, l = nodes.length; i < l; i++)
3064 - if (!(n = nodes[i])._counted) {  
3065 - n._counted = true; 3043 + if (!(n = nodes[i])._countedByPrototype) {
  3044 + n._countedByPrototype = Prototype.emptyFunction;
3066 results.push(Element.extend(n)); 3045 results.push(Element.extend(n));
3067 } 3046 }
3068 return Selector.handlers.unmark(results); 3047 return Selector.handlers.unmark(results);
@@ -3114,7 +3093,7 @@ Object.extend(Selector, { @@ -3114,7 +3093,7 @@ Object.extend(Selector, {
3114 3093
3115 // TOKEN FUNCTIONS 3094 // TOKEN FUNCTIONS
3116 tagName: function(nodes, root, tagName, combinator) { 3095 tagName: function(nodes, root, tagName, combinator) {
3117 - tagName = tagName.toUpperCase(); 3096 + var uTagName = tagName.toUpperCase();
3118 var results = [], h = Selector.handlers; 3097 var results = [], h = Selector.handlers;
3119 if (nodes) { 3098 if (nodes) {
3120 if (combinator) { 3099 if (combinator) {
@@ -3127,7 +3106,7 @@ Object.extend(Selector, { @@ -3127,7 +3106,7 @@ Object.extend(Selector, {
3127 if (tagName == "*") return nodes; 3106 if (tagName == "*") return nodes;
3128 } 3107 }
3129 for (var i = 0, node; node = nodes[i]; i++) 3108 for (var i = 0, node; node = nodes[i]; i++)
3130 - if (node.tagName.toUpperCase() == tagName) results.push(node); 3109 + if (node.tagName.toUpperCase() === uTagName) results.push(node);
3131 return results; 3110 return results;
3132 } else return root.getElementsByTagName(tagName); 3111 } else return root.getElementsByTagName(tagName);
3133 }, 3112 },
@@ -3174,16 +3153,18 @@ Object.extend(Selector, { @@ -3174,16 +3153,18 @@ Object.extend(Selector, {
3174 return results; 3153 return results;
3175 }, 3154 },
3176 3155
3177 - attrPresence: function(nodes, root, attr) { 3156 + attrPresence: function(nodes, root, attr, combinator) {
3178 if (!nodes) nodes = root.getElementsByTagName("*"); 3157 if (!nodes) nodes = root.getElementsByTagName("*");
  3158 + if (nodes && combinator) nodes = this[combinator](nodes);
3179 var results = []; 3159 var results = [];
3180 for (var i = 0, node; node = nodes[i]; i++) 3160 for (var i = 0, node; node = nodes[i]; i++)
3181 if (Element.hasAttribute(node, attr)) results.push(node); 3161 if (Element.hasAttribute(node, attr)) results.push(node);
3182 return results; 3162 return results;
3183 }, 3163 },
3184 3164
3185 - attr: function(nodes, root, attr, value, operator) { 3165 + attr: function(nodes, root, attr, value, operator, combinator) {
3186 if (!nodes) nodes = root.getElementsByTagName("*"); 3166 if (!nodes) nodes = root.getElementsByTagName("*");
  3167 + if (nodes && combinator) nodes = this[combinator](nodes);
3187 var handler = Selector.operators[operator], results = []; 3168 var handler = Selector.operators[operator], results = [];
3188 for (var i = 0, node; node = nodes[i]; i++) { 3169 for (var i = 0, node; node = nodes[i]; i++) {
3189 var nodeValue = Element.readAttribute(node, attr); 3170 var nodeValue = Element.readAttribute(node, attr);
@@ -3262,7 +3243,7 @@ Object.extend(Selector, { @@ -3262,7 +3243,7 @@ Object.extend(Selector, {
3262 var h = Selector.handlers, results = [], indexed = [], m; 3243 var h = Selector.handlers, results = [], indexed = [], m;
3263 h.mark(nodes); 3244 h.mark(nodes);
3264 for (var i = 0, node; node = nodes[i]; i++) { 3245 for (var i = 0, node; node = nodes[i]; i++) {
3265 - if (!node.parentNode._counted) { 3246 + if (!node.parentNode._countedByPrototype) {
3266 h.index(node.parentNode, reverse, ofType); 3247 h.index(node.parentNode, reverse, ofType);
3267 indexed.push(node.parentNode); 3248 indexed.push(node.parentNode);
3268 } 3249 }
@@ -3300,7 +3281,7 @@ Object.extend(Selector, { @@ -3300,7 +3281,7 @@ Object.extend(Selector, {
3300 var exclusions = new Selector(selector).findElements(root); 3281 var exclusions = new Selector(selector).findElements(root);
3301 h.mark(exclusions); 3282 h.mark(exclusions);
3302 for (var i = 0, results = [], node; node = nodes[i]; i++) 3283 for (var i = 0, results = [], node; node = nodes[i]; i++)
3303 - if (!node._counted) results.push(node); 3284 + if (!node._countedByPrototype) results.push(node);
3304 h.unmark(exclusions); 3285 h.unmark(exclusions);
3305 return results; 3286 return results;
3306 }, 3287 },
@@ -3334,11 +3315,19 @@ Object.extend(Selector, { @@ -3334,11 +3315,19 @@ Object.extend(Selector, {
3334 '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); } 3315 '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
3335 }, 3316 },
3336 3317
  3318 + split: function(expression) {
  3319 + var expressions = [];
  3320 + expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
  3321 + expressions.push(m[1].strip());
  3322 + });
  3323 + return expressions;
  3324 + },
  3325 +
3337 matchElements: function(elements, expression) { 3326 matchElements: function(elements, expression) {
3338 - var matches = new Selector(expression).findElements(), h = Selector.handlers; 3327 + var matches = $$(expression), h = Selector.handlers;
3339 h.mark(matches); 3328 h.mark(matches);
3340 for (var i = 0, results = [], element; element = elements[i]; i++) 3329 for (var i = 0, results = [], element; element = elements[i]; i++)
3341 - if (element._counted) results.push(element); 3330 + if (element._countedByPrototype) results.push(element);
3342 h.unmark(matches); 3331 h.unmark(matches);
3343 return results; 3332 return results;
3344 }, 3333 },
@@ -3351,11 +3340,7 @@ Object.extend(Selector, { @@ -3351,11 +3340,7 @@ Object.extend(Selector, {
3351 }, 3340 },
3352 3341
3353 findChildElements: function(element, expressions) { 3342 findChildElements: function(element, expressions) {
3354 - var exprs = expressions.join(',');  
3355 - expressions = [];  
3356 - exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {  
3357 - expressions.push(m[1].strip());  
3358 - }); 3343 + expressions = Selector.split(expressions.join(','));
3359 var results = [], h = Selector.handlers; 3344 var results = [], h = Selector.handlers;
3360 for (var i = 0, l = expressions.length, selector; i < l; i++) { 3345 for (var i = 0, l = expressions.length, selector; i < l; i++) {
3361 selector = new Selector(expressions[i].strip()); 3346 selector = new Selector(expressions[i].strip());
@@ -3366,13 +3351,22 @@ Object.extend(Selector, { @@ -3366,13 +3351,22 @@ Object.extend(Selector, {
3366 }); 3351 });
3367 3352
3368 if (Prototype.Browser.IE) { 3353 if (Prototype.Browser.IE) {
3369 - // IE returns comment nodes on getElementsByTagName("*").  
3370 - // Filter them out.  
3371 - Selector.handlers.concat = function(a, b) {  
3372 - for (var i = 0, node; node = b[i]; i++)  
3373 - if (node.tagName !== "!") a.push(node);  
3374 - return a;  
3375 - }; 3354 + Object.extend(Selector.handlers, {
  3355 + // IE returns comment nodes on getElementsByTagName("*").
  3356 + // Filter them out.
  3357 + concat: function(a, b) {
  3358 + for (var i = 0, node; node = b[i]; i++)
  3359 + if (node.tagName !== "!") a.push(node);
  3360 + return a;
  3361 + },
  3362 +
  3363 + // IE improperly serializes _countedByPrototype in (inner|outer)HTML.
  3364 + unmark: function(nodes) {
  3365 + for (var i = 0, node; node = nodes[i]; i++)
  3366 + node.removeAttribute('_countedByPrototype');
  3367 + return nodes;
  3368 + }
  3369 + });
3376 } 3370 }
3377 3371
3378 function $$() { 3372 function $$() {
@@ -3850,9 +3844,9 @@ Object.extend(Event, (function() { @@ -3850,9 +3844,9 @@ Object.extend(Event, (function() {
3850 var cache = Event.cache; 3844 var cache = Event.cache;
3851 3845
3852 function getEventID(element) { 3846 function getEventID(element) {
3853 - if (element._eventID) return element._eventID; 3847 + if (element._prototypeEventID) return element._prototypeEventID[0];
3854 arguments.callee.id = arguments.callee.id || 1; 3848 arguments.callee.id = arguments.callee.id || 1;
3855 - return element._eventID = ++arguments.callee.id; 3849 + return element._prototypeEventID = [++arguments.callee.id];
3856 } 3850 }
3857 3851
3858 function getDOMEventName(eventName) { 3852 function getDOMEventName(eventName) {
@@ -3880,7 +3874,7 @@ Object.extend(Event, (function() { @@ -3880,7 +3874,7 @@ Object.extend(Event, (function() {
3880 return false; 3874 return false;
3881 3875
3882 Event.extend(event); 3876 Event.extend(event);
3883 - handler.call(element, event) 3877 + handler.call(element, event);
3884 }; 3878 };
3885 3879
3886 wrapper.handler = handler; 3880 wrapper.handler = handler;
@@ -3962,11 +3956,12 @@ Object.extend(Event, (function() { @@ -3962,11 +3956,12 @@ Object.extend(Event, (function() {
3962 if (element == document && document.createEvent && !element.dispatchEvent) 3956 if (element == document && document.createEvent && !element.dispatchEvent)
3963 element = document.documentElement; 3957 element = document.documentElement;
3964 3958
  3959 + var event;
3965 if (document.createEvent) { 3960 if (document.createEvent) {
3966 - var event = document.createEvent("HTMLEvents"); 3961 + event = document.createEvent("HTMLEvents");
3967 event.initEvent("dataavailable", true, true); 3962 event.initEvent("dataavailable", true, true);
3968 } else { 3963 } else {
3969 - var event = document.createEventObject(); 3964 + event = document.createEventObject();
3970 event.eventType = "ondataavailable"; 3965 event.eventType = "ondataavailable";
3971 } 3966 }
3972 3967
@@ -3995,20 +3990,21 @@ Element.addMethods({ @@ -3995,20 +3990,21 @@ Element.addMethods({
3995 Object.extend(document, { 3990 Object.extend(document, {
3996 fire: Element.Methods.fire.methodize(), 3991 fire: Element.Methods.fire.methodize(),
3997 observe: Element.Methods.observe.methodize(), 3992 observe: Element.Methods.observe.methodize(),
3998 - stopObserving: Element.Methods.stopObserving.methodize() 3993 + stopObserving: Element.Methods.stopObserving.methodize(),
  3994 + loaded: false
3999 }); 3995 });
4000 3996
4001 (function() { 3997 (function() {
4002 /* Support for the DOMContentLoaded event is based on work by Dan Webb, 3998 /* Support for the DOMContentLoaded event is based on work by Dan Webb,
4003 Matthias Miller, Dean Edwards and John Resig. */ 3999 Matthias Miller, Dean Edwards and John Resig. */
4004 4000
4005 - var timer, fired = false; 4001 + var timer;
4006 4002
4007 function fireContentLoadedEvent() { 4003 function fireContentLoadedEvent() {
4008 - if (fired) return; 4004 + if (document.loaded) return;
4009 if (timer) window.clearInterval(timer); 4005 if (timer) window.clearInterval(timer);
4010 document.fire("dom:loaded"); 4006 document.fire("dom:loaded");
4011 - fired = true; 4007 + document.loaded = true;
4012 } 4008 }
4013 4009
4014 if (document.addEventListener) { 4010 if (document.addEventListener) {
script/dbconsole 0 → 100755
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +#!/usr/bin/env ruby
  2 +require File.dirname(__FILE__) + '/../config/boot'
  3 +require 'commands/dbconsole'