Bug 661330: acceptance tests for modifying Array .length property (r=dschaffe).

Note that there are a number of spots in the test that say:
  // uncomment (and remove "false ||") when Bugzilla XXXXXX fixed

Obviously that means that those bugs, once their fixes land, should
not be closed until they also update this test accordingly.
The two bugs so mentioned are Bug 681803 and Bug 685323.

error: pathspec 'test/acceptance/as3/Array/length_mods.as' did not match any file(s) known to git

--- test/acceptance/as3/Array/length_mods.as
+++ test/acceptance/as3/Array/length_mods.as
@@ -0,0 +1,474 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is [Open Source Virtual Machine].
+ *
+ * The Initial Developer of the Original Code is
+ * Adobe System Incorporated.
+ * Portions created by the Initial Developer are Copyright (C) 2011
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK *****/
+
+package {
+    public dynamic class Subarray extends Array
+    {
+        public function Subarray(l) {
+            super(l);
+        }
+
+        public override function get length():uint
+        {
+            return super.length;
+        }
+
+        public override function set length(newLength:uint)
+        {
+            super.length = newLength;
+        }
+    }
+}
+
+import avmplus.System;
+import flash.utils.ByteArray;
+
+var SECTION = "Array";
+var VERSION = "AS3";
+startTest();
+var TITLE   = "Array methods that handle/mangle length";
+var bug     = "661330";
+
+writeHeaderToLog( SECTION + " "+ TITLE );
+
+// Array
+var azero;
+var afive;
+var amax0;
+var amax2;
+var amax5;
+
+// Subclass
+var testing_subclass:Boolean = true;
+var szero;
+var sfive;
+var smax0;
+var smax2;
+var smax5;
+
+// Vector
+var testing_vector:Boolean = true;
+var vzero;
+var vfive;
+var vmax0;
+var vmax2;
+var vmax5;
+
+// ByteArray
+var testing_bytearray:Boolean = true;
+var bzero;
+var bfive;
+var bmax0;
+var bmax2;
+var bmax5;
+
+// Object (with length property)
+var testing_objwithlength:Boolean = true;
+var ozero;
+var ofive;
+var omax0;
+var omax2;
+var omax5;
+
+// This is the constructor for the Object cases above
+function WithLength(l) { this.length = l; }
+
+var all_arrays;    // array alternating strings and arrays of array subclasses.
+var all_arraylike; // array alternating strings and arrays of array-likes.
+
+function apply_arrays(f) {
+    var i = 1;
+    all_arrays[1].map(f); i += 2; // array
+    if (i >= all_arrays.length) return;
+    all_arrays[3].map(f); i += 2; // subclass of array
+}
+
+// Maps f over every odd-indexed element of all_arraylike (thus f is
+// mapped over the array-likes).
+function apply_alikes(f) {
+    // (unrolled for loop so that stack-traces say which arraylike is faulting)
+    var i = 1;
+    all_arraylike[1].map(f); i += 2; // array
+    if (i >= all_arraylike.length) return;
+    all_arraylike[3].map(f); i += 2; // subclass of array
+    if (i >= all_arraylike.length) return;
+    all_arraylike[5].map(f); i += 2; // vector
+    if (i >= all_arraylike.length) return;
+    all_arraylike[7].map(f); i += 2; // bytearray
+    if (i >= all_arraylike.length) return;
+    all_arraylike[9].map(f); i += 2; // object with length
+}
+
+function reset() {
+    all_arrays    = [];
+    all_arraylike = [];
+
+    function newarrays(name)
+    {
+        all_arrays.push(name);
+        all_arrays.push([]);
+        newalikes(name);
+    }
+
+    function newalikes(name)
+    {
+        all_arraylike.push(name);
+        all_arraylike.push([]);
+    }
+
+    function pushlike(a)
+    {
+        var top = all_arraylike[all_arraylike.length - 1];
+        top.push(a);
+        return a;
+    }
+
+    function pusharray(a)
+    {
+        var top = all_arrays[all_arrays.length - 1];
+        top.push(a);
+        return pushlike(a);
+    }
+
+    newarrays("arrays:");
+    azero = pusharray(new Array(0));
+    afive = pusharray(new Array(5));
+    amax0 = pusharray(new Array(uint.MAX_VALUE));
+    amax2 = pusharray(new Array(uint.MAX_VALUE - 2));
+    amax5 = pusharray(new Array(uint.MAX_VALUE - 5));
+
+    if (testing_subclass)
+    {
+        newarrays("subarrays:");
+        ozero = pusharray(new Subarray(0));
+        ofive = pusharray(new Subarray(5));
+        omax0 = pusharray(new Subarray(uint.MAX_VALUE));
+        omax2 = pusharray(new Subarray(uint.MAX_VALUE - 2));
+        omax5 = pusharray(new Subarray(uint.MAX_VALUE - 5));
+    }
+
+    if (testing_vector)
+    {
+        newalikes("vectors:");
+        vzero = pushlike(new Vector.<int>(0));
+        vfive = pushlike(new Vector.<int>(5));
+        // These cause assertion failures in Debug (not necessarily
+        // expected; see Bugzilla 685520) and probably would cause out
+        // of memory failures if uncommented anyway.
+        // vmax0 = pushlike(new Vector.<int>(uint.MAX_VALUE));
+        // vmax2 = pushlike(new Vector.<int>(uint.MAX_VALUE - 2));
+        // vmax5 = pushlike(new Vector.<int>(uint.MAX_VALUE - 5));
+    }
+
+    if (testing_bytearray)
+    {
+        newalikes("bytearrays:");
+        bzero = pushlike(new ByteArray()); bzero.length = 0;
+        bfive = pushlike(new ByteArray()); bfive.length = 5;
+        // These cause system to run out of memory (as expected).
+        //bmax0 = pushlike(new ByteArray()); bmax0.length = uint.MAX_VALUE;
+        //bmax2 = pushlike(new ByteArray()); bmax2.length = uint.MAX_VALUE - 2;
+        //bmax5 = pushlike(new ByteArray()); bmax5.length = uint.MAX_VALUE - 5;
+    }
+
+    if (testing_objwithlength)
+    {
+        newalikes("objects:");
+        ozero = pushlike(new WithLength(0));
+        ofive = pushlike(new WithLength(5));
+        omax0 = pushlike(new WithLength(uint.MAX_VALUE));
+        omax2 = pushlike(new WithLength(uint.MAX_VALUE - 2));
+        omax5 = pushlike(new WithLength(uint.MAX_VALUE - 5));
+    }
+}
+
+function alternating_lengths(arr)
+{
+    var result = [];
+    for (var i=0; i < arr.length; i+=2) {
+        var name = arr[i];
+        var arraylikes = arr[i+1];
+        result.push(name);
+        result = result.concat(arraylikes.map(function (a) {return a.length;}))
+    }
+    return result.toString();
+}
+
+function arrays_len() {
+    return alternating_lengths(all_arrays);
+}
+function alikes_len() {
+    return alternating_lengths(all_arraylike);
+}
+
+function test_arrays(testname, fcn,
+                     expected_array_lengths,
+                     expected_subarray_lengths) {
+    reset();
+    apply_arrays(fcn);
+    var expected =
+        (expected_array_lengths+
+         (testing_subclass ? ","+expected_subarray_lengths : ""));
+    AddTestCase(testname, expected, arrays_len());
+}
+
+function test_arraylikes(testname, fcn,
+                         expected_array_lengths,
+                         expected_subarray_lengths,
+                         expected_vector_lengths,
+                         expected_bytearray_lengths,
+                         expected_objwithlength_lengths) {
+    reset();
+    apply_alikes(fcn);
+    var expected =
+        (expected_array_lengths+
+         (testing_subclass ? ","+expected_subarray_lengths : "")+
+         (testing_vector ? ","+expected_vector_lengths : "")+
+         (testing_bytearray ? ","+expected_bytearray_lengths : "")+
+         (testing_objwithlength ? ","+expected_objwithlength_lengths : ""));
+    AddTestCase(testname, expected, alikes_len());
+}
+
+
+// For ease of comparison in actual tests below, here are lengths of all arrays.
+test_arrays("base line", function (a) { /*no-op*/ },
+            "arrays:,0,5,4294967295,4294967293,4294967290",
+            "subarrays:,0,5,4294967295,4294967293,4294967290");
+
+// Analogously, base line lengths for all the array-likes.
+test_arraylikes("base line", function(a) { /*no-op*/ },
+                "arrays:,0,5,4294967295,4294967293,4294967290",
+                "subarrays:,0,5,4294967295,4294967293,4294967290",
+                "vectors:,0,5",
+                "bytearrays:,0,5",
+                "objects:,0,5,4294967295,4294967293,4294967290");
+
+test_arrays("auto small", function(a) { a[5] = 5; },
+            "arrays:,6,6,4294967295,4294967293,4294967290",
+            "subarrays:,6,6,4294967295,4294967293,4294967290");
+
+test_arrays("auto large", function(a) { a[5] = 5; a[1000] = 1000; },
+            "arrays:,1001,1001,4294967295,4294967293,4294967290",
+            "subarrays:,1001,1001,4294967295,4294967293,4294967290");
+
+test_arrays("length direct 1K", function(a) { a.length = 1000; },
+            "arrays:,1000,1000,1000,1000,1000",
+            "subarrays:,1000,1000,1000,1000,1000");
+
+test_arrays("length indirect 1K", function(a) { a["length"] = 1000 },
+            "arrays:,1000,1000,1000,1000,1000",
+            "subarrays:,1000,1000,1000,1000,1000");
+
+test_arrays("length direct wrap", function(a) { a.length = uint.MAX_VALUE+2; },
+            "arrays:,1,1,1,1,1",
+            "subarrays:,1,1,1,1,1");
+
+test_arrays("length indirect wrap", function(a) { a["length"] = uint.MAX_VALUE+2; },
+            "arrays:,1,1,1,1,1",
+            "subarrays:,1,1,1,1,1");
+
+test_arrays("pub pop arrays", function(a) { a.public::pop(); },
+            "arrays:,0,4,4294967294,4294967292,4294967289",
+            "subarrays:,0,4,4294967294,4294967292,4294967289");
+
+test_arrays("AS3 pop arrays", function(a) { a.AS3::pop(); },
+            "arrays:,0,4,4294967294,4294967292,4294967289",
+            "subarrays:,0,4,4294967294,4294967292,4294967289");
+
+// Need to qualify pop as public::pop so that it will resolve
+// to the generic (and non-bound) pop method.
+test_arraylikes("pub pop alikes",
+                function(a) { Array.prototype.public::pop.call(a); },
+                "arrays:,0,4,4294967294,4294967292,4294967289",
+                "subarrays:,0,4,4294967294,4294967292,4294967289",
+                "vectors:,0,4",
+                "bytearrays:,0,4",
+                "objects:,0,4,4294967294,4294967292,4294967289");
+
+
+
+// uncomment (and remove "false ||") when Bugzilla 681803 fixed
+if (false /*|| System.swfVersion >= 15*/)
+{
+    test_arrays("pub push arrays", function(a) { a.public::push(1,2,3,4,5); },
+                "arrays:,5,10,4294967295,4294967295,4294967295",
+                "subarrays:,5,10,4294967295,4294967295,4294967295");
+}
+else
+{
+    test_arrays("pub push arrays", function(a) { a.public::push(1,2,3,4,5); },
+                "arrays:,5,10,4,2,4294967295",
+                "subarrays:,5,10,4,2,4294967295");
+}
+
+test_arrays("AS3 push arrays", function(a) { a.AS3::push(1,2,3,4,5); },
+            "arrays:,5,10,4294967295,4294967295,4294967295",
+            "subarrays:,5,10,4294967295,4294967295,4294967295");
+
+// uncomment (and remove "false ||") when Bugzilla 681803 fixed
+if (false /*|| System.swfVersion >= 15*/)
+{
+    // Need to qualify pop as public::push so that it will resolve
+    // to the generic (and non-bound) pop method.
+
+    test_arraylikes("pub push alikes",
+                    function(a) { Array.prototype.public::push.call(a,1,2,3,4,5); },
+                    "arrays:,5,10,4294967295,4294967295,4294967295",
+                    "subarrays:,5,10,4294967295,4294967295,4294967295",
+                    "vectors:,5,10",
+                    "bytearrays:,5,10",
+                    "objects:,5,10,4294967295,4294967295,4294967295");
+}
+else
+{
+    test_arraylikes("pub push alikes",
+                    function(a) { Array.prototype.public::push.call(a,1,2,3,4,5); },
+                    "arrays:,5,10,4,2,4294967295",
+                    "subarrays:,5,10,4,2,4294967295",
+                    "vectors:,5,10",
+                    "bytearrays:,5,10",
+                    "objects:,5,10,4,2,4294967295");
+}
+
+
+
+test_arrays("pub shift arrays", function(a) { a.public::shift(); },
+            "arrays:,0,4,4294967294,4294967292,4294967289",
+            "subarrays:,0,4,4294967294,4294967292,4294967289");
+
+test_arrays("AS3 shift arrays", function(a) { a.AS3::shift(); },
+            "arrays:,0,4,4294967294,4294967292,4294967289",
+            "subarrays:,0,4,4294967294,4294967292,4294967289");
+
+test_arraylikes("pub shift alikes",
+                function(a) {
+
+                    // The generic shift takes too long to run (and
+                    // occupies excess amount of memory) for the
+                    // generic object case when the object's .length
+                    // is anywhere near uint.MAX_VALUE.
+                    //
+                    // So we do not bother for the large Object cases.
+
+                    if (a instanceof WithLength && a.length > 5)
+                    {
+                        /* no-op */
+                    }
+                    else
+                    {
+                        Array.prototype.public::shift.call(a);
+                    }
+                },
+                "arrays:,0,4,4294967294,4294967292,4294967289",
+                "subarrays:,0,4,4294967294,4294967292,4294967289",
+                "vectors:,0,4",
+                "bytearrays:,0,4",
+                "objects:,0,4,4294967295,4294967293,4294967290");
+
+
+// uncomment (and remove "false ||") when Bugzilla 685323 fixed
+if (false /*|| System.swfVersion >= 15*/)
+{
+    test_arrays("pub unshift arrays", function(a) { a.public::unshift(1,2,3,4,5); },
+                "arrays:,5,10,4294967295,4294967295,4294967295",
+                "subarrays:,5,10,4294967295,4294967295,4294967295");
+}
+else
+{
+    test_arrays("pub unshift arrays", function(a) { a.public::unshift(1,2,3,4,5); },
+                "arrays:,5,10,4,2,4294967295",
+                "subarrays:,5,10,4,2,4294967295")
+}
+
+// uncomment (and remove "false ||") when Bugzilla 685323 fixed
+if (false /*|| System.swfVersion >= 15*/)
+{
+    test_arrays("AS3 unshift arrays", function(a) { a.AS3::unshift(1,2,3,4,5); },
+                "arrays:,5,10,4294967295,4294967295,4294967295",
+                "subarrays:,5,10,4294967295,4294967295,4294967295")
+}
+else
+{
+    test_arrays("AS3 unshift arrays", function(a) { a.AS3::unshift(1,2,3,4,5); },
+                "arrays:,5,10,4,2,4294967295",
+                "subarrays:,5,10,4,2,4294967295")
+}
+
+test_arraylikes("unshift alikes",
+                function(a) {
+
+                    // Unsurprisingly, the generic unshift takes too
+                    // long to run for the generic object case when
+                    // the object's .length is anywhere near
+                    // uint.MAX_VALUE, making it currently infeasible
+                    // to observe wrap-around via unshift.  So we do
+                    // not bother for the large Object cases.
+
+                    if (a instanceof WithLength && a.length > 5)
+                    {
+                        /* no-op */
+                    }
+                    else if (a is Vector.<int>)
+                    {
+                        // The generic var-args Array unshift expands
+                        // too fast for Vector (which cannot be
+                        // helped).  Unshifting by one element is an
+                        // accomodation for Vector.
+
+                        Array.prototype.public::unshift.call(a,5);
+                        Array.prototype.public::unshift.call(a,4);
+                        Array.prototype.public::unshift.call(a,3);
+                        Array.prototype.public::unshift.call(a,2);
+                        Array.prototype.public::unshift.call(a,1);
+                    }
+                    else
+                    {
+                        Array.prototype.public::unshift.call(a,1,2,3,4,5);
+                    }
+                },
+                // uncomment when Bugzilla 685323 fixed
+                ((false /*|| System.swfVersion >= 15*/)
+                 ? "arrays:,5,10,4294967295,4294967295,4294967295"
+                 : "arrays:,5,10,4,2,4294967295"),
+                ((false /*|| System.swfVersion >= 15*/)
+                 ? "subarrays:,5,10,4294967295,4294967295,4294967295"
+                 : "subarrays:,5,10,4,2,4294967295"),
+                "vectors:,5,10",
+                "bytearrays:,5,10",
+                // See note above.
+                "objects:,5,10,4294967295,4294967293,4294967290")
+
+test();


