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