package
{
import flash.display.DisplayObject;
/**
* @author Georg Kamptner
* Flashvars is implemented as Singleton (with the exception that
* the getInstance() Method is not public)
* Use the static API instead of Flashvars.getInstance()
*/
public class Flashvars
{
private var _flash_vars:Object;
private var _crucial_flash_vars:Array;
private var _extracted:Boolean;
private static var _instance:Flashvars;
public function Flashvars(singleton_enforcer:SingletonEnforcer)
{
_flash_vars = null;
_crucial_flash_vars = new Array();
_extracted = false;
}
private static function getInstance():Flashvars
{
if (_instance == null)
_instance = new Flashvars(new SingletonEnforcer());
return _instance;
}
private function _getFlashVar(name:String):String
{
return _getFlashVarAsString(name);
}
private function _getFlashVarAsString(name:String):String
{
return _flash_vars[name] as String;
}
private function _getFlashVarAsInt(name:String):int
{
if (_flash_vars[name] == undefined)
return NaN;
return parseInt(_flash_vars[name]);
}
private function _getFlashVarAsNumber(name:String):Number
{
if (_flash_vars[name] == undefined)
return NaN;
return parseFloat(_flash_vars[name]);
}
private function _getFlashVarAsBool(name:String):Boolean
{
if (_flash_vars[name] == undefined)
return false;
var var_as_string:String = _flash_vars[name] as String;
if (var_as_string.length == 1)
{
if (var_as_string == "0")
return false;
else
return true;
}
else
{
if (var_as_string.toLowerCase() == "false")
return false;
else
return true;
}
}
private function _extractFlashvars(root:DisplayObject):void
{
if (root == null)
throw new Error("Flashvars extraction impossible: No root.loaderInfo available!");
_flash_vars = root.loaderInfo.parameters;
_extracted = true;
checkCrucialVars();
}
private function checkCrucialVars():void
{
// check only of vars havee allready been extracted
if (!_extracted)
return;
// check if all flash vars are available
var l:uint = _crucial_flash_vars.length;
var i:uint;
for (i = 0; i<l; ++i)
{
if (_flash_vars[_crucial_flash_vars[i]] == undefined)
{
throw new Error("Flashvar: '" + _crucial_flash_vars[i] + "' missing.");
break;
}
}
}
private function _setCrucialFlashvars(crucial_flash_vars:Array):void
{
_crucial_flash_vars = crucial_flash_vars;
checkCrucialVars();
}
private function toString():String
{
var str:String = "";
str += "\n [Flashvars] \n";
return str;
}
// - STATIC API ------------------------------------------
public static function extractFlashvars(root:DisplayObject):void {
Flashvars.getInstance()._extractFlashvars(root);
}
public static function getFlashVar(name:String):String {
return Flashvars.getInstance()._getFlashVar(name);
}
public static function getString(name:String):String {
return Flashvars.getInstance()._getFlashVarAsString(name);
}
public static function getInt(name:String):int {
return Flashvars.getInstance()._getFlashVarAsInt(name);
}
public static function getNumber(name:String):Number {
return Flashvars.getInstance()._getFlashVarAsNumber(name);
}
public static function getBool(name:String):Boolean {
return Flashvars.getInstance()._getFlashVarAsBool(name);
}
public static function setCrucialFlashvars(crucial_flash_vars:Array):void {
Flashvars.getInstance()._setCrucialFlashvars(crucial_flash_vars);
}
}
}
class SingletonEnforcer {}