Added AdUnit class.

Added AdUnit class.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/OnCircle/vpaid-wrapper.git/'


Add TweenToCurrentPosition 2d Action

Add TweenToCurrentPosition 2d Action

error: pathspec 'src/org/flintparticles/twoD/actions/TweenToCurrentPosition.as' did not match any file(s) known to git

--- src/org/flintparticles/twoD/actions/TweenToCurrentPosition.as
+++ src/org/flintparticles/twoD/actions/TweenToCurrentPosition.as
@@ -0,0 +1,152 @@
+/*
+ * FLINT PARTICLE SYSTEM
+ * .....................
+ *
+ * Author: Richard Lord
+ * Copyright (c) Richard Lord 2008-2011
+ * http://flintparticles.org
+ *
+ *
+ * Licence Agreement
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package org.flintparticles.twoD.actions
+{
+	import org.flintparticles.common.actions.ActionBase;
+	import org.flintparticles.common.emitters.Emitter;
+	import org.flintparticles.common.initializers.Initializer;
+	import org.flintparticles.common.particles.Particle;
+	import org.flintparticles.twoD.particles.Particle2D;
+	import org.flintparticles.twoD.zones.Zone2D;
+
+	import flash.geom.Point;
+
+	[DefaultProperty("zone")]
+
+	/**
+	 * The TweenToCurrentPosition action adjusts the particle's position between two
+	 * locations as it ages. The start location is a random point within the specified
+	 * zone, and the end location is the particle's position when it is created or added
+	 * to the emitter. The current position is relative to the particle's energy,
+	 * which changes as the particle ages in accordance with the energy easing
+	 * function used. This action should be used in conjunction with the Age action.
+	 */
+
+	public class TweenToCurrentPosition extends ActionBase implements Initializer
+	{
+		private var _zone : Zone2D;
+
+		/**
+		 * The constructor creates a TweenToCurrentPosition action for use by an emitter.
+		 * To add a TweenToCurrentPosition to all particles created by an emitter, use the
+		 * emitter's addAction method.
+		 *
+		 * @see org.flintparticles.common.emitters.Emitter#addAction()
+		 *
+		 * @param zone The zone for the particle's position when its energy is 0.
+		 */
+		public function TweenToCurrentPosition( zone : Zone2D )
+		{
+			_zone = zone;
+			priority = -10;
+		}
+
+		/**
+		 * The zone for the particle's position when its energy is 0.
+		 */
+		public function get zone() : Zone2D
+		{
+			return _zone;
+		}
+
+		public function set zone( value : Zone2D ) : void
+		{
+			_zone = value;
+		}
+
+		/**
+		 *
+		 */
+		override public function addedToEmitter( emitter : Emitter ) : void
+		{
+			if ( !emitter.hasInitializer( this ) )
+			{
+				emitter.addInitializer( this );
+			}
+		}
+
+		override public function removedFromEmitter( emitter : Emitter ) : void
+		{
+			emitter.removeInitializer( this );
+		}
+
+		/**
+		 *
+		 */
+		public function initialize( emitter : Emitter, particle : Particle ) : void
+		{
+			var p : Particle2D = Particle2D( particle );
+			var pt : Point = _zone.getLocation();
+			var data : TweenToPositionData = new TweenToPositionData( pt.x, pt.y, p.x, p.y );
+			p.dictionary[this] = data;
+		}
+
+		/**
+		 * Calculates the current position of the particle based on it's energy.
+		 *
+		 *
This method is called by the emitter and need not be called by the
+		 * user.

+		 *
+		 * @param emitter The Emitter that created the particle.
+		 * @param particle The particle to be updated.
+		 * @param time The duration of the frame - used for time based updates.
+		 *
+		 * @see org.flintparticles.common.actions.Action#update()
+		 */
+		override public function update( emitter : Emitter, particle : Particle, time : Number ) : void
+		{
+			var p : Particle2D = Particle2D( particle );
+			if ( !p.dictionary[this] )
+			{
+				initialize( emitter, particle );
+			}
+			var data : TweenToPositionData = p.dictionary[this];
+			p.x = data.endX + data.diffX * p.energy;
+			p.y = data.endY + data.diffY * p.energy;
+		}
+	}
+}
+
+class TweenToPositionData
+{
+	public var diffX : Number;
+	public var diffY : Number;
+	public var endX : Number;
+	public var endY : Number;
+
+	public function TweenToPositionData( startX : Number, startY : Number, endX : Number, endY : Number )
+	{
+		this.diffX = startX - endX;
+		this.diffY = startY - endY;
+		this.endX = endX;
+		this.endY = endY;
+	}
+}


fixing plugs

fixing plugs

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rafaelcordoba/cocktail-demo.git/'


Flexmojos 4.0 coverage

Flexmojos 4.0 coverage

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/edward-yakop/flexmojos.git/'


Working on pulling Async Stinkleton out of system

error: pathspec 'as3/src/asunit4/async/IAsync.as' did not match any file(s) known to git

--- as3/src/asunit4/async/IAsync.as
+++ as3/src/asunit4/async/IAsync.as
@@ -0,0 +1,18 @@
+package asunit4.async {
+
+    import flash.events.IEventDispatcher;
+
+    public interface IAsync extends IEventDispatcher {
+
+		function add(handler:Function, duration:int = -1):Function;
+
+		function cancelPending():void;
+
+		function get hasPending():Boolean;
+
+		function getPending():Array;
+
+		function proceedOnEvent(test:Object, target:IEventDispatcher, eventName:String, timeout:int = 500, timeoutHandler:Function = null):void;
+    }
+}
+


Refactored GuardProcessor to use cache of verified guard classes

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/eric-stanley/robotlegs-framework.git/'


Removes reflector from ExtensionInstaller


audioslave fix

audioslave fix


remove channels when re-initializing

remove channels when re-initializing

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/pubnub/flash.git/'


A little renaming.

A little renaming.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/c0d3m0nk3y/Konata.git/'


Added a new type of object- AugBubble. Allows for an name, description, icon, media (the bubble itself), and alignment media (a still shot that the iphone camera should line up with to get correct orientation).

