Updated Branches:
  refs/heads/develop 0991467eb -> 114aeec95

RadioButtons for jQuery.  RadioButtons cannot be programmatically added due to 
a known jQuery bug (documented in the RadioButton.js file).


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

Branch: refs/heads/develop
Commit: 114aeec95635a765abc6e527517de984cd2dfadd
Parents: 0991467
Author: Peter Ent <p...@apache.org>
Authored: Thu May 9 16:33:01 2013 -0400
Committer: Peter Ent <p...@apache.org>
Committed: Thu May 9 16:33:01 2013 -0400

----------------------------------------------------------------------
 frameworks/as/jquery-manifest.xml                  |    1 -
 .../apache/flex/html/staticControls/RadioButton.as |    6 +
 .../as/src/org/apache/flex/jquery/Application.as   |   43 ----
 .../flex/jquery/staticControls/RadioButton.as      |    4 +
 .../org/apache/flex/html/staticControls/Label.js   |   14 ++
 .../apache/flex/html/staticControls/RadioButton.js |   16 ++
 .../src/org/apache/flex/jquery/Application.js      |  114 -----------
 .../flex/jquery/staticControls/RadioButton.js      |  158 ++++++++++++---
 8 files changed, 169 insertions(+), 187 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/114aeec9/frameworks/as/jquery-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/as/jquery-manifest.xml 
b/frameworks/as/jquery-manifest.xml
index cdb9dd5..d760aff 100644
--- a/frameworks/as/jquery-manifest.xml
+++ b/frameworks/as/jquery-manifest.xml
@@ -21,7 +21,6 @@
 
 <componentPackage>
 
-    <component id="Application" class="org.apache.flex.jquery.Application"/>
     <component id="TextButton" 
class="org.apache.flex.jquery.staticControls.TextButton"/>
     <component id="CheckBox" 
class="org.apache.flex.jquery.staticControls.CheckBox"/>
     <component id="RadioButton" 
class="org.apache.flex.jquery.staticControls.RadioButton"/>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/114aeec9/frameworks/as/src/org/apache/flex/html/staticControls/RadioButton.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/src/org/apache/flex/html/staticControls/RadioButton.as 
b/frameworks/as/src/org/apache/flex/html/staticControls/RadioButton.as
index 0aee02b..a6caf5b 100644
--- a/frameworks/as/src/org/apache/flex/html/staticControls/RadioButton.as
+++ b/frameworks/as/src/org/apache/flex/html/staticControls/RadioButton.as
@@ -19,6 +19,7 @@
 package org.apache.flex.html.staticControls
 {
        import flash.display.DisplayObject;
+       import flash.display.DisplayObjectContainer;
        import flash.display.SimpleButton;
        import flash.events.MouseEvent;
        import flash.utils.Dictionary;
@@ -111,6 +112,11 @@ package org.apache.flex.html.staticControls
                        IValueToggleButtonModel(model).selectedValue = newValue;
                }
                
