From ef2ed540fe81dd40a265a867c1ea485317882da3 Mon Sep 17 00:00:00 2001 From: Edward Stangler Date: Sun, 11 Jul 2021 01:08:40 -0500 Subject: [PATCH 01/15] Force coercion on return value of ContentView.contentView to detect objects that do not implement ILayoutView. --- .../main/royale/org/apache/royale/html/beads/ContainerView.as | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ContainerView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ContainerView.as index 12af0d8035..e9c6eec12c 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ContainerView.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ContainerView.as @@ -99,7 +99,7 @@ package org.apache.royale.html.beads * @playerversion Flash 10.2 * @playerversion AIR 2.6 * @productversion Royale 0.8 - * @royaleignorecoercion org.apache.royale.core.ILayoutView + * @royaleemitcoercion org.apache.royale.core.ILayoutView */ override public function get contentView():ILayoutView { @@ -178,7 +178,6 @@ package org.apache.royale.html.beads * @playerversion Flash 10.2 * @playerversion AIR 2.6 * @productversion Royale 0.8 - * @royaleignorecoercion org.apache.royale.core.IBorderPaddingMarginValuesImpl */ COMPILE::SWF override public function beforeLayout():Boolean From a38bf19d1d6dd766577bd6bca850b9965c3e7910 Mon Sep 17 00:00:00 2001 From: Edward Stangler Date: Sun, 11 Jul 2021 01:10:53 -0500 Subject: [PATCH 02/15] Prevent exception in DataContainerView.beadsAddedHandler() due to order of beads added. --- .../royale/org/apache/royale/html/beads/DataContainerView.as | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as index d084ace02b..0f3e4ea237 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as @@ -102,7 +102,8 @@ package org.apache.royale.html.beads { dataModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel; host.addEventListener("itemsCreated", itemsCreatedHandler); - dataModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); + // may be called before IDataProviderModel bead is added + if (dataModel) dataModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); } From f53bad420c395dfa1b792ecab94a728eaa02be63 Mon Sep 17 00:00:00 2001 From: Edward Stangler Date: Sun, 11 Jul 2021 01:12:17 -0500 Subject: [PATCH 03/15] Fix wrong class name specified in comment directive. --- .../org/apache/royale/html/beads/ListItemRendererInitializer.as | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as index eb4641f536..b9c062a0af 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as @@ -60,7 +60,7 @@ package org.apache.royale.html.beads * @productversion Royale 0.9.7 * @royaleignorecoercion HTMLInputElement * @royaleignorecoercion org.apache.royale.core.IStrandWithPresentationModel - * @royaleignorecoercion org.apache.royale.core.IListPresentationModel + * @royaleignorecoercion org.apache.royale.html.IListPresentationModel */ override public function set strand(value:IStrand):void { From 6f949d8ec07c16791274b21c3b770494e732bb5f Mon Sep 17 00:00:00 2001 From: Edward Stangler Date: Sun, 11 Jul 2021 01:17:19 -0500 Subject: [PATCH 04/15] Minor performance improvement for a loop. --- .../royale/html/beads/layouts/VirtualListVerticalLayout.as | 4 ++-- .../royale/jewel/beads/layouts/VirtualListVerticalLayout.as | 4 ++-- .../layouts/AdvancedDataGridVirtualListVerticalLayout.as | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VirtualListVerticalLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VirtualListVerticalLayout.as index d976c08615..7a0a8fbaf4 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VirtualListVerticalLayout.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VirtualListVerticalLayout.as @@ -228,7 +228,7 @@ package org.apache.royale.html.beads.layouts } for (var i:int = startIndex; i < endIndex; i++) { - if (i >= dp.length) continue; // no more renderers needed + if (i >= dp.length) break; // no more renderers needed var ir:IIndexedItemRenderer; if (i < firstIndex) @@ -361,7 +361,7 @@ package org.apache.royale.html.beads.layouts } for (var i:int = startIndex; i < endIndex; i++) { - if (i >= dp.length) continue; // no more renderers needed + if (i >= dp.length) break; // no more renderers needed var ir:IIndexedItemRenderer; if (i < firstIndex) diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/VirtualListVerticalLayout.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/VirtualListVerticalLayout.as index bd3fca377e..5c586b8066 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/VirtualListVerticalLayout.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/VirtualListVerticalLayout.as @@ -244,7 +244,7 @@ package org.apache.royale.jewel.beads.layouts } for (var i:int = startIndex; i < endIndex; i++) { - if (i >= dp.length) continue; // no more renderers needed + if (i >= dp.length) break; // no more renderers needed var ir:IIndexedItemRenderer; if (i < firstIndex) @@ -377,7 +377,7 @@ package org.apache.royale.jewel.beads.layouts } for (var i:int = startIndex; i < endIndex; i++) { - if (i >= dp.length) continue; // no more renderers needed + if (i >= dp.length) break; // no more renderers needed var ir:IIndexedItemRenderer; if (i < firstIndex) diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/AdvancedDataGridVirtualListVerticalLayout.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/AdvancedDataGridVirtualListVerticalLayout.as index 10ba8fb868..f3a3c8d392 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/AdvancedDataGridVirtualListVerticalLayout.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/AdvancedDataGridVirtualListVerticalLayout.as @@ -209,7 +209,7 @@ package mx.controls.beads.layouts } for (var i:int = startIndex; i < endIndex; i++) { - if (i >= dp.length) continue; // no more renderers needed + if (i >= dp.length) break; // no more renderers needed var ir:IIndexedItemRenderer; if (i < firstIndex) @@ -330,7 +330,7 @@ package mx.controls.beads.layouts } for (var i:int = startIndex; i < endIndex; i++) { - if (i >= dp.length) continue; // no more renderers needed + if (i >= dp.length) break; // no more renderers needed var ir:IIndexedItemRenderer; if (i < firstIndex) From c0ac3fd66117928c66cb999fc0822fdc61cce6d1 Mon Sep 17 00:00:00 2001 From: Edward Stangler Date: Sun, 11 Jul 2021 01:24:16 -0500 Subject: [PATCH 05/15] Get the proper MXML document, for this purpose, in all cases. --- .../beads/AdvancedDataGridSelectableItemRendererClassFactory.as | 2 +- .../beads/DataGridSelectableItemRendererClassFactory.as | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridSelectableItemRendererClassFactory.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridSelectableItemRendererClassFactory.as index fb1a64021d..88afae197d 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridSelectableItemRendererClassFactory.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridSelectableItemRendererClassFactory.as @@ -50,7 +50,7 @@ package mx.controls.beads override public function createItemRenderer():IItemRenderer { var ir:IItemRenderer = super.createItemRenderer(); - ir["outerDocument"] = (_strand as AdvancedDataGridColumnList).grid.mxmlDocument; + ir["outerDocument"] = (_strand as AdvancedDataGridColumnList).grid.parentMxmlDocument; if (ir.getBeadByType(IBeadController) == null) { //add a default mouse controller for DropInRenderers that may not have a mousecontroller ir.addBead(new ItemRendererMouseController()); diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridSelectableItemRendererClassFactory.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridSelectableItemRendererClassFactory.as index 9133c8de91..29bd38109d 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridSelectableItemRendererClassFactory.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridSelectableItemRendererClassFactory.as @@ -52,7 +52,7 @@ package mx.controls.beads var ir:IItemRenderer = super.createItemRenderer(); COMPILE::JS { - ir["outerDocument"] = (_strand as DataGridColumnList).grid.mxmlDocument; + ir["outerDocument"] = (_strand as DataGridColumnList).grid.parentMxmlDocument; } if (ir.getBeadByType(IBeadController) == null) { //add a default mouse controller for DropInRenderers that may not have a mousecontroller From e0ab3ad3508d5e523e0084fdff4f2b19010574e4 Mon Sep 17 00:00:00 2001 From: Edward Stangler Date: Sun, 11 Jul 2021 01:34:09 -0500 Subject: [PATCH 06/15] Add support for XML data in several areas, especially around sorting and grids. --- .../royale/html/util/getLabelFromData.as | 48 ++++++++++++++++--- .../org/apache/royale/utils/Language.as | 25 ++++++++-- .../main/royale/mx/collections/SortField.as | 11 +++++ ...AdvancedDataGridItemRendererInitializer.as | 5 +- 4 files changed, 78 insertions(+), 11 deletions(-) diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as index f5853b416d..3fdf2f2f30 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as @@ -32,13 +32,49 @@ package org.apache.royale.html.util if (data is String) return "" + data; if(!data) return ""; - if (obj["labelField"]) return "" + data[obj["labelField"]]; - if (obj["dataField"]) return "" + data[obj["dataField"]]; - var label:String = data["label"]; - if(label != null){ - return label; + var labelField:String; + var value:String; + + if (obj["labelField"]) + { + labelField = obj["labelField"]; + value = "" + data[labelField]; + COMPILE::JS + { + // support XML data in JS (in libraries without access to XML class) + if (value == "undefined") + { + if (labelField.charAt(0) == '@') + value = data["attribute"](labelField); + else + value = data["child"](labelField).toString(); + } + } + return value; } - return "" + data; + if (obj["dataField"]) + { + labelField = obj["dataField"]; + value = "" + data[labelField]; + COMPILE::JS + { + // support XML data in JS (in libraries without access to XML class) + if (value == "undefined") + { + if (labelField.charAt(0) == '@') + value = data["attribute"](labelField); + else + value = data["child"](labelField).toString(); + } + } + return value; + } + + value = data["label"]; + if (value != null) + return value; + + return "" + data; } } diff --git a/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as b/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as index c62c159e90..68267fc366 100644 --- a/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as +++ b/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as @@ -511,11 +511,28 @@ package org.apache.royale.utils return sorted; } + private static function getValue(obj:Object, n:String):* + { + var value:* = obj[n]; + COMPILE::JS + { + // support XML data in JS (in libraries without access to XML class) + if (value == null) + { + if (n.charAt(0) == '@') + value = obj["attribute"](n); + else + value = obj["child"](n).toString(); + } + } + return value; + } + private static function compareStringCaseinsensitive(a:Object, b:Object):int { for each(var n:String in sortNames) { - var v:int = (a[n] || zeroStr).toString().toLowerCase().localeCompare((b[n] || zeroStr).toString().toLowerCase()); + var v:int = (getValue(a, n) || zeroStr).toString().toLowerCase().localeCompare((getValue(b, n) || zeroStr).toString().toLowerCase()); if (v != 0) { return v * muler; @@ -528,7 +545,7 @@ package org.apache.royale.utils { for each(var n:String in sortNames) { - var v:int = (a[n] || zeroStr).toString().localeCompare((b[n] || zeroStr).toString()); + var v:int = (getValue(a, n) || zeroStr).toString().localeCompare((getValue(b, n) || zeroStr).toString()); if (v != 0) { return v * muler; @@ -541,10 +558,10 @@ package org.apache.royale.utils { for each(var n:String in sortNames) { - if (Number(a[n]) > Number(b[n])) + if (Number(getValue(a, n)) > Number(getValue(b, n))) { return muler; - } else if (Number(a[n]) < Number(b[n])) + } else if (Number(getValue(a, n)) < Number(getValue(b, n))) { return -muler; } diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as index 3ea401c585..1364ec8726 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as @@ -686,6 +686,17 @@ public class SortField extends EventDispatcher implements ISortField try { result = obj[_name]; + COMPILE::JS + { + // support XML data in JS (in libraries without access to XML class) + if (result == null) + { + if (_name.charAt(0) == '@') + result = obj["attribute"](_name); + else + result = obj["child"](_name).toString(); + } + } } catch(error:Error) { diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as index 8b2b854084..c4eeaac23d 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as @@ -86,7 +86,10 @@ import mx.controls.AdvancedDataGrid; var dataField:String = adg.columns[adgColumnListModel.columnIndex].dataField; var text:String = ""; try { - text = data[dataField]; + if (data is XML) + text = (data as XML)[dataField]; + else + text = data[dataField]; } catch (e:Error) { } From d51fd311523938c6670f4efa0e4833c7ebb6e0a0 Mon Sep 17 00:00:00 2001 From: Edward Stangler Date: Sun, 11 Jul 2021 01:36:00 -0500 Subject: [PATCH 07/15] Fix LogLogger.argToString(arg) when arg == 0. --- .../projects/MXRoyale/src/main/royale/mx/logging/LogLogger.as | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/logging/LogLogger.as b/frameworks/projects/MXRoyale/src/main/royale/mx/logging/LogLogger.as index 1936771f12..92cfa17093 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/logging/LogLogger.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/logging/LogLogger.as @@ -256,7 +256,7 @@ public class LogLogger extends EventDispatcher implements ILogger private function argToString(arg:Object):String { - if (!arg) return null; + if (arg == null) return null; if (arg is XML || arg is XMLList) { From 9dc6ee0321f6cbf18ceeabed9b2754e05e6719bf Mon Sep 17 00:00:00 2001 From: Edward Stangler Date: Sun, 11 Jul 2021 01:38:48 -0500 Subject: [PATCH 08/15] Implement ObjectProxy.get object. --- .../src/main/royale/mx/utils/ObjectProxy.as | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/utils/ObjectProxy.as b/frameworks/projects/MXRoyale/src/main/royale/mx/utils/ObjectProxy.as index ed7f99ba16..d89e86a71d 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/utils/ObjectProxy.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/utils/ObjectProxy.as @@ -272,10 +272,17 @@ public dynamic class ObjectProxy extends Proxy * @playerversion AIR 1.1 * @productversion Flex 3 */ -// object_proxy function get object():Object -// { -// return _item; -// } + COMPILE::SWF + object_proxy function get object():Object + { + return _item; + } + + COMPILE::JS + public function get object():Object + { + return _item; + } //---------------------------------- // type From bbdd6c600049413dc28b807b524b6b1eb359700a Mon Sep 17 00:00:00 2001 From: Edward Stangler Date: Sun, 11 Jul 2021 01:40:20 -0500 Subject: [PATCH 09/15] SelfItemRendererInitializer shouldn't be used in MXML. --- .../SparkRoyale/src/main/resources/spark-royale-manifest.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml b/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml index 53549b1340..46ba1af862 100644 --- a/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml +++ b/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml @@ -146,7 +146,6 @@ - From 9f03837a2b8e5bd56c621e0e209894fd7d841aac Mon Sep 17 00:00:00 2001 From: Edward Stangler Date: Sun, 11 Jul 2021 02:43:13 -0500 Subject: [PATCH 10/15] Made code for handling XML (originally copied from legacy code in TreeXMLItemRenderer) more resilient. --- .../main/royale/org/apache/royale/utils/Language.as | 12 ++++++++++-- .../src/main/royale/mx/collections/SortField.as | 12 ++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as b/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as index 68267fc366..9594646bcd 100644 --- a/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as +++ b/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as @@ -520,9 +520,17 @@ package org.apache.royale.utils if (value == null) { if (n.charAt(0) == '@') - value = obj["attribute"](n); + { + var fa:* = obj["attribute"]; + if (fa && typeof(fa) === "function") + value = fa(n); + } else - value = obj["child"](n).toString(); + { + var fc:* = obj["child"]; + if (fc && typeof(fc) === "function") + value = fc(n).toString(); + } } } return value; diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as index 1364ec8726..0ffc2e4cc7 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as @@ -692,9 +692,17 @@ public class SortField extends EventDispatcher implements ISortField if (result == null) { if (_name.charAt(0) == '@') - result = obj["attribute"](_name); + { + var fa:* = obj["attribute"]; + if (fa && typeof(fa) === "function") + result = fa(_name); + } else - result = obj["child"](_name).toString(); + { + var fc:* = obj["child"]; + if (fc && typeof(fc) === "function") + result = fc(_name).toString(); + } } } } From ccb7e8f7b1061ccc42b44d86163fcbc51bd471ed Mon Sep 17 00:00:00 2001 From: Edward Stangler Date: Sun, 11 Jul 2021 02:53:37 -0500 Subject: [PATCH 11/15] Made code for handling XML (originally copied from legacy code in TreeXMLItemRenderer) more resilient. --- .../royale/html/util/getLabelFromData.as | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as index 3fdf2f2f30..3ed43e45be 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as @@ -45,9 +45,17 @@ package org.apache.royale.html.util if (value == "undefined") { if (labelField.charAt(0) == '@') - value = data["attribute"](labelField); + { + var fal:* = data["attribute"]; + if (fal && typeof(fal) === "function") + value = fal(labelField); + } else - value = data["child"](labelField).toString(); + { + var fcl:* = data["child"]; + if (fcl && typeof(fcl) === "function") + value = fcl(labelField).toString(); + } } } return value; @@ -63,9 +71,17 @@ package org.apache.royale.html.util if (value == "undefined") { if (labelField.charAt(0) == '@') - value = data["attribute"](labelField); + { + var fad:* = data["attribute"]; + if (fad && typeof(fad) === "function") + value = fad(labelField); + } else - value = data["child"](labelField).toString(); + { + var fcd:* = data["child"]; + if (fcd && typeof(fcd) === "function") + value = fcd(labelField).toString(); + } } } return value; From 90713296c072f0e388e742f00ef96a140ab36cd5 Mon Sep 17 00:00:00 2001 From: Edward Stangler Date: Sun, 11 Jul 2021 05:17:46 -0500 Subject: [PATCH 12/15] Remove MX VirtualListVerticalLayout, which is unused. --- .../src/main/royale/MXRoyaleClasses.as | 1 - .../listClasses/VirtualListVerticalLayout.as | 426 ------------------ 2 files changed, 427 deletions(-) delete mode 100644 frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/VirtualListVerticalLayout.as diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as index d0d9baf629..3bd28a5095 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as +++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as @@ -213,7 +213,6 @@ internal class MXRoyaleClasses import mx.controls.beads.layouts.DataGridLayout; DataGridLayout; import mx.controls.beads.layouts.AdvancedDataGridVirtualListVerticalLayout; AdvancedDataGridVirtualListVerticalLayout; import mx.controls.beads.layouts.DataGridHeaderLayout; DataGridHeaderLayout; - import mx.controls.listClasses.VirtualListVerticalLayout; VirtualListVerticalLayout; import mx.controls.listClasses.ListSingleSelectionMouseController; ListSingleSelectionMouseController; import mx.controls.treeClasses.TreeSingleSelectionMouseController; TreeSingleSelectionMouseController; import mx.controls.beads.TreeItemRendererMouseController; TreeItemRendererMouseController; diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/VirtualListVerticalLayout.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/VirtualListVerticalLayout.as deleted file mode 100644 index c0ecf816a1..0000000000 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/VirtualListVerticalLayout.as +++ /dev/null @@ -1,426 +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 mx.controls.listClasses -{ - import org.apache.royale.core.IBeadLayout; - import org.apache.royale.core.IBeadModel; - import org.apache.royale.core.IBorderPaddingMarginValuesImpl; - import org.apache.royale.core.IDataProviderModel; - import org.apache.royale.core.IDataProviderVirtualItemRendererMapper; - import org.apache.royale.core.ILayoutChild; - import org.apache.royale.core.ILayoutHost; - import org.apache.royale.core.ILayoutParent; - import org.apache.royale.core.ILayoutView; - import org.apache.royale.core.IListPresentationModel; - import org.apache.royale.core.IParentIUIBase; - import org.apache.royale.core.IScrollingViewport; - import org.apache.royale.core.IIndexedItemRenderer; - import org.apache.royale.core.IStrand; - import org.apache.royale.core.IStrandWithPresentationModel; - import org.apache.royale.core.IUIBase; - import org.apache.royale.core.LayoutBase; - import org.apache.royale.core.ValuesManager; - import org.apache.royale.core.layout.EdgeData; - COMPILE::JS - { - import org.apache.royale.core.WrappedHTMLElement; - } - import org.apache.royale.events.Event; - import org.apache.royale.events.IEventDispatcher; - import org.apache.royale.geom.Rectangle; - import org.apache.royale.html.beads.VirtualDataContainerView; - import org.apache.royale.utils.CSSUtils; - - COMPILE::SWF { - import org.apache.royale.geom.Size; - } - - /** - * The VerticalLayout class is a simple layout - * bead. It takes the set of children and lays them out - * vertically in one column, separating them according to - * CSS layout rules for margin and horizontal-align styles. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - public class VirtualListVerticalLayout extends LayoutBase implements IBeadLayout - { - /** - * Constructor. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - * @royaleignorecoercion HTMLDivElement - */ - public function VirtualListVerticalLayout() - { - super(); - } - - protected var dataProviderModel:IDataProviderModel; - - override public function set strand(value:IStrand):void - { - super.strand = value; - dataProviderModel = host.getBeadByType(IDataProviderModel) as IDataProviderModel; - COMPILE::JS - { - host.element.addEventListener("scroll", scrollHandler); - } - } - - COMPILE::JS - private var topSpacer:HTMLDivElement; - - COMPILE::JS - private var bottomSpacer:HTMLDivElement; - - private var visibleIndexes:Array = []; - - private function scrollHandler(e:Event):void - { - layout(); - } - - private var inLayout:Boolean; - - /** - * Layout children vertically - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - * @royaleignorecoercion Array - * @royaleignorecoercion org.apache.royale.core.ILayoutHost - * @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement - * @royaleignorecoercion org.apache.royale.core.IListPresentationModel - * @royaleignorecoercion org.apache.royale.core.IStrandWithPresentationModel - */ - override public function layout():Boolean - { - if (inLayout) return true; - inLayout = true; - - COMPILE::SWF - { - // the strategy for virtualization in SWF is based on the - // fact that we can completely control the scrolling metrics - // instead of trying to rely on the browsers built-in scrolling. - // This code puts enough renderers on the screen and then dictates - // the scrolling metrics. - var contentView:ILayoutView = layoutView; - - var maxWidth:Number = 0; - var maxHeight:Number = 0; - var dp:Array = dataProviderModel.dataProvider as Array; - if (!dp) - { - inLayout = false; - return true; - } - var presentationModel:IListPresentationModel = (host as IStrandWithPresentationModel).presentationModel as IListPresentationModel; - var hostWidthSizedToContent:Boolean = host.isWidthSizedToContent(); - var hostHeightSizedToContent:Boolean = host.isHeightSizedToContent(); - var hostWidth:Number = host.width; - var hostHeight:Number = host.height; - - var data:Object; - var canAdjust:Boolean = false; - - var paddingMetrics:EdgeData = (ValuesManager.valuesImpl as IBorderPaddingMarginValuesImpl).getPaddingMetrics(host); - var borderMetrics:EdgeData = (ValuesManager.valuesImpl as IBorderPaddingMarginValuesImpl).getBorderMetrics(host); - - // adjust the host's usable size by the metrics. If hostSizedToContent, then the - // resulting adjusted value may be less than zero. - hostWidth -= paddingMetrics.left + paddingMetrics.right + borderMetrics.left + borderMetrics.right; - hostHeight -= paddingMetrics.top + paddingMetrics.bottom + borderMetrics.top + borderMetrics.bottom; - - var xpos:Number = borderMetrics.left + paddingMetrics.left; - var ypos:Number = borderMetrics.top + paddingMetrics.top; - - var viewport:IScrollingViewport = host.getBeadByType(IScrollingViewport) as IScrollingViewport; - viewport.addEventListener("verticalScrollPositionChanged", scrollHandler); - var viewportTop:Number = viewport.verticalScrollPosition; - var viewportHeight:Number = hostHeight; - var startIndex:int = Math.floor(viewportTop / presentationModel.rowHeight); - var factory:IDataProviderVirtualItemRendererMapper = host.getBeadByType(IDataProviderVirtualItemRendererMapper) as IDataProviderVirtualItemRendererMapper; - var endIndex:int = Math.ceil((viewportTop + viewportHeight) / presentationModel.rowHeight); - var freeIndex:int; - var firstIndex:int; - var lastIndex:int; - - if (visibleIndexes.length) - { - if (startIndex < visibleIndexes[0]) - { - // see if we can re-use any renderers - freeIndex = visibleIndexes.pop(); - while (freeIndex >= endIndex) - { - factory.freeItemRendererForIndex(freeIndex); - if (visibleIndexes.length == 0) - break; - freeIndex = visibleIndexes.pop(); - } - if (visibleIndexes.length) - endIndex = visibleIndexes[visibleIndexes.length - 1]; - } - else if (startIndex > visibleIndexes[0]) - { - // see if we can re-use any renderers - freeIndex = visibleIndexes.shift(); - while (freeIndex < startIndex) - { - factory.freeItemRendererForIndex(freeIndex); - if (visibleIndexes.length == 0) - break; - freeIndex = visibleIndexes.shift(); - } - } - else - { - // see if rows got added or removed because height changed - lastIndex = visibleIndexes[visibleIndexes.length - 1]; - if (lastIndex > endIndex) - { - // see if we can re-use any renderers - freeIndex = visibleIndexes.pop(); - while (freeIndex > endIndex) - { - factory.freeItemRendererForIndex(freeIndex); - if (visibleIndexes.length == 0) - break; - freeIndex = visibleIndexes.pop(); - } - inLayout = false; - return true; // we should be all done if we shrunk - } - } - firstIndex = visibleIndexes[0]; - lastIndex = visibleIndexes[visibleIndexes.length - 1]; - } - else - { - firstIndex = dp.length; - lastIndex = 0; - } - for (var i:int = startIndex; i < endIndex; i++) - { - var ir:IIndexedItemRenderer; - if (i < firstIndex) - { - ir = factory.getItemRendererForIndex(i, i - startIndex); - sizeAndPositionRenderer(ir, xpos, ypos + (presentationModel.rowHeight * i), hostWidth, hostHeight); - visibleIndexes.push(i); - } - else if (i > lastIndex) - { - ir = factory.getItemRendererForIndex(i, i - startIndex); - sizeAndPositionRenderer(ir, xpos, ypos + (presentationModel.rowHeight * i), hostWidth, hostHeight); - visibleIndexes.push(i); - } - } - visibleIndexes = visibleIndexes.sort(numberSort); - - var view:VirtualDataContainerView = host.getBeadByType(VirtualDataContainerView) as VirtualDataContainerView; - view.lastContentSize = new Size(hostWidth, dp.length * presentationModel.rowHeight); - - inLayout = false; - return true; - } - COMPILE::JS - { - // the strategy for virtualization in JS is to leverage the built-in scrollbars - // by creating a topSpacer and bottomSpacer that take up the area that is offscreen - // so the scrollbars have the right metrics, then create enough renderers to - // show in the visible area. This code does not recycle renderers, but the - // factory can. This code does try to keep renderers on the DOM that aren't - // going off-screen - var contentView:ILayoutView = layoutView; - var dp:Array = dataProviderModel.dataProvider as Array; - if (!dp) - { - inLayout = false; - return true; - } - var presentationModel:IListPresentationModel = (host as IStrandWithPresentationModel).presentationModel as IListPresentationModel; - var totalHeight:Number = presentationModel.rowHeight * dp.length; - var viewportTop:Number = Math.max(contentView.element.scrollTop, 0); - var viewportHeight:Number = contentView.element.clientHeight; - var startIndex:int = Math.floor(viewportTop / presentationModel.rowHeight); - var factory:IDataProviderVirtualItemRendererMapper = host.getBeadByType(IDataProviderVirtualItemRendererMapper) as IDataProviderVirtualItemRendererMapper; - var endIndex:int = Math.ceil((viewportTop + viewportHeight) / presentationModel.rowHeight); - var freeIndex:int; - var firstIndex:int; - var lastIndex:int; - if (!topSpacer) - { - topSpacer = document.createElement("div") as HTMLDivElement; - contentView.element.appendChild(topSpacer); - } - topSpacer.style.height = (startIndex * presentationModel.rowHeight).toString() + "px"; - if (visibleIndexes.length) - { - if (startIndex < visibleIndexes[0]) - { - // see if we can re-use any renderers - freeIndex = visibleIndexes.pop(); - while (freeIndex > endIndex) - { - factory.freeItemRendererForIndex(freeIndex); - if (visibleIndexes.length == 0) - break; - freeIndex = visibleIndexes.pop(); - } - // we popped it off at the end of loop but if we didn't - // use it, then push it back on - if (freeIndex == endIndex) - visibleIndexes.push(freeIndex); - if (visibleIndexes.length) - endIndex = visibleIndexes[visibleIndexes.length - 1]; - } - else if (startIndex > visibleIndexes[0]) - { - // see if we can re-use any renderers - freeIndex = visibleIndexes.shift(); - while (freeIndex < startIndex) - { - factory.freeItemRendererForIndex(freeIndex); - if (visibleIndexes.length == 0) - break; - freeIndex = visibleIndexes.shift(); - } - } - else - { - // see if rows got added or removed because height changed - lastIndex = visibleIndexes[visibleIndexes.length - 1]; - if (lastIndex > endIndex) - { - // see if we can re-use any renderers - freeIndex = visibleIndexes.pop(); - while (freeIndex > endIndex) - { - factory.freeItemRendererForIndex(freeIndex); - if (visibleIndexes.length == 0) - break; - freeIndex = visibleIndexes.pop(); - } - inLayout = false; - return true; // we should be all done if we shrunk - } - } - firstIndex = visibleIndexes[0]; - lastIndex = visibleIndexes[visibleIndexes.length - 1]; - } - else - { - firstIndex = dp.length; - lastIndex = 0; - } - for (var i:int = startIndex; i < endIndex; i++) - { - var ir:IIndexedItemRenderer; - if (i < firstIndex) - { - ir = factory.getItemRendererForIndex(i, i - startIndex + 1); - ir.element.style.display = "block"; - visibleIndexes.push(i); - } - else if (i > lastIndex) - { - ir = factory.getItemRendererForIndex(i, i - startIndex + 1); - ir.element.style.display = "block"; - visibleIndexes.push(i); - } - } - visibleIndexes = visibleIndexes.sort(numberSort); - if (!bottomSpacer) - { - bottomSpacer = document.createElement("div") as HTMLDivElement; - contentView.element.appendChild(bottomSpacer); - } - else - { - // ensure bottom spacer is at the bottom! - contentView.element.removeChild(bottomSpacer); - contentView.element.appendChild(bottomSpacer); - } - bottomSpacer.style.height = ((dp.length - endIndex) * presentationModel.rowHeight).toString() + "px"; - inLayout = false; - return true; - } - } - - public function numberSort(a:int, b:int):int - { - return a - b; - } - - COMPILE::SWF - private function sizeAndPositionRenderer(ir:IIndexedItemRenderer, xpos:Number, ypos:Number, hostWidth:Number, hostHeight:Number):void - { - var ilc:ILayoutChild; - var positions:Object = childPositions(ir); - var margins:Object = childMargins(ir, hostWidth, hostHeight); - - ilc = ir as ILayoutChild; - var child:IUIBase = ir as IUIBase; - - ypos += margins.top; - - var childXpos:Number = xpos + margins.left; // default x position - - var childWidth:Number = child.width; - if (ilc != null && !isNaN(ilc.percentWidth)) { - childWidth = hostWidth * ilc.percentWidth/100.0; - ilc.setWidth(childWidth); - } - else if (ilc.isWidthSizedToContent() && !margins.auto) - { - childWidth = hostWidth; - ilc.setWidth(childWidth); - } - if (margins.auto) - childXpos = (hostWidth - childWidth) / 2; - - if (ilc) { - ilc.setX(childXpos); - ilc.setY(ypos); - - if (!isNaN(ilc.percentHeight)) { - var newHeight:Number = hostHeight * ilc.percentHeight / 100; - ilc.setHeight(newHeight); - } - - } else { - child.x = childXpos; - child.y = ypos; - } - - ypos += child.height + margins.bottom; - } - } -} From f5eaf25aec2821f2175d0b1d4b5b8952ee46453a Mon Sep 17 00:00:00 2001 From: Edward Stangler Date: Sun, 11 Jul 2021 05:24:57 -0500 Subject: [PATCH 13/15] Fix issues in DataItemRendererFactoryForIListData.dataProviderChangeHandler(). --- .../DataItemRendererFactoryForIListData.as | 31 +++---------------- 1 file changed, 4 insertions(+), 27 deletions(-) diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as index aa60789b06..0fd73b4508 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as @@ -73,51 +73,29 @@ package mx.controls.listClasses super(); } - private var dp:IList; - /** * @private - * @royaleignorecoercion org.apache.royale.core.IListPresentationModel - * @royaleignorecoercion org.apache.royale.core.ISelectableItemRenderer - * @royaleignorecoercion org.apache.royale.events.IEventDispatcher */ override protected function dataProviderChangeHandler(event:Event):void { if (!dataProviderModel) return; - dp = dataProviderModel.dataProvider as IList; - if (!dp) + var dpTest:IList = dataProviderModel.dataProvider as IList; + if (!dpTest) { // temporary until descriptor is used in MenuBarModel var obj:Object = dataProviderModel.dataProvider; if (obj is Array) { - dp = new ArrayList(obj as Array); + dataProviderModel.dataProvider = new ArrayList(obj as Array); } else return; } - - // listen for individual items being added in the future. - var dped:IEventDispatcher = dp as IEventDispatcher; - dped.addEventListener(CollectionEvent.ITEM_ADDED, itemAddedHandler); - dped.addEventListener(CollectionEvent.ITEM_REMOVED, itemRemovedHandler); - dped.addEventListener(CollectionEvent.ITEM_UPDATED, itemUpdatedHandler); - + super.dataProviderChangeHandler(event); - - } - - override protected function get dataProviderLength():int - { - return dp.length; } - override protected function getItemAt(index:int):Object - { - return dp.getItemAt(index); - } - override protected function createAllItemRenderers(dataGroup:IItemRendererOwnerView):void { var functionBead:ItemRendererFunctionBead = _strand.getBeadByType(ItemRendererFunctionBead) as ItemRendererFunctionBead; @@ -134,7 +112,6 @@ package mx.controls.listClasses ir.data = data; } } - } } From b85c87454e5b35612f6d3d4f548a5c0b3d270133 Mon Sep 17 00:00:00 2001 From: Edward Stangler Date: Mon, 12 Jul 2021 16:57:08 -0500 Subject: [PATCH 14/15] Fixed this pointer in last set of changes. --- .../org/apache/royale/html/util/getLabelFromData.as | 8 ++++---- .../src/main/royale/org/apache/royale/utils/Language.as | 4 ++-- .../MXRoyale/src/main/royale/mx/collections/SortField.as | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as index 3ed43e45be..48e1edb17a 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as @@ -48,13 +48,13 @@ package org.apache.royale.html.util { var fal:* = data["attribute"]; if (fal && typeof(fal) === "function") - value = fal(labelField); + value = fal.call(data, labelField); } else { var fcl:* = data["child"]; if (fcl && typeof(fcl) === "function") - value = fcl(labelField).toString(); + value = fcl.call(data, labelField).toString(); } } } @@ -74,13 +74,13 @@ package org.apache.royale.html.util { var fad:* = data["attribute"]; if (fad && typeof(fad) === "function") - value = fad(labelField); + value = fad.call(data, labelField); } else { var fcd:* = data["child"]; if (fcd && typeof(fcd) === "function") - value = fcd(labelField).toString(); + value = fcd.call(data, labelField).toString(); } } } diff --git a/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as b/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as index 9594646bcd..d39f628191 100644 --- a/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as +++ b/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as @@ -523,13 +523,13 @@ package org.apache.royale.utils { var fa:* = obj["attribute"]; if (fa && typeof(fa) === "function") - value = fa(n); + value = fa.call(obj, n); } else { var fc:* = obj["child"]; if (fc && typeof(fc) === "function") - value = fc(n).toString(); + value = fc.call(obj, n).toString(); } } } diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as index 0ffc2e4cc7..709ad9d3a2 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as @@ -695,13 +695,13 @@ public class SortField extends EventDispatcher implements ISortField { var fa:* = obj["attribute"]; if (fa && typeof(fa) === "function") - result = fa(_name); + result = fa.call(obj, _name); } else { var fc:* = obj["child"]; if (fc && typeof(fc) === "function") - result = fc(_name).toString(); + result = fc.call(obj, _name).toString(); } } } From a843ccbdb80bbded9c6e22f2cbe8dd8084395e89 Mon Sep 17 00:00:00 2001 From: Edward Stangler Date: Sun, 19 Sep 2021 17:43:09 -0500 Subject: [PATCH 15/15] Moved some (non-MX) changes to PR #1150. Add support for XML data in several areas, especially around sorting and grids. --- .../royale/html/util/getLabelFromData.as | 64 ++----------------- .../org/apache/royale/utils/Language.as | 33 ++-------- 2 files changed, 10 insertions(+), 87 deletions(-) diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as index 48e1edb17a..f5853b416d 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as @@ -32,65 +32,13 @@ package org.apache.royale.html.util if (data is String) return "" + data; if(!data) return ""; - var labelField:String; - var value:String; - - if (obj["labelField"]) - { - labelField = obj["labelField"]; - value = "" + data[labelField]; - COMPILE::JS - { - // support XML data in JS (in libraries without access to XML class) - if (value == "undefined") - { - if (labelField.charAt(0) == '@') - { - var fal:* = data["attribute"]; - if (fal && typeof(fal) === "function") - value = fal.call(data, labelField); - } - else - { - var fcl:* = data["child"]; - if (fcl && typeof(fcl) === "function") - value = fcl.call(data, labelField).toString(); - } - } - } - return value; - } - - if (obj["dataField"]) - { - labelField = obj["dataField"]; - value = "" + data[labelField]; - COMPILE::JS - { - // support XML data in JS (in libraries without access to XML class) - if (value == "undefined") - { - if (labelField.charAt(0) == '@') - { - var fad:* = data["attribute"]; - if (fad && typeof(fad) === "function") - value = fad.call(data, labelField); - } - else - { - var fcd:* = data["child"]; - if (fcd && typeof(fcd) === "function") - value = fcd.call(data, labelField).toString(); - } - } - } - return value; + if (obj["labelField"]) return "" + data[obj["labelField"]]; + if (obj["dataField"]) return "" + data[obj["dataField"]]; + var label:String = data["label"]; + if(label != null){ + return label; } - - value = data["label"]; - if (value != null) - return value; - return "" + data; + } } diff --git a/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as b/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as index d39f628191..c62c159e90 100644 --- a/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as +++ b/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as @@ -511,36 +511,11 @@ package org.apache.royale.utils return sorted; } - private static function getValue(obj:Object, n:String):* - { - var value:* = obj[n]; - COMPILE::JS - { - // support XML data in JS (in libraries without access to XML class) - if (value == null) - { - if (n.charAt(0) == '@') - { - var fa:* = obj["attribute"]; - if (fa && typeof(fa) === "function") - value = fa.call(obj, n); - } - else - { - var fc:* = obj["child"]; - if (fc && typeof(fc) === "function") - value = fc.call(obj, n).toString(); - } - } - } - return value; - } - private static function compareStringCaseinsensitive(a:Object, b:Object):int { for each(var n:String in sortNames) { - var v:int = (getValue(a, n) || zeroStr).toString().toLowerCase().localeCompare((getValue(b, n) || zeroStr).toString().toLowerCase()); + var v:int = (a[n] || zeroStr).toString().toLowerCase().localeCompare((b[n] || zeroStr).toString().toLowerCase()); if (v != 0) { return v * muler; @@ -553,7 +528,7 @@ package org.apache.royale.utils { for each(var n:String in sortNames) { - var v:int = (getValue(a, n) || zeroStr).toString().localeCompare((getValue(b, n) || zeroStr).toString()); + var v:int = (a[n] || zeroStr).toString().localeCompare((b[n] || zeroStr).toString()); if (v != 0) { return v * muler; @@ -566,10 +541,10 @@ package org.apache.royale.utils { for each(var n:String in sortNames) { - if (Number(getValue(a, n)) > Number(getValue(b, n))) + if (Number(a[n]) > Number(b[n])) { return muler; - } else if (Number(getValue(a, n)) < Number(getValue(b, n))) + } else if (Number(a[n]) < Number(b[n])) { return -muler; }