error: pathspec 'flexEditor/src/org/arisgames/editor/view/ObjectEditorAugBubbleView.as' did not match any file(s) known to git

--- flexEditor/src/org/arisgames/editor/view/ObjectEditorAugBubbleView.as
+++ flexEditor/src/org/arisgames/editor/view/ObjectEditorAugBubbleView.as
@@ -0,0 +1,155 @@
+package org.arisgames.editor.view
+{
+	import flash.events.MouseEvent;
+
+	import mx.containers.HBox;
+	import mx.containers.Panel;
+	import mx.controls.Alert;
+	import mx.controls.Button;
+	import mx.controls.CheckBox;
+	import mx.controls.NumericStepper;
+	import mx.controls.TextArea;
+	import mx.controls.TextInput;
+	import mx.events.DynamicEvent;
+	import mx.events.FlexEvent;
+	import mx.rpc.Responder;
+	import mx.validators.Validator;
+
+	import org.arisgames.editor.components.ItemEditorMediaDisplayMX;
+	import org.arisgames.editor.data.businessobjects.ObjectPaletteItemBO;
+	import org.arisgames.editor.models.GameModel;
+	import org.arisgames.editor.services.AppServices;
+	import org.arisgames.editor.util.AppConstants;
+	import org.arisgames.editor.util.AppDynamicEventManager;
+
+	public class ObjectEditorAugBubbleView extends Panel
+	{
+		// Data Object
+		private var objectPaletteItem:ObjectPaletteItemBO;
+
+		// GUI
+		[Bindable] public var theName:TextInput;
+		[Bindable] public var description:TextArea;
+		[Bindable] public var cancelButton:Button;
+		[Bindable] public var saveButton:Button;
+		[Bindable] public var hbox:HBox;
+		[Bindable] public var mediaDisplay:ItemEditorMediaDisplayMX;
+
+		[Bindable] public var v1:Validator;
+		[Bindable] public var v2:Validator;
+
+		/**
+		 * Constructor
+		 */
+		public function ObjectEditorAugBubbleView()
+		{
+			super();
+			this.addEventListener(FlexEvent.CREATION_COMPLETE, handleInit)
+		}
+
+		private function handleInit(event:FlexEvent):void
+		{
+			trace("ObjectEditorAugBubbleView: handleInit");
+			saveButton.addEventListener(MouseEvent.CLICK, handleSaveButton);
+		}
+
+		public function getObjectPaletteItem():ObjectPaletteItemBO
+		{
+			return objectPaletteItem;
+		}
+
+		public function setObjectPaletteItem(opi:ObjectPaletteItemBO):void
+		{
+			trace("ObjectEditorAugBubbleView: Setting objectPaletteItem with name = '" + opi.name);
+			objectPaletteItem = opi;
+			mediaDisplay.setObjectPaletteItem(opi);
+			this.pushDataIntoGUI();
+		}
+
+		private function pushDataIntoGUI():void
+		{
+			var obj:Object = objectPaletteItem;
+			theName.text = objectPaletteItem.augBubble.name;
+			description.text = objectPaletteItem.augBubble.desc;
+		}
+
+		private function isFormValid():Boolean
+		{
+			return (Validator.validateAll([v1, v2]).length == 0)
+		}
+
+		private function handleCancelButton(evt:MouseEvent):void
+		{
+			trace("ObjectEditorAugBubbleView: Cancel button clicked...");
+			var de:DynamicEvent = new DynamicEvent(AppConstants.DYNAMICEVENT_CLOSEOBJECTPALETTEITEMEDITOR);
+			AppDynamicEventManager.getInstance().dispatchEvent(de);
+		}
+
+		private function handleSaveButton(evt:MouseEvent):void
+		{
+			trace("ObjectEditorAugBubbleView: Save button clicked...");
+
+			if (!isFormValid())
+			{
+				trace("ItemEditorItemView: Form is not valid, stop save processing.");
+				return;
+			}
+
+			// Save Item Data
+			objectPaletteItem.augBubble.name = theName.text;
+			objectPaletteItem.augBubble.desc = description.text;
+
+			AppServices.getInstance().saveAugBubble(GameModel.getInstance().game.gameId, objectPaletteItem.augBubble, new Responder(handleSaveAugBubble, handleFault));
+
+			// Save ObjectPaletteItem
+			objectPaletteItem.name = objectPaletteItem.augBubble.name;
+			AppServices.getInstance().saveContent(GameModel.getInstance().game.gameId, objectPaletteItem, new Responder(handleSaveContent, handleFault))
+
+			// Close down the panel
+			var de:DynamicEvent = new DynamicEvent(AppConstants.DYNAMICEVENT_CLOSEOBJECTPALETTEITEMEDITOR);
+			AppDynamicEventManager.getInstance().dispatchEvent(de);
+
+		}
+
+		private function handleSaveAugBubble(obj:Object):void
+		{
+			trace("ObjectEditorAugBubbleView: In handleSaveAugBubble() Result called with obj = " + obj + "; Result = " + obj.result);
+			if (obj.result.returnCode != 0)
+			{
+				trace("ObjectEditorAugBubbleView: Bad save web page attempt... let's see what happened.  Error = '" + obj.result.returnCodeDescription + "'");
+				var msg:String = obj.result.returnCodeDescription;
+				Alert.show("Error Was: " + msg, "Error While Saving Web Page");
+			}
+			else
+			{
+				trace("ObjectEditorAugBubbleView:  Save web page was successful, wait on saveContent now to close the editor and update the object palette.");
+			}
+			trace("ObjectEditorAugBubbleView: Finished with handleSaveAugBubble().");
+		}
+
+		private function handleSaveContent(obj:Object):void
+		{
+			trace("ObjectEditorAugBubbleView: In handleSaveContent() Result called with obj = " + obj + "; Result = " + obj.result);
+			if (obj.result.returnCode != 0)
+			{
+				trace("ObjectEditorAugBubbleView: Bad save item content attempt... let's see what happened.  Error = '" + obj.result.returnCodeDescription + "'");
+				var msg:String = obj.result.returnCodeDescription;
+				Alert.show("Error Was: " + msg, "Error While Saving Item");
+			}
+			else
+			{
+				trace("ObjectEditorAugBubbleView: Save item content was successful, now update the object palette.");
+
+				var uop:DynamicEvent = new DynamicEvent(AppConstants.APPLICATIONDYNAMICEVENT_REDRAWOBJECTPALETTE);
+				AppDynamicEventManager.getInstance().dispatchEvent(uop);
+			}
+			trace("ItemEditorItemView: Finished with handleSaveContent().");
+		}
+
+		public function handleFault(obj:Object):void
+		{
+			trace("Fault called: " + obj.message);
+			Alert.show("Error occurred: " + obj.message, "Problems Saving AugBubble");
+		}
+	}
+}


Automatable replacement for AS3 Sprite startDrag/stopDrag that uses DOM events.

error: pathspec 'flash/util/DOMEventDrag.as' did not match any file(s) known to git

--- flash/util/DOMEventDrag.as
+++ flash/util/DOMEventDrag.as
@@ -0,0 +1,104 @@
+package util {
+  import flash.display.Sprite;
+  import flash.events.MouseEvent;
+  import flash.geom.Point;
+  import flash.geom.Rectangle;
+
+  /*
+   * Replacement for AS3 Sprite startDrag/stopDrag
+   * using only DOM events.
+   * This allows the drag/drop action to be automated
+   * using Windmill or other automation frameworks
+   * that rely on simulated user events
+   */
+  public class DOMEventDrag {
+    // The Sprite instance to drag
+    private static var dragSprite:Sprite;
+    // Pointer offset from top-left corner of the Sprite
+    private static var offset:Point;
+    // Lock pointer to the center of the Sprite or not
+    private static var lockCenter:Boolean;
+    // Drag constraints, if any, for the drag operation
+    private static var bounds:Rectangle;
+
+    // For docs on the built-in method, see:
+    // http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/Sprite.html#startDrag%28%29
+    public static function startDrag(spr:Sprite,
+        lockCenter:Boolean = false, bounds:Rectangle = null):void {
+      DOMEventDrag.dragSprite = spr;
+      DOMEventDrag.lockCenter = lockCenter;
+      DOMEventDrag.bounds = bounds;
+      // Event listener for mouse move on the stage
+      // routed to private doDrag method
+      spr.stage.addEventListener(MouseEvent.MOUSE_MOVE, DOMEventDrag.doDrag);
+    }
+
+    // For docs on the built-in method, see:
+    // http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/Sprite.html#stopDrag%28%29
+    public static function stopDrag(spr:Sprite):void {
+      // Remove the event listener on the stage
+      DOMEventDrag.dragSprite.stage.removeEventListener(
+          MouseEvent.MOUSE_MOVE,
+          DOMEventDrag.doDrag);
+      // Remove the dragSprite and the saved offset
+      DOMEventDrag.dragSprite = null;
+      DOMEventDrag.offset = null;
+    }
+
+    private static function doDrag(e:MouseEvent):void {
+      var dr:Sprite = DOMEventDrag.dragSprite;
+      // If there's a dragSprite, drag that mofo
+      // The dragSprite is removed in stopDrag
+      if (dr) {
+        var dragX:int;
+        var dragY:int;
+        var coordsAbs:Point = new Point(e.stageX, e.stageY);
+        // Get the local coors of the sprite's container
+        var coordsLocal:Point = dr.parent.globalToLocal(coordsAbs);
+        // Since we don't get access to the inital mouse click,
+        // calculate the offset on the very first mouse move.
+        // Once the offset is set, blow by this every time.
+        // stopDrag clears the saved offset until the next drag
+        if (!DOMEventDrag.offset) {
+          // Lock the cursor to the center of the Sprite
+          // Set in the constructor -- defaults to false
+          if (DOMEventDrag.lockCenter) {
+            var offX:int = dr.width / 2;
+            var offY:int = dr.height / 2;
+            DOMEventDrag.offset = new Point(offX, offY);
+          }
+          // Otherwise remember where the click happened,
+          // and preserve the offset
+          else {
+            DOMEventDrag.offset = new Point(coordsLocal.x - dr.x,
+                coordsLocal.y - dr.y);
+          }
+        }
+        // Adjust the x/y by the offset -- either pointer position
+        // or to center of the Sprite
+        dragX = coordsLocal.x - DOMEventDrag.offset.x;
+        dragY = coordsLocal.y - DOMEventDrag.offset.y;
+        // Observe any drag constraints
+        var bounds:Rectangle = DOMEventDrag.bounds;
+        if (bounds) {
+          // Left bound
+          dragX = dragX < bounds.left ?
+              bounds.left : dragX;
+          // Top bound
+          dragY = dragY < bounds.top ?
+              bounds.top : dragY;
+          // Right bound
+          dragX = (dragX + dr.width) > bounds.right ?
+              (bounds.right - dr.width) : dragX;
+          // Left bound
+          dragY = (dragY + dr.height) > bounds.bottom ?
+              (bounds.bottom - dr.height) : dragY;
+        }
+        dr.x = Math.round(dragX);
+        dr.y = Math.round(dragY);
+      }
+    }
+  }
+}
+
+


custom layout of title bars and other stretchy things

error: pathspec 'frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as' did not match any file(s) known to git

--- frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as
+++ frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as
@@ -0,0 +1,179 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads.layouts
+{
+	import flash.display.DisplayObject;
+	import flash.display.DisplayObjectContainer;
+
+	import org.apache.flex.core.IBeadLayout;
+	import org.apache.flex.core.ILayoutParent;
+	import org.apache.flex.core.IStrand;
+	import org.apache.flex.core.UIBase;
+	import org.apache.flex.core.ValuesManager;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.IEventDispatcher;
+
+    /**
+     *  The FlexibleFirstChildHorizontalLayout class is a simple layout
+     *  bead.  It takes the set of children and lays them out
+     *  horizontally in one row, separating them according to
+     *  CSS layout rules for margin and padding styles. But it
+     *  will size the first child to take up as much or little
+     *  room as possible.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+	public class FlexibleFirstChildHorizontalLayout implements IBeadLayout
+	{
+        /**
+         *  Constructor.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+		public function FlexibleFirstChildHorizontalLayout()
+		{
+		}
+
+		private var _strand:IStrand;
+
+        /**
+         *  @copy org.apache.flex.core.IBead#strand
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+		public function set strand(value:IStrand):void
+		{
+			_strand = value;
+            IEventDispatcher(value).addEventListener("layoutNeeded", changeHandler);
+			IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
+			IEventDispatcher(value).addEventListener("childrenAdded", changeHandler);
+			IEventDispatcher(value).addEventListener("itemsCreated", changeHandler);
+		}
+
+		private function changeHandler(event:Event):void
+		{
+			var layoutParent:ILayoutParent = _strand.getBeadByType(ILayoutParent) as ILayoutParent;
+			var contentView:DisplayObjectContainer = layoutParent.contentView;
+
+			var n:int = contentView.numChildren;
+			var marginLeft:Object;
+			var marginRight:Object;
+			var marginTop:Object;
+			var marginBottom:Object;
+			var margin:Object;
+			var maxHeight:Number = 0;
+			var verticalMargins:Array = [];
+
+			for (var i:int = n - 1; i >= 0; i--)
+			{
+				var child:DisplayObject = contentView.getChildAt(i);
+				margin = ValuesManager.valuesImpl.getValue(child, "margin");
+				if (margin is Array)
+				{
+					if (margin.length == 1)
+						marginLeft = marginTop = marginRight = marginBottom = margin[0];
+					else if (margin.length <= 3)
+					{
+						marginLeft = marginRight = margin[1];
+						marginTop = marginBottom = margin[0];
+					}
+					else if (margin.length == 4)
+					{
+						marginLeft = margin[3];
+						marginBottom = margin[2];
+						marginRight = margin[1];
+						marginTop = margin[0];
+					}
+				}
+				else if (margin == null)
+				{
+					marginLeft = ValuesManager.valuesImpl.getValue(child, "margin-left");
+					marginTop = ValuesManager.valuesImpl.getValue(child, "margin-top");
+					marginRight = ValuesManager.valuesImpl.getValue(child, "margin-right");
+					marginBottom = ValuesManager.valuesImpl.getValue(child, "margin-bottom");
+				}
+				else
+				{
+					marginLeft = marginTop = marginBottom = marginRight = margin;
+				}
+				var ml:Number;
+				var mr:Number;
+				var mt:Number;
+				var mb:Number;
+				var lastmr:Number;
+				mt = Number(marginTop);
+				if (isNaN(mt))
+					mt = 0;
+				mb = Number(marginBottom);
+				if (isNaN(mb))
+					mb = 0;
+				if (marginLeft == "auto")
+					ml = 0;
+				else
+				{
+					ml = Number(marginLeft);
+					if (isNaN(ml))
+						ml = 0;
+				}
+				if (marginRight == "auto")
+					mr = 0;
+				else
+				{
+					mr = Number(marginRight);
+					if (isNaN(mr))
+						mr = 0;
+				}
+				child.y = mt;
+				maxHeight = Math.max(maxHeight, ml + child.height + mr);
+				var xx:Number = contentView.width;
+				if (i == 0)
+                {
+                    child.x = ml;
+                    child.width = xx - mr;
+                }
+				else
+                    child.x = xx - child.width - mr;
+				xx -= child.width + mr + ml;
+				lastmr = mr;
+				var valign:Object = ValuesManager.valuesImpl.getValue(child, "vertical-align");
+				verticalMargins.push({ marginTop: marginTop, marginBottom: marginBottom, valign: valign });
+			}
+			for (i = 0; i < n; i++)
+			{
+				var obj:Object = verticalMargins[0]
+				child = contentView.getChildAt(i);
+				if (obj.valign == "middle")
+					child.y = maxHeight - child.height / 2;
+				else if (valign == "bottom")
+					child.y = maxHeight - child.height - obj.marginBottom;
+				else
+					child.y = obj.marginTop;
+			}
+		}
+	}
+}


improving if

improving if


fix indent and remove uneeded import references


Dried up the argument juggling in TypeMatcher.


OFC-367 approve missing in multiple nodes on flex UI

error: pathspec 'collect-flex/collect-flex-client/src/main/flex/org/openforis/collect/ui/component/input/FormItemContextMenu.as' did not match any file(s) known to git

--- collect-flex/collect-flex-client/src/main/flex/org/openforis/collect/ui/component/input/FormItemContextMenu.as
+++ collect-flex/collect-flex-client/src/main/flex/org/openforis/collect/ui/component/input/FormItemContextMenu.as
@@ -0,0 +1,91 @@
+package org.openforis.collect.ui.component.input {
+	import flash.events.ContextMenuEvent;
+	import flash.ui.ContextMenu;
+	import flash.ui.ContextMenuItem;
+
+	import org.openforis.collect.Application;
+	import org.openforis.collect.event.EventDispatcherFactory;
+	import org.openforis.collect.event.NodeEvent;
+	import org.openforis.collect.i18n.Message;
+	import org.openforis.collect.metamodel.proxy.NodeDefinitionProxy;
+	import org.openforis.collect.model.CollectRecord$Step;
+	import org.openforis.collect.model.proxy.EntityProxy;
+	import org.openforis.collect.ui.component.detail.CollectFormItem;
+
+	/**
+	 * @author M. Togna
+	 * @author S. Ricci
+	 * */
+	public class FormItemContextMenu {
+
+		private static const APPROVE_MISSING:ContextMenuItem = new ContextMenuItem(Message.get("edit.contextMenu.approveMissingValue"), true);
+		private static const MENU_ITEMS:Array = [
+			APPROVE_MISSING
+		];
+
+		private var _contextMenu:ContextMenu;
+		private var _formItem:CollectFormItem;
+
+		{
+			initEventListeners();
+		}
+
+		public function FormItemContextMenu(formItem:CollectFormItem) {
+			this._contextMenu = new ContextMenu();
+			this._formItem = formItem;
+			updateItems();
+			this._formItem.contextMenu = this._contextMenu;
+		}
+
+		private static function initEventListeners():void {
+			//init context menu items' event listener
+			var item:ContextMenuItem;
+			for each (item in MENU_ITEMS)  {
+				item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemSelectHandler);
+			}
+		}
+
+		public function updateItems():void {
+			var items:Array = null;
+			if(Application.activeRecord != null) {
+				var step:CollectRecord$Step = Application.activeRecord.step;
+				items = createMenuItems(step);
+				_contextMenu.hideBuiltInItems();
+			}
+			_contextMenu.customItems = items;
+		}
+
+		private function createMenuItems(step:CollectRecord$Step):Array {
+			var items:Array = new Array();
+			if(_formItem.parentEntity != null) {
+				if(step == CollectRecord$Step.CLEANSING) {
+					var nodeName:String = _formItem.nodeDefinition.name;
+					var count:int = _formItem.parentEntity.getCount(nodeName);
+					if(count == 0) {
+						items.push(APPROVE_MISSING);
+					}
+				}
+			}
+			return items;
+		}
+
+		public static function menuItemSelectHandler(event:ContextMenuEvent):void {
+			var formItem:CollectFormItem = event.contextMenuOwner as CollectFormItem;
+			var parentEntity:EntityProxy = formItem.parentEntity;
+			var nodeDefinition:NodeDefinitionProxy = formItem.nodeDefinition;
+			var nodeEvent:NodeEvent = null;
+			switch(event.target) {
+				case APPROVE_MISSING:
+					nodeEvent = new NodeEvent(NodeEvent.APPROVE_MISSING);
+					nodeEvent.parentEntity = parentEntity;
+					nodeEvent.nodeName = nodeDefinition.name;
+					break;
+			}
+			if(nodeEvent != null) {
+				EventDispatcherFactory.getEventDispatcher().dispatchEvent(nodeEvent);
+			}
+		}
+
+	}
+
+}


added GraphSlave as default slave in case framework dont find some specific slave for the file extesion


Added new type class

Added new type class

git-svn-id: 27326a786375daad9d33dc990c6f272e4c8f567c@1336 fda5f131-174c-0410-8613-e0905860106b

fatal: unable to access 'https://github.com/openwms/org.openwms.git/': The requested URL returned error: 403


Call load on init if preload is not none Also, allow calling load without having the video play. Autoplay should autoplay the video as well.


created RingBuffer collection class

created RingBuffer collection class

git-svn-id: a1a4b28b82a3276cc491891159dd9963a0a72fae@4917 542714f4-19e9-0310-aa3c-eee0fc999fb1

error: pathspec 'src/as/com/threerings/util/RingBuffer.as' did not match any file(s) known to git

