Repository: flex-asjs
Updated Branches:
  refs/heads/develop e85d9e134 -> 894b5264e


Add AngularJS + Angular Material example.  Need to figure out what to do about 
the externs swc files.


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

Branch: refs/heads/develop
Commit: 894b5264e4972b48d6c4bbaa925540c44d48bee8
Parents: e85d9e1
Author: OmPrakash Muppirala <[email protected]>
Authored: Sat Apr 2 02:55:26 2016 -0700
Committer: OmPrakash Muppirala <[email protected]>
Committed: Sat Apr 2 02:56:10 2016 -0700

----------------------------------------------------------------------
 .../AngularExample/AngularExample-debug.html    | 28 +++++++++
 .../AngularExample/AngularExample-release.html  | 29 +++++++++
 .../native/AngularExample/src/AngularExample.as | 66 ++++++++++++++++++++
 .../native/AngularExample/src/MyController.as   | 52 +++++++++++++++
 .../src/components/IWebComponent.as             |  9 +++
 .../src/components/WebComponent.as              | 20 ++++++
 .../src/components/mdbutton/MDButton.as         | 43 +++++++++++++
 .../src/components/mdbutton/MDButtonFactory.as  | 38 +++++++++++
 8 files changed, 285 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/894b5264/examples/native/AngularExample/AngularExample-debug.html
