diff --git a/_layouts/guide.html b/_layouts/guide.html
index 77dbffd6..d9a4eb3d 100644
--- a/_layouts/guide.html
+++ b/_layouts/guide.html
@@ -17,9 +17,9 @@
{{ page.title }}
diff --git a/assets/frelard_objects_extension.png b/assets/frelard_objects_extension.png
index 3986862c..cfac1351 100644
Binary files a/assets/frelard_objects_extension.png and b/assets/frelard_objects_extension.png differ
diff --git a/docs/Interaction_Guidelines/ux_build_test.md b/docs/Interaction_Guidelines/ux_build_test.md
index 2a163369..b59324c5 100644
--- a/docs/Interaction_Guidelines/ux_build_test.md
+++ b/docs/Interaction_Guidelines/ux_build_test.md
@@ -6,12 +6,8 @@ layout: guide
This section serves as a broad overview of the developer experience and considerations of making extensions.
-
-

-
-
## Build
The first thing to do is start running sample extension code from the Extensions API Documentation. **Make sure that your sample code works** and your environment is set up properly before jumping into building a new extension.
@@ -23,42 +19,24 @@ Once you're ready to go, you can start building and customizing your extension.
* [Community Forums](https://community.tableau.com/community/developers/extensions-api/overview)
Participate in a community of developers that are passionate about creating extensions.
-* [Extension Gallery (beta)](https://extensiongallery.tableau.com/)
Explore and use some of the extensions our partners have created.
+* [Tableau Exchange](https://exchange.tableau.com/)
Explore and use some of the extensions our partners have created.
* [Developer Preview](https://prerelease.tableau.com/extensions-api)
Participate in the Developer Preview for our Extensions API. Be invited to bi-weekly sprint demos with Tableau's development team and have the opportunity to give ongoing feedback.
-
-
## Test
Ensure that your extension works properly for different test cases. Try it on your own dashboards, test it with others, and uncover possible edge cases.
Consider that dashboard extensions can be both **configured** and **viewed** in Tableau. These terms refer to two usage modes we recommend for extensions. To read about these modes and their audiences, learn more at **[Extension Components and Modes]({{ site.baseurl }}/docs/Interaction_Guidelines/ux_components_modes.html)**.
-
-
-
## Share
After you've completed making your extension, you may want to share your extension for others to use. Here are some places you might think about sharing your extension.
+### Tableau Exchange
+Tableau has released the [Tableau Exchange](https://exchange.tableau.com/), a place to explore and download some extensions that our partners have created. If you would like to share your extension, learn more at [Sharing to the Tableau Exchange]({{site.baseurl}}/docs/ux_extension_gallery.html).
-##### Extension Gallery
-Tableau has released the [Extension Gallery](https://extensiongallery.tableau.com/), a place to explore and download some extensions that our partners have created. If you would like to share your extension to our gallery, learn more at [Sharing to the Extension Gallery]({{site.baseurl}}/docs/ux_extension_gallery.html).
+### Community Forums
+Tableau also has a [Community Forum](https://community.tableau.com/s/) for developers to discuss extensions and the Extensions API.
-##### Community Forums
-Tableau also has a [Community Forum](https://community.tableau.com/community/developers/extensions-api/overview) for developers to discuss extensions and the Extensions API.
-
------
+-----
While you might not choose to share your extension directly with Tableau, we encourage you to share your extension through other platforms of your choice! Use it internally at your company or for yourself, consider open source platforms, share over social media channels. How you go about sharing your extension with the world is entirely up to you.
-
-
-
-
-
----
-
\ No newline at end of file
diff --git a/docs/trex_api_about.md b/docs/trex_api_about.md
index e50c2e80..1b48c0bb 100644
--- a/docs/trex_api_about.md
+++ b/docs/trex_api_about.md
@@ -18,23 +18,23 @@ The [Extensions API Reference]({{site.baseurl}}\docs\index.html) namespaces are
The `extensions` namespace is the namespace for Tableau extensions. A dashboard extension is one type of extension. When a extension is registered as a dashboard extension, it has access to the `dashboardContent` namespace, and all of the objects and classes of the dashboard. The type of extension you have registered determines what namespaces will be available. Some namespaces, like the `settings`, `environment`, and `ui` are available to all extensions.
-The `extensions` name space has one method `initializeAsync()` that is used to initialize the extension. When this method is called, it also triggers Tableau to configure the Extensions API. Like the Tableau JavaScript API, the Extensions API follows the [CommonJS Promises/A standard](http://wiki.commonjs.org/wiki/Promises/A) for asynchronous method calls.
+The `extensions` namespace has one method `initializeAsync()` that is used to initialize the extension. When this method is called, it also triggers Tableau to configure the Extensions API. Like the Tableau JavaScript API, the Extensions API follows the [CommonJS Promises/A standard](http://wiki.commonjs.org/wiki/Promises/A) for asynchronous method calls.

## Registering and accessing dashboard extensions
-The dashboard extension is one type of extension in the Tableau extensions namespace (and it is accessed using `tableau.extensions`). To register the extension, you declare the type of extension in the manifest file (`.trex`). For more information about what goes in the file, see [Tableau Manifest File]({{site.baseurl}}\docs\index.html).
+The dashboard extension is one type of extension in the Tableau extensions namespace (and it is accessed using `tableau.extensions`). To register the extension, you declare the type of extension in the manifest file (`.trex`). For more information about what goes in the file, see [Tableau Manifest File](./trex_manifest.md).
```xml
-
+
```
After the extension is initialized, it provides access to the objects in the dashboard, but also has access to the namespaces that are common to all extensions. For example, you can use the `tableau.extensions.environment` to query the environment the dashboard is running in, or `tableau.extensions.settings` to set or get key-value pairs associated with the extension. The `tableau.extensions.settings` can be saved with the workbook, so you can configure the dashboard and the extension in specific ways and then share that configuration with others.
To access the objects in the dashboard, you specify the namespace reserved for dashboard extensions `dashboardContent`, which then gives you access to the dashboard object. For example, the following code snippet gets the array of worksheets in the dashboard.
-```python
- const worksheets = tableau.extensions.dashboardContent.dashboard.worksheets ;
+```javascript
+const worksheets = tableau.extensions.dashboardContent.dashboard.worksheets;
```
The following diagram shows an outline of the namespace hierarchy that you traverse to get to worksheets.
@@ -49,16 +49,7 @@ For example, after you extract a worksheet object from the dashboard, you can us
The following code fragment shows an example of setting an event listener `addEventListener` on a worksheet.
-```python
-
- // Add an event listener for the selection changed event on this sheet.
- unregisterEventHandlerFunction = worksheet.addEventListener('mark-selection-changed', myfunctionHandleSelectionEvent);
+```javascript
+// Add an event listener for the selection changed event on this sheet.
+let unregisterEventHandlerFunction = worksheet.addEventListener('mark-selection-changed', myfunctionHandleSelectionEvent);
```
-
-
-
-
-
-
-
-
diff --git a/docs/trex_configure.md b/docs/trex_configure.md
index 5d4334a3..40e393b1 100644
--- a/docs/trex_configure.md
+++ b/docs/trex_configure.md
@@ -25,7 +25,6 @@ The first step is to add the `` option to the extension's manifest
-
```
@@ -36,14 +35,12 @@ This object maps a special ID or key (which must be `'configure'`) to a function
with adding a `` item to the manifest, adds a new **Configure...** context menu item to the zone of the extension inside a dashboard. When the user clicks the context menu item, the configuration function you specified is executed.
- {:height="25%" width="25%"}
+{:height="25%" width="25%"}
For example, you could use the UI namespace and have the configuration function call the `displayDialogAsync()` function to create a dialog box that can be used to change settings for the extension. The parent (or initial window) for your extension, might have the following JavaScript code. This example uses an initial payload string value, *defaultIntervalInMin*, to pass to the configuration dialog. The payload value is modified in the configuration dialog and is returned in the `closeDialog()` method. Alternatively, you could use a `Settings` object to store the key/value pairs that configure your extension.
```javascript
-
-
// Wrap everything in an anonymous function to avoid polluting the global namespace
(function () {
const defaultIntervalInMin = '5';
@@ -54,12 +51,9 @@ $(document).ready(function () {
// ...
tableau.extensions.initializeAsync({'configure': configure}).then(function() {
// ...
- // ... code to set up event handlers for changes to configuration
+ // ... code to set up event handlers for changes to configuration
});
});
- });
-
-
function configure() {
// ... code to configure the extension
@@ -82,39 +76,36 @@ $(document).ready(function () {
}
})();
-
```
+
In the JavaScript code for the popup dialog window, you would add your code for initializing the dialog and for setting and saving the configuration settings.
```javascript
-
- $(document).ready(function () {
- // The only difference between an extension in a dashboard and an extension
- // running in a popup is that the popup extension must use the method
- // initializeDialogAsync instead of initializeAsync for initialization.
- // This has no affect on the development of the extension but is used internally.
- tableau.extensions.initializeDialogAsync().then(function (openPayload) {
- // The openPayload sent from the parent extension in this example is the
- // default time interval for the refreshes. This could alternatively be stored
- // in settings, but is used in this sample to demonstrate open and close payloads.
- // code goes here
- });
- });
-
+$(document).ready(function () {
+ // The only difference between an extension in a dashboard and an extension
+ // running in a popup is that the popup extension must use the method
+ // initializeDialogAsync instead of initializeAsync for initialization.
+ // This has no affect on the development of the extension but is used internally.
+ tableau.extensions.initializeDialogAsync().then(function (openPayload) {
+ // The openPayload sent from the parent extension in this example is the
+ // default time interval for the refreshes. This could alternatively be stored
+ // in settings, but is used in this sample to demonstrate open and close payloads.
+ // code goes here
+ });
+});
```
In your code to close the popup window, you must pass a string value (or empty string `" "`) as the return payload, even if you are using the `Settings` object to pass your configuration parameters.
```javascript
- function closeDialog() {
- // Save the settings with tableau.extensions.settings.saveAsync()
- // Or pass the new configuration setting in the close payload
- tableau.extensions.ui.closeDialog('NewInterval');
- console.log("Settings saved");
- });
- }
-
+function closeDialog() {
+ // Save the settings with tableau.extensions.settings.saveAsync()
+ // Or pass the new configuration setting in the close payload
+ tableau.extensions.ui.closeDialog('NewInterval');
+ console.log("Settings saved");
+ });
+}
```
-To better understand how to use the context menu, and to see it in action, check out the [UINamespace](https://github.com/tableau/extensions-api/tree/master/Samples/UINamespace?=target="_blank") sample.
+To better understand how to use the context menu, and to see it in action, check out the [UINamespace](https://github.com/tableau/extensions-api/tree/main/Samples/UINamespace?=target="_blank") sample.
diff --git a/docs/trex_create.md b/docs/trex_create.md
index a2fef5ff..ab79c2e4 100644
--- a/docs/trex_create.md
+++ b/docs/trex_create.md
@@ -31,7 +31,7 @@ For convenience, you might want to create a folder for your "Hello World" dashbo
The manifest file (`EXTENSION-NAME.trex`) is an XML file that describes the extension and provides information to register the extension with Tableau. For a description of the contents of this file, see [Elements of the manifest file]({{site.baseurl}}/docs/trex_manifest#elements-of-the-manifest-file).
1. In the `HelloDemo` folder (or where ever you want to put your files), create a manifest file for your extension.
-Name the manifest file for your extension (for example, `HelloExtension` and save it with the file name extension `.trex`.
+Name the manifest file for your extension (for example, `HelloExtension.trex`).
2. Copy the following XML code into your new file. Make sure that the `` declaration appears as the first element in the file (line 1, column 1). Any blank spaces in front of the declaration will cause an error when you load the extension.
@@ -62,24 +62,20 @@ Name the manifest file for your extension (for example, `HelloExtension` and sav
```
- In this file, you need to provide values for a few elements. Some key pieces are:
-- For `` use reverse domain name notation to uniquely identify the extension (`com.example.extension.hello.demo`)
-- For `` make sure that this specifies the URL of your web application. You must use the HTTPS protocol. The exception to this requirement is `localhost`, where you can use HTTP. For example, if you created a `HelloDemo` folder and want to host the file locally on your computer using port 8765, you might use: `http://localhost:8765/HelloDemo/HelloExtension.html`
-- The `` element that specifies the minimum version of the Extensions API library that is required to run the extension.
-- For `` you must use a Base64-encoded icon. To use the default icon, copy and paste the `` example here, or copy one of the manifest files (`.trex`) from the samples.
-- Provide the `name` for your extension (`Hello Extensions!`). The manifest file can be localized, so provide the name (or names) in the appropriate `` elements in the `` section.
-
-- After you have created the HTML and JavaScript files for your extension, you use this `.trex` file to add the extension to a Tableau dashboard. To do that, you drag the **Extension** object on to the dashboard. In the **Choose an Extension** dialog box, click **My Extensions** to locate and open the manifest file you just created.
-
-- For information about the manifest file and about adding version information, see the [Tableau Extension Manifest]({{site.baseurl}}/docs/trex_manifest.html).
+ - For `` use reverse domain name notation to uniquely identify the extension (`com.example.extension.hello.demo`)
+ - For `` make sure that this specifies the URL of your web application. You must use the HTTPS protocol. The exception to this requirement is `localhost`, where you can use HTTP. For example, if you created a `HelloDemo` folder and want to host the file locally on your computer using port 8765, you might use: `http://localhost:8765/HelloDemo/HelloExtension.html`
+ - The `` element that specifies the minimum version of the Extensions API library that is required to run the extension.
+ - For `` you must use a Base64-encoded icon. To use the default icon, copy and paste the `` example here, or copy one of the manifest files (`.trex`) from the samples.
+ - Provide the `name` for your extension (`Hello Extensions!`). The manifest file can be localized, so provide the name (or names) in the appropriate `` elements in the `` section.
+- After you have created the HTML and JavaScript files for your extension, you use this `.trex` file to add the extension to a Tableau dashboard. To do that, you drag the **Extension** object on to the dashboard. In the **Add an Extension** dialog box, click **Access Local Extensions** to locate and open the manifest file you just created.
+- For information about the manifest file and about adding version information, see the [Tableau Extension Manifest File](trex_manifest.md).
---
### Create your web app
-The web app you create controls and interacts with the Tableau dashboard objects. The web app consists of one or more HTML files (one is the minimum). You host this web app on a web server (the server specified in the manifest file).
-
-
+The web app you create controls and interacts with the Tableau dashboard objects. The web app consists of one or more HTML files. You host this web app on a web server (the server specified in the manifest file).
#### Create the HTML page
@@ -97,7 +93,7 @@ Your web application must include an HTML page. This page should link to the Ext
- Hello Extensions`
+ Hello Extensions
@@ -107,8 +103,7 @@ Your web application must include an HTML page. This page should link to the Ext
-
-
+
@@ -125,24 +120,20 @@ Your web application must include an HTML page. This page should link to the Ext