This is an automated email from the ASF dual-hosted git repository. aharui pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit 16f0b2a3d6e566eeddb770f28d5b693dbf149d1a Author: Alex Harui <aha...@apache.org> AuthorDate: Fri Feb 23 16:54:23 2018 -0800 get api lists from both swf and js. swf-only shows up as red, js-only as green, if available on both platforms, is black or anchor-visited color --- examples/royale/ASDoc/build.xml | 10 +- .../royale/ASDoc/src/main/royale/ASDocClassData.as | 52 ++++++ .../ASDoc/src/main/royale/ASDocClassEvents.as | 11 ++ .../ASDoc/src/main/royale/ASDocMainView.mxml | 7 + .../ASDoc/src/main/royale/EventDetailRenderer.mxml | 4 + .../src/main/royale/EventSummaryRenderer.mxml | 4 + .../src/main/royale/MethodDetailRenderer.mxml | 4 + .../src/main/royale/MethodSummaryRenderer.mxml | 4 + .../src/main/royale/PropertyDetailRenderer.mxml | 5 + .../ASDoc/src/main/royale/SummaryRenderer.mxml | 7 + .../ASDoc/src/main/royale/models/ASDocModel.as | 197 ++++++++++++++++++--- 11 files changed, 281 insertions(+), 24 deletions(-) diff --git a/examples/royale/ASDoc/build.xml b/examples/royale/ASDoc/build.xml index c8178b1..19692a8 100644 --- a/examples/royale/ASDoc/build.xml +++ b/examples/royale/ASDoc/build.xml @@ -33,14 +33,20 @@ <os family="windows" /> </condition> <property name="config.path" value="${basedir}/src/main/config/asdoc-js-config.xml"/> + <property name="windows_swf_config" location="${basedir}/src/main/config/asdoc-swf-config.xml" /> + <condition property="config.swf.path" value="${windows_swf_config}"> + <os family="windows" /> + </condition> + <property name="config.swf.path" value="${basedir}/src/main/config/asdoc-swf-config.xml"/> <include file="${basedir}/../../build_example.xml" /> <target name="main" depends="build_example.compile" description="Clean build of ${example}"> - <available file="${basedir}/bin-debug/classes.json" + <available file="${basedir}/bin-debug/classes.swf.json" type="file" property="json.exists"/> <antcall target="json" /> + <antcall target="json.swf" /> </target> <target name="clean"> @@ -97,7 +103,7 @@ <arg value="-external-library-path=${env.AIR_HOME}/frameworks/libs/air/airglobal.swc" /> <arg value="-external-library-path+=${ROYALE_HOME}/js/libs/google_maps.swc" /> <arg value="+frameworks_dir=${ROYALE_HOME}/frameworks" /> - <arg value="-load-config=${config.path}" /> + <arg value="-load-config=${config.swf.path}" /> <arg value="-debug=true" /> <arg value="-output=${basedir}/bin-debug" /> <arg value="-window-title=Apache Royale API Reference" /> diff --git a/examples/royale/ASDoc/src/main/royale/ASDocClassData.as b/examples/royale/ASDoc/src/main/royale/ASDocClassData.as new file mode 100644 index 0000000..a91daab --- /dev/null +++ b/examples/royale/ASDoc/src/main/royale/ASDocClassData.as @@ -0,0 +1,52 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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 +{ +public class ASDocClassData +{ + public function ASDocClassData(name:String, platform:String) + { + _label = name; + _platforms.push(platform); + } + + private var _label:String; + [Bindable("__NoChangeEvent__")] + public function get label():String + { + return _label; + } + public function set label(__v__:String):void + { + _label = __v__; + } + + private var _platforms:Array = []; + [Bindable("__NoChangeEvent__")] + public function get platforms():Array + { + return _platforms; + } + public function set platforms(__v__:Array):void + { + _platforms = __v__; + } + +} +} diff --git a/examples/royale/ASDoc/src/main/royale/ASDocClassEvents.as b/examples/royale/ASDoc/src/main/royale/ASDocClassEvents.as index d7b2726..3b6632b 100644 --- a/examples/royale/ASDoc/src/main/royale/ASDocClassEvents.as +++ b/examples/royale/ASDoc/src/main/royale/ASDocClassEvents.as @@ -111,5 +111,16 @@ public class ASDocClassEvents _ownerhref = __v__; } + private var _platforms:Array; + [Bindable("__NoChangeEvent__")] + public function get platforms():Array + { + return _platforms; + } + public function set platforms(__v__:Array):void + { + _platforms = __v__; + } + } } diff --git a/examples/royale/ASDoc/src/main/royale/ASDocMainView.mxml b/examples/royale/ASDoc/src/main/royale/ASDocMainView.mxml index 8ec6394..f560e45 100644 --- a/examples/royale/ASDoc/src/main/royale/ASDocMainView.mxml +++ b/examples/royale/ASDoc/src/main/royale/ASDocMainView.mxml @@ -347,6 +347,13 @@ limitations under the License. width: 300px; } + .swfonly { + color: #f00; + } + + .jsonly { + color: #0f0; + } </fx:Style> <fx:Declarations> <fx:Component className="AltBGRenderer"> diff --git a/examples/royale/ASDoc/src/main/royale/EventDetailRenderer.mxml b/examples/royale/ASDoc/src/main/royale/EventDetailRenderer.mxml index d471f11..d109c31 100644 --- a/examples/royale/ASDoc/src/main/royale/EventDetailRenderer.mxml +++ b/examples/royale/ASDoc/src/main/royale/EventDetailRenderer.mxml @@ -37,6 +37,10 @@ limitations under the License. // set up anchor link target target.element.id = obj.qname; } + if (obj.platforms[0] == "swf") + target.className += " swfonly"; + if (obj.platforms[0] == "js") + target.className += " jsonly"; } [Bindable("dataChange")] diff --git a/examples/royale/ASDoc/src/main/royale/EventSummaryRenderer.mxml b/examples/royale/ASDoc/src/main/royale/EventSummaryRenderer.mxml index 9b07571..10e254c 100644 --- a/examples/royale/ASDoc/src/main/royale/EventSummaryRenderer.mxml +++ b/examples/royale/ASDoc/src/main/royale/EventSummaryRenderer.mxml @@ -50,6 +50,10 @@ limitations under the License. { super.data = value; qname.href = "#!" + obj.ownerhref + "/" + obj.qname; + if (obj.platforms[0] == "swf") + qname.className += " swfonly"; + if (obj.platforms[0] == "js") + qname.className += " jsonly"; } [Bindable("dataChange")] diff --git a/examples/royale/ASDoc/src/main/royale/MethodDetailRenderer.mxml b/examples/royale/ASDoc/src/main/royale/MethodDetailRenderer.mxml index c02abfb..cdce333 100644 --- a/examples/royale/ASDoc/src/main/royale/MethodDetailRenderer.mxml +++ b/examples/royale/ASDoc/src/main/royale/MethodDetailRenderer.mxml @@ -36,6 +36,10 @@ limitations under the License. // set up anchor link target target.element.id = obj.qname; } + if (obj.platforms[0] == "swf") + target.className += " swfonly"; + if (obj.platforms[0] == "js") + target.className += " jsonly"; } [Bindable("dataChange")] diff --git a/examples/royale/ASDoc/src/main/royale/MethodSummaryRenderer.mxml b/examples/royale/ASDoc/src/main/royale/MethodSummaryRenderer.mxml index 6f1790c..3f0d6d4 100644 --- a/examples/royale/ASDoc/src/main/royale/MethodSummaryRenderer.mxml +++ b/examples/royale/ASDoc/src/main/royale/MethodSummaryRenderer.mxml @@ -56,6 +56,10 @@ limitations under the License. else typeGroup.removeElement(link); qname.href = "#!" + obj.ownerhref + "/" + obj.qname; + if (obj.platforms[0] == "swf") + qname.className += " swfonly"; + if (obj.platforms[0] == "js") + qname.className += " jsonly"; } [Bindable("dataChange")] diff --git a/examples/royale/ASDoc/src/main/royale/PropertyDetailRenderer.mxml b/examples/royale/ASDoc/src/main/royale/PropertyDetailRenderer.mxml index ce6dc68..1e157e7 100644 --- a/examples/royale/ASDoc/src/main/royale/PropertyDetailRenderer.mxml +++ b/examples/royale/ASDoc/src/main/royale/PropertyDetailRenderer.mxml @@ -36,6 +36,11 @@ limitations under the License. // set up anchor link target target.element.id = obj.qname; } + if (obj.platforms[0] == "swf") + target.className += " swfonly"; + if (obj.platforms[0] == "js") + target.className += " jsonly"; + } [Bindable("dataChange")] diff --git a/examples/royale/ASDoc/src/main/royale/SummaryRenderer.mxml b/examples/royale/ASDoc/src/main/royale/SummaryRenderer.mxml index 974e664..c99d127 100644 --- a/examples/royale/ASDoc/src/main/royale/SummaryRenderer.mxml +++ b/examples/royale/ASDoc/src/main/royale/SummaryRenderer.mxml @@ -56,6 +56,13 @@ limitations under the License. else typeGroup.removeElement(link); qname.href = "#!" + obj.ownerhref + "/" + obj.qname; + if (obj.platforms.length == 1) + { + if (obj.platforms[0] == "swf") + qname.className += " swfonly"; + if (obj.platforms[0] == "js") + qname.className += " jsonly"; + } } [Bindable("dataChange")] diff --git a/examples/royale/ASDoc/src/main/royale/models/ASDocModel.as b/examples/royale/ASDoc/src/main/royale/models/ASDocModel.as index 4e6a818..c7bcc71 100644 --- a/examples/royale/ASDoc/src/main/royale/models/ASDocModel.as +++ b/examples/royale/ASDoc/src/main/royale/models/ASDocModel.as @@ -47,6 +47,17 @@ package models private var tagNameMap:Object; + private var _platforms:Array = ["js", "swf"]; + + public function get platforms():Array + { + return _platforms; + } + public function set platforms(value:Array):void + { + _platforms = value; + } + private var _knownTags:Array; [Bindable("packageListChanged")] @@ -55,14 +66,20 @@ package models return _knownTags; } + private var platformList:Array; + private var currentPlatform:String; + private function configCompleteHandler(event:Event):void { app.service.removeEventListener("complete", configCompleteHandler); var config:Object = JSON.parse(app.service.data); tagNameMap = config["tagNames"]; + platformList = platforms.slice(); + currentPlatform = platformList.shift(); + var middle:String = "." + currentPlatform; app.service.addEventListener("complete", tagsCompleteHandler); - app.service.url = "tags.json"; + app.service.url = "tags" + middle + ".json"; app.service.send(); } @@ -70,11 +87,37 @@ package models { app.service.removeEventListener("complete", tagsCompleteHandler); var config:Object = JSON.parse(app.service.data); - _knownTags = config["tags"]; - - app.service.addEventListener("complete", completeHandler); - app.service.url = "classlist.json"; - app.service.send(); + if (!_knownTags) + _knownTags = config["tags"]; + else + { + var arr:Array = config["tags"]; + var n:int = arr.length; + for (var i:int = 0; i < n; i++) + { + var tag:String = arr[i]; + if (_knownTags.indexOf(tag) == -1) + _knownTags.push(tag); + } + } + var middle:String; + if (platformList.length) + { + currentPlatform = platformList.shift(); + middle = "." + currentPlatform; + app.service.addEventListener("complete", tagsCompleteHandler); + app.service.url = "tags" + middle + ".json"; + app.service.send(); + } + else + { + platformList = platforms.slice(); + currentPlatform = platformList.shift(); + middle = "." + currentPlatform; + app.service.addEventListener("complete", completeHandler); + app.service.url = "classlist" + middle + ".json"; + app.service.send(); + } } private var masterData:Object; @@ -84,18 +127,55 @@ package models return masterData["classnames"]; } + /** + * @royaleignorecoercion ASDocClassData + */ private function completeHandler(event:Event):void { app.service.removeEventListener("complete", completeHandler); - masterData = JSON.parse(app.service.data); - filterPackageList(); + if (!masterData) + masterData = { "classnames": [], "data": [] }; + var allNames:Array = allClasses; + var moreData:Object = JSON.parse(app.service.data); + var arr:Array = moreData["classnames"]; + var n:int = arr.length; + var item:ASDocClassData; + for (var i:int = 0; i < n; i++) + { + var cname:String = arr[i]; + var j:int = allNames.indexOf(cname); + if (j != -1) + { + item = masterData["data"][i] as ASDocClassData; + item.platforms.push(currentPlatform); + } + else + { + item = new ASDocClassData(cname, currentPlatform); + masterData["data"].push(item); + masterData["classnames"].push(cname); + } + } + if (platformList.length) + { + currentPlatform = platformList.shift(); + var middle:String = "." + currentPlatform; + app.service.addEventListener("complete", completeHandler); + app.service.url = "classlist" + middle + ".json"; + app.service.send(); + } + else + { + filterPackageList(); + } } private function filterPackageList():void { var packages:Object = {}; - for each (var qname:String in masterData["classnames"]) + for each (var cdata:ASDocClassData in masterData.data) { + var qname:String = cdata.label; var packageName:String; var c:int = qname.lastIndexOf(".") if (c == -1) @@ -186,6 +266,8 @@ package models _currentClass = value; var packageData:Object = allPackages[_currentPackage]; dispatchEvent(new Event("currentClassChanged")); + platformList = platforms.slice(); + currentPlatform = platformList.shift(); app.service.addEventListener("complete", completeClassHandler); app.service.url = computeFileName(_currentPackage + "." + _currentClass); app.service.send(); @@ -201,6 +283,8 @@ package models /** * @royaleignorecoercion ASDocClass + * @royaleignorecoercion ASDocClassMembers + * @royaleignorecoercion ASDocClassFunction */ private function completeClassHandler(event:Event):void { @@ -218,16 +302,36 @@ package models _attributesMap = {}; _attributes = null; } - else + // track base classes if primary platform + // don't list base classes for other platforms + // because they might be duplicates or different + // class hierarchy. + else if (currentPlatform == platforms[0]) _baseClassList.push(data.qname); for each (var m:ASDocClassFunction in data.members) { + if (!m.platforms) + m.platforms = []; + m.platforms.push(currentPlatform); m.shortDescription = makeShortDescription(m.description); if (m.type == "method") { if (m.qname == _currentPackage + "." + _currentClass) { - _constructorList.push(m); + var foundMatch:Boolean = false; + var n:int = _constructorList.length; + for (var i:int; i < n; i++) + { + var q:ASDocClassMembers = _constructorList[i] as ASDocClassMembers; + var mm:ASDocClassMembers = m as ASDocClassMembers + if (q.params.length == mm.params.length) + { + foundMatch = true; + break; + } + } + if (!foundMatch) + _constructorList.push(m); } else if (m.qname != data.qname) addIfNeededAndMakeAttributes(_publicMethods, m); @@ -252,6 +356,9 @@ package models } for each (var e:ASDocClassEvents in data.events) { + if (!e.platforms) + e.platforms = []; + e.platforms.push(currentPlatform); e.shortDescription = makeShortDescription(e.description); addIfNeededAndMakeAttributes(_publicEvents, e); if (masterData["classnames"].indexOf(e.type) != -1) @@ -292,10 +399,20 @@ package models } else { - _publicMethods.sortOn("qname"); - _publicEvents.sortOn("qname"); - _publicProperties.sortOn("qname"); - dispatchEvent(new Event("currentDataChanged")); + if (platformList.length) + { + currentPlatform = platformList.shift(); + app.service.addEventListener("complete", completeClassHandler); + app.service.url = computeFileName(_currentPackage + "." + _currentClass); + app.service.send(); + } + else + { + _publicMethods.sortOn("qname"); + _publicEvents.sortOn("qname"); + _publicProperties.sortOn("qname"); + dispatchEvent(new Event("currentDataChanged")); + } } } @@ -307,6 +424,9 @@ package models var obj:ASDocClassEvents = arr[i]; if (obj.qname == data.qname) { + var platform:String = data.platforms[0]; + if (obj.platforms.indexOf(platform) == -1) + obj.platforms.push(platform); // if no description and the base definition has one // then use base description if (obj.description == "" && data.description != "") @@ -405,7 +525,7 @@ package models private function computeFileName(input:String):String { - return input.replace(new RegExp("\\.", "g"), "/") + ".json"; + return input.replace(new RegExp("\\.", "g"), "/") + "." + currentPlatform + ".json"; } private function makeShortDescription(input:String):String @@ -435,16 +555,35 @@ package models _attributesMap = {}; _attributes = null; } - else + // track base classes if primary platform + // don't list base classes for other platforms + // because they might be duplicates or different + // class hierarchy. + else if (currentPlatform == platforms[0]) _baseClassList.push(data.qname); for each (var m:ASDocClassMembers in data.members) { + if (!m.platforms) + m.platforms = []; + m.platforms.push(currentPlatform); m.shortDescription = makeShortDescription(m.description); if (m.type == "method") { if (m.qname == _currentPackage + "." + _currentClass) { - _constructorList.push(m); + var foundMatch:Boolean = false; + var n:int = _constructorList.length; + for (var i:int; i < n; i++) + { + var q:ASDocClassMembers = _constructorList[i] as ASDocClassMembers; + if (q.params.length == m.params.length) + { + foundMatch = true; + break; + } + } + if (!foundMatch) + _constructorList.push(m); } else if (m.qname != data.qname) addIfNeededAndMakeAttributes(_publicMethods, m); @@ -457,6 +596,9 @@ package models } for each (var e:ASDocClassEvents in data.events) { + if (!e.platforms) + e.platforms = []; + e.platforms.push(currentPlatform); e.shortDescription = makeShortDescription(e.description); addIfNeededAndMakeAttributes(_publicEvents, e); if (masterData["classnames"].indexOf(e.type) != -1) @@ -492,10 +634,20 @@ package models } else { - _publicMethods.sortOn("qname"); - _publicEvents.sortOn("qname"); - _publicProperties.sortOn("qname"); - dispatchEvent(new Event("currentDataChanged")); + if (platformList.length) + { + currentPlatform = platformList.shift(); + app.service.addEventListener("complete", completeInterfaceHandler); + app.service.url = computeFileName(_currentPackage + "." + _currentClass); + app.service.send(); + } + else + { + _publicMethods.sortOn("qname"); + _publicEvents.sortOn("qname"); + _publicProperties.sortOn("qname"); + dispatchEvent(new Event("currentDataChanged")); + } } } @@ -676,3 +828,4 @@ package models } } } + -- To stop receiving notification emails like this one, please contact aha...@apache.org.