--- src/as/com/threerings/util/RingBuffer.as
+++ src/as/com/threerings/util/RingBuffer.as
@@ -0,0 +1,181 @@
+//
+// $Id$
+//
+// Narya library - tools for developing networked games
+// Copyright (C) 2002-2007 Three Rings Design, Inc., All Rights Reserved
+// http://www.threerings.net/code/narya/
+//
+// This library is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License as published
+// by the Free Software Foundation; either version 2.1 of the License, or
+// (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+package com.threerings.util {
+
+public class RingBuffer
+{
+    /** Creates a new RingBuffer with the specified capacity. */
+    public function RingBuffer (capacity :uint = 1)
+    {
+        _capacity = capacity;
+        _array.length = _capacity;
+    }
+
+    /** Returns the capacity of the RingBuffer. */
+    public function get capacity () :uint
+    {
+        return _capacity;
+    }
+
+    /**
+     * Sets the capacity of the RingBuffer.
+     * If the new capacity is less than the RingBuffer's length,
+     * elements will be removed from the end of the RingBuffer
+     * to accommodate the smaller capacity.
+     */
+    public function set capacity (newCapacity :uint) :void
+    {
+        // Copy all the elements to a new array.
+        var newArray :Array = new Array();
+        var newLength :uint = Math.min(_length, newCapacity);
+        newArray.length = newCapacity;
+        for (var i :uint = 0; i < newLength; ++i) {
+            newArray[i] = this.at(i);
+        }
+
+        _capacity = newCapacity;
+        _length = newLength;
+        _array = newArray;
+        _firstIndex = 0;
+    }
+
+    /** Returns the number of elements currently stored in the RingBuffer. */
+    public function get length () :uint
+    {
+        return _length;
+    }
+
+    /** Returns true if the RingBuffer contains 0 elements. */
+    public function get empty () :Boolean
+    {
+        return (0 == _length);
+    }
+
+    /**
+     * Adds the specified elements to the front of the RingBuffer.
+     * If the RingBuffer's length is equal to its capacity, this
+     * will cause elements to be removed from the back of
+     * the RingBuffer.
+     * Returns the new length of the RingBuffer.
+     */
+    public function unshift (...args) :uint
+    {
+        for (var i :int = args.length - 1; i >= 0; --i) {
+            var index :uint = (_firstIndex > 0 ? _firstIndex - 1 : _capacity - 1);
+            _array[index] = args[i];
+            _length = Math.min(_length + 1, _capacity);
+            _firstIndex = index;
+        }
+
+        return _length;
+    }
+
+    /**
+     * Adds the specified elements to the back of the RingBuffer.
+     * If the RingBuffer's length is equal to its capacity, this
+     * will cause a elements to be removed from the front of
+     * the RingBuffer.
+     * Returns the new length of the RingBuffer.
+     */
+    public function push (...args) :uint
+    {
+        for (var i :uint = 0; i < args.length; ++i) {
+            var index :uint = ((_firstIndex + _length) % _capacity);
+            _array[index] = args[i];
+            _length = Math.min(_length + 1, _capacity);
+
+            // did we overwrite the first index?
+            if (index == _firstIndex && _length == _capacity) {
+                _firstIndex = (_firstIndex < _capacity - 1 ? _firstIndex + 1 : 0);
+            }
+        }
+
+        return _length;
+    }
+
+    /**
+     * Removes the first element from the RingBuffer and returns it.
+     * If the RingBuffer is empty, shift() will return undefined.
+     */
+    public function shift () :*
+    {
+        if (this.empty) {
+            return undefined;
+        }
+
+        var obj :* = _array[_firstIndex];
+        _array[_firstIndex] = undefined;
+        _firstIndex = (_firstIndex < _capacity - 1 ? _firstIndex + 1 : 0);
+        --_length;
+
+        return obj;
+    }
+
+    /**
+     * Removes the last element from the RingBuffer and returns it.
+     * If the RingBuffer is empty, pop() will return undefined.
+     */
+    public function pop () :*
+    {
+        if (this.empty) {
+            return undefined;
+        }
+
+        var lastIndex :uint = ((_firstIndex + _length - 1) % _capacity);
+
+        var obj :* = _array[lastIndex];
+        _array[lastIndex] = undefined;
+        --_length;
+
+        return obj;
+    }
+
+    /** Removes all elements from the RingBuffer. */
+    public function clear () :void
+    {
+        _array = new Array();
+        _array.length = _capacity;
+        _length = 0;
+        _firstIndex = 0;
+    }
+
+    /**
+     * Returns the element at the specified index.
+     * If index >= length, at() will return undefined.
+     */
+    public function at (index :uint) :*
+    {
+        if (index >= _length) {
+            return undefined;
+        } else {
+            var index :uint = ((_firstIndex + index) % _capacity);
+            return _array[index];
+        }
+    }
+
+    protected var _array :Array = new Array();
+    protected var _capacity :uint;
+    protected var _length :uint;
+    protected var _firstIndex :uint;
+}
+
+}


Added an ImageUtil with some basic utility functions.

git-svn-id: a1a4b28b82a3276cc491891159dd9963a0a72fae@4099 542714f4-19e9-0310-aa3c-eee0fc999fb1

fatal: unable to access 'https://github.com/threerings/narya.git/': The requested URL returned error: 403


Do not throw onError on dead socket. Just reconnect.


Check buffering flag was true before emitting playing event.


adding name getter

adding name getter


fixing loading shortcut switch/case

fixing loading shortcut switch/case


git-svn-id: http://svn.rails2u.com/as3rails2u/trunk@64 96db6a20-122f-0410-8d9f-89437bbe4005

error: pathspec 'src/com/rails2u/bridge/JSProxy.as' did not match any file(s) known to git

--- src/com/rails2u/bridge/JSProxy.as
+++ src/com/rails2u/bridge/JSProxy.as
@@ -0,0 +1,157 @@
+package com.rails2u.bridge {
+    import flash.utils.Proxy;
+    import flash.external.ExternalInterface;
+    import flash.utils.flash_proxy;
+
+    public dynamic class JSProxy extends Proxy {
+        use namespace flash_proxy;
+
+        public static var proxyLogger:Function = function(...args):void {};
+        private var _stack:Array;
+        private var _nextCallIsstack:Boolean = false;
+
+        public function JSProxy(stack:Array = null) {
+            _stack = stack || [];
+        }
+
+        public function get _():JSProxy {
+            _nextCallIsstack = true;
+            return this;
+        }
+
+        public function get proxy():JSProxy {
+            return getProperty('proxy');
+        }
+
+        public static function get proxy():JSProxy {
+             return new JSProxy();
+        }
+
+        flash_proxy override function callProperty(name:*, ...args):* {
+            if (_nextCallIsstack) {
+                _nextCallIsstack = false;
+                _stack.push([name, args]);
+                return this;
+            } else {
+                return callJS(newStack.apply(null, [name].concat(args)));
+            }
+        }
+
+        flash_proxy override function getProperty(name:*):* {
+            _nextCallIsstack = false;
+            return new JSProxy(newStack(name));
+        }
+
+        flash_proxy override function getDescendants(name:*):* {
+            _nextCallIsstack = false;
+            return callJS(newStack(name));
+        }
+
+        flash_proxy function newStack(name:*, ...args):Array {
+            var stack:Array = _stack.slice();
+            if (args.length > 0) {
+                stack.push([name, args.slice()]);
+            } else {
+                stack.push(name);
+            }
+            return stack;
+        }
+
+        flash_proxy override function hasProperty(name:*):Boolean {
+            return false;
+        }
+
+        flash_proxy override function setProperty(name:*, value:*):void {
+            _nextCallIsstack = false;
+            callJSSetProperty(newStack(name), value);
+        }
+
+        flash_proxy override function deleteProperty(name:*):Boolean {
+            return false;
+        }
+
+        public function toString():String {
+            var res:Array = createCommand(_stack.slice());
+            var cmd:String = res[0];
+            var args:Array = res[1];
+            return '[JSProxy] ' + cmd + ' :: ' + args.join(', ');
+        }
+
+        flash_proxy function callJSSetProperty(stack:Array, value:*):* {
+            if (!ExternalInterface.available)
+                return null;
+
+            var res:Array = createCommand(stack);
+            var cmd:String = res[0];
+            var args:Array = res[1];
+            args.push(value);
+            var argsString:String = createArgsString(args.length);
+
+            cmd = "(function(" + argsString + ") {return " + cmd + " = _" + (args.length - 1).toString() + ";})";
+            proxyLogger(cmd);
+            return ExternalInterface.call.apply(null, [cmd].concat(args));
+        }
+
+        flash_proxy function callJS(stack:Array):* {
+            if (!ExternalInterface.available)
+                return null;
+
+            var res:Array = createCommand(stack);
+            var cmd:String = res[0];
+            var args:Array = res[1];
+            var argsString:String = createArgsString(args.length);
+
+            if (args.length > 0) {
+                cmd = "(function(" + argsString + ") {return " + cmd + ";})";
+                proxyLogger(cmd);
+                proxyLogger(args);
+                return ExternalInterface.call.apply(null, [cmd].concat(args));
+            } else {
+                cmd = "(function() {return " + cmd + ";})";
+                proxyLogger(cmd);
+                return ExternalInterface.call(cmd);
+            }
+        }
+
+        flash_proxy function createArgsString(len:uint):String {
+            var res:Array = [];
+            for (var i:uint = 0; i < len; i++) {
+                res.push('_' + i);
+            }
+            return res.join(', ');
+        }
+
+        flash_proxy function createCommand(stack:Array):Array {
+            var receivers:Array = [];
+            var args:Array = [];
+            var argsStrings:Array = [];
+            while (stack.length) {
+                var o:* = stack.shift();
+                if (o is Array) {
+                    o = o as Array;
+                    var cmd:String = nameToString(o[0]) + '(';
+                    var cmdArgs:Array = [];
+                    var a:Array = o[1].slice();
+                    while (a.length) {
+                        cmdArgs.push('_' + args.length);
+                        args.push(a.shift());
+                    }
+                    cmd += cmdArgs.join(', ');
+                    cmd += ')';
+                    receivers.push(cmd);
+                } else {
+                    receivers.push(nameToString(o));
+                }
+            }
+            return [receivers.join('.').replace(/\.\[/g, '['), args];
+        }
+
+        flash_proxy function nameToString(name:*):String {
+            if (name is QName) {
+                return name.localName.toString();
+            } else {
+                return '[' + name.toString() + ']';
+            }
+        }
+    }
+}


FLEX-34625 Added a unit test which reproduces the bug.

error: pathspec 'frameworks/tests/unitTests/spark/skins/spark/FLEX_34625_Test.as' did not match any file(s) known to git

--- frameworks/tests/unitTests/spark/skins/spark/FLEX_34625_Test.as
+++ frameworks/tests/unitTests/spark/skins/spark/FLEX_34625_Test.as
@@ -0,0 +1,69 @@
+package spark.skins.spark {
+    import flash.events.Event;
+    import flash.events.EventDispatcher;
+
+    import mx.managers.FocusManager;
+    import mx.managers.IFocusManagerContainer;
+
+    import org.flexunit.asserts.assertTrue;
+    import org.flexunit.async.Async;
+    import org.fluint.uiImpersonation.UIImpersonator;
+
+    import spark.components.TextInput;
+
+    public class FLEX_34625_Test {
+
+        private static const NO_ENTER_FRAMES_TO_ALLOW:int = 4;
+        private var noEnterFramesRemaining:int = NaN;
+        private var _finishNotifier:EventDispatcher;
+
+        [Before]
+        public function setUp():void
+        {
+            _finishNotifier = new EventDispatcher();
+        }
+
+        [After]
+        public function tearDown():void
+        {
+            _finishNotifier = null;
+        }
+
+        [Test(async, timeout=500)]
+        public function testFocusSkinWithZeroFocusThickness():void
+        {
+            //given
+            const fm:FocusManager = new FocusManager(UIImpersonator.testDisplay as IFocusManagerContainer, false);
+            fm.showFocusIndicator = true;
+
+            const textInput:TextInput = new TextInput();
+            textInput.focusManager = fm;
+            UIImpersonator.addChild(textInput);
+
+            //when
+            textInput.setStyle("focusThickness", 0);
+            textInput.setFocus();
+
+            //then wait for the focus skin to show
+            noEnterFramesRemaining = NO_ENTER_FRAMES_TO_ALLOW;
+            UIImpersonator.testDisplay.addEventListener(Event.ENTER_FRAME, onEnterFrame);
+            Async.handleEvent(this, _finishNotifier, Event.COMPLETE, onTestComplete);
+        }
+
+        private function onEnterFrame(event:Event):void
+        {
+            if(!--noEnterFramesRemaining)
+            {
+                UIImpersonator.testDisplay.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
+
+                _finishNotifier.dispatchEvent(new Event(Event.COMPLETE));
+            }
+        }
+
+        private static function onTestComplete(event:Event, passThroughData:Object):void
+        {
+            //if we get here it means no error has been thrown
+            assertTrue(true);
+        }
+    }
+}


Added Component Mock

Added Component Mock

error: pathspec 'test/laml/display/ComponentMock.as' did not match any file(s) known to git

--- test/laml/display/ComponentMock.as
+++ test/laml/display/ComponentMock.as
@@ -0,0 +1,23 @@
+package laml.display {
+
+	public class ComponentMock extends Component {
+		public var widths:Array;
+		public var heights:Array;
+
+		public function ComponentMock() {
+			widths = new Array();
+			heights = new Array();
+			super();
+		}
+
+		override public function set width(w:Number):void {
+			super.width = w;
+			widths.push(w);
+		}
+
+		override public function set height(h:Number):void {
+			super.height = h;
+			heights.push(h);
+		}
+	}
+}


added neighborSitesForSite()

added neighborSitesForSite()

--- src/com/nodename/Delaunay/Voronoi.as
+++ src/com/nodename/Delaunay/Voronoi.as
@@ -104,9 +104,26 @@
 			var site:Site = _sitesIndexedByLocation[p];
 			if (!site)
 			{
-				return null;
+				return new Vector.<Point>();
 			}
 			return site.region(_plotBounds);
+		}
+
+		public function neighborSitesForSite(coord:Point):Vector.<Point>
+		{
+			var points:Vector.<Point> = new Vector.<Point>();
+			var site:Site = _sitesIndexedByLocation[coord];
+			if (!site)
+			{
+				return points;
+			}
+			var sites:Vector.<Site> = site.neighborSites();
+			var neighbor:Site;
+			for each (neighbor in sites)
+			{
+				points.push(neighbor.coord);
+			}
+			return points;
 		}

 		public function circles():Vector.<Circle>


