Skip to content

Instantly share code, notes, and snippets.

@akisute
Created December 22, 2009 08:39
Show Gist options
  • Save akisute/261626 to your computer and use it in GitHub Desktop.
Save akisute/261626 to your computer and use it in GitHub Desktop.
package {
import flash.text.TextField;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.text.StyleSheet;
import flash.system.System;
import flash.events.Event;
import flash.events.IOErrorEvent;
public class MyHTMLTextLoader {
private var fld:TextField;
private var htmlLoader:URLLoader;
private var cssLoader:URLLoader;
public function MyHTMLTextLoader(fld:TextField) {
this.fld=fld;
}
public function loadtext(htmlurl:String,cssurl:String=null,isUnicode:Boolean=true):void {
System.useCodePage=! isUnicode;
if (cssurl) {
this.loadCSS(cssurl);
}
this.loadHTML(htmlurl);
}
private function loadCSS(url:String):void {
cssLoader = new URLLoader();
cssLoader.addEventListener(Event.COMPLETE, onLoadCompleted);
cssLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
cssLoader.load(new URLRequest(url));
}
private function loadHTML(url:String):void {
htmlLoader = new URLLoader();
htmlLoader.addEventListener(Event.COMPLETE, onLoadCompleted);
htmlLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
htmlLoader.load(new URLRequest(url));
}
private function renderTextField():void {
// Assert(fld != null);
// Assert(htmlLoader != null);
// Assert(htmlLoader.bytesTotal > 0 && htmlLoader.bytesLoaded == htmlLoader.bytesTotal);
if (cssLoader) {
// Assert(cssLoader.bytesTotal > 0 && cssLoader.bytesLoaded == cssLoader.bytesTotal);
var styleSheet:StyleSheet = new StyleSheet();
styleSheet.parseCSS(cssLoader.data);
fld.styleSheet=styleSheet;
}
fld.htmlText=this.trim(htmlLoader.data);
}
private function onLoadCompleted(eventObj:Event):void {
if (cssLoader) {
if (this.loaderIsCompletedLoading(cssLoader)&&this.loaderIsCompletedLoading(htmlLoader)) {
this.renderTextField();
}
} else {
if (this.loaderIsCompletedLoading(htmlLoader)) {
this.renderTextField();
}
}
}
private function onIOError(eventObj:IOErrorEvent):void {
fld.text="IO_ERROR";
fld.styleSheet=null;
}
private function loaderIsCompletedLoading(urlLoader:URLLoader):Boolean {
if (! urlLoader) {
return false;
}
return (urlLoader.bytesTotal > 0 && urlLoader.bytesLoaded == urlLoader.bytesTotal);
}
private function trim(htmltext:String):String {
var trimString:String=htmltext.replace(/\r/g,"");
return trimString;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment