<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -45,12 +45,12 @@ S2.FX.Zoom = Class.create(S2.FX.Element, {
   teardown: function() {
     this.clone.observe('click', function() {
       this.overlay.remove();
-      this.clone.morph('opacity:0',&#160;{ 
+      this.clone.morph('opacity:0', {
         duration: 0.2,
         after: function() {
           this.clone.remove();
-        }.bind(this) 
-      });
+        }.bind(this)
+      })
     }.bind(this));
   }
 });</diff>
      <filename>src/addons/zoom.js</filename>
    </modified>
    <modified>
      <diff>@@ -106,10 +106,10 @@ S2.CSS = {
    *  
    *  Returns the value of a CSS color as a RGB triplet:
    *  
-   *  * #abc       -&gt; [170, 187, 204]
-   *  * #aabbcc    -&gt; not changed
+   *  * \#abc       -&gt; [170, 187, 204]
+   *  * \#aabbcc    -&gt; not changed
    *  * rgb(1,2,3) -&gt; [1, 2, 3]
-   *  * #xyz       -&gt; [NaN, NaN, NaN]
+   *  * \#xyz       -&gt; [NaN, NaN, NaN]
    *  
    *  This method does not support HTML color constants.
   **/
@@ -127,9 +127,9 @@ S2.CSS = {
    *  
    *  Returns a normalized color in the #aabbcc format.
    *  
-   *  * #abc -&gt; Expanded to #aabbcc
-   *  * #aabbcc -&gt; not changed
-   *  * rgb(1,2,3) -&gt; Expanded to #010203
+   *  * \#abc -&gt; Expanded to #aabbcc
+   *  * \#aabbcc -&gt; not changed
+   *  * rgb(1,2,3) -&gt; Expanded to \#010203
    *  * other input -&gt; not changed
    *  
    *  This method does not support HTML color constants.</diff>
      <filename>src/css.js</filename>
    </modified>
    <modified>
      <diff>@@ -10,7 +10,7 @@
  * &lt;h2&gt;Features&lt;/h2&gt;
  *
  * * &lt;a href=&quot;scripty2%20fx/element.html#morph-class_method&quot;&gt;CSS morphing engine&lt;/a&gt;: 
- *   morph from one set of style properties to an other, including
+ *   morph from one set of style properties to another, including
  *   support for all CSS length types (px, em, %, cm, pt, etc.)
  * * &lt;a href=&quot;scripty2%20fx/s2/fx/transitions.html&quot;&gt;Extensive transition system&lt;/a&gt;
  *   for animation easing and special effects (e.g. bouncing)</diff>
      <filename>src/effects/base.js</filename>
    </modified>
    <modified>
      <diff>@@ -2,23 +2,23 @@
  * S2.FX.Operators
  *  
  * Effect operators are reusable interpolation functions.
- * Operators are used by [[S2.FX.Element]] and it's subclasses.
+ * Operators are used by [[S2.FX.Element]] and its subclasses.
 **/
 S2.FX.Operators = { };
 
 /**
  *  class S2.FX.Operators.Base
  *  
- *  This is skeleton base class which must be extended to be useful.
+ *  This is a skeleton base class which must be extended to be useful.
 **/
 S2.FX.Operators.Base = Class.create({
   /**
    *  new S2.FX.Operators.Base(effect, object[, options])
    *  - effect (S2.FX.Effect): The effect which uses this operator
-   *  - object (Object): A releatd object (mostly elements)
-   *  - options (Object): Additional options for the operator.
+   *  - object (Object): A related object (mostly elements)
+   *  - options (Object): Additional options for the operator
    *  
-   *  This is skeleton base class which must be extended to be useful.
+   *  This is a skeleton base class which must be extended to be useful.
    *
    *  Options:
    *    * `transition`: a [[S2.FX.Transition]] method, defaults to a linear transition</diff>
      <filename>src/effects/operators/base.js</filename>
    </modified>
    <modified>
      <diff>@@ -20,7 +20,7 @@ S2.FX.Operators.Style = Class.create(S2.FX.Operators.Base, {
       if(from!=to)
         this.tweens.push([
           property, S2.CSS.interpolate.curry(property, from, to),
-          item in this.options.propertyTransitions ? 
+          (this.options.propertyTransitions || []).include(item) ?
             Object.propertize(this.options.propertyTransitions[item], S2.FX.Transitions) : Prototype.K
         ]);
     }</diff>
      <filename>src/effects/operators/style.js</filename>
    </modified>
    <modified>
      <diff>@@ -54,8 +54,9 @@
    *  with WebKit's CSS transitions `-webkit-transition-timing-function`
    *  CSS property.
    *
-   *  See http://www.w3.org/TR/css3-transitions/#transition-timing-function_tag
-   *  for more information.
+   *  The W3C has more information about 
+   *  &lt;a href=&quot;http://www.w3.org/TR/css3-transitions/#transition-timing-function_tag&quot;&gt;
+   *  CSS3 transition timing functions&lt;/a&gt;.
   **/
   S2.FX.cubicBezierTransition = function(x1, y1, x2, y2){
     return (function(pos){</diff>
      <filename>src/effects/transitions/cubic-bezier.js</filename>
    </modified>
    <modified>
      <diff>@@ -108,7 +108,7 @@ Element.addMethods({
   /** 
    *  Element#fade(@element[, options]) -&gt; element
    *
-   *  Fade out an element from it's current opacity setting (or 100%).
+   *  Fade out an element from its current opacity setting (or 100%).
   **/
   fade: function(element, options){
     return element.effect('morph', Object.extend({</diff>
      <filename>src/extensions/element.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,42 @@
+
+/** section: scripty2 core
+ * class Function
+ *  
+ *  Extensions to the built-in `Function` object.
+**/
+
+/**
+ *  Function#optionize() -&gt; Function
+ *
+ *  Given a function whose last parameter is an object
+ *  of options, return a function that accepts a variable
+ *  number of arguments and always passes the last argument
+ *  that is an object to the options parameter. This way,
+ *  the function can be called with just options, leaving
+ *  the other parameters undefined.
+ *
+ *      var logOptions = function(a, b, options){
+ *        console.log(options);
+ *      }.optionize();
+ *      logOptions({hello: &quot;world&quot;}) -&gt; logs {hello: &quot;world&quot;}
+ *      logOptions(1, {hello: &quot;world&quot;}) -&gt; logs {hello: &quot;world&quot;}
+ *      logOptions(1, 2, {hello: &quot;world&quot;}) -&gt; logs {hello: &quot;world&quot;}
+ *
+ *  But note that providing too many arguments will not work:
+ *
+ *      logOptions(1,2,3, {hello: &quot;world&quot;}) -&gt; logs 3
+**/
 Function.prototype.optionize = function(){
-  var self = this, argumentNames = self.argumentNames(), optionIndex = argumentNames.length - 1, 
-    method = function(){
-    var args = $A(arguments), options = typeof args.last() == 'object' ? args.pop() : {},
-      prefilledArgs = (optionIndex == 0 ? [] : 
-        ((args.length &gt; 0 ? args : [null]).inGroupsOf(optionIndex).flatten())).concat(options);
-    return self.apply(this, prefilledArgs);
-  };
+  var self = this, 
+			argumentNames = self.argumentNames(),
+			optionIndex = argumentNames.length - 1, 
+    	method = function(){
+    		var args = $A(arguments), 
+						options = typeof args.last() == 'object' ? args.pop() : {},
+    		  	prefilledArgs = (optionIndex == 0 ? [] : 
+    		    	((args.length &gt; 0 ? args : [null]).inGroupsOf(optionIndex).flatten())).concat(options);
+    		return self.apply(this, prefilledArgs);
+  		};
   method.argumentNames = function(){ return argumentNames };
   return method;
 };
@@ -31,6 +62,24 @@ Number.prototype.tween = function(target, position){
   return this + (target-this) * position;
 };
 
+/** section: scripty2 core
+ * class Object
+ *  
+ *  Extensions to the built-in `Object` object.
+**/
+
+/**
+ *  Object.propertize(property, object) -&gt; Object
+ *  - property (String | Object): item or name of item
+ *  - object (Object): namespace in which to look for named item
+ *
+ *  If `property` is a string, finds it in the provided `object`.
+ *  Otherwise returns `property`.
+ *
+ *      Object.propertize(S2.FX.Transitions.sinusoidal, S2.FX.Transitions) -&gt; S2.FX.Transitions.sinusoidal
+ *      Object.propertize('sinusoidal', S2.FX.Transitions) -&gt; S2.FX.Transitions.sinusoidal
+ *
+**/
 Object.propertize = function(property, object){
   return Object.isString(property) ? object[property] : property;
 };
\ No newline at end of file</diff>
      <filename>src/extensions/misc.js</filename>
    </modified>
    <modified>
      <diff>@@ -40,4 +40,5 @@ var S2 = {
 //= require &quot;extensions/misc&quot;
 //= require &quot;extensions/element&quot;
 
-//= require &quot;addons/helpers&quot;
\ No newline at end of file
+//= require &quot;addons/helpers&quot;
+//= require &quot;addons/zoom&quot;
\ No newline at end of file</diff>
      <filename>src/s2.js</filename>
    </modified>
    <modified>
      <diff>@@ -20,10 +20,25 @@ new Test.Unit.Runner({
   }},
   
   testObjectPropertize: function(){ with(this) {
-    // TODO
+		var propertizeTransitions = function(prop) { 
+			return Object.propertize(prop, S2.FX.Transitions);
+		};
+    assertEqual(propertizeTransitions('sinusoidal'), S2.FX.Transitions.sinusoidal);
+		assertEqual(propertizeTransitions(S2.FX.Transitions.sinusoidal), S2.FX.Transitions.sinusoidal);
   }},
   
   testFunctionOptionize: function(){ with(this) {
-    // TODO
+    var o = {a:1}
+        optionize = (function(a,b,options) {
+          return options;
+        }).optionize(),
+      
+    // options set to last object
+    assertEqual(o, optionize(o));
+    assertEqual(o, optionize(1,o));
+    assertEqual(o, optionize(1,2,o));
+    
+    // unless the argument is already filled in
+    assertEqual(3, optionize(1,2,3,o));
   }}
 });</diff>
      <filename>test/unit/extensions_test.js</filename>
    </modified>
    <modified>
      <diff>@@ -11,11 +11,11 @@ new Test.Unit.Runner({
     assertEqual(0, tmp);
     wait(250, function(){
       assertEqual(0, tmp);
-      new S2.FX.Morph('sandbox',{style:'font-size:20px',duration:.5}).play();
+      new S2.FX.Morph('sandbox',{style:'font-size:20px',duration:.1}).play();
       wait(750, function(){
         assert(tmp &gt; 0);
         tmp2 = tmp;
-        wait(250, function(){
+        wait(100, function(){
           assertEqual(tmp2, tmp, &quot;heartbeats shouldn't continue when no fx running&quot;);
         });
       });</diff>
      <filename>test/unit/heartbeat_test.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 new Test.Unit.Runner({
   
   testS2Defined: function() { with(this) {
-    assertNotUndefined(window['s2']);
+    assertNotUndefined(window['S2']);
   }}
   
 });
\ No newline at end of file</diff>
      <filename>test/unit/package_test.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>db43178fdcdc5ac647c661c68efbfd5ee780ee9f</id>
    </parent>
    <parent>
      <id>40f0bb04082e2a3b156642f3e34fcbe70944f8f6</id>
    </parent>
  </parents>
  <author>
    <name>Thomas Fuchs</name>
    <email>thomas@fesch.at</email>
  </author>
  <url>http://github.com/madrobby/scripty2/commit/8633e3f74b47967e3b24a41507e57c697c868a81</url>
  <id>8633e3f74b47967e3b24a41507e57c697c868a81</id>
  <committed-date>2009-09-28T02:54:58-07:00</committed-date>
  <authored-date>2009-09-28T02:54:58-07:00</authored-date>
  <message>Merge remote branch 'asolove/master'

Conflicts:
	test/unit/extensions_test.js</message>
  <tree>e9368cbf486329ffca2af98a3eee4ab87a771d7a</tree>
  <committer>
    <name>Thomas Fuchs</name>
    <email>thomas@fesch.at</email>
  </committer>
</commit>