add character state for backwards walking.

error: pathspec 'assets/scripts/character_states/walk_backward.as' did not match any file(s) known to git

--- assets/scripts/character_states/walk_backward.as
+++ assets/scripts/character_states/walk_backward.as
@@ -0,0 +1,11 @@
+void enter(entity_impl& out owner) {
+    owner.get_animation_component().blend_ani("walk_backward");
+}
+
+void update(float delta_time, entity_impl& out owner) {
+
+}
+
+void leave(entity_impl& out owner) {
+
+}


adding Sequence combinator

adding Sequence combinator

error: pathspec 'as/org/osflash/asjs/parser/combinators/Sequence.as' did not match any file(s) known to git

--- as/org/osflash/asjs/parser/combinators/Sequence.as
+++ as/org/osflash/asjs/parser/combinators/Sequence.as
@@ -0,0 +1,63 @@
+// 'sequence' is a parser combinator that processes a number of parsers in sequence.
+// It can take any number of arguments, each one being a parser. The parser that 'sequence'
+// returns succeeds if all the parsers in the sequence succeeds. It fails if any of them fail.
+
+package org.osflash.asjs.parser.combinators {
+
+    import org.osflash.asjs.parser.combinators.BaseParser;
+    import org.osflash.asjs.parser.structs.ParserStruct;
+
+    public class Sequence extends BaseParser{
+
+        public var parsers:Array;
+
+        public function Sequence(p:Array):void{
+
+            super('');
+
+            parsers = [];
+
+            for(var i = 0; i < p.length; i++) parsers.push(toParser(p[i]));
+
+
+        }
+
+        override public function getParserStructForState(state:ParserState):ParserStruct{
+
+            var cached:ParserState = state.getCached(id);
+            if(cached != null) return cached;
+
+            var ast:Array = [];
+            var matched:String = "";
+            var i:uint;
+            for(i=0; i< parsers.length; ++i) {
+                var result = parsers[i].getParserStructForState(state);
+                if(result != null) {
+                    state = result.remaining;
+                    if(result.ast != undefined && result.ast != null) {
+                        ast.push(result.ast);
+                        matched = matched + result.matched;
+                    }
+                } else {
+                    break;
+                }
+            }
+            if(i == parsers.length) {
+                cached = new ParserStruct(state, matched, ast);
+            } else {
+                cached = false;
+            }
+
+            state.putCached(id, cached);
+
+            return cached;
+
+        }
+
+
+    }
+
+}
+
+
+


The loadstarted should really be true before the loadstart event is fired

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/OnCircle/vpaid-wrapper.git/'


Fixed array notice.

Fixed array notice.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/ign/gaforflash.git/'


flash: avoid starting heartbeat prior to receiving metadata on swf (refs #524)

--- src/playbacks/flash/Player.as
+++ src/playbacks/flash/Player.as
@@ -128,7 +128,6 @@
       source = url;
       setupNetConnection();
       heartbeat.addEventListener( TimerEvent.TIMER, onHeartbeat );
-      heartbeat.start();
     }
     private function playerPause():void {
       _ns.pause();
@@ -223,6 +222,7 @@
       totalTime = info.duration;
       _triggerEvent('timeupdate');
       receivedMeta(info);
+      heartbeat.start();
     }
     public function receivedMeta(data:Object):void {
         setVideoSize(stage.stageWidth, stage.stageHeight);


Added a reference to the application root.

--- app/src/no/makingwaves/cust/dss/model/ModelLocator.as
+++ app/src/no/makingwaves/cust/dss/model/ModelLocator.as
@@ -68,7 +68,8 @@

 		// VERSION ================================================================

-		public const VERSION : String = "1.1 - Beta 1";
+		//public const VERSION : String = "1.1";
+		public const VERSION : String = "1.1 - TESTVERSJON 12.03.09";

 		// STATICS ================================================================

@@ -92,6 +93,8 @@

 		public var activeTravel : TravelVO = new TravelVO();

+
+		public var applicationReference : Reiseregningen;

 		//public var activeSpecificationNum : TravelSpecificationVO;


synchronizing the Bind improvements in Selector class

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rafaelcordoba/cocktail-demo.git/'


Added getAspectRatio() util function.

Added getAspectRatio() util function.

error: pathspec 'src/engine/tetragon/util/display/getAspectRatio.as' did not match any file(s) known to git

--- src/engine/tetragon/util/display/getAspectRatio.as
+++ src/engine/tetragon/util/display/getAspectRatio.as
@@ -0,0 +1,57 @@
+/*
+ *      _________  __      __
+ *    _/        / / /____ / /________ ____ ____  ___
+ *   _/        / / __/ -_) __/ __/ _ `/ _ `/ _ \/ _ \
+ *  _/________/  \__/\__/\__/_/  \_,_/\_, /\___/_//_/
+ *                                   /___/
+ *
+ * Tetragon : Game Engine for multi-platform ActionScript projects.
+ * http://www.tetragonengine.com/ - Copyright (C) 2012 Sascha Balkau
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+package tetragon.util.display
+{
+	import flash.display.DisplayObject;
+
+
+	/**
+	 * Returns the aspect ratio of the specified display object or that of the
+	 * stage if obj is null.
+	 *
+	 * The function takes into account cases where the height is larger than
+	 * the width.
+	 *
+	 * @param obj
+	 * @return Number or NaN.
+	 */
+	public function getAspectRatio(obj:DisplayObject = null):Number
+	{
+		if (!obj) obj = StageReference.stage;
+		if (!obj) return NaN;
+		var w:Number = obj.width;
+		var h:Number = obj.height;
+		if (h > w)
+		{
+			h = obj.width;
+			w = obj.height;
+		}
+		return w / h;
+	}
+}


adding demo Boot class

adding demo Boot class


Some useful functions for debugging

Some useful functions for debugging

error: pathspec 'common/actionscript/org/concord/sparks/util/Debug.as' did not match any file(s) known to git

--- common/actionscript/org/concord/sparks/util/Debug.as
+++ common/actionscript/org/concord/sparks/util/Debug.as
@@ -0,0 +1,49 @@
+package org.concord.sparks.util {
+
+    import fl.ik.IKArmature;
+    import fl.ik.IKJoint;
+    import fl.ik.IKManager;
+
+    import flash.display.DisplayObject;
+    import flash.display.DisplayObjectContainer;
+
+    public class Debug {
+
+        /**
+         * Print out the hierarchy of display objects
+         * e.g. traceDisplayList(this.stage);
+         */
+        public static function traceDisplayList(container:DisplayObjectContainer, indentString:String = ""):void {
+            var child:DisplayObject;
+            trace(indentString + container, container.name);
+            for (var i:uint=0; i < container.numChildren; i++) {
+                child = container.getChildAt(i);
+                if (container.getChildAt(i) is DisplayObjectContainer) {
+                    traceDisplayList(DisplayObjectContainer(child), indentString + "    ")
+                }
+            }
+        }
+
+        public static function traceArmatures():void {
+            for (var i = 0; i < IKManager.numArmatures; ++i) {
+                var armature:IKArmature = IKManager.getArmatureAt(i);
+                trace('Armature: ' + armature.name);
+                var rootJoint:IKJoint = armature.rootJoint;
+                traceJoint(rootJoint, 1);
+            }
+        }
+
+        public static function traceJoint(joint:IKJoint, level:int):void {
+            var s:String = '';
+            for (var i = 0; i < level; ++i) {
+                s += '  ';
+            }
+            trace(s + 'Joint: ' + joint.name + ' Bone: ' + joint.bone.name);
+            for (var j = 0; j < joint.numChildren; ++j) {
+                var child:IKJoint = joint.getChildAt(j);
+                traceJoint(child, level + 1);
+            }
+        }
+
+    }
+}


new assert step

new assert step

git-svn-id: 4969af7a11582c80b682e8a73ed7b35a57fe0a9c@129217 3e83ccf1-c6ce-0310-9054-8fdb33cf0640

error: pathspec 'zucchini.gui/src/utopia/steps/asserts/AssertFillGapStep.as' did not match any file(s) known to git

--- zucchini.gui/src/utopia/steps/asserts/AssertFillGapStep.as
+++ zucchini.gui/src/utopia/steps/asserts/AssertFillGapStep.as
@@ -0,0 +1,83 @@
+package utopia.steps.asserts
+{
+	import pl.ydp.automation.execution.IAutomationStep;
+	import pl.ydp.automation.execution.structure.IStructure;
+	import pl.ydp.automation.scripts.steps.base.Step;
+	import pl.ydp.p2.IModule;
+	import pl.ydp.p2.modules.sourcelist.ISourceListDraggable;
+	import pl.ydp.p2.modules.sourcelist.YSimpleSourceListItem;
+	import pl.ydp.p2.modules.textinteraction.imageEntry.YImageEntryInteraction;
+	import pl.ydp.p2.modules.textinteraction.textEntry.YTextEntry;
+
+	import utopia.steps.UtopiaStepsUtil;
+	import utopia.structure.UtopiaStructure;
+
+	/**
+	 * Krok weryfikujący kroki:
+	 * - FillTextInputStep
+	 * - DragSourcelistItemStep
+	 */
+	public class AssertFillGapStep extends Step implements IAutomationStep
+	{
+		public static const NAME:String = 'assertFillTextInput';
+		public static const PATTERN:RegExp = /I should see "{string}" in the "{string}" element/;
+
+		internal var _value:String;
+		/**
+		 * Reprezentacja YTextEntry lub YImageEntryInteraction
+		 */
+		internal var _gap:String;
+
+
+		[Inject]
+		public var utopiaStepsUtil:UtopiaStepsUtil;
+
+		[Inject]
+		public var structure:IStructure;
+
+		public function AssertFillGapStep(resolvedPattern:RegExp)
+		{
+			super(resolvedPattern);
+		}
+
+		public function set variables(variables:Array):void
+		{
+			_value = variables[ 1 ];
+			_gap = variables[ 2 ];
+		}
+
+		public function execute(scriptName:String):void
+		{
+			var textEntryElement:YTextEntry = utopiaStepsUtil.getElementByParam( structure as UtopiaStructure, _gap, YTextEntry );
+			var imageEntryElement:YImageEntryInteraction = utopiaStepsUtil.getElementByParam( structure as UtopiaStructure, _gap, YImageEntryInteraction );
+
+			if( textEntryElement == null && imageEntryElement == null ){
+
+				elementNotFound();
+			}else{
+
+				var correct:Boolean = false;
+
+				if( textEntryElement != null ){
+
+					if( textEntryElement.textInput.text == _value ){
+						correct = true;
+					}
+
+				}else if( imageEntryElement != null ){
+
+
+					if( ( imageEntryElement.sourceListItem as YSimpleSourceListItem ).node.toString() == _value ){
+						correct = true;
+					}
+
+				}
+
+				complete( correct );
+
+			}
+
+
+		}
+	}
+}


