Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
187 lines (160 sloc) 4.98 KB
package sk.yoz.html
{
import flash.events.Event;
import flash.external.ExternalInterface;
import flash.geom.Point;
import mx.containers.Canvas;
public class IFrame extends Canvas
{
public var methodResize:String = "FlexIFrame.resize";
public var methodMove:String = "FlexIFrame.move";
public var methodNavigate:String = "FlexIFrame.navigate";
public var methodVisibility:String = "FlexIFrame.visibility";
public var positionChanged:Boolean = false;
public var sizeChanged:Boolean = false;
private var _autoResize:Boolean = false;
private var _url:String = '';
public function IFrame()
{
super();
addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler)
}
override public function set id(value:String):void
{
super.id = value;
}
protected function addedToStageHandler(event:Event):void
{
positionChanged = true;
sizeChanged = true;
invalidateProperties();
}
public function set autoResize(value:Boolean):void
{
_autoResize = value;
if(value)
addEventListener(Event.RESIZE, autoResizeHandler);
else
removeEventListener(Event.RESIZE, autoResizeHandler);
}
public function get autoResize():Boolean
{
return _autoResize;
}
protected function autoResizeHandler(event:Event):void
{
positionChanged = true;
sizeChanged = true;
invalidateProperties();
}
override protected function commitProperties():void
{
super.commitProperties();
if(positionChanged)
{
var point:Point = localToGlobal(new Point(0, 0));
callJS(methodMove, point.x, point.y);
positionChanged = false;
}
if(sizeChanged)
{
callJS(methodResize, width, height);
sizeChanged = false;
}
}
public function set url(value:String):void
{
_url = value;
callJS(methodNavigate, value)
}
public function get url():String
{
return _url;
}
protected function callJS(method:String, ... values):void
{
if(!id)
throw new Error("IFrame id is not defined");
var args:Array = [method, id];
try
{
ExternalInterface.call.apply(ExternalInterface, args.concat(values));
}
catch(error:Error)
{
trace(error.message);
}
}
override public function set visible(value:Boolean):void
{
super.visible = value;
callJS(methodVisibility, value);
}
override public function set width(value:Number):void
{
super.width = value;
callJS(methodResize, value, height);
}
override public function set height(value:Number):void
{
super.height = value;
callJS(methodResize, width, value);
}
override public function set x(value:Number):void
{
super.x = value;
var point:Point = localToGlobal(new Point(0, 0));
callJS(methodMove, point.x, point.y);
}
override public function set y(value:Number):void
{
super.y = value;
var point:Point = localToGlobal(new Point(0, 0));
callJS(methodMove, point.x, point.y);
}
}
}
/*
var FlexIFrame = {
get: function(id)
{
var iframe = document.getElementById(id);
if(!iframe)
return FlexIFrame.create(id);
return iframe;
},
create: function(id)
{
var iframe = document.createElement('iframe');
iframe.id = id;
iframe.frameborder = 0;
iframe.style.position = "absolute";
iframe.style.zIndex = 1;
iframe.style.border = "none";
document.body.insertBefore(iframe, document.body.firstChild);
return iframe;
},
resize: function(id, width, height)
{
var iframe = FlexIFrame.get(id);
iframe.style.width = width + "px";
iframe.style.height = height + "px";
},
move: function(id, x, y)
{
var iframe = FlexIFrame.get(id);
iframe.style.left = x + "px";
iframe.style.top = y + "px";
},
navigate: function(id, url)
{
var iframe = FlexIFrame.get(id);
iframe.src = url;
},
visibility: function(id, visible)
{
var iframe = FlexIFrame.get(id);
iframe.style.display = visible ? "block" : "none";
}
}
*/