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; };