+               public function addToParent(p:DisplayObjectContainer):void
+               {
+                       p.addChild(this);
+               }
+               
                public function initModel():void
                {
                        if (getBeadByType(IValueToggleButtonModel) == null) 

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/114aeec9/frameworks/as/src/org/apache/flex/jquery/Application.as
----------------------------------------------------------------------
diff --git a/frameworks/as/src/org/apache/flex/jquery/Application.as 
b/frameworks/as/src/org/apache/flex/jquery/Application.as
deleted file mode 100644
index 5801d07..0000000
--- a/frameworks/as/src/org/apache/flex/jquery/Application.as
+++ /dev/null
@@ -1,43 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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.jquery
-{
-    import flash.display.Sprite;
-    import flash.display.StageAlign;
-    import flash.display.StageScaleMode;
-    import flash.events.IOErrorEvent;
-    
-    import org.apache.flex.core.Application;
-    import org.apache.flex.core.IFlexInfo;
-    import org.apache.flex.events.Event;
-    import org.apache.flex.utils.MXMLDataInterpreter;
-    
-    //--------------------------------------
-    //  Events
-    //--------------------------------------
-    
-    /**
-     *  Dispatched at startup.
-     */
-    [Event(name="initialize", type="org.apache.flex.events.Event")]
-    
-    public class Application extends org.apache.flex.core.Application 
implements IFlexInfo
-    {
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/114aeec9/frameworks/as/src/org/apache/flex/jquery/staticControls/RadioButton.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/src/org/apache/flex/jquery/staticControls/RadioButton.as 
b/frameworks/as/src/org/apache/flex/jquery/staticControls/RadioButton.as
index a94739a..aac1ad5 100644
--- a/frameworks/as/src/org/apache/flex/jquery/staticControls/RadioButton.as
+++ b/frameworks/as/src/org/apache/flex/jquery/staticControls/RadioButton.as
@@ -22,5 +22,9 @@ package org.apache.flex.jquery.staticControls
        
        public class RadioButton extends 
org.apache.flex.html.staticControls.RadioButton
        {
+               override public function initModel():void
+               {
+                       super.initModel();
+               }
        }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/114aeec9/frameworks/js/FlexJS/src/org/apache/flex/html/staticControls/Label.js
----------------------------------------------------------------------
diff --git 
a/frameworks/js/FlexJS/src/org/apache/flex/html/staticControls/Label.js 
b/frameworks/js/FlexJS/src/org/apache/flex/html/staticControls/Label.js
index 875607a..55d1361 100644
--- a/frameworks/js/FlexJS/src/org/apache/flex/html/staticControls/Label.js
+++ b/frameworks/js/FlexJS/src/org/apache/flex/html/staticControls/Label.js
@@ -40,6 +40,20 @@ 
org.apache.flex.html.staticControls.Label.prototype.addToParent = function(p) {
   this.positioner = this.element;
 };
 
+/**
+ * @expose
+ * @this {org.apache.flex.html.staticControls.Label}
+ */
+org.apache.flex.html.staticControls.Label.prototype.initModel = function() {
+};
+/**
+ * @expose
+ * @this {org.apache.flex.html.staticControls.Label}
+ */
+org.apache.flex.html.staticControls.Label.prototype.initSkin = function() {
+
+};
+
 
 /**
  * @expose

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/114aeec9/frameworks/js/FlexJS/src/org/apache/flex/html/staticControls/RadioButton.js
----------------------------------------------------------------------
diff --git 
a/frameworks/js/FlexJS/src/org/apache/flex/html/staticControls/RadioButton.js 
b/frameworks/js/FlexJS/src/org/apache/flex/html/staticControls/RadioButton.js
index fb657b2..e8f67d6 100644
--- 
a/frameworks/js/FlexJS/src/org/apache/flex/html/staticControls/RadioButton.js
+++ 
b/frameworks/js/FlexJS/src/org/apache/flex/html/staticControls/RadioButton.js
@@ -51,6 +51,22 @@ 
org.apache.flex.html.staticControls.RadioButton.prototype.addToParent =
   rb.flexjs_wrapper = this;
 };
 
+/**
+ * @expose
+ * @this {org.apache.flex.html.staticControls.RadioButton}
+ */
+org.apache.flex.html.staticControls.RadioButton.prototype.initModel =
+function() {
+};
+
+/**
+ * @expose
+ * @this {org.apache.flex.html.staticControls.RadioButton}
+ */
+org.apache.flex.html.staticControls.RadioButton.prototype.initSkin =
+function() {
+};
+
 
 /**
  * @expose

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/114aeec9/frameworks/js/FlexJS/src/org/apache/flex/jquery/Application.js
----------------------------------------------------------------------
diff --git a/frameworks/js/FlexJS/src/org/apache/flex/jquery/Application.js 
b/frameworks/js/FlexJS/src/org/apache/flex/jquery/Application.js
deleted file mode 100644
index e6eb0f8..0000000
--- a/frameworks/js/FlexJS/src/org/apache/flex/jquery/Application.js
+++ /dev/null
@@ -1,114 +0,0 @@
-/**
- * Licensed 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.
- */
-
-// ------------------------------------------------------------------
-// jQuery
-// ------------------------------------------------------------------
-
-// (erikdebruin) do these have to be in the global namespace?
-var head, link, mainjs, uijs;
-
-// Bring in the jQuery sources. You can use the minified versions for
-// better performance.
-mainjs = document.createElement('script');
-/** @type {Object} */ mainjs.src = 'http://code.jquery.com/jquery-1.9.1.js';
-document.head.appendChild(mainjs);
-
-uijs = document.createElement('script');
-/** @type {Object} */ uijs.src =
-    'http://code.jquery.com/ui/1.10.2/jquery-ui.js';
-document.head.appendChild(uijs);
-
-// create a stylesheet link to the corresponding jquery theme file.
-head = document.getElementsByTagName('head')[0];
-link = document.createElement('link');
-/** @type {Object} */ link.id = 'jquerycss';
-/** @type {Object} */ link.rel = 'stylesheet';
-/** @type {Object} */ link.type = 'text/css';
-/** @type {Object} */ link.href =
-    'http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css';
-/** @type {Object} */ link.media = 'all';
-head.appendChild(link);
-
-// ------------------------------------------------------------------
-// end jQuery
-// ------------------------------------------------------------------
-
-goog.provide('org.apache.flex.jquery.Application');
-
-goog.require('org.apache.flex.core.HTMLElementWrapper');
-goog.require('org.apache.flex.utils.MXMLDataInterpreter');
-
-
-
-/**
- * @constructor
- * @extends {org.apache.flex.core.HTMLElementWrapper}
- */
-org.apache.flex.jquery.Application = function() {
-  goog.base(this);
-
-};
-goog.inherits(org.apache.flex.jquery.Application,
-    org.apache.flex.core.HTMLElementWrapper);
-
-
-/**
- * @expose
- * @type {Object}
- */
-org.apache.flex.jquery.Application.prototype.controller = null;
-
-
-/**
- * @expose
- * @type {org.apache.flex.core.ViewBase}
- */
-org.apache.flex.jquery.Application.prototype.initialView = null;
-
-
-/**
- * @expose
- * @type {org.apache.flex.events.EventDispatcher}
- */
-org.apache.flex.jquery.Application.prototype.model = null;
-
-
-/**
- * @expose
- * @type {org.apache.flex.core.SimpleValuesImpl}
- */
-org.apache.flex.jquery.Application.prototype.valuesImpl = null;
-
-
-/**
- * @expose
- * @this {org.apache.flex.jquery.Application}
- */
-org.apache.flex.jquery.Application.prototype.start = function() {
-  var evt, i, n, q;
-
-  this.element = document.getElementsByTagName('body')[0];
-
-  org.apache.flex.utils.MXMLDataInterpreter.generateMXMLProperties(this,
-      this.get_MXMLProperties());
-
-  this.dispatchEvent('initialize');
-
-  this.initialView.addToParent(this.element);
-  this.initialView.initUI(this.model);
-
-  this.dispatchEvent('viewChanged');
-};
-

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/114aeec9/frameworks/js/FlexJS/src/org/apache/flex/jquery/staticControls/RadioButton.js
----------------------------------------------------------------------
diff --git 
a/frameworks/js/FlexJS/src/org/apache/flex/jquery/staticControls/RadioButton.js 
b/frameworks/js/FlexJS/src/org/apache/flex/jquery/staticControls/RadioButton.js
index 35d2371..db85bf9 100644
--- 
a/frameworks/js/FlexJS/src/org/apache/flex/jquery/staticControls/RadioButton.js
+++ 
b/frameworks/js/FlexJS/src/org/apache/flex/jquery/staticControls/RadioButton.js
@@ -16,39 +16,114 @@ 
goog.provide('org.apache.flex.jquery.staticControls.RadioButton');
 
 goog.require('org.apache.flex.core.UIBase');
 
-
-
 /**
  * @constructor
  * @extends {org.apache.flex.core.UIBase}
  */
 org.apache.flex.jquery.staticControls.RadioButton = function() {
+
   goog.base(this);
+
+  org.apache.flex.core.UIBase.call(this);
+  org.apache.flex.jquery.staticControls.RadioButton.radioCounter++;
 };
 goog.inherits(org.apache.flex.jquery.staticControls.RadioButton,
     org.apache.flex.core.UIBase);
 
 
 /**
+ * @expose
+ * @this {org.apache.flex.jquery.staticControls.RadioButton}
+ * The name of the radioGroup.
+ */
+org.apache.flex.jquery.staticControls.RadioButton.prototype.radioGroupName;
+
+/**
+ * @expose
+ * @this {org.apache.flex.jquery.staticControls.RadioButton}
+ * Used to provide ids to the radio buttons.
+ */
+org.apache.flex.jquery.staticControls.RadioButton.radioCounter = 0;
+
+/**
+ * @expose
+ * @this {org.apache.flex.jquery.staticControls.RadioButton}
+ * Used to manage groups on the radio buttons.
+ */
+org.apache.flex.jquery.staticControls.RadioButton.groups = { };
+
+/**
+ * @this {org.apache.flex.jquery.staticControls.RadioButton}
+ * Flag to make sure the event handler is set only once.
+ */
+org.apache.flex.jquery.staticControls.RadioButton.groupHandlerSet = false;
+
+/**
  * @override
  * @this {org.apache.flex.jquery.staticControls.RadioButton}
  * @param {Object} p The parent element.
  */
 org.apache.flex.jquery.staticControls.RadioButton.prototype.addToParent =
     function(p) {
-  var rb;
 
-  this.element = document.createElement('label');
+       var input = document.createElement('input');
+       input.type = 'radio';
+       input.name = 'radio';
+       input.id   = 
'radio'+org.apache.flex.jquery.staticControls.RadioButton.radioCounter;
+       
+       var label = document.createElement('label');
+       label.htmlFor = input.id;
+       
+       p.appendChild(input);
+       p.appendChild(label);
+       
+       this.element = input;
+       this.labelFor = label;
 
-  rb = document.createElement('input');
-  rb.type = 'radio';
-  $(rb).button();
-  this.element.appendChild(rb);
-  this.element.appendChild(document.createTextNode('radio button'));
+  this.positioner = this.element;
+};
 
-  p.appendChild(this.element);
+/**
+ * @override
+ * @this {org.apache.flex.jquery.staticControls.RadioButton}
+ * @param {Object} doc the document for this item
+ */
+org.apache.flex.jquery.staticControls.RadioButton.prototype.setDocument =
+function(doc, id) {
+       if( ! org.apache.flex.jquery.staticControls.RadioButton.groupHandlerSet 
) {
+               
org.apache.flex.jquery.staticControls.RadioButton.groupHandlerSet = true;
+               
doc.addEventListener("initComplete",goog.bind(this.initCompleteHandler, this));
+       }
+}
 
-  this.positioner = this.element;
+/**
+ * @this {org.apache.flex.jquery.staticControls.RadioButton}
+ * @param {Event} event The event.
+ */
+org.apache.flex.jquery.staticControls.RadioButton.prototype.initCompleteHandler
 =
+function(event) {
+       var divtags = org.apache.flex.jquery.staticControls.RadioButton.groups;
+       for(var name in divtags)
+       {
+               var div = divtags[name];
+               $(div).buttonset();
+       }
+}
+
+/**
+ * @expose
+ * @this {org.apache.flex.jquery.staticControls.RadioButton}
+ */
+org.apache.flex.jquery.staticControls.RadioButton.prototype.initModel =
+function() {
+};
+
+/**
+ * @expose
+ * @this {org.apache.flex.jquery.staticControls.RadioButton}
+ */
+org.apache.flex.jquery.staticControls.RadioButton.prototype.initSkin =
+function() {
 };
 
 
@@ -57,9 +132,8 @@ 
org.apache.flex.jquery.staticControls.RadioButton.prototype.addToParent =
  * @this {org.apache.flex.jquery.staticControls.RadioButton}
  * @return {string} The groupName getter.
  */
-org.apache.flex.jquery.staticControls.RadioButton.prototype.get_groupName =
-    function() {
-  return this.element.childNodes.item(0).name;
+org.apache.flex.jquery.staticControls.RadioButton.prototype.get_groupName = 
function() {
+    return this.radioGroupName;
 };
 
 
@@ -68,9 +142,39 @@ 
org.apache.flex.jquery.staticControls.RadioButton.prototype.get_groupName =
  * @this {org.apache.flex.jquery.staticControls.RadioButton}
  * @param {string} value The groupName setter.
  */
-org.apache.flex.jquery.staticControls.RadioButton.prototype.set_groupName =
-    function(value) {
-  this.element.childNodes.item(0).name = value;
+org.apache.flex.jquery.staticControls.RadioButton.prototype.set_groupName = 
function(value) {
+
+/*
+ * NOTE: Ideally when a RadioButton was created it would be added to an 
existing set of RadioButtons.
+ * This is especially true for RadioButtons added dynamically. However, due to 
a bug in jQuery
+ * (see http://bugs.jqueryui.com/ticket/8975), it is currently not possible to 
add or remove RadioButtons
+ * programmatically. For this version the groups are maintained here in 
RadioButton and once the
+ * application has finished initializing, the groups are given their 
buttonset().
+ */
+ 
+       this.radioGroupName = value;
+       
+       this.element.name = value;
+       
+       var div;
+       
+       if( org.apache.flex.jquery.staticControls.RadioButton.groups[value] ) {
+               div = 
org.apache.flex.jquery.staticControls.RadioButton.groups[value];
+               div.appendChild(this.element);
+               div.appendChild(this.labelFor);
+       }
+       else {
+               var p = this.element.parentElement;
+               div = document.createElement('div');
+               div.id = value;
+               div.appendChild(this.element);
+               div.appendChild(this.labelFor);
+               p.appendChild(div);
+       
+               
org.apache.flex.jquery.staticControls.RadioButton.groups[String(value)] = div;
+       }
+       
+       this.positioner = div;
 };
 
 
@@ -79,9 +183,8 @@ 
org.apache.flex.jquery.staticControls.RadioButton.prototype.set_groupName =
  * @this {org.apache.flex.jquery.staticControls.RadioButton}
  * @return {string} The text getter.
  */
-org.apache.flex.jquery.staticControls.RadioButton.prototype.get_text =
-    function() {
-  return this.element.childNodes.item(1).nodeValue;
+org.apache.flex.jquery.staticControls.RadioButton.prototype.get_text = 
function() {
+    return this.labelFor.innerHTML;
 };
 
 
@@ -90,9 +193,8 @@ 
org.apache.flex.jquery.staticControls.RadioButton.prototype.get_text =
  * @this {org.apache.flex.jquery.staticControls.RadioButton}
  * @param {string} value The text setter.
  */
-org.apache.flex.jquery.staticControls.RadioButton.prototype.set_text =
-    function(value) {
-  this.element.childNodes.item(1).nodeValue = value;
+org.apache.flex.jquery.staticControls.RadioButton.prototype.set_text = 
function(value) {
+   this.labelFor.innerHTML = value;
 };
 
 
@@ -101,9 +203,8 @@ 
org.apache.flex.jquery.staticControls.RadioButton.prototype.set_text =
  * @this {org.apache.flex.jquery.staticControls.RadioButton}
  * @return {bool} The selected getter.
  */
-org.apache.flex.jquery.staticControls.RadioButton.prototype.get_selected =
-    function() {
-  return this.element.childNodes.item(0).checked;
+org.apache.flex.jquery.staticControls.RadioButton.prototype.get_selected = 
function() {
+    return this.element.checked;
 };
 
 
@@ -112,7 +213,6 @@ 
org.apache.flex.jquery.staticControls.RadioButton.prototype.get_selected =
  * @this {org.apache.flex.jquery.staticControls.RadioButton}
  * @param {bool} value The selected setter.
  */
-org.apache.flex.jquery.staticControls.RadioButton.prototype.set_selected =
-    function(value) {
-  this.element.childNodes.item(0).checked = value;
+org.apache.flex.jquery.staticControls.RadioButton.prototype.set_selected = 
function(value) {
+    this.element.checked = value;
 };

Reply via email to