forked from sheetjs/docs.sheetjs.com
		
	dojo
This commit is contained in:
		
							parent
							
								
									aca683dafc
								
							
						
					
					
						commit
						f14874c930
					
				| @ -104,7 +104,7 @@ require(['xlsx'], function(XLSX) { | ||||
| Dojo has changed module loading strategies over the years.  These examples were | ||||
| tested with Dojo `1.17.3`. They are not guaranteed to work with other versions. | ||||
| 
 | ||||
| Live demos are included in ["Dojo Toolkit"](/docs/demos/frontend/legacy#dojo-toolkit) | ||||
| Live demos are included in ["Dojo Toolkit"](/docs/demos/frontend/dojo) | ||||
| 
 | ||||
| :::caution pass | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										205
									
								
								docz/docs/03-demos/01-frontend/08-dojo.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										205
									
								
								docz/docs/03-demos/01-frontend/08-dojo.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,205 @@ | ||||
| --- | ||||
| title: Sheets in Dojo Sites | ||||
| sidebar_label: Dojo Toolkit | ||||
| description: Build interactive websites with Dojo. Seamlessly integrate spreadsheets into your app using SheetJS. Bring Excel-powered workflows and data to the modern web. | ||||
| pagination_prev: demos/index | ||||
| pagination_next: demos/grid/index | ||||
| sidebar_position: 8 | ||||
| --- | ||||
| 
 | ||||
| import current from '/version.js'; | ||||
| import CodeBlock from '@theme/CodeBlock'; | ||||
| 
 | ||||
| [Dojo Toolkit](https://dojotoolkit.org/) is a JavaScript toolkit for building | ||||
| user interfaces. It includes solutions for code loading and DOM manipulation. | ||||
| 
 | ||||
| [SheetJS](https://sheetjs.com) is a JavaScript library for reading and writing | ||||
| data from spreadsheets. | ||||
| 
 | ||||
| This demo uses Dojo Toolkit and SheetJS to process and generate spreadsheets. | ||||
| We'll explore how to load SheetJS using Dojo loader and perform common tasks. | ||||
| 
 | ||||
| ## Installation | ||||
| 
 | ||||
| The ["AMD" instructions](/docs/getting-started/installation/amd#dojo-toolkit) | ||||
| includes details for using SheetJS with `require`. | ||||
| 
 | ||||
| The demos in this section use the async loading strategy with the SheetJS CDN: | ||||
| 
 | ||||
| <CodeBlock language="html">{`\ | ||||
| <script> | ||||
| /* configure package paths */ | ||||
| dojoConfig = { | ||||
|   packages: [ | ||||
|     { | ||||
|       /* Dojo only supports the name "xlsx" for the script */ | ||||
|       name: "xlsx", | ||||
|       /* \`location\` omits trailing slash */ | ||||
|       location: "https://cdn.sheetjs.com/xlsx-${current}/package/dist", | ||||
|       /* \`main\` omits the ".js" extension */ | ||||
|       main: "xlsx.full.min" | ||||
|     } | ||||
|   ] | ||||
| } | ||||
| </script> | ||||
| <!-- load dojo.js --> | ||||
| <script src="dojo.js" data-dojo-config="isDebug:1, async:1"></script> | ||||
| <script> | ||||
| require( | ||||
|   /* specify "xlsx" in the module array */ | ||||
|   ["dojo/request/xhr", "xlsx"], | ||||
|   /* the name of the variable should not be _XLSX ! */ | ||||
|   function(xhr, _XLSX) { | ||||
|     /* XLSX-related operations happen in the callback. Use the global \`XLSX\` */ | ||||
|     console.log(XLSX.version); | ||||
|   } | ||||
| ); | ||||
| </script>`} | ||||
| </CodeBlock> | ||||
| 
 | ||||
| :::warning pass | ||||
| 
 | ||||
| The official Google CDN does not have the newest releases of Dojo Toolkit | ||||
| 
 | ||||
| **This is a known Google CDN bug.** | ||||
| 
 | ||||
| The script <https://docs.sheetjs.com/dojo/dojo.js> was fetched from the official | ||||
| `1.17.3` uncompressed release artifact[^1]. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| ## Live Demos | ||||
| 
 | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| The demos were last tested on 2023-11-27. | ||||
| 
 | ||||
| Demos exclusively using Dojo Core were tested using Dojo Toolkit `1.17.3`. | ||||
| 
 | ||||
| Demos using `dijit` or `dojox` were tested using Dojo Toolkit `1.14.1`. This | ||||
| was the latest version available on the Google CDN. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| - [Download and display data](pathname:///dojo/read.html) | ||||
| - [Fetch JSON and generate a workbook](pathname:///dojo/write.html) | ||||
| - [Parse file and create a data store](pathname:///dojo/combo.html) | ||||
| - [Export data from a store to XLSX](pathname:///dojo/export.html) | ||||
| 
 | ||||
| ## Operations | ||||
| 
 | ||||
| ### Parsing Remote Files | ||||
| 
 | ||||
| When fetching spreadsheets with XHR, `handleAs: "arraybuffer"` yields an | ||||
| `ArrayBuffer` which can be passed to the SheetJS `read` method. | ||||
| 
 | ||||
| The following example generates a HTML table from the first worksheet: | ||||
| 
 | ||||
| ```html | ||||
| <div id="tbl"></div> | ||||
| <script> | ||||
| require(["dojo/request/xhr", "xlsx"], function(xhr, _XLSX) { | ||||
|   xhr("https://sheetjs.com/pres.numbers", { | ||||
|     headers: { "X-Requested-With": null }, | ||||
| // highlight-next-line | ||||
|     handleAs: "arraybuffer" | ||||
|   }).then(function(ab) { | ||||
|     /* read ArrayBuffer */ | ||||
| // highlight-next-line | ||||
|     var wb = XLSX.read(ab); | ||||
|     /* display first worksheet data */ | ||||
|     var ws = wb.Sheets[wb.SheetNames[0]]; | ||||
|     document.getElementById("tbl").innerHTML = XLSX.utils.sheet_to_html(ws); | ||||
|   }); | ||||
| }); | ||||
| </script> | ||||
| ``` | ||||
| 
 | ||||
| :::note pass | ||||
| 
 | ||||
| The `X-Requested-With` header setting resolves some issues related to CORS. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| ### Writing Local Files | ||||
| 
 | ||||
| The SheetJS `writeFile` method attempts to create and download a file: | ||||
| 
 | ||||
| ```js | ||||
| require(["xlsx"], function(_XLSX) { | ||||
|   /* create a sample workbook */ | ||||
|   var ws = XLSX.utils.aoa_to_sheet(["SheetJS".split(""), [5,4,3,3,7,9,5]]); | ||||
|   var wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, "Sheet1"); | ||||
|   /* create an XLSX file and try to save to SheetJSDojo.xlsx */ | ||||
|   // highlight-next-line | ||||
|   XLSX.writeFile(workbook, "SheetJSDojo.xlsx"); | ||||
| }); | ||||
| ``` | ||||
| 
 | ||||
| ### Data Stores | ||||
| 
 | ||||
| `dojo/store`[^2] is the primary interface for working with structured data. | ||||
| 
 | ||||
| #### Importing Data | ||||
| 
 | ||||
| The SheetJS `sheet_to_json` method can generate an array of arrays that can back | ||||
| a `dojo/store/Memory` store. | ||||
| 
 | ||||
| The following example fetches a test file, creates a Memory store from the data | ||||
| in the first worksheet, and assigns to a `dijit` UI Widget: | ||||
| 
 | ||||
| ```html | ||||
| <script> | ||||
| require([ | ||||
|   "dojo/ready", "dojo/request/xhr", "dojo/store/Memory" "dijit/registry", "xlsx" | ||||
| ], function(ready, xhr, Memory, registry, _XLSX) { | ||||
|   ready(function() { | ||||
|     /* fetch test file */ | ||||
|     xhr("https://sheetjs.com/pres.xlsx", { | ||||
|       headers: { "X-Requested-With": null }, | ||||
|       handleAs: "arraybuffer" | ||||
|     }).then(function(ab) { | ||||
|       /* parse ArrayBuffer */ | ||||
|       var wb = XLSX.read(ab); | ||||
|       /* get first worksheet */ | ||||
|       var ws = wb.Sheets[wb.SheetNames[0]]; | ||||
|       // highlight-start | ||||
|       /* generate row objects from first worksheet */ | ||||
|       const aoo = XLSX.utils.sheet_to_json(ws); | ||||
| 
 | ||||
|       /* generate memory store and assign to combo box */ | ||||
|       var store = new Memory({ data: aoo }); | ||||
|       // highlight-end | ||||
|       registry.byId("widget").store = store; | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
| </script> | ||||
| ``` | ||||
| 
 | ||||
| #### Exporting Data | ||||
| 
 | ||||
| Starting from a data store, query results are arrays of objects. Worksheets can | ||||
| be created using the SheetJS `json_to_sheet` method: | ||||
| 
 | ||||
| ```js | ||||
| function export_all_data_from_store(store) { | ||||
|   require(["xlsx"], function(_XLSX) { | ||||
|     // highlight-start | ||||
|     /* pull all data rows from the store */ | ||||
|     var rows = store.query(function() { return true; }); | ||||
| 
 | ||||
|     /* generate SheetJS worksheet */ | ||||
|     var ws = XLSX.utils.json_to_sheet(rows); | ||||
|     // highlight-end | ||||
| 
 | ||||
|     /* generate SheetJS workbook and write to XLSX */ | ||||
|     var wb = XLSX.utils.book_new(); | ||||
|     XLSX.utils.book_append_sheet(wb, ws, "Export"); | ||||
|     XLSX.writeFile(wb, "SheetJSDojoExport.xlsx"); | ||||
|   }); | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| [^1]: All Dojo Toolkit releases are available at <https://download.dojotoolkit.org/>. The mirrored `dojo.js` corresponds to the `1.17.3` uncompressed script <http://download.dojotoolkit.org/release-1.17.3/dojo.js.uncompressed.js>. | ||||
| [^2]: See [`dojo/store`](https://dojotoolkit.org/reference-guide/dojo/store.html) in the Dojo Toolkit documentation. | ||||
| @ -192,109 +192,9 @@ included in the page and the relevant features are enabled on the target system. | ||||
| 
 | ||||
| ## Frameworks | ||||
| 
 | ||||
| ### Dojo Toolkit | ||||
| 
 | ||||
| _Live Demos_ | ||||
| 
 | ||||
| - [Download and display data](pathname:///dojo/read.html) | ||||
| - [Fetch JSON and generate a workbook](pathname:///dojo/write.html) | ||||
| 
 | ||||
| :::note pass | ||||
| 
 | ||||
| These demos have been tested with Dojo Toolkit `1.10.4` and `1.17.3`. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| :::warning pass | ||||
| 
 | ||||
| The official Google CDN is out of date. This is a known CDN bug. | ||||
| 
 | ||||
| The script <https://docs.sheetjs.com/dojo/dojo.js> was fetched from the official | ||||
| `1.17.3` uncompressed release artifact[^2] on 2023-08-16. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| _Installation_ | ||||
| 
 | ||||
| The ["AMD" instructions](/docs/getting-started/installation/amd#dojo-toolkit) | ||||
| includes details for use with `require`. | ||||
| 
 | ||||
| <details><summary><b>Integration in the demos</b> (click to show)</summary> | ||||
| 
 | ||||
| The demos use the async loading strategy with the SheetJS CDN: | ||||
| 
 | ||||
| <CodeBlock language="html">{`\ | ||||
| <script> | ||||
| dojoConfig = { | ||||
|   packages: [ | ||||
|     { name: "xlsx", location: "https://cdn.sheetjs.com/xlsx-${current}/package/dist", main: "xlsx.full.min" } | ||||
|   ] | ||||
| } | ||||
| </script> | ||||
| <script src="dojo.js" data-dojo-config="isDebug:1, async:1"></script> | ||||
| <script> | ||||
| require(["dojo/request/xhr", "xlsx"], function(xhr, _XLSX) { | ||||
|   /* XLSX-related operations happen in the callback */ | ||||
| }); | ||||
| </script>`} | ||||
| </CodeBlock> | ||||
| 
 | ||||
| </details> | ||||
| 
 | ||||
| The ["Dojo" section in "Bundlers"](/docs/demos/bundler#dojo) includes a complete example | ||||
| mirroring the [official export example](/docs/getting-started/examples/export) | ||||
| 
 | ||||
| <details><summary><b>Details</b> (click to show)</summary> | ||||
| 
 | ||||
| _Reading Data_ | ||||
| 
 | ||||
| When fetching spreadsheets with XHR, `handleAs: "arraybuffer"` yields an | ||||
| `ArrayBuffer` which can be passed to `XLSX.read`: | ||||
| 
 | ||||
| ```html | ||||
| <div id="tbl"></div> | ||||
| <script> | ||||
| require(["dojo/request/xhr", "xlsx"], function(xhr, _XLSX) { | ||||
|   xhr("https://sheetjs.com/pres.numbers", { | ||||
|     headers: { "X-Requested-With": null }, | ||||
| // highlight-next-line | ||||
|     handleAs: "arraybuffer" | ||||
|   }).then(function(ab) { | ||||
|     /* read ArrayBuffer */ | ||||
| // highlight-next-line | ||||
|     var wb = XLSX.read(ab); | ||||
|     /* display first worksheet data */ | ||||
|     var ws = wb.Sheets[wb.SheetNames[0]]; | ||||
|     document.getElementById("tbl").innerHTML = XLSX.utils.sheet_to_html(ws); | ||||
|   }); | ||||
| }); | ||||
| </script> | ||||
| ``` | ||||
| 
 | ||||
| :::note pass | ||||
| 
 | ||||
| The `X-Requested-With` header setting resolves some issues related to CORS. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| _Writing Data_ | ||||
| 
 | ||||
| `XLSX.writeFile` works as expected: | ||||
| 
 | ||||
| ```html | ||||
| <script> | ||||
| require(["xlsx"], function(_XLSX) { | ||||
|   var ws = XLSX.utils.aoa_to_sheet(["SheetJS".split(""), [5,4,3,3,7,9,5]]); | ||||
|   var wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, "Sheet1"); | ||||
|   /* create an XLSX file and try to save to SheetJSDojo.xlsx */ | ||||
|   // highlight-next-line | ||||
|   XLSX.writeFile(workbook, "SheetJSDojo.xlsx"); | ||||
| }); | ||||
| </script> | ||||
| ``` | ||||
| 
 | ||||
| </details> | ||||
| #### Dojo Toolkit | ||||
| 
 | ||||
| **[The exposition has been moved to a separate page.](/docs/demos/frontend/dojo)** | ||||
| 
 | ||||
| ### KnockoutJS | ||||
| 
 | ||||
| @ -371,5 +271,4 @@ binding is possible using the `$parent` and `$index` binding context properties: | ||||
| 
 | ||||
| </details> | ||||
| 
 | ||||
| [^1]: Project hosted at <https://github.com/dcneiner/Downloadify> | ||||
| [^2]: All Dojo Toolkit releases are available at <https://download.dojotoolkit.org/>. The mirrored `dojo.js` corresponds to the `1.17.3` uncompressed script <http://download.dojotoolkit.org/release-1.17.3/dojo.js.uncompressed.js>. | ||||
| [^1]: Project hosted at <https://github.com/dcneiner/Downloadify> | ||||
| @ -39,7 +39,7 @@ The following tools are covered in separate pages: | ||||
| 
 | ||||
| Integration details are included [in the "AMD" installation](/docs/getting-started/installation/amd#dojo-toolkit) | ||||
| 
 | ||||
| Complete Examples are included [in the "Dojo" demo](/docs/demos/frontend/legacy#dojo-toolkit) | ||||
| Complete Examples are included [in the "Dojo" demo](/docs/demos/frontend/dojo) | ||||
| 
 | ||||
| ## Snowpack | ||||
| 
 | ||||
|  | ||||
| @ -27,7 +27,7 @@ Demos for popular frameworks are included in separate pages: | ||||
|   </li>); | ||||
| })}</ul> | ||||
| 
 | ||||
| Legacy frameworks including Dojo are covered [in the "Legacy" section](/docs/demos/frontend/legacy). | ||||
| Legacy frameworks including KnockoutJS are covered [in the "Legacy" section](/docs/demos/frontend/legacy). | ||||
| 
 | ||||
| :::note Recommendation | ||||
| 
 | ||||
|  | ||||
| @ -23,14 +23,14 @@ This demo covers basic concepts pertaining to data import and export.  The | ||||
| official documentation includes advanced examples and deployment tips as well as | ||||
| strategies for general data processing in AlaSQL expressions. | ||||
| 
 | ||||
| :::note | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| This demo was tested in the following environments: | ||||
| 
 | ||||
| | Environment         | AlaSQL |    Date    | | ||||
| |:--------------------|:-------|:----------:| | ||||
| | NodeJS              | 3.1.0  | 2023-10-26 | | ||||
| | Standalone (Chrome) | 3.0.0  | 2023-08-20 | | ||||
| | Standalone (Chrome) | 3.0.0  | 2023-11-27 | | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
|  | ||||
| @ -19,9 +19,9 @@ This demo uses SheetJS to pull data from a spreadsheet for further analysis | ||||
| within MATLAB. We'll explore how to run an external tool to convert complex | ||||
| spreadsheets into simple XLSX files for MATLAB. | ||||
| 
 | ||||
| :::note | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| This demo was last tested by SheetJS users on 2023 September 12 in MATLAB R2023a. | ||||
| This demo was last tested by SheetJS users on 2023 November 27 in MATLAB R2023a. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
|  | ||||
| @ -118,7 +118,7 @@ The resulting `buf` can be written to file with `fwrite`. | ||||
| 
 | ||||
| ## Complete Example | ||||
| 
 | ||||
| :::note | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| This demo was tested in the following deployments: | ||||
| 
 | ||||
| @ -127,7 +127,7 @@ This demo was tested in the following deployments: | ||||
| | `12.1.131`    | `darwin-x64` | macOS 14.1    | `clang 15.0.0`   | 2023-11-15 | | ||||
| | `12.0.175`    | `darwin-arm` | macOS 14.0    | `clang 15.0.0`   | 2023-10-20 | | ||||
| | `12.0.265`    | `win10-x64`  | Windows 10    | `CL 19.37.32822` | 2023-10-28 | | ||||
| | `12.0.72`     | `linux-x64`  | HoloOS 3.4.11 | `gcc 12.2.0`     | 2023-10-11 | | ||||
| | `12.1.222`    | `linux-x64`  | HoloOS 3.5.7  | `gcc 13.1.1`     | 2023-11-27 | | ||||
| | `11.8.82`     | `linux-arm`  | Debian 11     | `gcc 10.2.1`     | 2023-09-26 | | ||||
| 
 | ||||
| ::: | ||||
| @ -459,9 +459,10 @@ tools/dev/v8gen.py x64.release.sample | ||||
| ninja -C out.gn/x64.release.sample v8_monolith | ||||
| ``` | ||||
| 
 | ||||
| :::caution pass | ||||
| :::note pass | ||||
| 
 | ||||
| In the most recent Linux x64 test, there were build errors: | ||||
| In some Linux x64 tests using GCC 12, there were build errors that stemmed from | ||||
| warnings. The error messages included the tag `-Werror`: | ||||
| 
 | ||||
| ``` | ||||
| ../../src/compiler/turboshaft/wasm-gc-type-reducer.cc:212:18: error: 'back_insert_iterator' may not intend to support class template argument deduction [-Werror,-Wctad-maybe-unsupported] | ||||
| @ -805,7 +806,7 @@ fn eval_code_ab(scope: &mut v8::HandleScope, code: &str) -> Vec<u8> { | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| :::note | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| This demo was last tested in the following deployments: | ||||
| 
 | ||||
| @ -814,7 +815,7 @@ This demo was last tested in the following deployments: | ||||
| | `darwin-x64` | `0.81.0` | 2023-11-14 | | ||||
| | `darwin-arm` | `0.79.2` | 2023-10-18 | | ||||
| | `win10-x64`  | `0.81.0` | 2023-11-14 | | ||||
| | `linux-x64`  | `0.79.2` | 2023-10-11 | | ||||
| | `linux-x64`  | `0.81.0` | 2023-11-27 | | ||||
| | `linux-arm`  | `0.75.1` | 2023-08-30 | | ||||
| 
 | ||||
| ::: | ||||
|  | ||||
| @ -34,7 +34,7 @@ in the [issue tracker](https://git.sheetjs.com/sheetjs/docs.sheetjs.com/issues) | ||||
| - [`Svelte`](/docs/demos/frontend/svelte) | ||||
| - [`VueJS`](/docs/demos/frontend/vue) | ||||
| - [`AngularJS`](/docs/demos/frontend/angularjs) | ||||
| - [`Dojo`](/docs/demos/frontend/legacy#dojo-toolkit) | ||||
| - [`Dojo`](/docs/demos/frontend/dojo) | ||||
| - [`Knockout`](/docs/demos/frontend/legacy#knockoutjs) | ||||
| 
 | ||||
| ### Front-End UI Components | ||||
|  | ||||
| @ -33,17 +33,17 @@ After cloning the repo, running `make help` will display a list of commands. | ||||
| These instructions will cover system configuration, cloning the source repo, | ||||
| building, reproducing official releases, and running NodeJS and browser tests. | ||||
| 
 | ||||
| :::note | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| These instructions were tested on the following platforms: | ||||
| 
 | ||||
| | Platform                      | Test Date  | | ||||
| |:------------------------------|:-----------| | ||||
| | Linux (Steam Deck Holo x64)   | 2023-10-11 | | ||||
| | Linux (Steam Deck Holo x64)   | 2023-11-27 | | ||||
| | Linux (Ubuntu 18 AArch64)     | 2023-09-07 | | ||||
| | MacOS 10.13.6 (x64)           | 2023-09-30 | | ||||
| | MacOS 13.6 (ARM64)            | 2023-09-30 | | ||||
| | Windows 10 (x64) + WSL Ubuntu | 2023-11-13 | | ||||
| | Windows 10 (x64) + WSL Ubuntu | 2023-11-27 | | ||||
| | Windows 11 (x64) + WSL Ubuntu | 2023-10-14 | | ||||
| | Windows 11 (ARM) + WSL Ubuntu | 2023-09-18 | | ||||
| 
 | ||||
| @ -163,7 +163,7 @@ sudo apt-get install -y nodejs | ||||
| 
 | ||||
| D) Exit the WSL session and start a new session | ||||
| 
 | ||||
| E) Install the `n` package and switch NodeJS vesrions: | ||||
| E) Install the `n` package and switch NodeJS versions: | ||||
| 
 | ||||
| ```bash | ||||
| # Switch to `n`-managed NodeJS | ||||
| @ -312,6 +312,14 @@ Desktop Mode on the Steam Deck uses `pacman`.  It also requires a few steps. | ||||
| 
 | ||||
| 0) Switch to Desktop mode and open `Konsole` | ||||
| 
 | ||||
| :::tip pass | ||||
| 
 | ||||
| At this point, it is strongly recommended to install the `ungoogled-chromium` | ||||
| browser from the "Discover" app and open this page on the Steam Deck. Running | ||||
| the browser on the device makes it easy to copy and paste commands. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 1) Set a password for the user by running `passwd` and following instructions. | ||||
| 
 | ||||
| 2) Disable read-only mode: | ||||
| @ -356,12 +364,27 @@ After installing mercurial and subversion, install NodeJS. | ||||
| 
 | ||||
| :::note pass | ||||
| 
 | ||||
| [The official NodeJS site](https://nodejs.org/en/download/) provides installers | ||||
| for "LTS" and "Current" releases.  The "LTS" version should be installed. | ||||
| [The official NodeJS site](https://nodejs.org/en/download/) provides Linux | ||||
| binaries, but it is strongly recommended to use `nvm` to install NodeJS: | ||||
| 
 | ||||
| ```bash | ||||
| curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash | ||||
| ``` | ||||
| 
 | ||||
| After installing, start a new terminal session and install NodeJS "LTS": | ||||
| 
 | ||||
| ```bash | ||||
| nvm install --lts | ||||
| ``` | ||||
| 
 | ||||
| After installing, if running `node` in the terminal fails with a `glibc` error, | ||||
| an older version of NodeJS should be installed.  For example, Ubuntu 18.04 does | ||||
| not support Node 18 support Node 16.20.0. | ||||
| not support Node 18 but supports Node 16.20.0: | ||||
| 
 | ||||
| ```bash | ||||
| nvm install 16 | ||||
| nvm use 16 | ||||
| ``` | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										61
									
								
								docz/static/dojo/combo.html
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										61
									
								
								docz/static/dojo/combo.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,61 @@ | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
| <head> | ||||
|   <meta name="robots" content="noindex"> | ||||
|   <title>SheetJS + Dojo Memory Store Demo</title> | ||||
| 	<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dijit/themes/claro/claro.css"> | ||||
| </head> | ||||
| <body class="claro"> | ||||
|   <h1>SheetJS + Dojo Memory Store Demo</h1> | ||||
|   <br/> | ||||
|   This demo fetches <a href="https://sheetjs.com/pres.xlsx">https://sheetjs.com/pres.xlsx</a>, parses the file, generates a Memory store from the first worksheet, and loads a Combo box. When a President is selected, the text box will display the "Index" field from the dataset. | ||||
|   <br/> | ||||
|   (this HTML page is not minified -- feel free to view source!)<br/><br/> | ||||
|   <a href="https://docs.sheetjs.com">SheetJS CE Documentation</a><br/><br/> | ||||
| <script> | ||||
|   dojoConfig = { | ||||
|     parseOnLoad: true, | ||||
|     packages: [ | ||||
|       { name: "xlsx", location: "https://cdn.sheetjs.com/xlsx-latest/package/dist", main: "xlsx.full.min" } | ||||
|     ] | ||||
|   }; | ||||
| </script> | ||||
| <script src="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dojo/dojo.js" data-dojo-config=""></script> | ||||
| <script> | ||||
| require([ | ||||
|   "dojo/ready", | ||||
|   "dojo/request/xhr", | ||||
|   "dojo/store/Memory", | ||||
|   "dijit/registry", | ||||
|   "xlsx" | ||||
| ], function(ready, xhr, Memory, registry, _XLSX) { | ||||
|   ready(function() { | ||||
|     /* fetch test file */ | ||||
|     xhr("https://sheetjs.com/pres.xlsx", { | ||||
|       headers: { "X-Requested-With": null }, | ||||
|       handleAs: "arraybuffer" | ||||
|     }).then(function(ab) { | ||||
|       /* read ArrayBuffer */ | ||||
|       var wb = XLSX.read(ab); | ||||
|       /* generate row objects from first worksheet */ | ||||
|       var ws = wb.Sheets[wb.SheetNames[0]]; | ||||
|       var aoo = XLSX.utils.sheet_to_json(ws); | ||||
| 
 | ||||
|       /* generate memory store and assign to combo box*/ | ||||
|       var store = new Memory({ data: aoo }); | ||||
|       registry.byId("combo").store = store; | ||||
| 
 | ||||
|       /* when a President is selected, display the index */ | ||||
|       registry.byId("combo").watch("item", function(w, oitem, nitem) { | ||||
|         registry.byId("pindex").set("value", nitem.Index); | ||||
|       }); | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
| </script> | ||||
| <b>Select a president</b><br/> | ||||
| <div id="combo" data-dojo-type="dijit/form/ComboBox" data-dojo-props="searchAttr:'Name'"></div><br/> | ||||
| <b>Index of Selected President</b><br/> | ||||
| <div id="pindex" data-dojo-type="dijit/form/TextBox"></div> | ||||
| </body> | ||||
| </html> | ||||
							
								
								
									
										52
									
								
								docz/static/dojo/export.html
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										52
									
								
								docz/static/dojo/export.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
| <head> | ||||
|   <meta name="robots" content="noindex"> | ||||
|   <title>SheetJS + Dojo Store Export Demo</title> | ||||
| 	<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dijit/themes/claro/claro.css"> | ||||
| </head> | ||||
| <body class="claro"> | ||||
|   <h1>SheetJS + Dojo Store Export Demo</h1> | ||||
|   <br/> | ||||
|   This demo exports data from a simple Dojo store, attempting to create a XLSX workbook. | ||||
|   <br/> | ||||
|   (this HTML page is not minified -- feel free to view source!)<br/><br/> | ||||
|   <a href="https://docs.sheetjs.com">SheetJS CE Documentation</a><br/><br/> | ||||
| <script> | ||||
|   dojoConfig = { | ||||
|     parseOnLoad: true, | ||||
|     packages: [ | ||||
|       { name: "xlsx", location: "https://cdn.sheetjs.com/xlsx-latest/package/dist", main: "xlsx.full.min" } | ||||
|     ] | ||||
|   }; | ||||
| </script> | ||||
| <script src="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dojo/dojo.js" data-dojo-config=""></script> | ||||
| <script> | ||||
| require([ | ||||
|   "dojo/store/Memory", | ||||
|   "dijit/registry", | ||||
|   "xlsx" | ||||
| ], function(Memory, registry, _XLSX) { | ||||
|   /* create simple Memory store */ | ||||
|   var data = [ | ||||
|     { Name: "Bill Clinton", Index: 42 }, | ||||
|     { Name: "GeorgeW Bush", Index: 43 }, | ||||
|     { Name: "Barack Obama", Index: 44 }, | ||||
|     { Name: "Donald Trump", Index: 45 }, | ||||
|     { Name: "Joseph Biden", Index: 46 } | ||||
|   ]; | ||||
|   var store = new Memory({data: data}); | ||||
| 
 | ||||
|   /* pull all data rows from the store */ | ||||
|   var rows = store.query(function() { return true; }); | ||||
| 
 | ||||
|   /* generate SheetJS workbook */ | ||||
|   var ws = XLSX.utils.json_to_sheet(rows); | ||||
|   var wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, "Export"); | ||||
| 
 | ||||
|   /* write to file */ | ||||
|   XLSX.writeFile(wb, "SheetJSDojoStoreExport.xlsx"); | ||||
| }); | ||||
| </script> | ||||
| </body> | ||||
| </html> | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user