Excellent.

One question though: if you took out jquery.Application, how do the Jquery
JS files get injected?

-Alex


On 5/9/13 1:33 PM, "p...@apache.org" <p...@apache.org> wrote:

> 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/j
> query-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/s
> rc/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/s
> rc/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/s
> rc/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/F
> lexJS/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/F
> lexJS/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/F
> lexJS/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/F
> lexJS/src/org/apache/flex/jquery/staticControls/RadioButton.js
> ----------------------------------------------------------------------
> diff --git
> a/frameworks/js/FlexJS/src/org/apache/flex/jquery/staticControls/RadioButton.j
> s
>
b/frameworks/js/FlexJS/src/org/apache/flex/jquery/staticControls/RadioButton.j>
s
> index 35d2371..db85bf9 100644
> ---
>
a/frameworks/js/FlexJS/src/org/apache/flex/jquery/staticControls/RadioButton.j>
s
> +++
>
b/frameworks/js/FlexJS/src/org/apache/flex/jquery/staticControls/RadioButton.j>
s
> @@ -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.initCompleteHandl
> er =
> +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;
>  };
>

--
Alex Harui
Flex SDK Team
Adobe Systems, Inc.
http://blogs.adobe.com/aharui

Reply via email to