This commit is contained in:
2014-04-25 16:47:35 +04:00
parent a788f6dc0c
commit 50c8500bba
4 changed files with 49 additions and 18 deletions

View File

@@ -32,11 +32,11 @@ import haxework.frame.FrameSwitcher;
class GuiBuilder {
public static function build(data:Dynamic, ?links:Dynamic):Dynamic {
return new GuiB(data, links).build();
return new GuiB(data, links, data._includes).build();
}
public static function fill(object:Dynamic, data:Dynamic, ?links:Dynamic):Void {
new GuiF(object, data, links).fill();
new GuiF(object, data, links, data._includes).fill();
}
}
@@ -44,10 +44,12 @@ class GuiB {
private var data:Dynamic;
private var links:Dynamic;
private var includes:Dynamic;
public function new(data:Dynamic, ?links:Dynamic) {
public function new(data:Dynamic, ?links:Dynamic, ?includes:Dynamic) {
this.data = data;
this.links = links;
this.includes = includes;
}
public function build():Dynamic {
@@ -55,14 +57,14 @@ class GuiB {
var type:String = data.type;
//Reflect.deleteField(data, "type");
var object:Dynamic = instance(type);
new GuiF(object, data, links).fill();
new GuiF(object, data, links, includes).fill();
var initMethod:Dynamic = Reflect.field(object, "init");
if (initMethod != null) Reflect.callMethod(object, initMethod, []);
return object;
} else if (Std.is(data, String)) {
return GuiF.convertString(data, links);
} else {
new GuiF(data, data, links).fill();
new GuiF(data, data, links, includes).fill();
return data;
}
}
@@ -80,11 +82,13 @@ class GuiF {
private var object:Dynamic;
private var data:Dynamic;
private var links:Dynamic;
private var includes:Dynamic;
public function new(object:Dynamic, data:Dynamic, ?links:Dynamic) {
public function new(object:Dynamic, data:Dynamic, ?links:Dynamic, ?includes:Dynamic) {
this.object = object;
this.data = data;
this.links = links;
this.includes = includes;
}
public static function convertString(value:Dynamic, ?links:Dynamic):Dynamic {
@@ -114,10 +118,18 @@ class GuiF {
var fields:Array<String> = Reflect.fields(data);
for (field in fields) {
if (field == "type") continue;
if (field == "_includes") continue;
var value:Dynamic = Reflect.field(data, field);
if (field == "_include") {
var data:Dynamic = includes == null ? null : Reflect.field(includes, value);
if (data != null) {
new GuiF(object, data, links).fill();
}
continue;
}
if (Std.is(value, Array)) {
var a:Array<Dynamic> = [];
for (o in cast(value, Array<Dynamic>)) a.push(new GuiB(o, links).build());
for (o in cast(value, Array<Dynamic>)) a.push(new GuiB(o, links, includes).build());
value = a;
} else if (Std.is(value, String)) {
var s:String = cast(value, String);
@@ -148,7 +160,7 @@ class GuiF {
} else if (Std.is(value, Bool)) {
} else {
var o:Dynamic = new GuiB(value, links).build();
var o:Dynamic = new GuiB(value, links, includes).build();
new GuiF(o, value, links).fill();
value = o;
}

View File

@@ -18,6 +18,8 @@ class BaseLoader<T> implements ILoader<T> {
public static var urlProcessors(default, null):Array<String->String> = new Array<String->String>();
public static function prepareUrl(url:String):String { for (p in urlProcessors) url = p(url); return url; }
public static var proxy(default, default):String->String;
public var timeout(default, default):Int;
public var busy(default, null):Bool;
@@ -56,6 +58,13 @@ class BaseLoader<T> implements ILoader<T> {
}
}
private function cancelTimeout():Void {
if (timer != null) {
timer.stop();
timer = null;
}
}
public function fromBytes(data:ByteArray):ICallback<T> {
if (busy) throw "Busy";
busy = true;
@@ -114,6 +123,15 @@ class BaseLoader<T> implements ILoader<T> {
}
}
private function onSecurityError(e:Event):Void {
if (proxy == null) {
onError(e);
} else {
cancelTimeout();
internalRequest(proxy(buildUrl()));
}
}
private function onError(e:Event):Void {
var c:ICallback<T> = callback;
dispose();
@@ -133,10 +151,7 @@ class BaseLoader<T> implements ILoader<T> {
}
private function dispose():Void {
if (timer != null) {
timer.stop();
timer = null;
}
cancelTimeout();
url = null;
data = null;
callback = null;
@@ -149,7 +164,7 @@ class BaseLoader<T> implements ILoader<T> {
dispose();
}
public function run():Void {
private function buildUrl():String {
var u:String = url;
if (data != null && method == URLRequestMethod.GET) {
var a:Array<String> = [];
@@ -158,7 +173,11 @@ class BaseLoader<T> implements ILoader<T> {
}
u += "?" + a.join("&");
}
internalRequest(prepareUrl(u));
return prepareUrl(u);
}
public function run():Void {
internalRequest(buildUrl());
}
}

View File

@@ -74,7 +74,7 @@ class BaseMediaLoader<T> extends BaseLoader<T> {
loader.contentLoaderInfo.addEventListener(Event.INIT, onInit);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
return loader;
}
@@ -85,7 +85,7 @@ class BaseMediaLoader<T> extends BaseLoader<T> {
loader.contentLoaderInfo.removeEventListener(Event.INIT, onInit);
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, onError);
loader.contentLoaderInfo.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);
loader.contentLoaderInfo.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress);
#if flash try { loader.close(); } catch (error:Dynamic) {} #end
loader = null;

View File

@@ -65,7 +65,7 @@ class BaseURLLoader<T> extends BaseLoader<T> {
loader.dataFormat = dataFormat;
loader.addEventListener(Event.COMPLETE, onComplete);
loader.addEventListener(IOErrorEvent.IO_ERROR, onError);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
loader.addEventListener(ProgressEvent.PROGRESS, onProgress);
return loader;
}
@@ -75,7 +75,7 @@ class BaseURLLoader<T> extends BaseLoader<T> {
if (loader != null) {
loader.removeEventListener(Event.COMPLETE, onComplete);
loader.removeEventListener(IOErrorEvent.IO_ERROR, onError);
loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);
loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
loader.removeEventListener(ProgressEvent.PROGRESS, onProgress);
try { loader.close(); } catch (error:Dynamic) {}
loader = null;