Fix archetype package

Fix archetype package

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/edward-yakop/flexmojos.git/'


DistanceBlurShader added

DistanceBlurShader added

error: pathspec 'extension/src/starling/shaders/DistanceBlurShader.as' did not match any file(s) known to git

--- extension/src/starling/shaders/DistanceBlurShader.as
+++ extension/src/starling/shaders/DistanceBlurShader.as
@@ -0,0 +1,161 @@
+/**
+ * User: booster
+ * Date: 18/12/13
+ * Time: 11:29
+ */
+package starling.shaders {
+import com.barliesque.agal.IComponent;
+import com.barliesque.agal.IField;
+import com.barliesque.agal.IRegister;
+import com.barliesque.shaders.macro.Utils;
+
+import flash.display3D.Context3D;
+import flash.display3D.Context3DProgramType;
+
+public class DistanceBlurShader extends FastGaussianBlurShader {
+    private static var _shaderConstants:Vector.<Number> = new <Number>[0, 1, 2, 0];
+
+    private var _centerStrength:Number      = 0;
+    private var _edgeStrength:Number        = 1;
+    private var _distances:Vector.<Number>  = new <Number>[];
+    private var _distancesDirty:Boolean     = true;
+
+    private var _shaderDistances:Vector.<Number> = new <Number>[0, 0, 0, 0];
+
+    // shader constants
+    protected var minDistance:IComponent    = CONST[4].x;
+    protected var maxDistance:IComponent    = CONST[4].y;
+    protected var zero:IComponent           = CONST[5].x;
+    protected var one:IComponent            = CONST[5].y;
+    protected var two:IComponent            = CONST[5].z;
+
+    public function get centerStrength():Number { return _centerStrength; }
+    public function set centerStrength(value:Number):void {
+        if(_centerStrength == value)
+            return;
+
+        _centerStrength = value;
+        _distancesDirty = true;
+
+        strength = _centerStrength > _edgeStrength ? _centerStrength : _edgeStrength;
+    }
+
+    public function get edgeStrength():Number { return _edgeStrength; }
+    public function set edgeStrength(value:Number):void {
+        if(_edgeStrength == value)
+            return;
+
+        _edgeStrength = value;
+        _distancesDirty = true;
+
+        strength = _centerStrength > _edgeStrength ? _centerStrength : _edgeStrength;
+    }
+
+    override public function set strength(value:Number):void {
+        var oldStrength:Number = strength;
+
+        super.strength = value;
+
+        _distancesDirty = _distancesDirty || value != oldStrength;
+    }
+
+    override public function activate(context:Context3D):void {
+        super.activate(context);
+
+        if(_distancesDirty)
+            updateDistances();
+
+        // set min and max distance for current strength
+        var a:Number = _distances[pass + 1], b:Number = _distances[pass];
+
+        _shaderDistances[0] = a < b ? a : b;
+        _shaderDistances[1] = a > b ? a : b;
+
+        context.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT, 4, _shaderDistances);
+        context.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT, 5, _shaderConstants);
+    }
+
+    override protected function _fragmentShader():void {
+        var tempColor:IRegister     = TEMP[0];
+        var outputColor:IRegister   = TEMP[1];
+        var uv:IRegister            = TEMP[2];
+        var newOffsetOne:IField     = TEMP[3].xy;
+        var newOffsetTwo:IField     = TEMP[3].zw;
+        var distance:IComponent     = TEMP[4].x;
+        var temp:IRegister          = TEMP[7];
+
+        comment("calculate current distance from the center of texture");
+        move(uv, uvCenter);
+        ShaderUtil.uvToCartesian(uv.x, uv.y, uMin, uMax, vMin, vMax, temp.x, one, two);
+        ShaderUtil.distance(distance, uv.x, uv.y, temp.x, temp.y);
+
+        comment("clamp distance between max(0, min) and min(max, 1)");
+        Utils.clamp(distance, distance, zero, one);
+        Utils.clamp(distance, distance, minDistance, maxDistance);
+
+        comment("normalize distance to be in [0, 1] between min and max distance");
+        ShaderUtil.normalize(distance, minDistance, maxDistance, temp.x);
+
+        sampleColor(outputColor, uvCenter, weightCenter);
+
+        multiply(newOffsetOne, offsetOne, distance);
+        multiply(newOffsetTwo, offsetTwo, distance);
+
+        subtract(uv, uvCenter, newOffsetTwo);
+        sampleColor(tempColor, uv, weightTwo, uMin, uMax, vMin, vMax, halfPixelWidth, halfPixelHeight, temp);
+        add(outputColor, outputColor, tempColor);
+
+        add(uv, uvCenter, newOffsetTwo);
+        sampleColor(tempColor, uv, weightTwo, uMin, uMax, vMin, vMax, halfPixelWidth, halfPixelHeight, temp);
+        add(outputColor, outputColor, tempColor);
+
+        subtract(uv, uvCenter, newOffsetOne);
+        sampleColor(tempColor, uv, weightOne, uMin, uMax, vMin, vMax, halfPixelWidth, halfPixelHeight, temp);
+        add(outputColor, outputColor, tempColor);
+
+        add(uv, uvCenter, newOffsetOne);
+        sampleColor(tempColor, uv, weightOne, uMin, uMax, vMin, vMax, halfPixelWidth, halfPixelHeight, temp);
+        add(outputColor, outputColor, tempColor);
+
+        move(OUTPUT, outputColor);
+    }
+
+    /**
+     * Calculates distance ranges to apply each blur strength.
+     * This distances represent region where each strength value is applied after being linearly interpolated.
+     * I.e. if a value of 5 is applied to region 0.8 - 1.0, this means means pixels furthest from the center (100%)
+     * will be blurred with strength 5, while pixels at 80% distance will not be blurred using this strength.
+     * And if a value of 3 is applied to region 0.6 - 0.8, pixels at 80% distance and further will be blurred with
+     * strength 3, at 60% and closer won't be blurred with this strength and the ones in the middle will be blurred
+     * with strength between 0 and 3.
+     * By combining different strength values applied to complementary regions, we can achieve a smooth blur with
+     * strength increasing from the center.
+     */
+    private function updateDistances():void {
+        _distancesDirty = false;
+
+        var minStrength:Number  = centerStrength;
+        var maxStrength:Number  = edgeStrength;
+        var diff:Number         = maxStrength - minStrength;
+
+        if(diff == 0)
+            diff = 0.0000001;
+
+        var sum:Number      = 0;
+        var count:int       = _strengths.length;
+        _distances.length   = count + 1;
+
+        _distances[count] = -minStrength / diff;
+
+        for(var i:int = count - 1; i > 0; i--) {
+            sum            += _strengths[i];
+            _distances[i]   = (sum - minStrength) / diff;
+        }
+
+        _distances[0] = (maxStrength - minStrength) / diff;
+
+        trace("strengths: " + _strengths);
+        trace("distances: " + _distances);
+    }
+}
+}


cleaning up class and fixing class name

cleaning up class and fixing class name


Add TextureAtlas

Add TextureAtlas

error: pathspec 'src/aerys/minko/render/resource/texture/TextureAtlas.as' did not match any file(s) known to git

--- src/aerys/minko/render/resource/texture/TextureAtlas.as
+++ src/aerys/minko/render/resource/texture/TextureAtlas.as
@@ -0,0 +1,101 @@
+package aerys.minko.render.resource.texture
+{
+	import aerys.minko.render.resource.texture.TextureResource;
+
+	import flash.display.BitmapData;
+	import flash.geom.Rectangle;
+	import flash.utils.Dictionary;
+
+	public class TextureAtlas extends TextureResource
+	{
+		private var _nodes					: Array				= new Array();
+		private var _empty					: Array				= new Array();
+		private var _size	 				: uint 				= 0;
+		private var _atlasBitmapData		: BitmapData		= null;
+		private var _bitmapDataToRectangle	: Dictionary 		= new Dictionary();
+
+		public function TextureAtlas(size 				: uint 		= 2048,
+									 transparent 		: Boolean 	= true,
+									 backgroundColor 	: uint 		= 0x000000)
+		{
+			_size 				= size;
+			_nodes[0] 			= new Rectangle(0, 0, _size, _size);
+			_atlasBitmapData 	= new BitmapData(_size, _size, transparent, backgroundColor);
+			setContentFromBitmapData(_atlasBitmapData, true);
+		}
+
+		public function get atlasBitmapData():BitmapData
+		{
+			return _atlasBitmapData;
+		}
+
+		public function get bitmapDataToRectangle():Dictionary
+		{
+			return _bitmapDataToRectangle;
+		}
+
+		public function addBitmapData(bitmapData : BitmapData) : Rectangle
+		{
+			var rectangle : Rectangle	= getRectangle(bitmapData.width, bitmapData.height);
+
+			if (rectangle == null)
+				return null;
+
+			_atlasBitmapData.copyPixels(bitmapData, bitmapData.rect, rectangle.topLeft);
+			setContentFromBitmapData(_atlasBitmapData, true);
+
+			_bitmapDataToRectangle[bitmapData] = rectangle.clone();
+
+			return _bitmapDataToRectangle[bitmapData];
+		}
+
+		private function getRectangle(width : uint, height : uint, rootId : int = 0) : Rectangle
+		{
+			var node 	: Rectangle = _nodes[rootId];
+			var first	: Rectangle	= _nodes[int(rootId * 2 + 1)];
+			var second	: Rectangle	= _nodes[int(rootId * 2 + 2)];
+			if (!first && !second)
+			{
+				if (_empty[rootId] === false || width > node.width || height > node.height)
+					return null;
+
+				if (width == node.width && height == node.height)
+				{
+					_empty[rootId] = false;
+
+					return node;
+				}
+				else
+				{
+					var dw : uint = node.width - width;
+					var dh : uint = node.height - height;
+
+					if (dw > dh)
+					{
+						first = new Rectangle(node.left, node.top,
+							width, node.height);
+						second = new Rectangle(node.left + width, node.top,
+							node.width - width, node.height);
+					}
+					else
+					{
+						first = new Rectangle(node.left, node.top,
+							node.width, height);
+						second = new Rectangle(node.left, node.top + height,
+							node.width, node.height - height);
+					}
+
+					_nodes[int(rootId * 2 + 1)] = first;
+					_nodes[int(rootId * 2 + 2)] = second;
+
+					return getRectangle(width, height, rootId * 2 + 1);
+				}
+			}
+
+			if ((node = getRectangle(width, height, rootId * 2 + 1)))
+				return node;
+
+			return getRectangle(width, height, rootId * 2 + 2);
+		}
+	}
+}


Bringing correct Codeine.as

Bringing correct Codeine.as


Darnit, was a test not commited - Jenkins should be happy now.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/eric-stanley/robotlegs-framework.git/'


Added a utility class for marshalling flash Objects.

git-svn-id: a1a4b28b82a3276cc491891159dd9963a0a72fae@4315 542714f4-19e9-0310-aa3c-eee0fc999fb1

error: pathspec 'src/as/com/threerings/util/FlashObjectMarshaller.as' did not match any file(s) known to git

