You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ca...@apache.org on 2019/09/03 22:39:24 UTC

[royale-docs] branch master updated: finish update app tutorial fixes and changes to use permalinks

This is an automated email from the ASF dual-hosted git repository.

carlosrovira pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/royale-docs.git


The following commit(s) were added to refs/heads/master by this push:
     new 6a7dd22  finish update app tutorial fixes and changes to use permalinks
6a7dd22 is described below

commit 6a7dd22c5c3525535c68c7f7decc1ad775e6aed6
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Wed Sep 4 00:39:16 2019 +0200

    finish update app tutorial fixes and changes to use permalinks
---
 create-an-application/application-tutorial.md      | 16 ++--
 .../application-tutorial/data-model.md             |  2 +-
 .../application-tutorial/debug.md                  |  2 +-
 .../application-tutorial/filters.md                |  8 +-
 .../application-tutorial/local-storage.md          |  8 +-
 .../application-tutorial/locales.md                |  8 +-
 .../application-tutorial/production.md             | 35 +++++----
 .../application-tutorial/routing.md                |  8 +-
 .../application-tutorial/security.md               | 10 ++-
 .../application-tutorial/value-objects.md          | 89 +++++++++++-----------
 features/loading-external-data/json.md             |  6 +-
 get-started/frameworks.md                          |  2 +-
 12 files changed, 113 insertions(+), 81 deletions(-)

diff --git a/create-an-application/application-tutorial.md b/create-an-application/application-tutorial.md
index 9714eff..86a6a0c 100644
--- a/create-an-application/application-tutorial.md
+++ b/create-an-application/application-tutorial.md
@@ -56,20 +56,20 @@ The next four segments will discuss further improvements needed to make a produc
 
 7. [Debugging](create-an-application/application-tutorial/debug) This segment introduces a couple of techniques for figuring out why your app isn't working as expected.
 
-8. [Security](create-an-application/application-tutorial/security.html) This segment discusses how to deal with network access to other domains.
+8. [Security](create-an-application/application-tutorial/security) This segment discusses how to deal with network access to other domains.
 
-9. [Production](create-an-application/application-tutorial/production.html) This segment discusses the differences between a development version and a production version of an app.
+9. [Production](create-an-application/application-tutorial/production) This segment discusses the differences between a development version and a production version of an app.
 
-10. [Value Objects](create-an-application/application-tutorial/value-objects.html) This segment explains how Value Objects (Data Classes) are useful in development and production.
+10. [Value Objects](create-an-application/application-tutorial/value-objects) This segment explains how Value Objects (Data Classes) are useful in development and production.
 
-The remaining segments will discuss further improvements needed to add additional common functionality. *Note*: These pages are not yet complete.
+The remaining segments will discuss further improvements needed to add additional common functionality. (*Note: These pages are not yet complete.*)
 
-11. [Localization](create-an-application/application-tutorial/locales.html) This segment adds the ability to show the user-interface prompts in different languages.
+11. [Localization](create-an-application/application-tutorial/locales) This segment adds the ability to show the user-interface prompts in different languages.
 
-12. [Filters](create-an-application/application-tutorial/filters.html) This segment adds the ability to filter what commits are shown.
+12. [Filters](create-an-application/application-tutorial/filters) This segment adds the ability to filter what commits are shown.
 
-13. [Local Storage](create-an-application/application-tutorial/local-storage.html) This segment shows how to store information in a cookie or equivalent in order to retain some of the state of the app between runs.
+13. [Local Storage](create-an-application/application-tutorial/local-storage) This segment shows how to store information in a cookie or equivalent in order to retain some of the state of the app between runs.
 
-14. [Routing](create-an-application/application-tutorial/routing.html) This segment shows how to map URL parameters to different initial values in the application, and _vice versa_.
+14. [Routing](create-an-application/application-tutorial/routing) This segment shows how to map URL parameters to different initial values in the application, and _vice versa_.
 
 This is going to be fun!
