michaelforrest-tidy 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. data/Manifest +87 -0
  2. data/README +5 -0
  3. data/Rakefile +14 -0
  4. data/bin/tidyproject +33 -0
  5. data/lib/aslibs/as3/lbi/com/lbi/animation/animator/Animator.as +86 -0
  6. data/lib/aslibs/as3/lbi/com/lbi/animation/animator/Transition.as +142 -0
  7. data/lib/aslibs/as3/lbi/com/lbi/animation/group/Parallel.as +28 -0
  8. data/lib/aslibs/as3/lbi/com/lbi/animation/group/Queue.as +93 -0
  9. data/lib/aslibs/as3/lbi/com/lbi/animation/group/Sequence.as +28 -0
  10. data/lib/aslibs/as3/lbi/com/lbi/animation/group/Set.as +82 -0
  11. data/lib/aslibs/as3/lbi/com/lbi/animation/group/Stack.as +30 -0
  12. data/lib/aslibs/as3/lbi/com/lbi/animation/single/Animation.as +173 -0
  13. data/lib/aslibs/as3/lbi/com/lbi/animation/single/Message.as +36 -0
  14. data/lib/aslibs/as3/lbi/com/lbi/animation/single/MethodWithCompleteEvent.as +75 -0
  15. data/lib/aslibs/as3/lbi/com/lbi/animation/single/OrphanEvent.as +78 -0
  16. data/lib/aslibs/as3/lbi/com/lbi/animation/single/Pause.as +35 -0
  17. data/lib/aslibs/as3/lbi/com/lbi/animation/single/Tween.as +73 -0
  18. data/lib/aslibs/as3/lbi/com/lbi/animation/util/Easing.as +158 -0
  19. data/lib/aslibs/as3/lbi/com/lbi/animation/util/Engine.as +35 -0
  20. data/lib/aslibs/as3/lbi/com/lbi/animation/util/GroupCommon.as +62 -0
  21. data/lib/aslibs/as3/lbi/com/lbi/animation/util/IAnimation.as +30 -0
  22. data/lib/aslibs/as3/lbi/com/lbi/debug/DraggyClip.as +96 -0
  23. data/lib/aslibs/as3/lbi/com/lbi/debug/FPSView.as +48 -0
  24. data/lib/aslibs/as3/lbi/com/lbi/debug/KeySequenceTrigger.as +60 -0
  25. data/lib/aslibs/as3/lbi/com/lbi/debug/Log.as +168 -0
  26. data/lib/aslibs/as3/lbi/com/lbi/debug/LogItemType.as +23 -0
  27. data/lib/aslibs/as3/lbi/com/lbi/debug/LogType.as +31 -0
  28. data/lib/aslibs/as3/lbi/com/lbi/debug/ViewAnalysis.as +24 -0
  29. data/lib/aslibs/as3/lbi/com/lbi/media/IBufferable.as +16 -0
  30. data/lib/aslibs/as3/lbi/com/lbi/media/ITransportControllable.as +11 -0
  31. data/lib/aslibs/as3/lbi/com/lbi/mvc/collection/Collection.as +296 -0
  32. data/lib/aslibs/as3/lbi/com/lbi/mvc/collection/ISearchable.as +10 -0
  33. data/lib/aslibs/as3/lbi/com/lbi/mvc/collection/ISelectable.as +10 -0
  34. data/lib/aslibs/as3/lbi/com/lbi/mvc/collection/Matchable.as +9 -0
  35. data/lib/aslibs/as3/lbi/com/lbi/mvc/collection/Searchable.as +56 -0
  36. data/lib/aslibs/as3/lbi/com/lbi/mvc/collection/Selectable.as +49 -0
  37. data/lib/aslibs/as3/lbi/com/lbi/mvc/helper/Cloner.as +15 -0
  38. data/lib/aslibs/as3/lbi/com/lbi/mvc/helper/TypographyBase.as +194 -0
  39. data/lib/aslibs/as3/lbi/com/lbi/mvc/helper/preloading/LoadProgressEvent.as +18 -0
  40. data/lib/aslibs/as3/lbi/com/lbi/mvc/model/Application.as +45 -0
  41. data/lib/aslibs/as3/lbi/com/lbi/mvc/model/ConcurrentDependencyLoader.as +27 -0
  42. data/lib/aslibs/as3/lbi/com/lbi/mvc/model/EventMapper.as +85 -0
  43. data/lib/aslibs/as3/lbi/com/lbi/mvc/model/Hyperlink.as +36 -0
  44. data/lib/aslibs/as3/lbi/com/lbi/mvc/model/IEventMapper.as +10 -0
  45. data/lib/aslibs/as3/lbi/com/lbi/mvc/model/Merge.as +14 -0
  46. data/lib/aslibs/as3/lbi/com/lbi/mvc/model/SequentialDependencyLoader.as +43 -0
  47. data/lib/aslibs/as3/lbi/com/lbi/mvc/model/StringFormatting.as +142 -0
  48. data/lib/aslibs/as3/lbi/com/lbi/mvc/model/XMLListLoader.as +98 -0
  49. data/lib/aslibs/as3/lbi/com/lbi/mvc/model/XMLListLoaderDispatcher.as +52 -0
  50. data/lib/aslibs/as3/lbi/com/lbi/mvc/view/ViewBase.as +323 -0
  51. data/lib/aslibs/as3/lbi/com/quasimondo/geom/ColorMatrix.as +682 -0
  52. data/lib/script/as2/lib/as2_class.rb +37 -0
  53. data/lib/script/as2/lib/test/SampleClass.as +34 -0
  54. data/lib/script/as2/lib/test/as2_class_test.rb +15 -0
  55. data/lib/script/as2/navigation/bin/xml/__model.xml +7 -0
  56. data/lib/script/as2/navigation/navigation.rb +44 -0
  57. data/lib/script/as2/navigation/src/app/models/App.as +14 -0
  58. data/lib/script/as2/navigation/src/app/models/__Model.as +42 -0
  59. data/lib/script/as2/navigation/src/app/views/__model/__ModelView.as +61 -0
  60. data/lib/script/as2/navigation/src/app/views/__model/__ModelsView.as +33 -0
  61. data/lib/script/as2/project/project.rb +7 -0
  62. data/lib/script/as2/project/src/app/helpers/Colours.as +1 -0
  63. data/lib/script/as2/project/src/app/helpers/Typography.as +1 -0
  64. data/lib/script/as2/project/src/app/models/App.as +22 -0
  65. data/lib/script/as2/project/src/app/models/FlashVars.as +1 -0
  66. data/lib/script/as2/project/src/app/models/Linkages.as +8 -0
  67. data/lib/script/as2/project/src/app/views/AppView.as +21 -0
  68. data/lib/script/as3/project/project.rb +10 -0
  69. data/lib/script/as3/project/src/app/helpers/Colours.as +1 -0
  70. data/lib/script/as3/project/src/app/helpers/Typography.as +1 -0
  71. data/lib/script/as3/project/src/app/models/App.as +21 -0
  72. data/lib/script/as3/project/src/app/models/FlashVars.as +1 -0
  73. data/lib/script/as3/project/src/app/views/AppView.as +27 -0
  74. data/lib/script/as3/scaffold/bin/xml/__model.xml +0 -0
  75. data/lib/script/as3/scaffold/scaffold.rb +41 -0
  76. data/lib/script/as3/scaffold/src/models/__Model.as +11 -0
  77. data/lib/script/as3/scaffold/src/views/__model/__ModelDetailView.as +0 -0
  78. data/lib/script/as3/scaffold/src/views/__model/__ModelListItemView.as +0 -0
  79. data/lib/script/as3/scaffold/src/views/__model/__ModelListView.as +0 -0
  80. data/lib/script/bwlimit.rb +305 -0
  81. data/lib/script/generate +117 -0
  82. data/lib/script/server +4 -0
  83. data/lib/script/server.rb +20 -0
  84. data/lib/tidy_project.rb +19 -0
  85. data/tasks/build.rake +4 -0
  86. data/tasks/release.rake +8 -0
  87. data/test/test_tidy_project.rb +22 -0
  88. data/tidy.gemspec +33 -0
  89. metadata +229 -0
