home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2012 April / ME_04_2012.iso / Video-Tutorial / iPhoto / media / player.swf / scripts / mx / utils / LoaderUtil.as < prev    next >
Encoding:
Text File  |  2011-11-11  |  11.9 KB  |  387 lines

  1. package mx.utils
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.display.LoaderInfo;
  5.    import flash.system.Capabilities;
  6.    import flash.utils.Dictionary;
  7.    import mx.core.ApplicationDomainTarget;
  8.    import mx.core.IFlexModuleFactory;
  9.    import mx.core.RSLData;
  10.    import mx.core.mx_internal;
  11.    import mx.events.Request;
  12.    import mx.managers.SystemManagerGlobals;
  13.    
  14.    use namespace mx_internal;
  15.    
  16.    public class LoaderUtil
  17.    {
  18.       mx_internal static const VERSION:String = "4.5.0.20967";
  19.       
  20.       mx_internal static var urlFilters:Array = [{
  21.          "searchString":"/[[DYNAMIC]]/",
  22.          "filterFunction":dynamicURLFilter
  23.       },{
  24.          "searchString":"/[[IMPORT]]/",
  25.          "filterFunction":importURLFilter
  26.       }];
  27.       
  28.       public function LoaderUtil()
  29.       {
  30.          super();
  31.       }
  32.       
  33.       public static function normalizeURL(param1:LoaderInfo) : String
  34.       {
  35.          var _loc3_:int = 0;
  36.          var _loc4_:String = null;
  37.          var _loc5_:Function = null;
  38.          var _loc2_:String = param1.url;
  39.          var _loc6_:uint = LoaderUtil.mx_internal::urlFilters.length;
  40.          var _loc7_:uint = 0;
  41.          while(_loc7_ < _loc6_)
  42.          {
  43.             _loc4_ = LoaderUtil.mx_internal::urlFilters[_loc7_].searchString;
  44.             _loc3_ = int(_loc2_.indexOf(_loc4_));
  45.             if(_loc3_ != -1)
  46.             {
  47.                _loc5_ = LoaderUtil.mx_internal::urlFilters[_loc7_].filterFunction;
  48.                _loc2_ = _loc5_(_loc2_,_loc3_);
  49.             }
  50.             _loc7_++;
  51.          }
  52.          if(isMac())
  53.          {
  54.             return encodeURI(_loc2_);
  55.          }
  56.          return _loc2_;
  57.       }
  58.       
  59.       public static function createAbsoluteURL(param1:String, param2:String) : String
  60.       {
  61.          var _loc4_:int = 0;
  62.          var _loc5_:int = 0;
  63.          var _loc3_:String = param2;
  64.          if(Boolean(param1) && !(param2.indexOf(":") > -1 || param2.indexOf("/") == 0 || param2.indexOf("\\") == 0))
  65.          {
  66.             _loc4_ = int(param1.indexOf("?"));
  67.             if(_loc4_ != -1)
  68.             {
  69.                param1 = param1.substring(0,_loc4_);
  70.             }
  71.             _loc4_ = int(param1.indexOf("#"));
  72.             if(_loc4_ != -1)
  73.             {
  74.                param1 = param1.substring(0,_loc4_);
  75.             }
  76.             _loc5_ = Math.max(param1.lastIndexOf("\\"),param1.lastIndexOf("/"));
  77.             if(param2.indexOf("./") == 0)
  78.             {
  79.                param2 = param2.substring(2);
  80.             }
  81.             else
  82.             {
  83.                while(param2.indexOf("../") == 0)
  84.                {
  85.                   param2 = param2.substring(3);
  86.                   _loc5_ = Math.max(param1.lastIndexOf("\\",_loc5_ - 1),param1.lastIndexOf("/",_loc5_ - 1));
  87.                }
  88.             }
  89.             if(_loc5_ != -1)
  90.             {
  91.                _loc3_ = param1.substr(0,_loc5_ + 1) + param2;
  92.             }
  93.          }
  94.          return _loc3_;
  95.       }
  96.       
  97.       mx_internal static function processRequiredRSLs(param1:IFlexModuleFactory, param2:Array) : Array
  98.       {
  99.          var _loc12_:int = 0;
  100.          var _loc13_:int = 0;
  101.          var _loc14_:Array = null;
  102.          var _loc15_:int = 0;
  103.          var _loc3_:Array = [];
  104.          var _loc4_:IFlexModuleFactory;
  105.          var _loc5_:IFlexModuleFactory = _loc4_ = SystemManagerGlobals.topLevelSystemManagers[0];
  106.          var _loc6_:IFlexModuleFactory = null;
  107.          var _loc7_:Dictionary = new Dictionary();
  108.          var _loc8_:int = 0;
  109.          var _loc9_:Dictionary = new Dictionary();
  110.          var _loc10_:int = 0;
  111.          var _loc11_:Array = null;
  112.          while(_loc5_ != param1)
  113.          {
  114.             _loc12_ = int(param2.length);
  115.             _loc13_ = 0;
  116.             while(_loc13_ < _loc12_)
  117.             {
  118.                _loc14_ = param2[_loc13_];
  119.                if(!_loc7_[_loc14_])
  120.                {
  121.                   if(isRSLLoaded(_loc5_,_loc14_[0].digest))
  122.                   {
  123.                      _loc7_[_loc14_] = 1;
  124.                      _loc8_++;
  125.                      if(_loc5_ != _loc4_)
  126.                      {
  127.                         _loc15_ = int(_loc3_.indexOf(_loc14_));
  128.                         if(_loc15_ != -1)
  129.                         {
  130.                            _loc3_.splice(_loc15_,1);
  131.                         }
  132.                      }
  133.                   }
  134.                   else if(_loc3_.indexOf(_loc14_) == -1)
  135.                   {
  136.                      _loc3_.push(_loc14_);
  137.                   }
  138.                }
  139.                if(!_loc7_[_loc14_] && _loc9_[_loc14_] == null)
  140.                {
  141.                   if(!_loc6_ && RSLData(_loc14_[0]).applicationDomainTarget == ApplicationDomainTarget.PARENT)
  142.                   {
  143.                      _loc6_ = getParentModuleFactory(param1);
  144.                   }
  145.                   if(resolveApplicationDomainTarget(_loc14_,param1,_loc5_,_loc6_,_loc4_))
  146.                   {
  147.                      _loc9_[_loc14_] = 1;
  148.                      _loc10_++;
  149.                   }
  150.                }
  151.                _loc13_++;
  152.             }
  153.             if(_loc8_ + _loc10_ >= param2.length)
  154.             {
  155.                break;
  156.             }
  157.             if(!_loc11_)
  158.             {
  159.                _loc11_ = [param1];
  160.                _loc5_ = param1;
  161.                while(_loc5_ != _loc4_)
  162.                {
  163.                   _loc5_ = getParentModuleFactory(_loc5_);
  164.                   if(!_loc5_)
  165.                   {
  166.                      break;
  167.                   }
  168.                   if(_loc5_ != _loc4_)
  169.                   {
  170.                      _loc11_.push(_loc5_);
  171.                   }
  172.                   if(!_loc6_)
  173.                   {
  174.                      _loc6_ = _loc5_;
  175.                   }
  176.                }
  177.             }
  178.             _loc5_ = _loc11_.pop();
  179.          }
  180.          return _loc3_;
  181.       }
  182.       
  183.       mx_internal static function isLocal(param1:String) : Boolean
  184.       {
  185.          return param1.indexOf("file:") == 0 || param1.indexOf(":") == 1;
  186.       }
  187.       
  188.       mx_internal static function OSToPlayerURI(param1:String, param2:Boolean) : String
  189.       {
  190.          var _loc3_:int = 0;
  191.          var _loc4_:int = 0;
  192.          var _loc7_:int = 0;
  193.          var _loc5_:String = param1;
  194.          _loc3_ = int(_loc5_.indexOf("?"));
  195.          if(_loc3_ != -1)
  196.          {
  197.             _loc5_ = _loc5_.substring(0,_loc3_);
  198.          }
  199.          _loc4_ = int(_loc5_.indexOf("#"));
  200.          if(_loc4_ != -1)
  201.          {
  202.             _loc5_ = _loc5_.substring(0,_loc4_);
  203.          }
  204.          try
  205.          {
  206.             _loc5_ = decodeURI(_loc5_);
  207.          }
  208.          catch(e:Error)
  209.          {
  210.          }
  211.          var _loc6_:String = null;
  212.          if(_loc3_ != -1 || _loc4_ != -1)
  213.          {
  214.             _loc7_ = _loc3_;
  215.             if(_loc3_ == -1 || _loc4_ != -1 && _loc4_ < _loc3_)
  216.             {
  217.                _loc7_ = _loc4_;
  218.             }
  219.             _loc6_ = param1.substr(_loc7_);
  220.          }
  221.          if(param2 && Capabilities.playerType == "ActiveX")
  222.          {
  223.             if(_loc6_)
  224.             {
  225.                return _loc5_ + _loc6_;
  226.             }
  227.             return _loc5_;
  228.          }
  229.          if(_loc6_)
  230.          {
  231.             return encodeURI(_loc5_) + _loc6_;
  232.          }
  233.          return encodeURI(_loc5_);
  234.       }
  235.       
  236.       private static function getParentModuleFactory(param1:IFlexModuleFactory) : IFlexModuleFactory
  237.       {
  238.          var _loc2_:Request = new Request(Request.GET_PARENT_FLEX_MODULE_FACTORY_REQUEST);
  239.          DisplayObject(param1).dispatchEvent(_loc2_);
  240.          return _loc2_.value as IFlexModuleFactory;
  241.       }
  242.       
  243.       private static function resolveApplicationDomainTarget(param1:Array, param2:IFlexModuleFactory, param3:IFlexModuleFactory, param4:IFlexModuleFactory, param5:IFlexModuleFactory) : Boolean
  244.       {
  245.          var _loc6_:Boolean = false;
  246.          var _loc7_:IFlexModuleFactory = null;
  247.          var _loc8_:String = param1[0].applicationDomainTarget;
  248.          if(isLoadedIntoTopLevelApplicationDomain(param2))
  249.          {
  250.             _loc7_ = param5;
  251.          }
  252.          else if(_loc8_ == ApplicationDomainTarget.DEFAULT)
  253.          {
  254.             if(hasPlaceholderRSL(param3,param1[0].digest))
  255.             {
  256.                _loc7_ = param3;
  257.             }
  258.          }
  259.          else if(_loc8_ == ApplicationDomainTarget.TOP_LEVEL)
  260.          {
  261.             _loc7_ = param5;
  262.          }
  263.          else if(_loc8_ == ApplicationDomainTarget.CURRENT)
  264.          {
  265.             _loc6_ = true;
  266.          }
  267.          else if(_loc8_ == ApplicationDomainTarget.PARENT)
  268.          {
  269.             _loc7_ = param4;
  270.          }
  271.          else
  272.          {
  273.             _loc6_ = true;
  274.          }
  275.          if(_loc6_ || Boolean(_loc7_))
  276.          {
  277.             if(_loc7_)
  278.             {
  279.                updateRSLModuleFactory(param1,_loc7_);
  280.             }
  281.             return true;
  282.          }
  283.          return false;
  284.       }
  285.       
  286.       private static function isRSLLoaded(param1:IFlexModuleFactory, param2:String) : Boolean
  287.       {
  288.          var _loc4_:Vector.<RSLData> = null;
  289.          var _loc5_:int = 0;
  290.          var _loc6_:int = 0;
  291.          var _loc3_:Dictionary = param1.preloadedRSLs;
  292.          if(_loc3_)
  293.          {
  294.             for each(_loc4_ in _loc3_)
  295.             {
  296.                _loc5_ = int(_loc4_.length);
  297.                _loc6_ = 0;
  298.                while(_loc6_ < _loc5_)
  299.                {
  300.                   if(_loc4_[_loc6_].digest == param2)
  301.                   {
  302.                      return true;
  303.                   }
  304.                   _loc6_++;
  305.                }
  306.             }
  307.          }
  308.          return false;
  309.       }
  310.       
  311.       private static function hasPlaceholderRSL(param1:IFlexModuleFactory, param2:String) : Boolean
  312.       {
  313.          var _loc4_:int = 0;
  314.          var _loc5_:int = 0;
  315.          var _loc6_:Object = null;
  316.          var _loc7_:int = 0;
  317.          var _loc8_:int = 0;
  318.          var _loc3_:Array = param1.info()["placeholderRsls"];
  319.          if(_loc3_)
  320.          {
  321.             _loc4_ = int(_loc3_.length);
  322.             _loc5_ = 0;
  323.             while(_loc5_ < _loc4_)
  324.             {
  325.                _loc6_ = _loc3_[_loc5_];
  326.                _loc7_ = int(_loc6_.length);
  327.                _loc8_ = 0;
  328.                while(_loc8_ < _loc7_)
  329.                {
  330.                   if(_loc6_[_loc8_].digest == param2)
  331.                   {
  332.                      return true;
  333.                   }
  334.                   _loc8_++;
  335.                }
  336.                _loc5_++;
  337.             }
  338.          }
  339.          return false;
  340.       }
  341.       
  342.       private static function isLoadedIntoTopLevelApplicationDomain(param1:IFlexModuleFactory) : Boolean
  343.       {
  344.          var _loc2_:DisplayObject = null;
  345.          var _loc3_:LoaderInfo = null;
  346.          if(param1 is DisplayObject)
  347.          {
  348.             _loc2_ = DisplayObject(param1);
  349.             _loc3_ = _loc2_.loaderInfo;
  350.             if(_loc3_ && _loc3_.applicationDomain && _loc3_.applicationDomain.parentDomain == null)
  351.             {
  352.                return true;
  353.             }
  354.          }
  355.          return false;
  356.       }
  357.       
  358.       private static function updateRSLModuleFactory(param1:Array, param2:IFlexModuleFactory) : void
  359.       {
  360.          var _loc3_:int = int(param1.length);
  361.          var _loc4_:int = 0;
  362.          while(_loc4_ < _loc3_)
  363.          {
  364.             param1[_loc4_].moduleFactory = param2;
  365.             _loc4_++;
  366.          }
  367.       }
  368.       
  369.       private static function isMac() : Boolean
  370.       {
  371.          return Capabilities.os.substring(0,3) == "Mac";
  372.       }
  373.       
  374.       private static function dynamicURLFilter(param1:String, param2:int) : String
  375.       {
  376.          return param1.substring(0,param2);
  377.       }
  378.       
  379.       private static function importURLFilter(param1:String, param2:int) : String
  380.       {
  381.          var _loc3_:int = int(param1.indexOf("://"));
  382.          return param1.substring(0,_loc3_ + 3) + param1.substring(param2 + 12);
  383.       }
  384.    }
  385. }
  386.  
  387.