----------------------------------------------------------------------
diff --git a/examples/native/AngularExample/AngularExample-debug.html 
b/examples/native/AngularExample/AngularExample-debug.html
new file mode 100644
index 0000000..51aa820
--- /dev/null
+++ b/examples/native/AngularExample/AngularExample-debug.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html>
+    <head>
+        <meta charset="utf-8"/>
+        <title>AngularExample Debug Build</title>
+        
+        <link rel="stylesheet" 
href="http://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.css";>
+        <link href="https://fonts.googleapis.com/icon?family=Material+Icons"; 
rel="stylesheet">
+        
+        <script src="bin/js-debug/library/closure/goog/base.js"></script>
+        <script src="bin/js-debug/AngularExample-dependencies.js"></script>
+        <script 
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js";></script>
+        
+        <!-- Angular Material requires Angular.js Libraries -->
+               <script 
src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js";></script>
+               <script 
src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-animate.min.js";></script>
+               <script 
src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-aria.min.js";></script>
+               <script 
src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-messages.min.js";></script>
+
+  <!-- Angular Material Library -->
+  <script 
src="http://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.js";></script>
+    </head>
+    <body>
+        <script>
+            new AngularExample();
+        </script>
+    </body>
+</html>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/894b5264/examples/native/AngularExample/AngularExample-release.html
----------------------------------------------------------------------
diff --git a/examples/native/AngularExample/AngularExample-release.html 
b/examples/native/AngularExample/AngularExample-release.html
new file mode 100644
index 0000000..8d329be
--- /dev/null
+++ b/examples/native/AngularExample/AngularExample-release.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html>
+    <head>
+        <meta charset="utf-8"/>
+        <title>AngularExample Release Build</title>
+        <link rel="stylesheet" 
href="http://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.css";>
+        <link href="https://fonts.googleapis.com/icon?family=Material+Icons"; 
rel="stylesheet">
+        
+        <script src="bin/js-debug/library/closure/goog/base.js"></script>
+        <script src="bin/js-debug/AngularExample-dependencies.js"></script>
+        <script 
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js";></script>
+        
+        <!-- Angular Material requires Angular.js Libraries -->
+               <script 
src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js";></script>
+               <script 
src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-animate.min.js";></script>
+               <script 
src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-aria.min.js";></script>
+               <script 
src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-messages.min.js";></script>
+
+               <!-- Angular Material Library -->
+               <script 
src="http://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.js";></script>
+               
+        <script src="bin/js-release/AngularExample.js"></script>
+    </head>
+    <body>
+        <script>
+            new AngularExample();
+        </script>
+    </body>
+</html>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/894b5264/examples/native/AngularExample/src/AngularExample.as
----------------------------------------------------------------------
diff --git a/examples/native/AngularExample/src/AngularExample.as 
b/examples/native/AngularExample/src/AngularExample.as
new file mode 100644
index 0000000..58517b5
--- /dev/null
+++ b/examples/native/AngularExample/src/AngularExample.as
@@ -0,0 +1,66 @@
+package {
+       import angular.IModule;
+
+       import components.mdbutton.MDButton;
+       import components.mdbutton.MDButtonFactory;
+       /**
+        * @author omuppirala
+        */
+       public class AngularExample {
+               
+               private var app:IModule;
+               
+               public function AngularExample() {
+                       //set up angular app
+                       app = angular.module("app",["ngMaterial"]);
+                       app.controller("MyController", ["$scope", "$mdDialog", 
MyController]);
+                       document.body.setAttribute("ng-app", "app");
+                       
+                       //App container
+                       var container:HTMLDivElement = 
document.createElement('div') as HTMLDivElement;
+                       container.style.width = '100%';
+                       container.style.height = '100%';
+                       container.setAttribute("layout", "row");
+                       container.setAttribute("layout-align", "center center");
+                       document.body.appendChild(container);
+                       
+                       //App
+                       var div:HTMLDivElement = document.createElement('div') 
as HTMLDivElement;
+                       div.id = 'div';
+                       div.style.width = '50%';
+                       div.style.height = '50%';
+                       div.setAttribute("layout", "column");
+                       div.setAttribute("layout-align", "center center");
+                       
+                       div.setAttribute("ng-controller", "MyController");
+                       div.setAttribute("md-whiteframe", "18");
+                       div.setAttribute("class", "md-whiteframe-14dp");
+                       container.appendChild(div);
+                       
+                       //App children
+                       div.innerHTML = '<h1>FlexJS + Angular + Angular 
Material Demo</h1>';
+                       div.innerHTML += '<span flex />';
+                       div.innerHTML += '<md-button id="myBtn" 
class="md-primary md-raised" 
ng-click="handleBtnClick()">{{btnLabelStr}}</md-button>';
+//                     div.innerHTML += '<md-datepicker ng-model="myDate" 
md-placeholder="Enter date"></md-datepicker>';
+//                     div.innerHTML += '<md-progress-circular 
md-mode="indeterminate"></md-progress-circular>';
+                       div.innerHTML += '<md-input-container class="md-block" 
flex-gt-sm><label>Change button label...</label><input 
ng-model="btnLabelStr"></md-input-container>';
+                       div.innerHTML += '<span flex />';
+
+//                     var labelButtonClass:Object = 
MDButtonFactory.getInstance().getButtonClass();
+//                     var labelButton:MDButton = new labelButtonClass();
+//                     labelButton.setAttribute("class", "md-primary 
md-raised");
+//                     div.appendChild(labelButton);
+//                     labelButton.setLabel("Label Button");
+                       
+//                     var cakeButtonClass:Object = 
MDButtonFactory.getInstance().getButtonClass();
+//                     var cakeButton:MDButton = new cakeButtonClass();
+//                     cakeButton.setAttribute("class", "md-fab");
+//                     //cakeButton.setAttribute("md-no-ink", "");
+//                     div.appendChild(cakeButton);
+//                     cakeButton.setIcon("cake");
+//                     cakeButton.clickHandler("handleBtnClick");
+                       
+               }
+
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/894b5264/examples/native/AngularExample/src/MyController.as
----------------------------------------------------------------------
diff --git a/examples/native/AngularExample/src/MyController.as 
b/examples/native/AngularExample/src/MyController.as
new file mode 100644
index 0000000..a38c0cd
--- /dev/null
+++ b/examples/native/AngularExample/src/MyController.as
@@ -0,0 +1,52 @@
+package {
+       import angular.material.MDAlertDialog;
+       import angular.material.MDDialogService;
+       import angular.IScope;
+       /**
+        * @author omuppirala
+        */
+        
+       public class MyController {
+               
+               private var $scope:IScope;
+               private var $mdDialog:MDDialogService;
+               
+               public function 
MyController(scope:IScope,mdDialog:MDDialogService) {
+                       this.$scope = scope;
+                       this.$mdDialog = mdDialog;
+                       this.$scope["handleBtnClick"] = this.handleBtnClick;
+                       this.$scope["close"] = this.close;
+                       this.$scope["myDate"] = new Date();
+                       this.$scope["btnLabelStr"] = "Click me";
+
+                       //setupWatchForDate();
+               }
+
+               private function setupWatchForDate() : void {
+                       $scope.$watch('myDate', this.handleDateChange,true);
+               }
+
+               private function handleDateChange() : void {
+                       alert('Date selected: ' + $scope["myDate"].toString());
+               }
+               
+               public function handleBtnClick(event:Event):void
+               {
+                       $mdDialog.show(
+                       {
+                               scope: $scope,
+                               preserveScope: true,
+                       //template: '<div style="margin:25px;"><img 
src="http://flex.apache.org/images/logo_01_fullcolor-sm.png"; alt=""/><h1 
md-heading">Angular Material</h1><img 
src="https://material.angularjs.org/latest/img/icons/angular-logo.svg"; 
alt=""/><div layout="row"><span flex/><md-button 
ng-click=close()>CLOSE</md-button></div></div>',
+                       template: '<div layout="column" layout-align="left 
center" style="width:500px; height:500px; margin:25px;"><h3>Select a date: 
</h3><md-datepicker ng-model="myDate" md-placeholder="Enter 
date"></md-datepicker><br>Selected date: {{myDate}}<span flex/><div 
layout="row"><span flex/><md-button 
ng-click=close()>CLOSE</md-button></div></div>',
+                           clickOutsideToClose: true,
+                               openFrom: 
angular.element(document.querySelector('#myBtn')),
+                               closeTo: 
angular.element(document.querySelector('#myBtn'))
+                   });
+               }
+               
+               private function close():void
+               {
+                       $mdDialog.cancel();
+               }
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/894b5264/examples/native/AngularExample/src/components/IWebComponent.as
----------------------------------------------------------------------
diff --git a/examples/native/AngularExample/src/components/IWebComponent.as 
b/examples/native/AngularExample/src/components/IWebComponent.as
new file mode 100644
index 0000000..47f3cf2
--- /dev/null
+++ b/examples/native/AngularExample/src/components/IWebComponent.as
@@ -0,0 +1,9 @@
+package components {
+       /**
+        * @author omuppirala
+        */
+       public interface IWebComponent {
+               
+               function setupComponent():void;
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/894b5264/examples/native/AngularExample/src/components/WebComponent.as
----------------------------------------------------------------------
diff --git a/examples/native/AngularExample/src/components/WebComponent.as 
b/examples/native/AngularExample/src/components/WebComponent.as
new file mode 100644
index 0000000..bb90d73
--- /dev/null
+++ b/examples/native/AngularExample/src/components/WebComponent.as
@@ -0,0 +1,20 @@
+package components {
+       import components.IWebComponent;
+
+       /**
+        * @author omuppirala
+        */
+       public class WebComponent extends HTMLElement implements IWebComponent {
+
+               protected var sr : ShadowRoot;
+
+               public function createdCallback() : void {
+                       sr = this['createShadowRoot']();
+                       setupComponent();
+               }
+
+               public function setupComponent() : void {
+                       //override in subclass
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/894b5264/examples/native/AngularExample/src/components/mdbutton/MDButton.as
----------------------------------------------------------------------
diff --git a/examples/native/AngularExample/src/components/mdbutton/MDButton.as 
b/examples/native/AngularExample/src/components/mdbutton/MDButton.as
new file mode 100644
index 0000000..bb1a9f6
--- /dev/null
+++ b/examples/native/AngularExample/src/components/mdbutton/MDButton.as
@@ -0,0 +1,43 @@
+package components.mdbutton {
+       import components.WebComponent;
+       /**
+        * @author omuppirala
+        */
+       public class MDButton extends WebComponent
+       {
+               
+               protected var label:Text;
+               protected var iconSpan:HTMLSpanElement;
+               override public function setupComponent():void {
+                       createLabel();
+                       createIcon();
+               }
+               
+               protected function createLabel():void
+               {
+                       label = ownerDocument.createTextNode("");
+               sr.appendChild(Node(label));
+               }
+               
+               public function setLabel(labelStr:String):void {
+                       this.textContent = labelStr;
+               }
+               
+               protected function createIcon():void
+               {
+                       iconSpan = ownerDocument.createElement("span") as 
HTMLSpanElement;
+                       iconSpan.setAttribute("class","material-icons");
+               this.appendChild(iconSpan);
+               }
+               
+               public function setIcon(iconName:String):void {
+                       iconSpan.textContent = iconName;
+               }
+               
+               public function clickHandler(functionName:String):void
+               {
+                       this.setAttribute("ng-click", functionName+"()");
+               }
+               
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/894b5264/examples/native/AngularExample/src/components/mdbutton/MDButtonFactory.as
----------------------------------------------------------------------
diff --git 
a/examples/native/AngularExample/src/components/mdbutton/MDButtonFactory.as 
b/examples/native/AngularExample/src/components/mdbutton/MDButtonFactory.as
new file mode 100644
index 0000000..e145a48
--- /dev/null
+++ b/examples/native/AngularExample/src/components/mdbutton/MDButtonFactory.as
@@ -0,0 +1,38 @@
+package components.mdbutton {
+       public class MDButtonFactory {
+               private static var _instance : MDButtonFactory;
+               protected var elementName : String = "md-button";
+               protected var baseComponent : Object = MDButton;
+               protected var componentClass : Object;
+               protected var alreadyRegistered: Boolean = false;
+
+               public function MDButtonFactory() {
+                       if (_instance) {
+                               throw new Error("MDButtonFactory is a 
singleton. Use getInstance instead.");
+                       }
+                       _instance = this;
+               }
+
+               public static function  getInstance() : MDButtonFactory {
+                       if (!_instance) {
+                               new MDButtonFactory();
+                       }
+                       return _instance;
+               }
+               
+               protected function registerComponent() : void {
+                       if(!alreadyRegistered)
+                       {
+                               var classProto:Object = 
Object["create"](components.mdbutton.MDButton['prototype']);
+                               componentClass = 
document["registerElement"](elementName, {'prototype':classProto});
+                               alreadyRegistered = true;
+                       }
+               }
+               
+               public function getButtonClass():Object
+               {
+                       registerComponent();
+                       return componentClass;  
+               }
+       }
+}

Reply via email to