@@ -0,0 +1,27 @@
1
+ package com.lbi.mvc.model {
2
+ import flash.events.Event;
3
+ import flash.events.EventDispatcher;
4
+
5
+ import com.lbi.animation.group.Stack;
6
+ /**
7
+ * @author michaelforrest
8
+ */
9
+ public class ConcurrentDependencyLoader extends EventDispatcher {
10
+ public static var READY : String = "ready";
11
+ public function dispatchReady():void {dispatchEvent(new Event(READY));
12
+ }
13
+ public function ConcurrentDependencyLoader(dependencies : Array) {
14
+ var stack : Stack = new Stack();
15
+ for (var i : Number = 0;i < dependencies.length; i++) {
16
+ var d : EventDispatcher = dependencies[i];
17
+ stack.addMethod(d, null, Event.COMPLETE);
18
+ }
19
+ stack.addEventListener(Event.COMPLETE, onReady,false,0,true);
20
+ stack.go();
21
+ }
22
+
23
+ private function onReady(event : Event) : void {
24
+ dispatchReady();
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,85 @@
1
+ package com.lbi.mvc.model {
2
+ import flash.events.Event;
3
+
4
+ import com.lbi.mvc.collection.Collection;
5
+
6
+ import flash.events.EventDispatcher;
7
+ import flash.utils.getQualifiedClassName;
8
+ /**
9
+ * @author michaelforrest
10
+ */
11
+ public class EventMapper extends EventDispatcher implements IEventMapper {
12
+ private var listeners : Collection;
13
+
14
+ /**
15
+ * Use registerEvents to automatically wire up controller events to which this view must respond.
16
+ * So, if you do registerEvents(["complete","ready","pressed"]); you would then need to implement methods
17
+ * onComplete(e:Event), onReady(e:Event), onPressed(e:Event)
18
+ * @param events = an array of event names dispatched by the controller
19
+ */
20
+ public function registerEvents(view : Object,events : Array) : void {
21
+ for (var i : Number = 0; i < events.length; i++) {
22
+ var event:String = events[i];
23
+ var method_name:String = eventToMethodName(event);
24
+ var responding_method:Function = view[method_name];
25
+ if( responding_method === null ) {
26
+ var msg:String ="Error - view class "+ getQualifiedClassName(view) + " does not implement " + method_name;
27
+ throw new Error(msg);
28
+ }
29
+ addEventListener(event, responding_method,false,0,true);
30
+ trackListener(view);
31
+ }
32
+ }
33
+
34
+
35
+ public function getListeners() : Collection {
36
+ return listeners;
37
+ }
38
+
39
+ public function unregisterEvents(view : Object, events : Array) : void {
40
+ if(!events) return;
41
+ for (var i : Number = 0; i < events.length; i++) {
42
+ var event:String = events[i];
43
+ removeEventListener(event, view[eventToMethodName(event)]);
44
+ }
45
+ untrackListener(view);
46
+ }
47
+
48
+ public static function eventToMethodName(event : String) : String {
49
+ return "on" +StringFormatting.pascalize(event);
50
+ }
51
+
52
+ private function trackListener(view : Object) : void {
53
+ if(!listeners) listeners = new Collection();
54
+ if(listeners.find(view)) return;
55
+ listeners.add(view);
56
+ }
57
+
58
+ private function untrackListener(view : Object) : void {
59
+ listeners.remove(view);
60
+ //TODO: think about this properly. This doesn't make sense does it. Necessarily.
61
+ }
62
+
63
+
64
+ /**
65
+ * Override this method to return an array of strings that can be registered as events.
66
+ * This is useful if you want to dynamically generate event names (e.g. with keyboard controllers)
67
+ */
68
+ private function getPossibleEvents():Array{
69
+ return null;
70
+ }
71
+ private function eventIsPossible(event_name : String) : Boolean {
72
+ var possible_events:Array = getPossibleEvents();
73
+ for (var i : Number = 0; i < possible_events.length; i++) {
74
+ var e:String = possible_events[i];
75
+ if (e==event_name) return true;
76
+ }
77
+ return false;
78
+ }
79
+
80
+ protected function getAllListeners() : void {
81
+
82
+ }
83
+
84
+ }
85
+ }
@@ -0,0 +1,36 @@
1
+ package com.lbi.mvc.model {
2
+ import flash.events.Event;
3
+ import flash.net.URLRequest;
4
+ import flash.net.navigateToURL;
5
+ /**
6
+ * @author michaelforrest
7
+ */
8
+ public class Hyperlink {
9
+ public static var BLANK : String = "_blank";
10
+ public static var SELF : String = "_self";
11
+ public static var PARENT : String = "_parent";
12
+ public static var TOP : String = "_top";
13
+
14
+ public var text : String;
15
+ public var href : String;
16
+ public var target : String;
17
+ /**
18
+ * optionally supply an object literal with
19
+ * {text:'text',href:'http://href',target:'_blank'} (target is optional)
20
+ */
21
+ public function Hyperlink(xml : XML) {
22
+ text = xml.toString();
23
+ href = xml.@href;
24
+ target = xml.@target;
25
+ }
26
+
27
+ public function follow(e :Event = null) : void{
28
+ var request : URLRequest = new URLRequest(href);
29
+ navigateToURL(request, target);
30
+ }
31
+ public function toString() : String{
32
+ return "[Hyperlink text=" + text + ", href=" + href+ ", target=" + target + "]";
33
+ }
34
+
35
+ }
36
+ }
@@ -0,0 +1,10 @@
1
+ package com.lbi.mvc.model {
2
+ import flash.events.IEventDispatcher;
3
+ /**
4
+ * @author michaelforrest
5
+ */
6
+ public interface IEventMapper extends IEventDispatcher {
7
+ function registerEvents(view : Object,events : Array):void;
8
+ function unregisterEvents(view : Object, events : Array) : void;
9
+ }
10
+ }
@@ -0,0 +1,14 @@
1
+ package com.lbi.mvc.model {
2
+
3
+ /**
4
+ * @author michaelforrest
5
+ */
6
+ public class Merge {
7
+ public static function objects(extra : Object, original : Object) : Object {
8
+ for (var i : String in extra) {
9
+ original[i] = extra[i];
10
+ }
11
+ return original;
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,43 @@
1
+ package com.lbi.mvc.model {
2
+ import com.lbi.animation.group.Queue;
3
+
4
+ import flash.events.Event;
5
+ import flash.events.EventDispatcher;
6
+ /**
7
+ * @author michaelforrest
8
+ */
9
+ public class SequentialDependencyLoader extends EventDispatcher {
10
+ public static var READY : String = "ready";
11
+ public var loaded : Number = 0;
12
+ private var queue : Queue;
13
+ private var bytesLoaded : uint;
14
+
15
+ public function dispatchReady():void {dispatchEvent(new Event(READY));
16
+ }
17
+
18
+ public function SequentialDependencyLoader(dependencies : Array) {
19
+ queue = new Queue();
20
+ for (var i : Number = 0;i < dependencies.length; i++) {
21
+ var klass : Class = dependencies[i];
22
+ var loaderDispatcher : XMLListLoaderDispatcher = new XMLListLoaderDispatcher(klass);
23
+ queue.addMethod(loaderDispatcher, loaderDispatcher.start, XMLListLoaderDispatcher.READY);
24
+ //queue.addMessage("loaded xml for " + getQualifiedClassName(klass));
25
+ }
26
+ queue.addEventListener(Event.COMPLETE, onReady,false,0,true);
27
+ queue.go();
28
+ }
29
+
30
+ private function onReady(event : Event) : void {
31
+ dispatchReady();
32
+ }
33
+
34
+ public function getBytesLoaded() : Number {
35
+ return bytesLoaded;
36
+ }
37
+
38
+ // public function getBytesTotal() : Number {
39
+ // trace("warning - SequentialDependencyLoader.getBytesTotal() is not defined")
40
+ // return null;
41
+ // }
42
+ }
43
+ }
@@ -0,0 +1,142 @@
1
+ package com.lbi.mvc.model {
2
+ /**
3
+ * @author michaelforrest
4
+ */
5
+ public class StringFormatting {
6
+ public static function formatTimeInCentiseconds(t : Number) : String {
7
+ var seconds:Number = Math.floor(t % 60);
8
+ var minutes:Number = Math.floor((t - seconds)/ 60 );
9
+ var centiseconds:Number = Math.floor(( t-Math.floor(t) ) * 100);
10
+ return pad(minutes) + ":" + pad(seconds) + ":" + pad(centiseconds);
11
+ }
12
+ public static function formatTimeInSeconds(t : Number) : String {
13
+ var seconds:Number = Math.floor(t % 60);
14
+ var minutes:Number = Math.floor((t - seconds)/ 60 );
15
+ return pad(minutes) + ":" + pad(seconds) ;
16
+ }
17
+
18
+ private static function pad(n : Number) : String {
19
+ var s:String = n.toString();
20
+ if(s.length==1) s = "0" + s;
21
+ return s;
22
+ }
23
+ /**
24
+ * converts string from underscore_lower_case to camelCase
25
+ * Utterly untested.
26
+ */
27
+ public static function camelize($s:String):String{
28
+ var s_arr:Array = $s.split('_');
29
+ if (s_arr.length == 1) return s_arr[0];
30
+
31
+ var camelizedString:String = $s.indexOf('_') == 0
32
+ ? s_arr[0].charAt(0).toUpperCase() + s_arr[0].substring(1)
33
+ : s_arr[0];
34
+
35
+ for (var i:Number = 1, len:Number = s_arr.length; i < len; i++) {
36
+ var s:String = s_arr[i];
37
+ camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
38
+ }
39
+
40
+ return camelizedString;
41
+ }
42
+ /**
43
+ * converts any string into a valid variable name
44
+ * See tests [aslibs_framafabTest ->StringFormattingTest] for behaviour expectations
45
+ */
46
+ public static function variablify(string:String):String{
47
+ string = string.split(".").join("_");
48
+ string = string.split(" ").join("_");
49
+ string = string.split("-").join("_");
50
+ return string;
51
+ }
52
+ /**
53
+ * ThisIsPascalCase
54
+ */
55
+ public static function pascalize(underscore_separated : String) : String {
56
+ var s:String = camelize(underscore_separated.toLowerCase());
57
+ var pascalized:String = s.charAt(0).toUpperCase() + s.substr(1,s.length-1);
58
+ return pascalized;
59
+ }
60
+
61
+ public static function underscore(string : String) : String {
62
+ var alphabet : String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
63
+ for (var i : Number = 0; i < alphabet.length; i++) {
64
+ var letter:String = alphabet.charAt(i);
65
+ string = string.split(letter).join("_" + letter.toLowerCase());
66
+ if(string.charAt(0)=="_") string = string.substr(1,string.length);
67
+ }
68
+ return string;
69
+ }
70
+ /**
71
+ * Trim functions from as2lib
72
+ */
73
+
74
+ public static function trim(string:String):String {
75
+ return leftTrim(rightTrim(string));
76
+ }
77
+
78
+ public static function leftTrim(string:String):String {
79
+ return leftTrimForChars(string, "\n\t\n ");
80
+ }
81
+
82
+ public static function rightTrim(string:String):String {
83
+ return rightTrimForChars(string, "\n\t\n ");
84
+ }
85
+
86
+ public static function leftTrimForChars(string:String, chars:String):String {
87
+ var from:Number = 0;
88
+ var to:Number = string.length;
89
+ while (from < to && chars.indexOf(string.charAt(from)) >= 0){
90
+ from++;
91
+ }
92
+ return (from > 0 ? string.substr(from, to) : string);
93
+ }
94
+
95
+ public static function rightTrimForChars(string:String, chars:String):String {
96
+ var from:Number = 0;
97
+ var to:Number = string.length - 1;
98
+ while (from < to && chars.indexOf(string.charAt(to)) >= 0) {
99
+ to--;
100
+ }
101
+ return (to >= 0 ? string.substr(from, to+1) : string);
102
+ }
103
+
104
+ public static function leftTrimForChar(string:String, char:String):String {
105
+ return leftTrimForChars(string, char.charAt(0));
106
+ }
107
+
108
+ public static function rightTrimForChar(string:String, char:String):String {
109
+ return rightTrimForChars(string, char.charAt(0));
110
+ }
111
+
112
+ private static var LINES_DELIMETERS : Array = ["\r\n", "\n\r", "\r", "\n"];
113
+
114
+ public static function stripInLines ( s : String ) : Array
115
+ {
116
+ var res : Array = [];
117
+ var delimeter_index : Number = 0;
118
+ var delimeter : String;
119
+ while(res.length<2 && delimeter_index<LINES_DELIMETERS.length){
120
+ delimeter = LINES_DELIMETERS[delimeter_index];
121
+ res = s.split(delimeter);
122
+ delimeter_index++;
123
+ }
124
+ return res;
125
+ }
126
+
127
+
128
+ public static function collectionize(class_name : String) : String {
129
+ return underscore(class_name).toLowerCase() + "s"; ;
130
+ }
131
+
132
+ public static function sentenceCase(underscored : String) : String {
133
+ var words : Array = underscored.split("_");
134
+ var first_word : String = words[0];
135
+ words[0] = words[0].charAt(0).toUpperCase() + words[0].substr(1,words[0].length-1);
136
+ for (var i : Number = 0; i < words.length; i++) {
137
+ if(words[i] == "and") words[i] = "&";
138
+ }
139
+ return words.join(' ');
140
+ }
141
+ }
142
+ }
@@ -0,0 +1,98 @@
1
+ package com.lbi.mvc.model {
2
+ import flash.events.Event;
3
+ import flash.events.EventDispatcher;
4
+ import flash.events.IOErrorEvent;
5
+ import flash.events.ProgressEvent;
6
+ import flash.net.URLLoader;
7
+ import flash.net.URLRequest;
8
+
9
+ import com.lbi.debug.Log;
10
+ import com.lbi.mvc.collection.Collection;
11
+ import flash.utils.getQualifiedClassName; /**
12
+ * @author michaelforrest
13
+ */
14
+ public class XMLListLoader extends EventDispatcher {
15
+
16
+ private static var loaders : Object = {};
17
+
18
+ private var url : String;
19
+ private var item_class : Class;
20
+ private var path_to_items : String;
21
+
22
+ private var collection : Collection;
23
+ private static const READY : String = "ready";
24
+ private var loader : URLLoader;
25
+ public function XMLListLoader($url : String,$item_class : Class, $path_to_items : String) {
26
+ super();
27
+ url = $url;
28
+ item_class = $item_class;
29
+ path_to_items = $path_to_items;
30
+ loadOrAttachToLoaderInProgress();
31
+ loadXML();
32
+ }
33
+
34
+ private function loadOrAttachToLoaderInProgress() : void {
35
+ // if(loaders[url]!=null) {
36
+ // trace("retrieving ")
37
+ // loader = loaders[url];
38
+ // }else{
39
+ loader = new URLLoader();
40
+ loaders[url] = loader;
41
+ // }
42
+ }
43
+
44
+ private function loadXML() : void {
45
+ var xml_request : URLRequest = new URLRequest(url);
46
+ loader.load(xml_request);
47
+ loader.addEventListener(Event.COMPLETE, onLoad,false,0,true);
48
+ loader.addEventListener(ProgressEvent.PROGRESS, onProgress,false,0,true);
49
+ loader.addEventListener(IOErrorEvent.IO_ERROR, onError,false,0,true);
50
+
51
+ }
52
+ private function onError(event : IOErrorEvent) : void {
53
+ trace("failed to load " + url);
54
+ }
55
+ private function onProgress(event : ProgressEvent) : void {
56
+ dispatchEvent(event);
57
+ }
58
+
59
+ private function onLoad(event : Event = null) : void {
60
+ var xml : XML = new XML(loader.data);
61
+ //trace("DATA FOUND FOR " + url + "? " +(loader.data != null).toString().toUpperCase());
62
+ prepare(xml);
63
+ dispatchEvent(new Event(READY));
64
+ }
65
+ private function prepare(xml:XML) : void {
66
+ collection = new Collection();
67
+
68
+ var models:XMLList = xml.descendants(path_to_items);
69
+ if(models.length() == 0){
70
+ Log.warn("No '" + path_to_items + "' nodes found in " + url);
71
+ Log.debug("xml:" + xml);
72
+ }
73
+ for (var i : Number = 0;i < models.length(); i++) {
74
+ var model : XML = models[i];
75
+ var parsed_model : Object = new item_class(model);
76
+ collection.AS3::push(parsed_model);
77
+ }
78
+ }
79
+ public function getItems() : Array {
80
+ return collection;
81
+ }
82
+ public static function initialize($class : Class, $collection_name : String, $xml_url : String, $path_to_items : String) : XMLListLoaderDispatcher {
83
+ var events : XMLListLoaderDispatcher = new XMLListLoaderDispatcher($class);
84
+ var xmlListLoader : XMLListLoader = new XMLListLoader($xml_url, $class, $path_to_items);
85
+ var callback : Function = function() : void {
86
+ $class[$collection_name] = xmlListLoader.getItems();
87
+ trace("Loaded ", $class[$collection_name].length, "instances into", getQualifiedClassName($class) + "." +$collection_name, "from", $xml_url);
88
+ events.dispatchEvent(new Event(Event.COMPLETE));
89
+ };
90
+ xmlListLoader.addEventListener(READY, callback,false,0,true);
91
+ var progressCallback : Function = function(e:ProgressEvent) : void{
92
+ events.dispatchEvent(e);
93
+ }
94
+ xmlListLoader.addEventListener(ProgressEvent.PROGRESS, progressCallback,false,0,true);
95
+ return events;
96
+ }
97
+ }
98
+ }
@@ -0,0 +1,52 @@
1
+ package com.lbi.mvc.model {
2
+ import flash.events.ProgressEvent;
3
+ import flash.events.Event;
4
+ import flash.events.EventDispatcher;
5
+ import flash.utils.getQualifiedClassName;
6
+ /**
7
+ * @author michaelforrest
8
+ * Yep sorry, actually two of these classes are used in the course of the autopopulation process now... (the other place is XMLListloader.prepare() for some reason.)
9
+ * Since it works, I am not looking at it any more....
10
+ */
11
+ public class XMLListLoaderDispatcher extends EventDispatcher {
12
+ private var klass : *;
13
+ private var events : EventDispatcher;
14
+ public static const READY : String= "ready";
15
+
16
+ public function XMLListLoaderDispatcher($class : Class) {
17
+ super();
18
+ klass = $class;
19
+ }
20
+
21
+ public function getClass() : String {
22
+ return getQualifiedClassName(klass);
23
+ }
24
+
25
+ public function start() : void {
26
+ checkClassHasWhatIsNeeded();
27
+ events = klass.prepare();
28
+ if(!events) {
29
+ onOtherDispatcherReady();
30
+ }else{
31
+ events.addEventListener(ProgressEvent.PROGRESS, onProgress,false,0,true);
32
+ events.addEventListener(Event.COMPLETE, onOtherDispatcherReady,false,0,true);
33
+ }
34
+ }
35
+
36
+ private function checkClassHasWhatIsNeeded() : void {
37
+ if(!klass) throw new Error("No class provided!");
38
+ if(!klass.prepare) {
39
+ throw new Error("Please create a prepare() : EventDispatcher {} event on class " + getQualifiedClassName(klass));
40
+ }
41
+ }
42
+
43
+ private function onProgress(event : ProgressEvent) : void {
44
+ dispatchEvent(event);
45
+ }
46
+
47
+ private function onOtherDispatcherReady(event : Event = null) : void {
48
+ checkClassHasWhatIsNeeded();
49
+ dispatchEvent(new Event(READY));
50
+ }
51
+ }
52
+ }