Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 8736

Show
Ignore:
Timestamp:
01/26/08 08:17:42 (5 months ago)
Author:
madrobby
Message:

script.aculo.us: bump Prototype to 1.6.0.2

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • spinoffs/scriptaculous/CHANGELOG

    r8686 r8736  
     1* Update to Prototype 1.6.0.2 final 
     2 
    13* Fix an issue with Effect.ScrollTo that caused Firefox to scroll to the wrong offset in some situations. Closes #10245.  [nik.wakelin] 
    24 
  • spinoffs/scriptaculous/lib/prototype.js

    r8552 r8736  
    1 /*  Prototype JavaScript framework, version 1.6.0.1 
     1/*  Prototype JavaScript framework, version 1.6.0.2 
    22 *  (c) 2005-2007 Sam Stephenson 
    33 * 
     
    88 
    99var Prototype = { 
    10   Version: '1.6.0.1', 
     10  Version: '1.6.0.2', 
    1111 
    1212  Browser: { 
     
    111111      if (Object.isUndefined(object)) return 'undefined'; 
    112112      if (object === null) return 'null'; 
    113       return object.inspect ? object.inspect() : object.toString(); 
     113      return object.inspect ? object.inspect() : String(object); 
    114114    } catch (e) { 
    115115      if (e instanceof RangeError) return '...'; 
     
    172172 
    173173  isArray: function(object) { 
    174     return object && object.constructor === Array; 
     174    return object != null && typeof object == "object" && 
     175      'splice' in object && 'join' in object; 
    175176  }, 
    176177 
     
    579580 
    580581      return before + String.interpret(ctx); 
    581     }.bind(this)); 
     582    }); 
    582583  } 
    583584}); 
     
    813814 
    814815if (Prototype.Browser.WebKit) { 
    815   function $A(iterable) { 
     816  $A = function(iterable) { 
    816817    if (!iterable) return []; 
    817818    if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') && 
     
    820821    while (length--) results[length] = iterable[length]; 
    821822    return results; 
    822   } 
     823  }; 
    823824} 
    824825 
     
    12991300      var contentType = response.getHeader('Content-type'); 
    13001301      if (this.options.evalJS == 'force' 
    1301           || (this.options.evalJS && contentType 
     1302          || (this.options.evalJS && this.isSameOrigin() && contentType 
    13021303          && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) 
    13031304        this.evalResponse(); 
     
    13171318  }, 
    13181319 
     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 
    13191329  getHeader: function(name) { 
    13201330    try { 
     
    13921402    json = decodeURIComponent(escape(json)); 
    13931403    try { 
    1394       return json.evalJSON(this.request.options.sanitizeJSON); 
     1404      return json.evalJSON(this.request.options.sanitizeJSON || 
     1405        !this.request.isSameOrigin()); 
    13951406    } catch (e) { 
    13961407      this.request.dispatchException(e); 
     
    14051416          return null; 
    14061417    try { 
    1407       return this.responseText.evalJSON(options.sanitizeJSON); 
     1418      return this.responseText.evalJSON(options.sanitizeJSON || 
     1419        !this.request.isSameOrigin()); 
    14081420    } catch (e) { 
    14091421      this.request.dispatchException(e); 
     
    16111623    var content, insert, tagName, childNodes; 
    16121624 
    1613     for (position in insertions) { 
     1625    for (var position in insertions) { 
    16141626      content  = insertions[position]; 
    16151627      position = position.toLowerCase(); 
     
    16751687 
    16761688  descendants: function(element) { 
    1677     return $(element).getElementsBySelector("*"); 
     1689    return $(element).select("*"); 
    16781690  }, 
    16791691 
     
    18641876        while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode); 
    18651877      } 
    1866       if (nextAncestor) return (e > a && e < nextAncestor.sourceIndex); 
     1878      if (nextAncestor && nextAncestor.sourceIndex) 
     1879       return (e > a && e < nextAncestor.sourceIndex); 
    18671880    } 
    18681881 
     
    20082021        if (element.tagName == 'BODY') break; 
    20092022        var p = Element.getStyle(element, 'position'); 
    2010         if (p == 'relative' || p == 'absolute') break; 
     2023        if (p !== 'static') break; 
    20112024      } 
    20122025    } while (element); 
     
    22012214 
    22022215else if (Prototype.Browser.IE) { 
    2203   $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) { 
    22042231    Element.Methods[method] = Element.Methods[method].wrap( 
    22052232      function(proceed, element) { 
    22062233        element = $(element); 
    22072234        var position = element.getStyle('position'); 
    2208         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 }); 
    22092241        element.setStyle({ position: 'relative' }); 
    22102242        var value = proceed(element); 
     
    22882320 
    22892321  Element._attributeTranslations.write = { 
    2290     names: Object.clone(Element._attributeTranslations.read.names), 
     2322    names: Object.extend({ 
     2323      cellpadding: 'cellPadding', 
     2324      cellspacing: 'cellSpacing' 
     2325    }, Element._attributeTranslations.read.names), 
    22912326    values: { 
    22922327      checked: function(element, value) { 
     
    24082443} 
    24092444 
    2410 if (document.createElement('div').outerHTML) { 
     2445if ('outerHTML' in document.createElement('div')) { 
    24112446  Element.Methods.replace = function(element, content) { 
    24122447    element = $(element); 
     
    29022937 
    29032938  criteria: { 
    2904     tagName:      'n = h.tagName(n, r, "#{1}", c);   c = false;', 
    2905     className:    'n = h.className(n, r, "#{1}", c); c = false;', 
    2906     id:           'n = h.id(n, r, "#{1}", c);        c = false;', 
    2907     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;', 
    29082943    attr: function(m) { 
    29092944      m[3] = (m[5] || m[6]); 
    2910       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); 
    29112946    }, 
    29122947    pseudo: function(m) { 
     
    29582993    attr: function(element, matches) { 
    29592994      var nodeValue = Element.readAttribute(element, matches[1]); 
    2960       return Selector.operators[matches[2]](nodeValue, matches[3]); 
     2995      return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]); 
    29612996    } 
    29622997  }, 
     
    29733008    // marks an array of nodes for counting 
    29743009    mark: function(nodes) { 
     3010      var _true = Prototype.emptyFunction; 
    29753011      for (var i = 0, node; node = nodes[i]; i++) 
    2976         node._counted = true; 
     3012        node._countedByPrototype = _true; 
    29773013      return nodes; 
    29783014    }, 
     
    29803016    unmark: function(nodes) { 
    29813017      for (var i = 0, node; node = nodes[i]; i++) 
    2982         node._counted = undefined; 
     3018        node._countedByPrototype = undefined; 
    29833019      return nodes; 
    29843020    }, 
     
    29883024    // rather than nth-child 
    29893025    index: function(parentNode, reverse, ofType) { 
    2990       parentNode._counted = true
     3026      parentNode._countedByPrototype = Prototype.emptyFunction
    29913027      if (reverse) { 
    29923028        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) { 
    29933029          var node = nodes[i]; 
    2994           if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++; 
     3030          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; 
    29953031        } 
    29963032      } else { 
    29973033        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++) 
    2998           if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++; 
     3034          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; 
    29993035      } 
    30003036    }, 
     
    30053041      var results = [], n; 
    30063042      for (var i = 0, l = nodes.length; i < l; i++) 
    3007         if (!(n = nodes[i])._counted) { 
    3008           n._counted = true
     3043        if (!(n = nodes[i])._countedByPrototype) { 
     3044          n._countedByPrototype = Prototype.emptyFunction
    30093045          results.push(Element.extend(n)); 
    30103046        } 
     
    31183154    }, 
    31193155 
    3120     attrPresence: function(nodes, root, attr) { 
     3156    attrPresence: function(nodes, root, attr, combinator) { 
    31213157      if (!nodes) nodes = root.getElementsByTagName("*"); 
     3158      if (nodes && combinator) nodes = this[combinator](nodes); 
    31223159      var results = []; 
    31233160      for (var i = 0, node; node = nodes[i]; i++) 
     
    31263163    }, 
    31273164 
    3128     attr: function(nodes, root, attr, value, operator) { 
     3165    attr: function(nodes, root, attr, value, operator, combinator) { 
    31293166      if (!nodes) nodes = root.getElementsByTagName("*"); 
     3167      if (nodes && combinator) nodes = this[combinator](nodes); 
    31303168      var handler = Selector.operators[operator], results = []; 
    31313169      for (var i = 0, node; node = nodes[i]; i++) { 
     
    32063244      h.mark(nodes); 
    32073245      for (var i = 0, node; node = nodes[i]; i++) { 
    3208         if (!node.parentNode._counted) { 
     3246        if (!node.parentNode._countedByPrototype) { 
    32093247          h.index(node.parentNode, reverse, ofType); 
    32103248          indexed.push(node.parentNode); 
     
    32443282      h.mark(exclusions); 
    32453283      for (var i = 0, results = [], node; node = nodes[i]; i++) 
    3246         if (!node._counted) results.push(node); 
     3284        if (!node._countedByPrototype) results.push(node); 
    32473285      h.unmark(exclusions); 
    32483286      return results; 
     
    32783316  }, 
    32793317 
     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 
    32803326  matchElements: function(elements, expression) { 
    3281     var matches = new Selector(expression).findElements(), h = Selector.handlers; 
     3327    var matches = $$(expression), h = Selector.handlers; 
    32823328    h.mark(matches); 
    32833329    for (var i = 0, results = [], element; element = elements[i]; i++) 
    3284       if (element._counted) results.push(element); 
     3330      if (element._countedByPrototype) results.push(element); 
    32853331    h.unmark(matches); 
    32863332    return results; 
     
    32953341 
    32963342  findChildElements: function(element, expressions) { 
    3297     var exprs = expressions.join(','); 
    3298     expressions = []; 
    3299     exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) { 
    3300       expressions.push(m[1].strip()); 
    3301     }); 
     3343    expressions = Selector.split(expressions.join(',')); 
    33023344    var results = [], h = Selector.handlers; 
    33033345    for (var i = 0, l = expressions.length, selector; i < l; i++) { 
     
    33103352 
    33113353if (Prototype.Browser.IE) { 
    3312   // IE returns comment nodes on getElementsByTagName("*"). 
    3313   // Filter them out. 
    3314   Selector.handlers.concat = function(a, b) { 
    3315     for (var i = 0, node; node = b[i]; i++) 
    3316       if (node.tagName !== "!") a.push(node); 
    3317     return a; 
    3318   }; 
     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  }); 
    33193370} 
    33203371 
     
    37943845 
    37953846  function getEventID(element) { 
    3796     if (element._eventID) return element._eventID
     3847    if (element._prototypeEventID) return element._prototypeEventID[0]
    37973848    arguments.callee.id = arguments.callee.id || 1; 
    3798     return element._eventID = ++arguments.callee.id
     3849    return element._prototypeEventID = [++arguments.callee.id]
    37993850  } 
    38003851