diff --git a/create-an-application/application-tutorial/data-model.md b/create-an-application/application-tutorial/data-model.md
index 1550523..9a48f3b 100644
--- a/create-an-application/application-tutorial/data-model.md
+++ b/create-an-application/application-tutorial/data-model.md
@@ -45,7 +45,7 @@ public var repos:Array;
 public var projectName:String;
 ```
 
-Next, we need to get the values for these arrays. Let's use a [JSON](https://www.json.org){:target='_blank'} file, called `project.json`, to configure which repos to use and the project name. The file contents look like:
+Next, we need to get the values for these arrays. Let's use a [JSON](features/loading-external-data/json) file, called `project.json`, to configure which repos to use and the project name. The file contents look like:
 
 ```json
 { 
diff --git a/create-an-application/application-tutorial/debug.md b/create-an-application/application-tutorial/debug.md
index 3c774d5..d229fdf 100644
--- a/create-an-application/application-tutorial/debug.md
+++ b/create-an-application/application-tutorial/debug.md
@@ -48,5 +48,5 @@ Back to the topic of debugging for a moment. Most browsers also have debuggers w
 Anyway, to get this application to access GitHub, we have to make the application available on a web server and learn a bit about security.
 
 {:align="center"}
-[Previous Page](create-an-application/application-tutorial/deploy) \| [Next Page](create-an-application/application-tutorial/security.html)
+[Previous Page](create-an-application/application-tutorial/deploy) \| [Next Page](create-an-application/application-tutorial/security)
 
diff --git a/create-an-application/application-tutorial/filters.md b/create-an-application/application-tutorial/filters.md
index b9c07c8..873ce8c 100644
--- a/create-an-application/application-tutorial/filters.md
+++ b/create-an-application/application-tutorial/filters.md
@@ -16,12 +16,16 @@
 
 layout: docpage
 title: Filters
+description: About Filters
+permalink: /create-an-application/application-tutorial/filters
 ---
 
 # Filters
 
-Instructions and sample code will go here to show how you can filter the data you pulled to show just the material you want.
+About Filters
+
+*Instructions and sample code will go here to show how you can filter the data you pulled to show just the material you want.*
 
 
 {:align="center"}
-[Previous Page](create-an-application/application-tutorial/locales.html) \| [Next Page](create-an-application/application-tutorial/local-storage.html)
+[Previous Page](create-an-application/application-tutorial/locales) \| [Next Page](create-an-application/application-tutorial/local-storage)
diff --git a/create-an-application/application-tutorial/local-storage.md b/create-an-application/application-tutorial/local-storage.md
index 905e46f..81a7b95 100644
--- a/create-an-application/application-tutorial/local-storage.md
+++ b/create-an-application/application-tutorial/local-storage.md
@@ -16,12 +16,16 @@
 
 layout: docpage
 title: Local Storage
+description: About Local Storage
+permalink: /create-an-application/application-tutorial/local-storage
 ---
 
 # Local Storage
 
-Instructions and sample code will go here to show you how you can store key data in a cookie or similar structure on the user's computer to retain some of the app's state between sessions.
+About Local Storage
+
+*Instructions and sample code will go here to show you how you can store key data in a cookie or similar structure on the user's computer to retain some of the app's state between sessions.*
 
 
 {:align="center"}
-[Previous Page](create-an-application/application-tutorial/filters.html) \| [Next Page](create-an-application/application-tutorial/routing.html)
+[Previous Page](create-an-application/application-tutorial/filters) \| [Next Page](create-an-application/application-tutorial/routing)
diff --git a/create-an-application/application-tutorial/locales.md b/create-an-application/application-tutorial/locales.md
index 5487e55..9de9d92 100644
--- a/create-an-application/application-tutorial/locales.md
+++ b/create-an-application/application-tutorial/locales.md
@@ -16,12 +16,16 @@
 
 layout: docpage
 title: Localization
+description: About localization
+permalink: /create-an-application/application-tutorial/locales
 ---
 
 # Localization
 
-Instructions and sample code to help you localize your app into multiple languages will be available soon.
+About localization
+
+*Instructions and sample code to help you localize your app into multiple languages will be available soon.*
 
 
 {:align="center"}
-[Previous Page](create-an-application/application-tutorial/value-objects.html) \| [Next Page](create-an-application/application-tutorial/filters.html)
+[Previous Page](create-an-application/application-tutorial/value-objects) \| [Next Page](create-an-application/application-tutorial/filters)
diff --git a/create-an-application/application-tutorial/production.md b/create-an-application/application-tutorial/production.md
index a4695ad..38fe4e6 100644
--- a/create-an-application/application-tutorial/production.md
+++ b/create-an-application/application-tutorial/production.md
@@ -17,41 +17,48 @@
 layout: docpage
 title: Making a production version
 description: Releasing an application for consumers
+permalink: /create-an-application/application-tutorial/production
 ---
 
 # Making a production version
 
 Releasing an application for consumers
 
-The version in the "js-debug" folder is considered a "debug version" or "development version".  If you looked at all of the files in the folder or copied them to a web server, you probably noticed there are quite a few, and that each takes time to load.
+The version in the `js-debug` folder is considered a "debug version" or "development version". If you looked at all of the files in the folder or copied them to a web server, you probably noticed there are quite a few, and that each takes time to load.
 
-These versions are designed to be more easily debugged. Each source file has an equivalent .js file with nice, readable variable and function names. If the files are small enough and fast enough, it is perfectly fine to deploy the development version.
+These versions are designed to be more easily debugged. Each source file has an equivalent `.js` file with nice, readable variable and function names. If the files are small enough and fast enough, it is perfectly fine to deploy the development version.
 
-A production version will combine just about all of the .js into a single .js file, renaming variables and function names from things like "Application" to just "aa". This is done using the [Google Closure Compiler (GCC)](https://developers.google.com/closure/compiler/){:target='_blank'} and the results are easier to manage (fewer files to copy) and also should load more quickly (because there are fewer requests for files and smaller total file sizes).
+A production version will combine just about all of the `.js` into a single file, renaming variables and function names from things like "Application" to just "aa". This is done using the [Google Closure Compiler (GCC)](https://developers.google.com/closure/compiler/){:target='_blank'} and the results are easier to manage (fewer files to copy) and also should load more quickly (because there are fewer requests for files and smaller total file sizes).
 
-If you are using an IDE, it probably provides an option for creating a production version. On the command line, to create a production version, don't set debug=true. The compiler will still produce the js-debug folder, but it then will pass it to the Google Closure Compiler that will generate a production or "release" version in a "js-release" folder. 
+If you are using an [IDE](get-started/development-tools), it probably provides an option for creating a production version. On the command line, to create a production version, don't set `debug = true`. The compiler will still produce the `js-debug` folder, but it then will pass it to the **GCC** that will generate a production or "release" version in a `js-release` folder. 
 
-The build process will take longer as the Google compiler crunches through all of the files.  There may be additional warnings, and hopefully, no errors.  If there is an error, then the production version will probably not run.
+The build process will take longer as the Google compiler crunches through all of the files. There may be additional warnings, and hopefully, no errors. If there is an error, then the production version will probably not run.
 
 On the command line, create a production version by running:
 
-`<path to Royale SDK>/royale-asjs/js/bin/mxmlc GitHubCommitsViewer.mxml`
+```sh
+<path to Royale SDK>/royale-asjs/js/bin/mxmlc GitHubCommitsViewer.mxml
+```
 
 If you've used [NPM](https://www.npmjs.com/){:target='_blank'} to install Royale, you can just run:
 
-`mxmlc GitHubCommitsViewer.mxml`
+```sh
+mxmlc GitHubCommitsViewer.mxml
+```
 
-Then if your browser worked when you viewed the application in the js-debug folder, you can review the production version the same way in the js-release folder; or you can copy the js-release folder to your webserver.
+Then if your browser worked when you viewed the application in the `js-debug` folder, you can review the production version the same way in the `js-release` folder; or you can copy the `js-release` folder to your webserver.
 
-You will probably not see any rows of commits.  And if you look in the console, you may see an error that looks like:
+You will probably not see any rows of commits. And if you look in the console, you may see an error that looks like:
 
-`TypeError: undefined is not an object (evaluating 'e.Vf.Qf')`
+```sh
+TypeError: undefined is not an object (evaluating 'e.Vf.Qf')
+```
 
-Why is the production version not working? Because as the Google Closure Compiler renamed variables, it also renamed variables in the code that fetches fields from the data.
+Why is the production version not working? Because as the **GCC** renamed variables, it also renamed variables in the code that fetches fields from the data.
 
-How do you prevent certain variables from being renamed?  One way is by not using as many plain objects, especially when those objects come from an external source. If a plain object is used entirely internally, then the Google Closure Compiler can rename all references to a property like "message" to just "mm". Google doesn't know or have a way to know that the objects in this tutorial are coming from a server.  
+> How do you prevent certain variables from being renamed?  One way is by not using as many plain objects, especially when those objects come from an external source. If a plain object is used entirely internally, then the **GCC** can rename all references to a property like "message" to just "mm". **GCC** doesn't know or have a way to know that the objects in this tutorial are coming from a server.  
 
-There is more than one way to keep Google Closure Compiler from renaming variables, but not using plain objects has other advantages as we'll see in the next section.
+There is more than one way to keep **GCC** from renaming variables, but not using plain objects has other advantages as we'll see in the next section.
 
 {:align="center"}
-[Previous Page](create-an-application/application-tutorial/security.html) \| [Next Page](create-an-application/application-tutorial/value-objects.html)
+[Previous Page](create-an-application/application-tutorial/security) \| [Next Page](create-an-application/application-tutorial/value-objects)
diff --git a/create-an-application/application-tutorial/routing.md b/create-an-application/application-tutorial/routing.md
index b4967a2..c2a0976 100644
--- a/create-an-application/application-tutorial/routing.md
+++ b/create-an-application/application-tutorial/routing.md
@@ -16,12 +16,16 @@
 
 layout: docpage
 title: Routing
+description: About Routing
+permalink: /create-an-application/application-tutorial/routing
 ---
 
 # Routing
 
-Instructions and sample code will appear here soon to show how you can map URL parameters to different initial values in the application, and vice versa.
+About Routing
+
+*Instructions and sample code will appear here soon to show how you can map URL parameters to different initial values in the application, and vice versa.*
 
 
 {:align="center"}
-[Previous Page](create-an-application/application-tutorial/local-storage.html)
+[Previous Page](create-an-application/application-tutorial/local-storage)
diff --git a/create-an-application/application-tutorial/security.md b/create-an-application/application-tutorial/security.md
index 5eaba4a..e6a484b 100644
--- a/create-an-application/application-tutorial/security.md
+++ b/create-an-application/application-tutorial/security.md
@@ -16,10 +16,14 @@
 
 layout: docpage
 title: Application security
+description: Control access to application and the data
+permalink: /create-an-application/application-tutorial/security
 ---
 
 # Application security
 
+Control access to application and the data
+
 There are two sides to security:  
 
 1. How do you access and get data or other material from an external source?
@@ -27,9 +31,9 @@ There are two sides to security:
 
 There is a separate section that deals with both topics in more detail, but the most common problem, especially for applications that mainly present data instead of collecting data, is how to access an external resource.
 
-It is up the external resource to decide whether you can access it or not. And even if the external resource intends to let others access it, there may be rules and restrictions about who can get permission, and under what conditions.  If you run into an access problem, look for documentation on "Cross-Origin Resource Sharing" or "CORS".
+It is up the external resource to decide whether you can access it or not. And even if the external resource intends to let others access it, there may be rules and restrictions about who can get permission, and under what conditions. If you run into an access problem, look for documentation on "Cross-Origin Resource Sharing" or [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing){:target='_blank'}.
 
-Fortunately, for this tutorial, GitHub's APIs are very permissive. Once you have your application on a website it should now show rows of commits even if it wasn't when running from file://.
+Fortunately, for this tutorial, GitHub's APIs are very permissive. Once you have your application on a website it should now show rows of commits even if it wasn't when running from `file://`.
 
 {:align="center"}
-[Previous Page](create-an-application/application-tutorial/debug) \| [Next Page](create-an-application/application-tutorial/production.html)
+[Previous Page](create-an-application/application-tutorial/debug) \| [Next Page](create-an-application/application-tutorial/production)
diff --git a/create-an-application/application-tutorial/value-objects.md b/create-an-application/application-tutorial/value-objects.md
index d18e83e..c03daa7 100644
--- a/create-an-application/application-tutorial/value-objects.md
+++ b/create-an-application/application-tutorial/value-objects.md
@@ -17,82 +17,83 @@
 layout: docpage
 title: Value Objects
 description: Plain ActionScript Objects with properties or arrays
+permalink: /create-an-application/application-tutorial/value-objects
 ---
 
 # Value Objects
 
 Plain ActionScript Objects with properties or arrays
 
-Queries for data to many servers return JSON, which is a plain object or array often referencing other plain objects and arrays. In ActionScript there are advantages to using something called "data classes" or "value objects" (also sometimes "ValueObjects").
+Queries for data to many servers return [JSON](features/loading-external-data/json), which is a plain object or array often referencing other plain objects and arrays. In ActionScript there are advantages to using something called "data classes" or "value objects" (also sometimes "ValueObjects").
 
-Value Objects tell the compiler that your data has a fixed set of properties of a given type. If you misspell the name of a field in the data, the compiler will catch it. Some IDEs know how to complete the field name as you type it and only offer completions for that data object instead of all strings used in the file.
+Value Objects tell the compiler that your data has a fixed set of properties of a given type. If you misspell the name of a field in the data, the compiler will catch it. Some [IDEs](get-started/development-tools) know how to complete the field name as you type it and only offer completions for that data object instead of all strings used in the file.
 
-Value Objects keep the Google Closure Compiler from renaming references to fields, and allow you to have changes to fields detected or ignored by the DataBinding code.
+Value Objects keep the [Google Closure Compiler (GCC)](https://developers.google.com/closure/compiler/){:target='_blank'} from renaming references to fields, and allow you to have changes to fields detected or ignored by the DataBinding code.
 
-There is more than one way to create a Value Object for JSON objects. This tutorial will use the simplest, brute-force technique. There are only three fields we are interested in out of the many fields and nested fields in the GitHub server response. So instead of converting all fields or wrapping the JSON object and returning the nested fields, it is easier to just copy the three fields we need.
+There is more than one way to create a Value Object for **JSON** objects. This tutorial will use the simplest, brute-force technique. There are only three fields we are interested in out of the many fields and nested fields in the GitHub server response. So instead of converting all fields or wrapping the JSON object and returning the nested fields, it is easier to just copy the three fields we need.
 
-Many people prefer to keep their Value Objects in a separate folder/package. For simplicity in this tutorial, we will just create the Value Object in the main "src" folder. It will look like this:
+Many people prefer to keep their Value Objects in a separate folder/package. For simplicity in this tutorial, we will just create the Value Object in the main `src` folder. It will look like this:
 
 ```as3
 package {
-
-public class LogEntry
-{
-  public var date:String;
-  public var author:String;
-
-  [Bindable("__NoChangeEvent__")]
-  public var message:String;
-}
+  public class LogEntry
+  {
+    public var date:String;
+    public var author:String;
+
+    [Bindable("__NoChangeEvent__")]
+    public var message:String;
+  }
 }
 ```
+
 You can download this file from [here](https://github.com/apache/royale-asjs/blob/develop/examples/express/GitHubCommitLogViewer/src/main/royale/LogEntry.as).
 
-Notice the use of [Bindable](features/data-binding) metadata. This special syntax indicates to the compiler that there are no DataBinding notifications for the message field.  Once it is set, it will not change. We could also specify "message" as a "const" instead of a "var" and set up a constructor with parameters, but constructor parameters are not allowed for anything that wants to be declared in MXML.
+> Notice the use of [Bindable](features/data-binding) metadata with `__NoChangeEvent__`. This special syntax indicates to the compiler that there are no data binding notifications for the message field. Once it is set, it will not change. We could also specify `message` as a `const` instead of a `var` and set up a constructor with parameters, but constructor parameters are not allowed for anything that wants to be declared in MXML.
 
-Once we have the LogEntry Value Object, we use LogEntry throughout the app. In the conversion loop, we change it to look like this:
+Once we have the `LogEntry` Value Object, we use `LogEntry` throughout the app. In the conversion loop, we change it to look like this:
 
 ```as3
-        for (var i:int = 0; i < n; i++)
-        {
-            var obj:Object = results[i];
-            var data:LogEntry = new LogEntry();
-            data.author = obj.commit.author.name;
-            // clip date after yyyy-mm-dd
-            data.date = obj.commit.author.date.substr(0, 10);
-            data.message = obj.commit.message;
-            commits.push(data);
-        }
+  for (var i:int = 0; i < n; i++)
+  {
+      var obj:Object = results[i];
+      var data:LogEntry = new LogEntry();
+      data.author = obj.commit.author.name;
+      // clip date after yyyy-mm-dd
+      data.date = obj.commit.author.date.substr(0, 10);
+      data.message = obj.commit.message;
+      commits.push(data);
+  }
 ```
 
-In the data binding to the MultilineLabel, we must declare the type of the object in the Array so that the compilers know that the message property is from a LogEntry and should not be changed.
+In the data binding to the `MultilineLabel`, we must declare the type of the object in the Array so that the compilers know that the message property is from a `LogEntry` and should not be changed.
 
 ```mxml
 <js:MultilineLabel text="{LogEntry(commits[dg.selectedIndex]).message}" width="600" />
 ```
 
-Compiling with these changes will eliminate the warning that assignment to some variable cannot be detected, since the Bindable metadata has instructed the compiler that the "message" property will not change at runtime. But we find it still won't work. That's because, in the conversion loop, the JSON objects are also plain objects, and the Google Closure Compiler is going to rename expressions like obj.commit.author.name to things like "o.b.c.d".
+Compiling with these changes will eliminate the warning that assignment to some variable cannot be detected, since the Bindable Metadata has instructed the compiler that the `message` property will not change at runtime. But we find it still won't work. That's because, in the conversion loop, the **JSON** objects are also plain objects, and the **GCC** is going to rename expressions like `obj.commit.author.name` to things like "o.b.c.d".
 
-We could define more Value Objects like LogEntry for these GitHub API data types, and if we do that, we should share it with everyone else (as of this writing we are seeking permission to do so), but given that we only have to tackle these JSON object in one place in the code, this challenge presents a good opporunity to show another technique to deal with renaming.
+We could define more Value Objects like `LogEntry` for these GitHub API data types, and if we do that, we should share it with everyone else (as of this writing we are seeking permission to do so), but given that we only have to tackle these **JSON** object in one place in the code, this challenge presents a good opporunity to show another technique to deal with renaming.
 
-Another way to prevent the Google Closure Compiler from renaming variables is to use bracket notation.  To use the fewest bracket notations (because they are prone to mispelling) we will refactor the code a bit (which should also make it run a bit faster). Now the conversion loop looks like this:
+> Another way to prevent the **GCC** from renaming variables is to use bracket notation. To use the fewest bracket notations (because they are prone to mispelling) we will refactor the code a bit (which should also make it run a bit faster). Now the conversion loop looks like this:
 
 ```as3
-        for (var i:int = 0; i < n; i++)
-        {
-            var obj:Object = results[i];
-            var data:LogEntry = new LogEntry();
-            var commitObj:Object = obj["commit"];
-            var authorObj:Object = commitObj["author"];
-            data.author = authorObj["name"];
-            // clip date after yyyy-mm-dd
-            data.date = authorObj["date"].substr(0, 10);
-            data.message = commitObj["message"];
-            commits.push(data);
-        }
+  for (var i:int = 0; i < n; i++)
+  {
+      var obj:Object = results[i];
+      var data:LogEntry = new LogEntry();
+      var commitObj:Object = obj["commit"];
+      var authorObj:Object = commitObj["author"];
+      data.author = authorObj["name"];
+      // clip date after yyyy-mm-dd
+      data.date = authorObj["date"].substr(0, 10);
+      data.message = commitObj["message"];
+      commits.push(data);
+  }
 ```
 
-This should now work. If you look in the js-release folder, you now have a single .js file to deploy (along with the .css, .json and .html files). The .js.map file is there in case you have to debug this optimized .js file. If you don't deploy it, anyone trying to reverse-engineer your application is in for quite a challenge!
+This should now work. If you look in the `js-release` folder, you now have a single `.js` file to deploy (along with the `.css`, `.json` and `.html` files). The `.js.map` file is there in case you have to debug this optimized `.js` file. If you don't deploy it, anyone trying to reverse-engineer your application is in for quite a challenge!
 
 If you weren't really following the steps and just skimming, the file in its final form is available [here](assets/application-tutorial/index.html){:target='_blank'}.
 
@@ -103,4 +104,4 @@ src="assets/application-tutorial/index.html"></iframe>
 This concludes the set of steps required to create a not-so-simple application and put it into production. The next steps, which are not yet complete, add additional features to the application.
 
 {:align="center"}
-[Previous Page](create-an-application/application-tutorial/production.html) \| [Next Page](create-an-application/application-tutorial/locales.html)
+[Previous Page](create-an-application/application-tutorial/production) \| [Next Page](create-an-application/application-tutorial/locales)
diff --git a/features/loading-external-data/json.md b/features/loading-external-data/json.md
index 71a14c4..216f019 100644
--- a/features/loading-external-data/json.md
+++ b/features/loading-external-data/json.md
@@ -16,12 +16,16 @@
 
 layout: docpage
 title: JSON
-description: JSON
+description: A plain object or array often referencing other plain objects and arrays
 permalink: /features/loading-external-data/json
 ---
 
 # JSON
 
+A plain object or array often referencing other plain objects and arrays
+
+About [JSON](https://www.json.org){:target='_blank'} implementation in Royale
+
 *information coming soon.*
 
 
diff --git a/get-started/frameworks.md b/get-started/frameworks.md
index ffdc4ae..c021589 100644
--- a/get-started/frameworks.md
+++ b/get-started/frameworks.md
@@ -30,7 +30,7 @@ Royale provides its own framework for making simple, small and fast applications
 
 ## Apache Royale frameworks
 
-The first Royale framework in development is [Crux](https://apache.github.io/royale-docs/frameworks/crux.html), based on Swiz for Flex. It proposes to provide:
+The first Royale framework in development is [Crux](libraries/crux), based on Swiz for Flex. It proposes to provide:
 
 - Inversion of Control (IOC) / Dependency Injection (DI) with metadata
 - Event handling (metadata)