--- src/as/com/threerings/util/FlashObjectMarshaller.as
+++ src/as/com/threerings/util/FlashObjectMarshaller.as
@@ -0,0 +1,30 @@
+package com.threerings.util {
+
+import flash.net.ObjectEncoding;
+
+import flash.utils.ByteArray;
+import flash.utils.Endian;
+
+/**
+ * Utility methods for transferring flash properties via
+ * the presents dobj system.
+ */
+public class FlashObjectMarshaller
+{
+    public static function encode (obj :Object) :ByteArray
+    {
+        var bytes :ByteArray = new ByteArray();
+        bytes.endian = Endian.BIG_ENDIAN;
+        bytes.objectEncoding = ObjectEncoding.AMF3;
+        bytes.writeObject(obj);
+        return bytes;
+    }
+
+    public static function decode (bytes :ByteArray) :Object
+    {
+        bytes.endian = Endian.BIG_ENDIAN;
+        bytes.objectEncoding = ObjectEncoding.AMF3;
+        return bytes.readObject();
+    }
+}
+}


[VectorCommon] created new Project data structure

git-svn-id: adbdea8fc1759bd16b0eaf24a244a7e5f870a654@222 fe3f0490-d73e-11de-a956-c71e7d3a9d2f

error: pathspec 'VectorCommon/src/org/jbei/registry/models/Project.as' did not match any file(s) known to git

--- VectorCommon/src/org/jbei/registry/models/Project.as
+++ VectorCommon/src/org/jbei/registry/models/Project.as
@@ -0,0 +1,100 @@
+package org.jbei.registry.models
+{
+    /**
+     * @author Zinovii Dmytriv
+     */
+    [RemoteClass(alias="org.jbei.ice.lib.vo.Project")]
+    public class Project
+    {
+        private var _name:String;
+        private var _description:String;
+        private var _uuid:String;
+        private var _ownerName:String;
+        private var _ownerEmail:String;
+        private var _creationTime:Date;
+        private var _modificationTime:Date;
+
+        // Contructor
+        public function Project(name:String = "", description:String = "", uuid:String = "", ownerName:String = "", ownerEmail:String = "", creationTime:Date = null, modificationTime:Date = null)
+        {
+            _name = name;
+            _description = description;
+            _uuid = uuid;
+            _ownerName = ownerName;
+            _ownerEmail = ownerEmail;
+            _creationTime = creationTime;
+            _modificationTime = modificationTime;
+        }
+
+        // Properties
+        public function get name():String
+        {
+            return _name;
+        }
+
+        public function set name(value:String):void
+        {
+            _name = value;
+        }
+
+        public function get description():String
+        {
+            return _description;
+        }
+
+        public function set description(value:String):void
+        {
+            _description = value;
+        }
+
+        public function get uuid():String
+        {
+            return _uuid;
+        }
+
+        public function set uuid(value:String):void
+        {
+            _uuid = value;
+        }
+
+        public function get ownerName():String
+        {
+            return _ownerName;
+        }
+
+        public function set ownerName(value:String):void
+        {
+            _ownerName = value;
+        }
+
+        public function get ownerEmail():String
+        {
+            return _ownerEmail;
+        }
+
+        public function set ownerEmail(value:String):void
+        {
+            _ownerEmail = value;
+        }
+
+        public function get creationTime():Date
+        {
+            return _creationTime;
+        }
+
+        public function set creationTime(value:Date):void
+        {
+            _creationTime = value;
+        }
+
+        public function get modificationTime():Date
+        {
+            return _modificationTime;
+        }
+
+        public function set modificationTime(value:Date):void
+        {
+            _modificationTime = value;
+        }
+    }
+}


implement test cases for DelayManager and delayExecution

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/MerlinDS/utils.git/'


add IDestroyable interface

add IDestroyable interface


Conveniently, it appears that the extra events generated by key repeat
are all KEY_DOWN events.
So holding down a key in flash generates: DOWN, DOWN, DOWN, ... UP.
In Java, we get DOWN, UP, DOWN, UP ...

Made a little helper class that can be used to block the extra DOWN events.

git-svn-id: b675b909355d5cf946977f44a8ec5a6ceb3782e4@195 ed5b42cb-e716-0410-a449-f6a68f950b19

error: pathspec 'src/as/com/threerings/flash/KeyRepeatBlocker.as' did not match any file(s) known to git

--- src/as/com/threerings/flash/KeyRepeatBlocker.as
+++ src/as/com/threerings/flash/KeyRepeatBlocker.as
@@ -0,0 +1,58 @@
+package com.threerings.flash {
+
+import flash.events.EventDispatcher;
+import flash.events.IEventDispatcher;
+
+import flash.events.KeyboardEvent;
+
+import flash.utils.Dictionary;
+import flash.utils.getTimer; // function import
+
+/**
+ * A very simple class that adapts the KeyboardEvents generated by some source by discarding
+ * the extra KEY_DOWN events generated while a key is held down.
+ */
+public class KeyRepeatBlocker extends EventDispatcher
+{
+    /**
+     * Create a KeyRepeatBlocker that will be blocking key repeat events from
+     * the specified source.
+     */
+    public function KeyRepeatBlocker (source :IEventDispatcher)
+    {
+        _source = source;
+
+        _source.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);
+        _source.addEventListener(KeyboardEvent.KEY_UP, handleKeyUp);
+    }
+
+    /**
+     * Dispose of this KeyRepeatBlocker.
+     */
+    public function shutdown () :void
+    {
+        _source.removeEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);
+        _source.removeEventListener(KeyboardEvent.KEY_UP, handleKeyUp);
+    }
+
+    protected function handleKeyDown (event :KeyboardEvent) :void
+    {
+        if (!_down[event.keyCode]) {
+            _down[event.keyCode] = true;
+            dispatchEvent(event);
+        }
+    }
+
+    protected function handleKeyUp (event :KeyboardEvent) :void
+    {
+        delete _down[event.keyCode];
+        dispatchEvent(event);
+    }
+
+    /** Our source. */
+    protected var _source :IEventDispatcher;
+
+    /** Tracks whether a key is currently being held down. */
+    protected var _down :Dictionary = new Dictionary();
+}
+}


SoundTransformMath

SoundTransformMath

error: pathspec 'raw/src/org/yellcorp/lib/sound/SoundTransformMath.as' did not match any file(s) known to git

--- raw/src/org/yellcorp/lib/sound/SoundTransformMath.as
+++ raw/src/org/yellcorp/lib/sound/SoundTransformMath.as
@@ -0,0 +1,96 @@
+package org.yellcorp.lib.sound
+{
+import flash.media.SoundTransform;
+
+
+/**
+ * Performs matrix math on SoundTransform objects.
+ *
+ * If a stereo wave is considered a series of 2-member column vectors, a
+ * SoundTransform can be considered as the following 2x2 matrix:
+ *
+ * [ LL RL ] [ V 0 ]
+ * [ LR RR ] [ 0 V ]
+ *
+ * that is,
+ *
+ * [ V*LL  V*RL ]
+ * [ V*LR  V*RR ]
+ *
+ * Where: LL is SoundTransform.leftToLeft
+ *        RL is SoundTransform.rightToLeft
+ *        LR is SoundTransform.leftToRight
+ *        RR is SoundTransform.rightToRight
+ *        V  is SoundTransform.volume
+ */
+public class SoundTransformMath
+{
+    /**
+     * Mulitplies two SoundTransforms.
+     */
+    public static function multiply(s:SoundTransform, t:SoundTransform, out:SoundTransform = null):SoundTransform
+    {
+        if (!out) out = new SoundTransform();
+
+        var a:Number, b:Number,
+            c:Number, d:Number;
+
+        var e:Number, f:Number,
+            g:Number, h:Number;
+
+        a = s.leftToLeft;   b = s.rightToLeft;
+        c = s.leftToRight;  d = s.rightToRight;
+
+        e = t.leftToLeft;   f = t.rightToLeft;
+        g = t.leftToRight;  h = t.rightToRight;
+
+        out.leftToLeft =   a * e + b * g;
+        out.rightToLeft =  a * f + b * h;
+        out.leftToRight =  c * e + d * g;
+        out.rightToRight = c * f + d * h;
+
+        out.volume = s.volume * t.volume;
+
+        return out;
+    }
+
+    /**
+     * Mulitplies two SoundTransforms in reverse order.
+     */
+    public static function concat(s:SoundTransform, t:SoundTransform, out:SoundTransform = null):SoundTransform
+    {
+        return multiply(t, s, out);
+    }
+
+    public static function determinant(s:SoundTransform):Number
+    {
+        return s.leftToLeft * s.rightToRight - s.rightToLeft * s.leftToRight;
+    }
+
+    public static function invert(s:SoundTransform, out:SoundTransform = null):SoundTransform
+    {
+        if (s.volume == 0)
+        {
+            return null;
+        }
+
+        var det:Number = determinant(s);
+        if (det == 0)
+        {
+            return null;
+        }
+        var idet:Number = 1 / det;
+
+        if (!out) out = new SoundTransform();
+
+        out.volume = 1 / s.volume;
+
+        out.leftToLeft = idet * s.rightToRight;
+        out.rightToLeft = idet * -s.rightToLeft;
+        out.leftToRight = idet * -s.leftToRight;
+        out.rightToRight = idet * s.leftToLeft;
+
+        return out;
+    }
+}
+}


XIFF-83: Currently 247 tests, 1 (expected) failure and 0 errors.

git-svn-id: c197267f952b24206666de142881703007ca05d5@13237 b35dd754-fafc-0310-a699-88a17e54d16e

error: pathspec 'test/org/igniterealtime/xiff/core/AbstractJIDTest.as' did not match any file(s) known to git

--- test/org/igniterealtime/xiff/core/AbstractJIDTest.as
+++ test/org/igniterealtime/xiff/core/AbstractJIDTest.as
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2003-2012 Igniterealtime Community Contributors
+ *
+ *     Daniel Henninger
+ *     Derrick Grigg <dgrigg@rogers.com>
+ *     Juga Paazmaya <olavic@gmail.com>
+ *     Nick Velloff <nick.velloff@gmail.com>
+ *     Sean Treadway <seant@oncotype.dk>
+ *     Sean Voisen <sean@voisen.org>
+ *     Mark Walters <mark@yourpalmark.com>
+ *     Michael McCarthy <mikeycmccarthy@gmail.com>
+ *
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.igniterealtime.xiff.core
+{
+	import org.flexunit.asserts.assertEquals;
+
+	public class AbstractJIDTest
+	{
+
+
+		[Test( description="value - BareJID" )]
+		public function testBareJID():void
+		{
+			var testValue:String = "catalog@shakespeare.lit";
+
+			var jid:AbstractJID = new AbstractJID("catalog@shakespeare.lit/Secrets");
+
+			assertEquals( testValue, jid.bareJID );
+		}
+
+		[Test( description="value - resource" )]
+		public function testResource():void
+		{
+			var testValue:String = "Secrets";
+
+			var jid:AbstractJID = new AbstractJID("catalog@shakespeare.lit/Secrets");
+
+			assertEquals( testValue, jid.resource );
+		}
+
+		[Test( description="value - node" )]
+		public function testNode():void
+		{
+			var testValue:String = "catalog";
+
+			var jid:AbstractJID = new AbstractJID("catalog@shakespeare.lit/Secrets");
+
+			assertEquals( testValue, jid.node );
+		}
+
+		[Test( description="value - domain" )]
+		public function testDomain():void
+		{
+			var testValue:String = "shakespeare.lit";
+
+			var jid:AbstractJID = new AbstractJID("catalog@shakespeare.lit/Secrets");
+
+			assertEquals( testValue, jid.domain );
+		}
+
+	}
+}


Remove rotation as a member of the player script and use local variables that better describe intent.

error: pathspec 'Game/Resources/Constant' did not match any file(s) known to git
error: pathspec 'Scene/Minecart/Script/Player.as' did not match any file(s) known to git