You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by pe...@apache.org on 2017/08/21 09:12:09 UTC

[14/28] git commit: [flex-asjs] [refs/heads/feature/dragAndDrop] - UIModule and UIModuleLoader

UIModule and UIModuleLoader


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/020c1cb9
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/020c1cb9
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/020c1cb9

Branch: refs/heads/feature/dragAndDrop
Commit: 020c1cb9e4a825f228ced241728dd80e4cab8432
Parents: 683db92
Author: Alex Harui <ah...@apache.org>
Authored: Tue Aug 15 13:15:50 2017 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Tue Aug 15 13:19:34 2017 -0700

----------------------------------------------------------------------
 .../main/flex/org/apache/flex/html/UIModule.as  | 139 +++++++++++
 .../flex/org/apache/flex/html/UIModuleLoader.as | 233 +++++++++++++++++++
 .../Basic/src/main/resources/basic-manifest.xml |   3 +
 3 files changed, 375 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/020c1cb9/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/UIModule.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/UIModule.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/UIModule.as
new file mode 100644
index 0000000..4c7784f
--- /dev/null
+++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/UIModule.as
@@ -0,0 +1,139 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html
+{
+    COMPILE::SWF
+    {
+        import flash.system.ApplicationDomain;        
+        import flash.utils.getQualifiedClassName;        
+    }
+    import org.apache.flex.core.IFlexInfo;
+    import org.apache.flex.core.IValuesImpl;
+	import org.apache.flex.core.ValuesManager;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.ValueChangeEvent;
+
+    /**
+     *  Indicates that the state change has completed.  All properties
+     *  that need to change have been changed, and all transitinos
+     *  that need to run have completed.  However, any deferred work
+     *  may not be completed, and the screen may not be updated until
+     *  code stops executing.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+    [Event(name="stateChangeComplete", type="org.apache.flex.events.Event")]
+    
+    /**
+     *  Indicates that the initialization of the container is complete.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+    [Event(name="initComplete", type="org.apache.flex.events.Event")]
+    
+    /**
+     *  Indicates that the children of the container is have been added.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+    [Event(name="childrenAdded", type="org.apache.flex.events.Event")]
+    
+    /**
+     *  The UIModule class is the base class for modules of user
+     *  interface controls in FlexJS.  It is usable as the root tag of MXML
+     *  documents and UI controls and containers are added to it.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+	public class UIModule extends Group implements IFlexInfo
+	{
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+		public function UIModule()
+		{
+			super();
+		}
+		
+        private var _info:Object;
+        
+        /**
+         *  An Object containing information generated
+         *  by the compiler that is useful at startup time.
+         * 
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function info():Object
+        {
+            COMPILE::SWF
+            {
+            if (!_info)
+            {
+                var mainClassName:String = getQualifiedClassName(this);
+                var initClassName:String = "_" + mainClassName + "_FlexInit";
+                var c:Class = ApplicationDomain.currentDomain.getDefinition(initClassName) as Class;
+                _info = c.info();
+            }
+            }
+            return _info;
+        }
+        
+        /**
+         *  The org.apache.flex.core.IValuesImpl that is
+         *  used by the loading application or module.
+         *  A new instance is not created as the main
+         *  one is shared but this adds the required
+         *  depedencies for the JS compiler optimizer
+         *  and adds the values for this module
+         *
+         *  @see org.apache.flex.core.SimpleCSSValuesImpl
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function set valuesImpl(value:IValuesImpl):void
+        {
+            ValuesManager.valuesImpl.init(this);
+        }
+
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/020c1cb9/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/UIModuleLoader.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/UIModuleLoader.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/UIModuleLoader.as
new file mode 100644
index 0000000..db4acee
--- /dev/null
+++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/UIModuleLoader.as
@@ -0,0 +1,233 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html
+{
+	import org.apache.flex.core.IUIBase;
+	import org.apache.flex.core.UIBase;
+	import org.apache.flex.utils.PointUtils;
+	import org.apache.flex.geom.Point;
+	import org.apache.flex.events.Event;
+	
+	COMPILE::SWF
+	{
+		import flash.display.Loader;
+		import flash.display.DisplayObjectContainer;
+        import flash.events.Event;
+		import flash.system.LoaderContext;
+		import flash.system.ApplicationDomain;
+		import flash.net.URLRequest;
+	}
+	
+    COMPILE::JS
+    {
+        import goog.global;
+        import org.apache.flex.core.WrappedHTMLElement;   
+    }
+    
+    /**
+     *  The UIModuleLoader class can load a UIModule. 
+	 * 
+     *  @toplevel
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */    
+	public class UIModuleLoader extends UIBase
+	{
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+		public function UIModuleLoader()
+		{
+			super();
+		}
+		
+        private var _modulePath:String;
+        
+        /**
+         *  Path or URL of module.  This is combined
+         *  with the module name and a platform suffix
+         *  to determine the actual path or URL of the
+         *  module.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function get modulePath():String
+        {
+            return _modulePath;
+        }
+        
+        /**
+         *  @private.
+         */
+        public function set modulePath(value:String):void
+        {
+            _modulePath = value;
+        }
+        
+        private var _moduleName:String;
+        
+        public function get moduleName():String
+        {
+            return _moduleName;
+        }
+        
+        public function set moduleName(value:String):void
+        {
+            _moduleName = value;
+        }
+        
+		COMPILE::SWF
+		private var swfLoader:Loader;
+		
+		COMPILE::JS
+		private var jsLoader:WrappedHTMLElement;
+
+        COMPILE::JS
+        private var jsDepsLoader:WrappedHTMLElement;
+        
+        override public function addedToParent():void
+        {
+            super.addedToParent();
+            if (_modulePath)
+                loadModule();
+        }
+        
+		/**
+		 * @private
+		 * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement
+		 */
+		private function createLoader():void
+		{
+			COMPILE::SWF {				
+				if (swfLoader != null) {
+                    swfLoader.contentLoaderInfo.removeEventListener("complete", completeHandler);
+				}
+				
+				swfLoader = new Loader();
+                swfLoader.contentLoaderInfo.addEventListener("complete", completeHandler);
+			}
+				
+			COMPILE::JS {
+				var origin:Point = new Point(0,0);
+				var xlated:Point = PointUtils.localToGlobal(origin, parent);
+				
+                if (goog.DEBUG)
+                {
+                    if (jsDepsLoader == null) {
+                        jsDepsLoader = document.createElement('script') as WrappedHTMLElement;
+                        jsDepsLoader.onload = loadDepsHandler;
+                        document.body.appendChild(jsDepsLoader);
+                    }                    
+                }
+                else
+                {
+    				if (jsLoader == null) {
+    					jsLoader = document.createElement('script') as WrappedHTMLElement;
+                        jsLoader.onload = loadHandler;
+    					document.body.appendChild(jsLoader);
+    				}
+                }
+			}
+		}
+		
+		/**
+         *  Load the module.  Will be called automatically if modulePath
+         *  is set as the UIModuleLoader is added to the display list.
+         * 
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+		 */
+		public function loadModule():void
+		{
+            if (moduleInstance)
+                removeElement(moduleInstance);
+            
+			createLoader();
+			
+			COMPILE::SWF {
+				var url:URLRequest = new URLRequest(modulePath ? modulePath + "/" + moduleName + ".swf" :
+                                                    moduleName + ".swf");
+				var loaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null);
+				swfLoader.load(url, loaderContext);
+				if (swfLoader.parent == null) {
+					addChild(swfLoader);
+				}
+			}
+				
+			COMPILE::JS {
+                if (!goog.DEBUG)
+    	   			jsLoader.setAttribute("src", modulePath ? modulePath + "/" + moduleName + ".js" :
+                        moduleName + ".js");
+                else
+                {
+                    // js-debug module loading requires that the __deps.js file has been tweaked
+                    // so that the path to the module class is correct and that any
+                    // framework js files have been copied into the same tree structure as
+                    // the main apps framework js files
+                    window["goog"]["ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING"] = true;
+                    jsDepsLoader.setAttribute("src", modulePath ? modulePath + "/" + moduleName + "__deps.js" :
+                        moduleName + "__deps.js");
+                }
+			}
+		}
+        
+        private var moduleInstance:IUIBase;
+        
+        COMPILE::SWF
+        protected function completeHandler(event:flash.events.Event):void
+        {
+            var c:Class = ApplicationDomain.currentDomain.getDefinition(moduleName) as Class;
+            moduleInstance = new c() as IUIBase;
+            addElement(moduleInstance);
+        }
+        
+        COMPILE::JS
+        protected function loadDepsHandler():void
+        {
+            // wait for other scripts to load
+            if (window[moduleName] == null)
+            {
+                setTimeout(loadDepsHandler, 250);
+            }
+            else
+                loadHandler();
+                
+        }
+        
+        COMPILE::JS
+        protected function loadHandler():void
+        {
+            var c:Class = window[moduleName];
+            moduleInstance = new c() as IUIBase;
+            addElement(moduleInstance);
+        }
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/020c1cb9/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
index 9df3370..a07fc40 100644
--- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
@@ -174,4 +174,7 @@
     <component id="TableCell" class="org.apache.flex.html.TableCell"/>
     <component id="TableHeader" class="org.apache.flex.html.TableHeader"/>
 
+    <component id="UIModule" class="org.apache.flex.html.UIModule"/>
+    <component id="UIModuleLoader" class="org.apache.flex.html.UIModuleLoader"/>
+
 </componentPackage>