From 47e6011e1be49ac5f7702cec828b2e25c296993b Mon Sep 17 00:00:00 2001 From: "ester.zhou" Date: Wed, 7 Jun 2023 20:08:45 +0800 Subject: [PATCH] Update docs (18358) Signed-off-by: ester.zhou --- .../inputmethodextentionability.md | 2 +- .../application-test/arkxtest-guidelines.md | 42 ++--- .../application-package-structure-stage.md | 2 +- .../quick-start/arkts-two-way-sync.md | 6 +- .../reference/apis/js-apis-pasteboard.md | 8 +- .../reference/apis/js-apis-plugincomponent.md | 163 +++++++++--------- .../reference/apis/js-apis-system-device.md | 1 - .../reference/apis/js-apis-system-router.md | 8 +- .../reference/apis/js-apis-timer.md | 66 +++---- en/application-dev/reference/syscap-list.md | 2 +- en/application-dev/ui/arkui-overview.md | 58 +++---- .../ui/figures/arkui-framework.png | Bin 0 -> 18913 bytes .../figures/en-us_image_0000001267647869.png | Bin 21764 -> 0 bytes 13 files changed, 164 insertions(+), 194 deletions(-) create mode 100644 en/application-dev/ui/figures/arkui-framework.png delete mode 100644 en/application-dev/ui/figures/en-us_image_0000001267647869.png diff --git a/en/application-dev/application-models/inputmethodextentionability.md b/en/application-dev/application-models/inputmethodextentionability.md index 2e8371d7e7..eea85014d8 100644 --- a/en/application-dev/application-models/inputmethodextentionability.md +++ b/en/application-dev/application-models/inputmethodextentionability.md @@ -1,4 +1,4 @@ -# InputMethodExtensionAbility Development +# InputMethodExtensionAbility ## When to Use [InputMethodExtensionAbility](../reference/apis/js-apis-inputmethod-extension-ability.md), inherited from [ExtensionAbility](extensionability-overview.md), is used for developing input method applications. diff --git a/en/application-dev/application-test/arkxtest-guidelines.md b/en/application-dev/application-test/arkxtest-guidelines.md index 5f4f36e788..cccf0b6049 100644 --- a/en/application-dev/application-test/arkxtest-guidelines.md +++ b/en/application-dev/application-test/arkxtest-guidelines.md @@ -13,7 +13,7 @@ In this document you will learn about the key functions of arkXtest and how to u arkXtest is part of the OpenHarmony toolkit and provides basic capabilities of writing and running OpenHarmony automated test scripts. In terms of test script writing, arkXtest offers a wide range of APIs, including basic process APIs, assertion APIs, and APIs related to UI operations. In terms of test script running, arkXtest offers such features as identifying, scheduling, and executing test scripts, as well as summarizing test script execution results. -### Principles +### Implementation arkXtest is divided into two parts: unit test framework and UI test framework. @@ -27,28 +27,28 @@ arkXtest is divided into two parts: unit test framework and UI test framework. ![](figures/TestFlow.PNG) -- UI Testing Framework +- UI Test Framework - The UI test framework provides [UiTest APIs](../reference/apis/js-apis-uitest.md) for you to call in different test scenarios. The test scripts are executed on top of the unit test framework mentioned above. + The UI test framework provides [UiTest APIs](../reference/apis/js-apis-uitest.md) for you to call in different test scenarios. The UI test scripts are executed on top of the aformentioned unit test framework. The figure below shows the main functions of the UI test framework. ![](figures/Uitest.PNG) -### Limitations and Constraints +### Constraints - The features of the UI test framework are available only in OpenHarmony 3.1 and later versions. - The feature availability of the unit test framework varies by version. For details about the mappings between the features and versions, see [arkXtest](https://gitee.com/openharmony/testfwk_arkxtest/blob/master/README_en.md). -## Environment preparations +## Preparing the Environment ### Environment Requirements -Software for writing test scripts: DevEco Studio 3.0 or later +Software: DevEco Studio 3.0 or later -Hardware for running test scripts: PC connected to a OpenHarmony device, such as the RK3568 development board +Hardware: PC connected to an OpenHarmony device, such as the RK3568 development board ### Setting Up the Environment @@ -57,7 +57,7 @@ Hardware for running test scripts: PC connected to a OpenHarmony device, such as ## Creating a Test Script -1. Open DevEco Studio and create a project, where the **ohos** directory is where the test script is located. +1. Open DevEco Studio and create a project, in which the **ohos** directory is where the test script is located. 2. Open the .ets file of the module to be tested in the project directory. Move the cursor to any position in the code, and then right-click and choose **Show Context Actions** > **Create Ohos Test** or press **Alt+Enter** and choose **Create Ohos Test** to create a test class. ## Writing a Unit Test Script @@ -95,7 +95,7 @@ export default function abilityTest() { The unit test script must contain the following basic elements: -1. Import of the dependency package so that the dependent test APIs can be used. +1. Import of the dependencies so that the dependent test APIs can be used. 2. Test code, mainly about the related logic, such as API invoking. @@ -105,7 +105,7 @@ The unit test script must contain the following basic elements: You write a UI test script based on the unit test framework, adding the invoking of APIs provided by the UI test framework to implement the corresponding test logic. -In this example, the UI test script is written based on the preceding unit test script. First, add the dependency package, as shown below: +In this example, the UI test script is written based on the preceding unit test script. First, import the dependency, as shown below: ```js import {Driver,ON,Component,MatchPattern} from '@ohos.uitest' @@ -180,11 +180,11 @@ The logs added to the test case are displayed after the test case execution, rat **Possible Causes** -More than one asynchronous interface is called in the test case.
In principle, logs in the test case are printed before the test case execution is complete. +More than one asynchronous API is called in the test case.
In principle, logs in the test case are printed before the test case execution is complete. - **Solution** +**Solution** -If more than one asynchronous interface is called, you are advised to encapsulate the interface invoking into the promise mode +If more than one asynchronous API is called, you are advised to encapsulate the API invoking into the promise mode. #### Error "fail to start ability" is reported during test case execution @@ -227,7 +227,7 @@ The UI test case fails to be executed. The HiLog file contains the error message **Possible Causes** -The ArkUI feature is disabled. As a result, the control tree information on the test page is not generated. +The ArkUI feature is disabled. As a result, the component tree information is not generated on the test page. **Solution** @@ -237,33 +237,33 @@ Run the following command, restart the device, and execute the test case again: hdc shell param set persist.ace.testmode.enabled 1 ``` -#### The failure log contains "uitest-api dose not allow calling concurrently" +#### The failure log contains "uitest-api does not allow calling concurrently" **Problem** -The UI test case fails to be executed. The HiLog file contains the error message "uitest-api dose not allow calling concurrently". +The UI test case fails to be executed. The HiLog file contains the error message "uitest-api does not allow calling concurrently". **Possible Causes** -1. In the test case, the **await** operator is not added to the asynchronous interface provided by the UI test framework. +1. In the test case, the **await** operator is not added to the asynchronous API provided by the UI test framework. 2. The UI test case is executed in multiple processes. As a result, multiple UI test processes are started. The framework does not support multi-process invoking. **Solution** -1. Check the case implementation and add the **await** operator to the asynchronous interface invoking. +1. Check the case implementation and add the **await** operator to the asynchronous API. 2. Do not execute UI test cases in multiple processes. -#### The failure log contains "dose not exist on current UI! Check if the UI has changed after you got the widget object" +#### The failure log contains "does not exist on current UI! Check if the UI has changed after you got the widget object" **Problem** -The UI test case fails to be executed. The HiLog file contains the error message "dose not exist on current UI! Check if the UI has changed after you got the widget object". +The UI test case fails to be executed. The HiLog file contains the error message "does not exist on current UI! Check if the UI has changed after you got the widget object." **Possible Causes** -After the target component is found in the code of the test case, the device UI changes. As a result, the found component is lost and the emulation operation cannot be performed. +After the target component is found in the code of the test case, the device UI changes, resulting in loss of the found component and inability to perform emulation. **Solution** diff --git a/en/application-dev/quick-start/application-package-structure-stage.md b/en/application-dev/quick-start/application-package-structure-stage.md index 0736157fd4..2962c70242 100644 --- a/en/application-dev/quick-start/application-package-structure-stage.md +++ b/en/application-dev/quick-start/application-package-structure-stage.md @@ -4,7 +4,7 @@ To develop an application based on the [stage model](application-configuration-file-overview-stage.md), it will be helpful if you have a basic understanding of the structure of the application package created after the application is built and packaged, as well as the related basic concepts. -- In development, an application contains one or more modules. You can [create modules](https://developer.harmonyos.com/en/docs/documentation/doc-guides-V3/ohos-adding-deleting-module-0000001218760594-V3) in the application project in [DevEco Studio](https://developer.harmonyos.com/en/develop/deveco-studio/). As a basic functional unit of an OpenHarmony application/service, a module contains source code, resource files, third-party libraries, and application/service configuration files, and can be built and run independently. Modules can be classified as Ability or Library. A module of the Ability type is built into a Harmony Ability Package (HAP) file, and a module of the Library type is built into a [Harmony Archive (HAR)](har-package.md) file or a [Harmony Shared Package (HSP)](shared-guide.md). +- In development, an application contains one or more modules. You can [create modules](https://developer.harmonyos.com/en/docs/documentation/doc-guides-V3/add_new_module-0000001053223741-V3) in the application project in [DevEco Studio](https://developer.harmonyos.com/en/develop/deveco-studio/). As a basic functional unit of an OpenHarmony application/service, a module contains source code, resource files, third-party libraries, and application/service configuration files, and can be built and run independently. Modules can be classified as Ability or Library. A module of the Ability type is built into a Harmony Ability Package (HAP) file, and a module of the Library type is built into a [Harmony Archive (HAR)](har-package.md) file or a [Harmony Shared Package (HSP)](shared-guide.md). A module can contain one or more [UIAbility](../application-models/uiability-overview.md) components, as shown in the figure below. **Figure 1** Relationship between modules and UIAbility components diff --git a/en/application-dev/quick-start/arkts-two-way-sync.md b/en/application-dev/quick-start/arkts-two-way-sync.md index 91be73c3f3..25acb5741b 100644 --- a/en/application-dev/quick-start/arkts-two-way-sync.md +++ b/en/application-dev/quick-start/arkts-two-way-sync.md @@ -4,21 +4,21 @@ The $$ operator provides a TS variable by-reference to a built-in component so that the variable value and the internal state of that component are kept in sync. -What the internal state is depends on the component. For example, for the [bindPopup](https://gitee.com/openharmony/docs/blob/master/en/application-dev/reference/arkui-ts/ts-universal-attributes-popup.md) attribute method, it is the **show** parameter. +What the internal state is depends on the component. For example, for the [bindPopup](../reference/arkui-ts/ts-universal-attributes-popup.md) attribute method, it is the **show** parameter. ## Rules of Use - $$ supports variables of simple types and variables decorated by **\@State**, **\@Link**, or **\@Prop**. -- Currently, $$ supports only the **show** parameter of the [bindPopup](https://gitee.com/openharmony/docs/blob/master/en/application-dev/reference/arkui-ts/ts-universal-attributes-popup.md) attribute method, the **checked** attribute of the [\](https://gitee.com/openharmony/docs/blob/master/en/application-dev/reference/arkui-ts/ts-basic-components-radio.md) component, and the **refreshing** parameter of the [\](https://gitee.com/openharmony/docs/blob/master/en/application-dev/reference/arkui-ts/ts-container-refresh.md) component. +- Currently, $$ supports only the **show** parameter of the [bindPopup](../reference/arkui-ts/ts-universal-attributes-popup.md) attribute method, the **checked** attribute of the [\](../reference/arkui-ts/ts-basic-components-radio.md) component, and the **refreshing** parameter of the [\](../reference/arkui-ts/ts-container-refresh.md) component. - When the variable bound to $$ changes, the UI is re-rendered synchronously. ## Example -This example uses the **show** parameter of the [bindPopup](https://gitee.com/openharmony/docs/blob/master/en/application-dev/reference/arkui-ts/ts-universal-attributes-popup.md) attribute method. +This example uses the **show** parameter of the [bindPopup](../reference/arkui-ts/ts-universal-attributes-popup.md) attribute method. ```ts diff --git a/en/application-dev/reference/apis/js-apis-pasteboard.md b/en/application-dev/reference/apis/js-apis-pasteboard.md index 6f893aa8ff..062eac8284 100644 --- a/en/application-dev/reference/apis/js-apis-pasteboard.md +++ b/en/application-dev/reference/apis/js-apis-pasteboard.md @@ -483,9 +483,9 @@ record.convertToText().then((data) => { ## PasteData -Provides **PasteData** APIs. +Implements a **PasteData** object. Paste data contains one or more data records ([PasteDataRecord](#pastedatarecord7)) and property description objects ([PasteDataProperty](#pastedataproperty7)). -Before calling any **PasteData** API, you must obtain a **PasteData** object. +Before calling any API in **PasteData**, you must use **[createData()](#pasteboardcreatedata9)** or **[getData()](#getdata9)** to create a **PasteData** object. **System capability**: SystemCapability.MiscServices.Pasteboard @@ -666,8 +666,8 @@ For details about the error codes, see [Pasteboard Error Codes](../errorcodes/er ```js let pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_URI, 'dataability:///com.example.myapplication1/user.txt'); -let dataXml = new ArrayBuffer(256); -pasteData.addRecord('app/xml', dataXml); + let dataXml = new ArrayBuffer(256); + pasteData.addRecord('app/xml', dataXml); ``` ### getMimeTypes7+ diff --git a/en/application-dev/reference/apis/js-apis-plugincomponent.md b/en/application-dev/reference/apis/js-apis-plugincomponent.md index 7becd3c7ee..3658939157 100644 --- a/en/application-dev/reference/apis/js-apis-plugincomponent.md +++ b/en/application-dev/reference/apis/js-apis-plugincomponent.md @@ -155,11 +155,11 @@ Registers the listener for the push event. ```js function onPushListener(source, template, data, extraData) { - console.log("onPushListener template.source=" + template.source) - console.log("onPushListener source=" + JSON.stringify(source)) - console.log("onPushListener template=" + JSON.stringify(template)) - console.log("onPushListener data=" + JSON.stringify(data)) - console.log("onPushListener extraData=" + JSON.stringify(extraData)) + console.log("onPushListener template.source=" + template.source) + console.log("onPushListener source=" + JSON.stringify(source)) + console.log("onPushListener template=" + JSON.stringify(template)) + console.log("onPushListener data=" + JSON.stringify(data)) + console.log("onPushListener extraData=" + JSON.stringify(extraData)) } ``` @@ -181,14 +181,13 @@ Registers the listener for the request event. **Example** ```js -function onRequestListener(source, name, data) -{ - console.error("onRequestListener"); - console.log("onRequestListener source=" + JSON.stringify(source)); - console.log("onRequestListener name=" + name); - console.log("onRequestListener data=" + JSON.stringify(data)); +function onRequestListener(source, name, data) { + console.error("onRequestListener"); + console.log("onRequestListener source=" + JSON.stringify(source)); + console.log("onRequestListener name=" + name); + console.log("onRequestListener data=" + JSON.stringify(data)); - return {template:"ets/pages/plugin.js", data:data}; + return { template: "ets/pages/plugin.js", data: data }; } ``` @@ -210,24 +209,24 @@ Pushes the component and data to the component user. ```js pluginComponentManager.push( -{ + { want: { - bundleName: "com.example.provider", - abilityName: "com.example.provider.MainAbility", + bundleName: "com.example.provider", + abilityName: "com.example.provider.MainAbility", }, name: "plugintemplate", data: { - "key_1": "plugin component test", - "key_2": 34234 + "key_1": "plugin component test", + "key_2": 34234 }, extraData: { - "extra_str": "this is push event" + "extra_str": "this is push event" }, jsonPath: "", - }, - (err, data) => { - console.log("push_callback: push ok!"); - } + }, + (err, data) => { + console.log("push_callback: push ok!"); + } ) ``` @@ -251,30 +250,30 @@ Pushes the component and data to the component user. ```js pluginComponentManager.push( - { - owner:{ - bundleName:"com.example.provider", - abilityName:"com.example.provider.MainAbility" - }, - target: { - bundleName: "com.example.provider", - abilityName: "com.example.provider.MainAbility", - }, - name: "ets/pages/plugin2.js", - data: { - "js": "ets/pages/plugin.js", - "key_1": 1111, , - }, - extraData: { - "extra_str": "this is push event" - }, - jsonPath: "", + { + owner: { + bundleName: "com.example.provider", + abilityName: "com.example.provider.MainAbility" + }, + target: { + bundleName: "com.example.provider", + abilityName: "com.example.provider.MainAbility", + }, + name: "ets/pages/plugin2.js", + data: { + "js": "ets/pages/plugin.js", + "key_1": 1111, , + }, + extraData: { + "extra_str": "this is push event" }, - (err, data) => { - console.log("push_callback:err: " ,JSON.stringify(err)); - console.log("push_callback:data: " , JSON.stringify(data)); - console.log("push_callback: push ok!"); - } + jsonPath: "", + }, + (err, data) => { + console.log("push_callback:err: ", JSON.stringify(err)); + console.log("push_callback:data: ", JSON.stringify(data)); + console.log("push_callback: push ok!"); + } ) ``` @@ -299,24 +298,24 @@ Requests the component from the component provider. ```js pluginComponentManager.request( - { - want: { - bundleName: "com.example.provider", - abilityName: "com.example.provider.MainAbility", - }, - name: "plugintemplate", - data: { - "key_1": "plugin component test", - "key_2": 1111111 - }, - jsonPath: "", + { + want: { + bundleName: "com.example.provider", + abilityName: "com.example.provider.MainAbility", }, - (err, data) => { - console.log("request_callback: componentTemplate.ability=" + data.componentTemplate.ability) - console.log("request_callback: componentTemplate.source=" + data.componentTemplate.source) - console.log("request_callback: data=" + JSON.stringify(data.data)) - console.log("request_callback: extraData=" + JSON.stringify(data.extraData)) - } + name: "plugintemplate", + data: { + "key_1": "plugin component test", + "key_2": 1111111 + }, + jsonPath: "", + }, + (err, data) => { + console.log("request_callback: componentTemplate.ability=" + data.componentTemplate.ability) + console.log("request_callback: componentTemplate.source=" + data.componentTemplate.source) + console.log("request_callback: data=" + JSON.stringify(data.data)) + console.log("request_callback: extraData=" + JSON.stringify(data.extraData)) + } ) ``` @@ -342,25 +341,25 @@ Requests the component from the component provider. ```js pluginComponentManager.request( - { - owner:{ - bundleName:"com.example.provider", - abilityName:"com.example.provider.MainAbility" - }, - target: { - bundleName: "com.example.provider", - abilityName: "ets/pages/plugin2.js", - }, - name: "plugintemplate", - data: { - "key_1": " myapplication plugin component test", - }, - jsonPath: "", + { + owner: { + bundleName: "com.example.provider", + abilityName: "com.example.provider.MainAbility" + }, + target: { + bundleName: "com.example.provider", + abilityName: "ets/pages/plugin2.js", }, - (err, data) => { - console.log("request_callback: componentTemplate.ability=" + data.componentTemplate.ability) - console.log("request_callback: componentTemplate.source=" + data.componentTemplate.source) - } + name: "plugintemplate", + data: { + "key_1": " myapplication plugin component test", + }, + jsonPath: "", + }, + (err, data) => { + console.log("request_callback: componentTemplate.ability=" + data.componentTemplate.ability) + console.log("request_callback: componentTemplate.source=" + data.componentTemplate.source) + } ) ``` @@ -381,8 +380,8 @@ Listens for events of the request type and returns the requested data, or listen **Example** ```js - pluginComponentManager.on("push", onPushListener) - pluginComponentManager.on("request", onRequestListener) +pluginComponentManager.on("push", onPushListener) +pluginComponentManager.on("request", onRequestListener) ``` ## About the external.json File diff --git a/en/application-dev/reference/apis/js-apis-system-device.md b/en/application-dev/reference/apis/js-apis-system-device.md index d1809eb7b9..ee8dd583a2 100644 --- a/en/application-dev/reference/apis/js-apis-system-device.md +++ b/en/application-dev/reference/apis/js-apis-system-device.md @@ -63,7 +63,6 @@ Provides the device information. | screenDensity4+ | number | Screen density.| | screenShape4+ | string | Screen shape. The options are as follows:
- **rect**: rectangular screen
- **circle**: round screen| | apiVersion4+ | number | API version.| -| releaseType4+ | string | Release type. The value includes both the release type and the API version, for example, Beta1.
Available release types are as follows:
- **Canary**: Releases of this type are compatible with each other under the same API version, but not with those of the **beta** and **release** type.
- **Beta**: Releases of this type are compatible with each other under the same API version, but not with those of the **release** type.
- **Release**: Releases of this type are compatible with the latest five API versions. | | deviceType4+ | string | Device type.| diff --git a/en/application-dev/reference/apis/js-apis-system-router.md b/en/application-dev/reference/apis/js-apis-system-router.md index cb6ae5245d..1a09b8feed 100644 --- a/en/application-dev/reference/apis/js-apis-system-router.md +++ b/en/application-dev/reference/apis/js-apis-system-router.md @@ -343,8 +343,8 @@ Defines the page routing parameters. | Name | Type| Mandatory| Description | | ------ | -------- | ---- | ------------------------------------------------------------ | -| uri | string | Yes | URI of the target page, in either of the following formats:
1. Absolute path, which is provided by the **pages** list in the **config.json** file. Example:
- pages/index/index
- pages/detail/detail
2. Specific path. If the URI is a slash (/), the home page is displayed.| -| params | object | No | Data that needs to be passed to the target page during redirection. The target page can use **router.getParams()** to obtain the passed parameters, for example, **this.keyValue** (**keyValue** is the value of a key in **params**). In the web-like paradigm, these parameters can be directly used on the target page. If the field specified by **key** already exists on the target page, the passed value of the key will be displayed.| +| uri7+ | string | Yes | URI of the target page, in either of the following formats:
1. Absolute path, which is provided by the **pages** list in the **config.json** file. Example:
- pages/index/index
- pages/detail/detail
2. Specific path. If the URI is a slash (/), the home page is displayed.| +| params7+ | object | No | Data that needs to be passed to the target page during redirection. The target page can use **router.getParams()** to obtain the passed parameters, for example, **this.keyValue** (**keyValue** is the value of a key in **params**). In the web-like paradigm, these parameters can be directly used on the target page. If the field specified by **key** already exists on the target page, the passed value of the key will be displayed.| ## BackRouterOptions @@ -355,8 +355,8 @@ Defines the parameters for routing back. | Name | Type| Mandatory| Description | | ------ | -------- | ---- | ------------------------------------------------------------ | -| uri | string | No | URI of the page to return to. If the specified page does not exist in the page stack, the application does not respond. If this parameter is not set, the application returns to the previous page.
**System capability**: SystemCapability.ArkUI.ArkUI.Full| -| params | object | No | Data that needs to be passed to the target page during redirection.
**System capability**: SystemCapability.ArkUI.ArkUI.Lite| +| uri7+ | string | No | URI of the page to return to. If the specified page does not exist in the page stack, the application does not respond. If this parameter is not set, the application returns to the previous page.
**System capability**: SystemCapability.ArkUI.ArkUI.Full| +| params7+ | object | No | Data that needs to be passed to the target page during redirection.
**System capability**: SystemCapability.ArkUI.ArkUI.Lite| ## RouterState diff --git a/en/application-dev/reference/apis/js-apis-timer.md b/en/application-dev/reference/apis/js-apis-timer.md index f1fabcf335..eb501dd5dc 100644 --- a/en/application-dev/reference/apis/js-apis-timer.md +++ b/en/application-dev/reference/apis/js-apis-timer.md @@ -18,9 +18,9 @@ Sets a timer for the system to call a function after the timer goes off. | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | -| handler | Function \| string | Yes| Function to be called after the timer goes off.| +| handler | Function \| string | Yes| Function to be called after the timer goes off. If the type is string, error information is printed and no other processing is performed.| | delay | number | No| Number of milliseconds delayed before the execution. If this parameter is left empty, the default value **0** is used, which means that the execution starts immediately or as soon as possible.| -| ...arguments | Array<any> | No| Additional parameters to pass to the handler after the timer goes off.| +| ...arguments | any[] | No| Additional parameters to pass to the handler after the timer goes off.| **Return value** @@ -31,19 +31,15 @@ Sets a timer for the system to call a function after the timer goes off. **Example** ```js - export default { - setTimeOut() { - var timeoutID = setTimeout(function() { - console.log('delay 1s'); - }, 1000); - } - } + setTimeout(function() { + console.log('delay 1s'); + }, 1000); ``` ## clearTimeout -clearTimeout(timeoutID: number): void +clearTimeout(timeoutID?: number): void Cancels the timer created via **setTimeout()**. @@ -53,19 +49,15 @@ Cancels the timer created via **setTimeout()**. | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | -| timeoutID | number | Yes| ID of the timer to cancel, which is returned by **setTimeout()**| +| timeoutID | number | No| ID of the timer to cancel, which is returned by **setTimeout()** If this parameter is omitted, no timer is canceled.| **Example** - ```js - export default { - clearTimeOut() { - var timeoutID = setTimeout(function() { - console.log('do after 1s delay.'); - }, 1000); - clearTimeout(timeoutID); - } - } + ```js + let timeoutID = setTimeout(function() { + console.log('do after 1s delay.'); + }, 1000); + clearTimeout(timeoutID); ``` @@ -81,32 +73,28 @@ Sets a repeating timer for the system to repeatedly call a function at a fixed i | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | -| handler | Function \| string | Yes| Function to be called repeatedly.| +| handler | Function \| string | Yes| Function to be called repeatedly. If the type is string, error information is printed and no other processing is performed.| | delay | number | Yes| Number of milliseconds delayed before the execution.| -| ...arguments | Array<any> | No| Additional parameters to pass to the handler after the timer goes off.| +| ...arguments | any[] | No| Additional parameters to pass to the handler after the timer goes off.| **Return value** | Type| Description| | -------- | -------- | -| number | ID of the repeating timer.| +| number | Timer ID.| **Example** ```js - export default { - setInterval() { - var intervalID = setInterval(function() { - console.log('do very 1s.'); - }, 1000); - } - } + setInterval(function() { + console.log('do every 1s.'); + }, 1000); ``` ## clearInterval -clearInterval(intervalID: number): void +clearInterval(intervalID?: number): void Cancels the repeating timer set via **setInterval()**. @@ -116,17 +104,13 @@ Cancels the repeating timer set via **setInterval()**. | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | -| intervalID | number | Yes| ID of the repeating timer to cancel, which is returned by **setInterval()**.| +| intervalID | number | No| ID of the repeating timer to cancel, which is returned by **setInterval()**. If this parameter is omitted, no timer is canceled.| **Example** - ```js - export default { - clearInterval() { - var intervalID = setInterval(function() { - console.log('do very 1s.'); - }, 1000); - clearInterval(intervalID); - } - } + ```js + let intervalID = setInterval(function() { + console.log('do every 1s.'); + }, 1000); + clearInterval(intervalID); ``` diff --git a/en/application-dev/reference/syscap-list.md b/en/application-dev/reference/syscap-list.md index 11c2a9d952..8b14b845fe 100644 --- a/en/application-dev/reference/syscap-list.md +++ b/en/application-dev/reference/syscap-list.md @@ -1349,7 +1349,7 @@ Webview component | Default | Sports Watch| Smart Watch| Tablet| Head Unit| Smart TV| Smart Vision | Router | | ------- | ------ | ------ | ---- | ---- | ------ | ------------ | ------ | -| Yes | No | Yes | Yes | Yes | Yes | No | No | +| Yes | No | No | Yes | Yes | No | No | No | ## SystemCapability.Cloud.AAID diff --git a/en/application-dev/ui/arkui-overview.md b/en/application-dev/ui/arkui-overview.md index 42214f4a14..d89564480f 100644 --- a/en/application-dev/ui/arkui-overview.md +++ b/en/application-dev/ui/arkui-overview.md @@ -1,58 +1,46 @@ # ArkUI Overview -ArkUI is a UI development framework for building OpenHarmony applications. It provides effortlessly natural UI syntax and UI development infrastructure including UI components, animation mechanisms, and event interaction, to meet the visualized GUI development requirements of application developers. -## Basic Concepts +ArkUI provides a comprehensive infrastructure for UI development of OpenHarmony applications, including simple UI syntax, a diverse array of UI features (components, layouts, animations, and interaction events), and a powerful previewer. -- **Component**: the smallest unit for UI building and display. You build a UI that meets your needs through flexible combinations of components. -- **Page**: the smallest unit for ArkUI application scheduling. You can design multiple pages for your application, manage their files on a per-page basis, and schedule page redirection through [page routing](../reference/apis/js-apis-router.md) APIs, so as to implement decoupling of application functions. +## Basic Concepts -## Key Features +- **UI**: user interface. You can design multiple pages for your application, manage their files on a per-page basis, and schedule page redirection through [routing](arkts-routing.md) APIs, so as to implement decoupling of application functions. -- **UI components**: ArkUI comes with a diverse array of built-in polymorphic components, including basic components (such as text, image, and button), container components with one or more child components, drawing components allowing for customization, and media components that provide video playback capabilities. By being polymorphic, a component provides variant forms to adapt to different types of devices and platforms. +- **Component**: the smallest unit for UI building and display, for example, a list, grid, button, radio button, progress indicator, and text. You build a UI that meets your needs through flexible combinations of components. -- **Flexible layouts**: Creating a responsive UI in ArkUI is easy, with the carefully-designed layout approaches: Besides the basic linear and flexible layouts, you also have access to the advanced list, grid, and column grid layouts as well as the atomic layouts that auto-adapt to screen resolutions. -- **Animation**: Apart from animations embedded in components, ArkUI offers additional animation features: attribute animation, transition animation, and custom animation. +## Two Development Paradigms -- **Drawing**: ArkUI offers advanced drawing capabilities that allow you to draw custom shapes with a range of editors, from images to fill colors and texts. +ArkUI comes with two development paradigms: [ArkTS-based declarative development paradigm](arkts-ui-development-overview.md) (declarative development paradigm for short) and [JS-compatible web-like development paradigm](../ui/ui-js-overview.md) (web-like development paradigm for short). You can choose whichever development paradigm that aligns with your practice. -- **Interaction**: ArkUI allows users to interact with your application UI properly, regardless of the system platform and input device. By default, the UI accepts input from touch gestures, remote controls, keyboards, and mouse devices, with support for event callbacks where you can define interaction logic of your own. +- **Declarative development paradigm**: uses [ArkTS](../quick-start/arkts-get-started.md) – a superset of TypeScript with declarative UI syntax, providing UI drawing capabilities from three dimensions: component, animation, and state management. -- **Platform API channel**: ArkUI provides an API extension mechanism through which platform capabilities are encapsulated to produce JavaScript (JS) APIs in a unified style. +- **Web-like development paradigm**: uses the classical three-stage programming model, in which OpenHarmony Markup Language (HML) is used for building layouts, CSS for defining styles, and JS for adding processing logic. This development paradigm has a low learning curve for frontend web developers, allowing them to quickly transform existing web applications into ArkUI applications. -- **Two development paradigms**: ArkUI comes with two development paradigms: [ArkTS-based declarative development paradigm](./ui-ts-overview.md) (declarative development paradigm for short) and [JS-compatible web-like development paradigm](./ui-js-overview.md) (web-like development paradigm for short). You can choose whichever development paradigm that aligns with your practice. +The declarative development paradigm is a better choice for building new application UIs for the following reasons: - | Development Paradigm | Description | Applicable To | Target Audience | - | -------- | ---------------------------------------- | ---------------- | ------------------- | - | Declarative development paradigm | Uses [ArkTS](../quick-start/arkts-get-started.md) – a superset of TypeScript with declarative UI syntax, providing UI drawing capabilities from three dimensions: component, animation, and status management. The programming mode used is closer to natural semantics. You can intuitively describe the UI without caring about how the framework implements UI drawing and rendering, leading to simplified and efficient development.| Applications involving technological sophistication and teamwork| Mobile application and system application developers| - | Web-like development paradigm| Uses the classical three-stage programming model, in which OpenHarmony Markup Language (HML) is used for building layouts, CSS for defining styles, and JS for adding processing logic. UI components are associated with data through one-way data-binding. This means that when data changes, the UI automatically refreshes with the new data. This development paradigm has a low learning curve for frontend web developers, allowing them to quickly transform existing web applications into ArkUI applications.| Small- and medium-sized applications and service widgets with simple UIs | Frontend web developers | +- **Higher development efficiency**: In the declarative development paradigm, the programming mode used is closer to natural semantics. You can intuitively describe the UI without caring about how the framework implements UI drawing and rendering, leading to simplified and efficient development. -## Framework Structure +- **Higher application performance**: As shown below, the two development paradigms share the UI backend engine and language runtime. However, the declarative development paradigm does not require the JS framework for managing the page DOM. As such, it has more streamlined rendering and update links and less memory usage. -![en-us_image_0000001267647869](figures/en-us_image_0000001267647869.png) +- **Future proof**: The declarative development paradigm will continue to develop as the preferred development paradigm in OpenHarmony, providing increasingly more diverse and powerful capabilities. -As shown above, the two development paradigms share the UI backend engine and language runtime. The UI backend engine implements the six basic capabilities of ArkUI. The declarative development paradigm does not require the JS Framework for managing the page DOM. As such, it has more streamlined rendering and update links and less memory usage. This makes the declarative development paradigm a better choice for building application UIs. + **Figure 1** ArkUI framework -## Relationship Between UI and Ability Framework + ![arkui-framework](figures/arkui-framework.png) -OpenHarmony provides two application models: FA model and stage model. The table below describes the relationship between these two models and the two development paradigms of ArkUI. - **FA Model** +## Development Paradigm Support by Application Type -| Type | UI Development Paradigm | Description | -| ---- | -------- | ---------------------------------------- | -| Application | Web-like development paradigm| UI development: HML, CSS, and JS
Service entries: files with fixed file names, which are **app.ets** (Page ability), **service.ts** (Service ability), and **data.ts** (Data ability)
Service logic: JS and TS| -| | Declarative development paradigm | UI development: ArkTS
Service entries: files with fixed file names, which are **app.ets** (Page ability), **service.ts** (Service ability), and **data.ts** (Data ability)
Service logic: JS and TS| -| Service widget| Web-like development paradigm| UI development: HML, CSS, and JSON (action)
Service entry: **form.ts**
Service logic: JS and TS| -| | Declarative development paradigm | Not supported currently | +The support for development paradigms varies according to the OpenHarmony [application model](../application-models/application-model-composition.md) and page form. For details, see the following table. - **Stage Model** + **Table 1** Supported development paradigms -| Type | UI Development Paradigm | Description | -| ---- | -------- | ---------------------------------------- | -| Application | Web-like development paradigm| Not supported currently | -| | Declarative development paradigm | UI development: ArkTS
Service entries: derived from **ohos.application.Ability**/**ExtensionAbility**
Service logic: TS| -| Service widget| Web-like development paradigm| UI development: HML, CSS, and JSON (action)
Service entries: derived from **FormExtensionAbility**
Service logic: TS| -| | Declarative development paradigm | Not supported currently | +| Application Model | Page Form | Supported Development Paradigm | +| ----------- | -------- | ------------------------ | +| Stage model (recommended)| Application or service page| Declarative development paradigm (recommended) | +| | Widget | Declarative development paradigm (recommended)
Web-like development paradigm| +| FA model | Application or service page| Declarative development paradigm
Web-like development paradigm | +| | Widget | Web-like development paradigm | diff --git a/en/application-dev/ui/figures/arkui-framework.png b/en/application-dev/ui/figures/arkui-framework.png new file mode 100644 index 0000000000000000000000000000000000000000..f49cdd8727a88945e1b5082d0ae81001bee3a2ce GIT binary patch literal 18913 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
    1x`Eulw|{Zh0?`<4#4WT6z+nqFDjx=9QU4 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 literal 0 HcmV?d00001 diff --git a/en/application-dev/ui/figures/en-us_image_0000001267647869.png b/en/application-dev/ui/figures/en-us_image_0000001267647869.png deleted file mode 100644 index 91179e770c418c02c3751111b14bbea637b48b1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21764 zcmdSBcU)8Xzvmwv90wGckpV>nMiG&YAia$;3P_1kC6s^?kP>>p(Bh!Ns7R6CZ4g=r z5<(}aC}0AK5+H;aiZmgFP67nN9-Qy)-Mf45{_g$l-F@8sgHK2T=X`R`=kqSF_w${H z*KEv$g-!^8Kpk2CK0)gyvE&jM@f5)B8gjd0wV&%Wty}W+Ln=mQs zQ4=EZi-6J5>*n*i2_ZGs-QA`?HVNnK)0q>pd3G?@pZZqp+SfnM!hYHqzNvraY~bg! z9r=u#?{0|3!@ut9dM$W8we;fqcd!8U>05-J-!97z^aqXZs9}c@RHc)n2rn5FU(^vNyYF~>4k00esWZy#B2UQcw=!rHb6ySkh}>Z9Di zDEfvU&uI5?!xJn>H-BfcS0@Rp?E{0sVm>%lRaYltZR+iVW9B;xD}M&nG`MXncSRcN z8Y2gSQWinFl7*eA)`0< z=`D)!D`m1aH*R?~4Ew=RYWKysRko$uOT8@Je9AG8tA%#Vun=Kk~|5E9nicEg(>Var}gKG`j>V z`EI=K@)^$+5&kz>+^UGXdi4CFv;?{uIVlO1DTS^nWhdEjQYuHb2cNsf?M9l^RPGnT z(W8Uz?5bDG7=b`T?E+nJM@+)NqvL{Ug6W&{2&dLK&Uzw2JFfQZa}BB`!XM*#o%`8W zr{l?w*ts8v{Mn>>O)x?%DI68h&@wRi&TqNk$Bghwcms98l%rG(9w21GNVS>lI+9gG zI#;4}>J$IQHD=sQ;mcWLe3ux)efYTpPsa_+P|;cp>t(L{6rXelqq=Wg!O!7IHl(wr z(afnkVPD|%{uOHNZ4)Kxdc)|;GDIE8nqt~(#~Uz!QrY;f{h&8tz|6B8JL;tQ-)7NW z3OG7+gjWo%JLkTgM9Pl z6}Ay`!mu`I_ND|W3#P=PMAWuHroVC9QCG*R;55Sl431fx!K8wB#@-vwb{6a)xz8hu za1LuGC2Ms8d47gZPz__9)fcFupRk%Pdd= z9bhea!t&ik#jz%}*YE!5L>3cy7ls1<*zaZm9A9vs+;f9dC6_K9pxQ6WSCuBbxd4o z1MbiaAv0zU`}94ZIAw^bz^hTSW-i;R4hZA3-1?t3md!`cne7LGB9g}%P5a;%+$5hPw<)I9fmojJ*=mBY?ZmE4OIfKy9sB`ym|-yv#dGT@euSQukMV) z9Y$F*`1L}G%bL7(#fM5}9DZc_lsx?RQFG_4%Ov}n-VO(19pm<7LEU)d%i2YST_p21 zuANkWV)4HIF}TEg4Q9I1P}{dJVTmEWyUM*UYKz_dF@7J46MAQhTlRrGSOQ&APaWS2 zJVdHIN=r?rpf9Sac+C=N^=nf_HC5=?RI|Eq`Bk4-Dzg5?po55o#UVS6j@uQ+wQO!K zA>fd`63-2DU2Ll_G#BLH<{`_d6vqllq=|QCSSQCunM_Q6;z=YBCQ(L1n=uDV)UVKI=3h^FP6BT z8e7H+8Hw5l8q$9ol2|uh8tbMwY1Lu#&S_!i>QqCUyfTwlu_7&~frPGl@wcc4848)3 z+TD{DFUqSLMC?BDID#)9PwM*Rp73i&GhL~f7d-2xNt~l|rEitHT*jkMxMr)6967RG z1?sk>$+$jW+F*dDXUX(Oqjcv*$0>*fvJU0|yRfJ~_pw;He0>eFkd+y0?oqu%)caU> z8S_dGR=AqVD$BC|t!kyhv2$G$P^nzOprPw zf5)q;ie~BU^xe!|%DvXYGCxx7s0El7uXx#jYt3bIrOgIs45!^cMhwjtKLD1%`M1A-KzCLD6OIvStleyGFF${G ztG&=*5?2^ZIkq4%xZ6EytYJe((%q3O-_kpH4E`NNL2X!t@{BNgbpstbPfyJFKtD^P zMbQHPhhRtfwC?^ls%yJ^)GkG#1I=Hv!=cv0cA2_eBU-|L&Bz#{bP1CD9ilGGr;XJx zinvPWqj%X<9BG%QWMg@U8N?ss@`GdWghfL>)J9K74~mVUx9h)r8>dL~I%{kD`C;qbescJ!z)O=LnXX5n$iaa~OTGtiK1 zUvt`EcAa5;MWwHB(6&t6t?fxYK~q*QHLqIJRI;p3BYTii?+-^X@@dTaN!)#0_gWRY zdEYdG?Sl{ufJI5>p&4{Pe^2}!n;)(cE0{JdK??VfFlV0Q+;N7d5v!2aN>NuytmkJM%a1J&#(n}tcOz#Cb&@J?<`QSyH;YI0 z!tqtrvE^kAZV)>KYn`51L+Wp~eueOcw{@K`Dfk0z)?Yw;VE2}yFVnjFR+I#5++NQX z$sBK-K()o*aGJ#Va{C{nroMXeDck7wQ^)$l-x#?r`nbx=JRKV zox5yFgX>?itT`rK_B4y07UQtkNnQV@!&HrYCk}EneZ8J`D+?oI4$*^d9-&3qY127t z+mjm}4Zob+=OKbzZc;k|#aK*T5bF)cEAMteW07SSoaFSmIo2~xt0sKm8*H|Ons~vk(j+pX+H_YV021ZZL{}ejzf(apbA*quH|pCDZ&#Ff?MRJ zxOlH*^guN_e%BPW`bihY0^*;!+Pu_Ecpc1+x7&e6T}ZNwj=fTyvNisq-;iR=n^(7? z`xHg&{PXY!rM%hDz8RDl5)JR?_wWMW<(>hyr?i&vIk`;Q{ipXa_I{$;s>oh!QgOA# z2W^Zbe5!Ff8@1IAw)YaX?OVxkOv`cXfiA@#OTrG;=OY~Dj4|=f^$`Dxn}i~yr?S{; zg_l!f`6jUvwLH*qXBZQV8?G5{{`U1yVn`-xzx%rg3nyAc)BP{Q+(DR=YlJP!yL{b- z;#^46&XD`v8ip!m6-E|Oke~G?D(zsKRX%fl(6(^hBF7*j$xN0q&C0+lx~W<*L$1g1 znRO#}^J_V}=tO5po3Sjbe9Y19N+m+g1;y zja~@{4s2yV3UVm&H^1>EfaKyL0cKf3Z2JxbNjOMQQiV`i{w}Yw1`=NT>0ulxLI?4M zC&V8xo|rdf3Nfkdx{I<$zi2`qBx_F&>Y3}=(9$=D*_n_`^`8?JRRnYpD%MB zk1v{=)02WI0Ac3#xwNddS;NQuBBvxmV|*><@n`o_zOT;m!P5EzXT(N*FB_OLdV^(c zCBVUz>sBrtaf=7WnactnAQ8B?rNXxcv_hJzhdaY_Ms%90gdX_{D*KM-H#|A)psIH) zS54&!HPuD&OOIr!qPk7Xf$Vi+c*`ZXXkn{FP5Pw>X8R6iJgO|#nG=I{t&sFnX(^Kn zxlZRQGhQ5t&fK#ie<%`sKU7AeEBsv%%z%>1au`(kn0)^$29T-{4aLH*K1h!G3G7_T zn|YB{J6oUqIpOumFs8i3zylm)<0}3S>l9z-0j>Il63d1jfsejFSBldkc)p%iT(WOB zW~Dfi0&QNgk%XDBvb$`x!F zExrsJbwS07pgqGzxJNk}fTQHxy`K>N!Rn`S@htly(bLpNeF-H|5I-h5Cvo7FTuq_; zzTa4R^=BO)w6^)EG29o+pI-m-^-h>L-MhX`Lhu$~jEa$k9_gwt;bkPA6}0|AU8ZW% zzzGLfYN(Bb!?B^VT62F_1|(CwQy|Z``$^Q#*NLrO(YaZa>5p+%6#DK4E68wm+pL~m z9T~NtqeSvy;t6G8O}W)w328sFHF6Lz*oe$8K3Nq1kpKg# zt>>bVisr=%MJ7I==o^G<=6J~JKyl1SLQ(nLLhjW~`{r@)C=RARlS>Mxz`582`xRU< z{M_S=>+f#&I?Z^V=s7B_0kyj4Pn2T?Hn=eSJAC{{kk*@EigSH#jqR!xWygE!PHoYB z1|*UrNBex`9&#r*4WUfcXe?5^H;g?@$7XzJb?ke3ix|T`FZZ(}(m`pWb&(Y1sYf%7 zHu7#`sr(S#`{%8$C)k;&O-u?!x@8$QVF1#l|I0zuxq%an^k`?gv+rxGjUEw!fk(YJ zXGVEwTyg7W!ZLHZs;a8T(Fx2C(+aS{9>(he`TE%sF)d6IoHkh2UaWW_wEpLlK=hQ} z$GkI)*D_uB%$#d0t;zohPzj^|S(ueGqIM{{5Lnxw-)XiYUHk4z1A~W>;Ypv!Z<*uG zz;Ys=dHc)Qyu9whk)jGfaC}n=+#L`o{6A`x(vA4CvGuE3`}*>-7)TiiFx|BY!*P_| zuW+0^c8k3%1@d{hy0}B7gGXXIHUh&O9UZ+ZD=Q}qv|lf7uC-JKFlE(j64uuRzvoqxZS*}mC1|A~RkWp0dc4;QZ& zpqAp(v*3x3V3RVk$K7Ha>5NOQmmy>j{ zX~gqZ{!Y7Q-HE`&a9?W{todW<0~}k`h3ePcD#y$89T*7H2QwTZ+>d<;z`0e&hfeO) zUB+`tGGW8M>x6_^{iv?tir9QrAhouOm-Xp?&>pj_9ydU73$`sA7W8e~{vUKE)$D?#L3~ z)AeXya@;O&qD3n=3wD}Uz*AI<-oX~$fYx19XV^5h0^(uh&8DPP<3CkSE$_)QL)>A? zch!;AyEHUvq+vyhai)C0BH2s&q*6cw(^TxXkvZEh?O!SUWMSU{kcR|td0gLF;)~>d z&Ai`Ue;_FBvPf5M!iyf-)f!@qSe0V%S$hW()FL=P@5frl1MS*3I@PwnstHfre?Q!w z$4v{0iM_qklj_*n9h0`+&+;o#!51k*OS>S77fK5rTmdwHIo;aI{@5oHeJ`?8ap@@A zmu>B@_uobwVm?9_Z@pEoM$l4Ko0eaqi={jDI)xtkVyu4eO%;D{e!R!~VNf!fK= z{IvCHU21c_xD^O=BVnvN`D1J(HF~l1XsI|}aj-3tVz~O!vy~YNhC#$xac@!EBOjS| z4WfE;Y%GRdhCV2dRARt*Qe;t=cbt>6UEybT^)DkzO1@y5FpA-JC<&? zZ|?!n-Jeg=&(9L|+MLvn5Z0Q|G4;SQO1- z#l07LSlr0IWoqfcku!DQT~2dJp!gM?aH0*`GRi#Yc9_g2TIfh@8VIDG0!+R>%T%T%Eux3l=?und8H%&kER8Ztbn38-2Bz!B0JM z?xrW!*6ow`Jm;n(dQ$@|+;mKxw5J7j>NP-{AD{hefDijCK&KS*Kr%CyvK6L`=eHJ1 zQ~lLqnd*TuZ|txv+|z{?g^mnZP$8+T`psiLSr!D!_@0#)f1PSDHjbX}%zm;68nZtZ zx4lf~1`apvDi!U1V0eSw*BO8#Az%5Q-GftCWWbfby~BSl6S!xR5o1Fk6D+&dzbiB~ zL;s5kO?`8-KH-*T6l_R%&+|n8Io611)97~)`wtNYssn>tH>dM`4jwsqLw9oZ=7`p` z+pT|j;2}m5rK4^aJZ66TUSHaqOdpX*3_u_dF4VtQK)w(~T+H5>eId{4LKW zWCy%~sZGYmN+T!JJed;33JU2bxu@|dZJzSPvn)0nDBCy+CcnwrUPGH0`QBN2d(cN_ zd+Z<=k=n#tXaOr^p9pLmPY9`Ir>~EMbV&j0_byvrcRyq9>tnSdw@4-ecToC{M*$Gk zxC1X6e2qV(dK`*rnkkC5nXT8uGG@bzio$t4hHxFmY(%MBIQ3|rDw?{vLRg;DvTUK+R{GW zf9{WMi{LO9}}6e;>um$iPOr|$XkTqRZ- zO-=yjXuu}$79{tN)@fmwHq6M4Z!c4hOt=KKA%5~_@BAfZlbr_AR>?kbG}Wbes~_Fz zg!62-`%%PXdufS~+`^3D7_3&w!|eKEb-U7+Bo!WKSiHOW(NK`6U<$gc@b;IXr+%;f z63ajmqnqSN8=*f1ulas{EW=+)?9k=@QK|)3WcmN#dWqS3_Xg%c5R&AQ5Mpry-f_d% zblx8FRkdxcZ)D#YdOvg4a9v4| ziKX)^tI{cZ&-TCnwMJy}qE-`a(aM6>%NhAlUlRQCs6I75cPWSW1G;ag7Cv6-DeGoE zv6n1E3!M!RBerp?M1>AVpnwn@arC68jClj;GA3}qFY=>Y_TdTkH6|FkGv`!1H2qy+ zA~g`!G0Ova;q3)ndBZt{7bVRe(<5(A+A$C2z%Mh=Ls$KWThWhHpDsLK<;Y`em9a{xA!Ou&o4>Yef2u;+@=)Q|f^w(KqA!BJdh=Nv{n226Gp%0|&H4x)pNe zF{v1C+hVL~j_(idmpn_SaOGRkX>`ZIY<7Q#+wj5h{^E(-G6}e%9s_3fZ1K9T)Lbi` zK{oC^lrEXJUi#tng60!_c?IfhTM7siFFP+f8=s?E$u@#Z9Ie+LeuC3-gT6C=XVyag zLdmJ2lGA+!)z)881ls3sEx1)}9^J1w`husXbl4Ge^|z}|gPiix*}2^H!1t}OAM0Q; z$<*kIxi#>;DtTU778zo^Pi?BjVRj*ZqI|vdaF|NK8IK=8ysq!*5cqX%t%gD9WcS9A zA)7=InIa5Oj9=6ybHjEk#Je#9aiAgVddPog^B^bpMU;nITKjt_ab-#mtd!;lo+iq+2LpcGpdL{5)5$zT-u-@jg(*qwm>H_J7{7 zAk%nvlR`OiQnzLyb+f+161vq#mmFCFGQTZt{oT_tJKxL_Cv>CMzUjhvdwJL!=UGfp zENgz~^)2}XO6)>d$669&HaAF(S2(&^IIep{+ECYq9tViOAduVMShH9{`WD4>s51uv~MZL_?!XkSu_AOv{x3E6g zXeP_1XVt%*#(A_OsVu)nVSHLAncM3wp>ir<)Fh41bmF2ktI4_?_Wk>q?*IqN2d>mocd1vbx*V zW5~~s-7gq$fdUxKguk4UxZH2)zVdW=fD=7q0BF<>m}oIZAO@ZO_nfe?Z2!dNwTCZL z3|G3pMMwTV-PA?R*@`^* zKdLi#DNTyLFr9W1x*$H5Li2!4dt&R?I%z^_lAGGKRv45lNzavfW+=*Qnr z?Z25WA$S*|<{9tIpS;Xaxd1+Ao!aB01%2nmdzN2brGt4)T_+#Pd+a53ozcO%dmwd^ z<8!1(dWVtNr65o8*#lT6TIllt;1X|8H$G5 zTStie+O|;DXQRqwfBFE7t60xlEVt5n~vaOhn@(Sja8)z-QX3+C9p9y!*WE-*QKk1^IW!etP44TIC1$26I!>V`0(u&W^Wx zHe08-#ur)xr@ojKCVqRcaj<=hh6|%ae^d`5Lq}$|%BI2!`|)B;HpBk%Dh|$PdD&T& zRk9kff#AO;R;B!^Gn2xMz&~6{#xN5Fu15^As_*Q~&!Xeh2`;MuSrzrwaB_P(@z457 zfA^V|BGeDlJI~VmWm)G0OEXAojlQiWjPab($fYxuCsm=1_qa`S`J}{3YN%HvCpAzCvkGa)=x1^*lbE zwRU-?$bjHtheFj0C#>?%vcYlN6U$;~%joL4FJ=gNO!Y^xg}%&Y$nh}v*)yebt1^6k zzI^q>_VL%|kaqOkFfj^U493b0seYg3fzEo;;F=S+?vuTLe_e?m`qh92@9E%6`y;rN zHr1!f*ad@pV{5&cjc}7Q=>4}QV|>Qu)zxyW9Xza#_cURvKgy}3HmQmp#Syk$!k7Ks z4Ymz3mU3jY=ggFcdVz$M(`sTIO8QyA&ez}N7ht)XAM$9fv~j7hJzqfEKTt1#S2+Zu zJ649@sszzT81JV`)^$ye*k7wWWpeU;M8x@pk0QS`6&)2{F}+xaxlhWW)w*FER;vwc zQVJN`lGm8=GanII$WZoxXbT$iMlVsXYyFnlh`iNwv&FGN0dj9%q{y^)w8fh!fDNFo z$awQCQ3+2Rb2#^?4u3K!w!Z+mS;l6oBRX87lGiy5-3UWL6j5-04@jCVy)rucs44^D z_#h;0E3S^0DV~6IyGhSc8_fIBXLin z2guI~?$voWaEr*ASj*+sMDdc!7;?yi_f?uEUQ?qP9J8t?#M<@Win`;h7N0y|110+W zr&kfY`|XE)tv|L&t;-zucgxw{YB93a%i~{5JGEkoLLBH#^~XVqhFPzrA?LCAbHTzo z40HdlCUJ{R;vepl?APX2>wfJwRlPcxFN7k<2o{uw4;m#)ynvJpwcdZ1vGYPGR&lmT zdYHIv^U-+Hu))n+Q~-xUezWLJ=jQsjJ59MNZE|sgY5r$f0WyspWFoho3@yA@kiJg7 z7+2QKCF~TaR2)m-!<6Lq3-tmob)eb$+%2 zKBIA?9K++DE!Ek~QpE_D@~T2>SIvO?EEt!yBNKa8Il4Ch@BVAKBpe~dbNjAF zNoMV)4tJ$B^sS_uQ5)t`exZGeU|RWKv-Y2P$Ps+N9@Vte?fn#Iyy&zY<#ACM12LZ1 zGF;pXX_WI9!e_PZsjNFQy%aJDkp=zw;L2D)>Mm*pWv#S3qr7EuqW)5_fc6=;_M-_= zDMx}@QskDVOkU5C^RkM<1^qg1y<$1{ray|kG|+C+Iw+=1@{)o#;KCJpBK&e&DX3?1 zyJ>@>3mUJKt`E|$I@O0uRv=dh!evy%D~9dh=LNGMsZG32*V91L*`l1OzQS`|cB^Ou zuNLbF8#43x1Z_lqQQwG5*f(Dn^&6NUTX|8(XD{8DFB2dLR6ors+D2zZe}b$RL(f!A z#Xa*As|evOJrt;o$PJJkKR@?Yf<1#Qgbk-=aoI9(o5m_M)u9GXOGDzI>t3zjFt;QG zv-$T-j1;T<;R58do2Xa(Skl<;uY0Em=zfuSy~j=^jA{ZYGzt0?ePZhL`kk#D2DCJ}WM;f0o)>ahIB-a}#R841X0{rRBb za4EL2GA>!4Bb4Y&a4QC&r}+bWarocK*WOq&)5AI~1bRaTirauVH@rNy(WyfS;k3>e z1szvo)iVMmvz#5L;fYR!mCOnG7PI7b4(p?Q@kx$mSJN>}!yc64Vrq~=9H z8e3+5oH_ym1(1_}>=JmzTWm)~d=PUwJkdI8BX-Srdt8JPw?!>3ILn z#PZnNI=) zV}nYx&hvELoXTS>DKmwnde^Wd#LkzP)n56`uvlXzML%ej82h=Y!e7~Mb1;fVx$-|- z&j}^6H((o^CMq!@ZSykK658+9-(67&`{(8`Qd!sWGXL#CnF6<%xpX{VTT2~*df+4xsl{)6&<{La6zEY2;VWczh0?s zop`(1s*Y7ndC9>D7f@Ge?vi*48~!7xZyPLT{qM#|77OS zZ33vBhbJ80{eB?H_fwAJkZdOBiMejK{?Wr%2Q#^XvYV}5P`_eL@W_nraBBFsPtQGL zF#><-cXl^xf?F0Y2e$8UJYD}hSKAg~Ff~N1zXh?8gQc@eVb$x&k*&9mH^6j^s`CSz zeUH)UzJ2}9@iw z>uZ#1(5^x=*oG=VycJ zf|qs5HYrLh@F&O>$Yd=$!u*gYdFI6+aXny4{~Yz!qmd}q$@;e%b6cB(4Fs*EeSkWT z2WBK4pPu?DA)(nMfSx#c=7QX-I_}HM4lCL4S>#+fI$=5De)46q-b}&rK&RZZl7Qh_ zV(QA{C-t{WTzoLHu$;l+`*^Af!}_n@YmDN0kA(w>ow}K`rikdBaS@d6e?7~2k!%ZE zyO1zDb#^mGLQr}@OT)7)6F_DrAhYf{#MlKYsUza%b&v~IEJ#!P1m|ekbf#0n6M>PF zk(X}A4|``74_9BysL6>X609jxHa~8$`-{>eh5}d$z@8RkNS_pS?TdHh_FKcEjDvQ~ zd8Y+`l?XL)-EYQ>K87%HU&zfzF9=(CG<|#VIDtl0eXt&P6Dj4iOVW0>p-BglQ8oS_8N(YlJ5=so=4|WC3ZNjAE2p z6j2Z;SewBa8~U*x>9^IIIH~+pyzqVwXHjGN`B}k?S+bsR3cD>W4Jk_Qo5Dl(Ym#{a zxlzZ-j$S5;Hv+<$$T7=zH#jY4lI%(2SL{8u-yI{UC%qiRU*D6!6G8(>T%r>8BouCA z^rh73n4mXRMs(N&6H+>r*Snq`TM?VwN?E&1(+AoCRO+>KOKl6ErM>A-r)ZAW9YD*U z@;*_0^c=Mi5v2wjEL6P@e_#w&?u}smsUjhNCy)bHu!6Y>9?f@-gm7!y>5KXa0+rjj z51%AF6&RR13Skkc*X?Xx_jE*E9n?}8HC(z)Pn=MGI`OF4OuZ{-g?OG8;aBv;TyOd$ zEvlZnw)HWU%T5p8TUQ7VG(UMFF0H0OJ*}p6>fw{6NWirWZWtuDbVzI(>`5yHQvaw- zb*WVFL=kpC7Zcg>zxPW3;NkNZx?+F8NM#@@D&{~msbMs7VdGI2x?Z<+*z#)K!d?|i{^J(sld&x?pR=jL<+E`=GSfjyD$u)-r zlNqK{X>I0HA*>iK{c#NUnCN$-5~T}xmVfe!|6#w^1byLspisUmG*aKCkS1^3UT2c$ z@OPxb*=7)0JKu^ZwxFlXQ>0{g-*l(+*nFGB?|n;6gI-2XZhN53O^0N5sxJmc!%KSY zGQtk?9s+XMyut3aT9=K)!WIrp7Pco{ExR52wLYa+6@UhWS^N!ozE?q%_tbG5xR}3c z(4~Oh0%Vklj9R^ozU)BVFLFN<#+{&HeNnXwR-y!tMc|5NWe80HxgBgiLC6+zbk2$2 zTmLHH53GZHhoj<5{`03q4gOe)ai6e#v|Fsm(VNAFTkjQAP)55zp~YJyZXKJ=kCbIx zHMa(;BtT2j;i;H!Y+91t-8LW;9=a%K;R8{O`iCMT)?h!qr#OWW$-XWphR3(KyJX!i zvgH9z>QzO?Zzd=4CU@&h&J08v(IAL6tKh3cL?5xfiptx<@H-@Y9>SX*lNDl3N>RaE z0X4v4p$A5L?J+ph_VtDFmSV@QJt=58o$bWPlONsPHc%ISj`$)`ipgKU=VVZ4^1DNB z!<2!WS!qeZ+-lTlUZ6bdhe3czdPB(md6n1B`;%^fT5S#?emr`~J@Nw!yuGo!2Z-Fp zS1vvE4WU6}0&jnA0c4@WZ_Ar2rVr-dPsK8K2Si!jt+Vy?gs!Spd^RC)!;n?x3pQE5 zCrX-%z0{k{_k+7RQ=TK@PJUdLd+)w8*dV+(8o@S5^k@k<^tDB#Elf8Hh6*OutH$;E zcSWw^S;TE%(kld_HZLdCujNzefW}NEb9Z>U6_H`uMJhMOhE^gb4T1hEO6k5|IZ8m` zA$^X`m5$iBy)q7( z2K_wa@Ce7>4uz7u38q~ggBL!P>?LVJ^!&J;^$Gd>^jK0>?~F{6tc4Ak9PHVOO<&>N*TM zy3EOmW}Q>h=Y9b$Wf5}PtV4I^)UNoTwno25P+RSToxM#Kzr6x&w?T)db4{YQX2*Bz z54^6Q`t9vmk`-z_2&DyPbpW~lkZdrsD7rlDAgkW<=(Mb6dZ{&K%% zheukLAdTP$s-&(CQu%qs;%}=OAg;9{^oIJcIpX;OYmV^|<*;l$j`@w8EHx_!j{wwr z`fXi(ySZpB;me!SuqgcdAoTr4Gs5!vGPAsPXEw#o2v6B;P=FN&w}`GRS{IH++;%zT z*$xl^^&ak|H!sBh5+K_5RqVGnjkjy*sndWk%;hSxEFNGX3jFcKcD>1!OlA*_Nhel9P7K4rToZBp&u2jB zZNFH9>%PCpqTZa_gf&^ik0TWG z%7g2t5&5JV_jB%NJn@5R#M?{?KH!iX5A5a-zfrz0P9o~Bv|(h7Pmi))SK5$j>q4E1g!g?Ct;v%Xv&?~`Q#D{l)5mM^)KwL{Ui zD-VRpXtWt6H`4-eD|cV`I+tkOa*uQ(8*fUV{izBKDOFPM57j!eaptFbH>XwO;(>c! zD{))ba`Vs$+84--1|+qXT!r?ML9-O;l-U)GJ~;s0P*jfW(x%jXnZ}^5>*1*@&2DCF z{{x?3gK3*M6U=O#VoJnq>zTxzKlXeSRs1h|jj*7bJ9&jr^6KN5MH&~l(yaccO0!FH+4m&3)g>hQGk!0>^s>%ex&p0mk& zE^Sj=r4I;3j+q7b>J1sS`$5wNKv((ly22hmYL{4;6dKP(9QKM~mdKYGl6 zQb0C@h6MKtpp}0YK+n3A|5E|9BXFuIr68~|~-M`k)SN%8g zcysT28G!7hChR-tlzJBdbL; zsiK&bk0InjZntd8VMfm#d8-t-e(Um+pp!FSjQ3=^n!vqoR+P&`GhuJFZYaLz#D{bf$nNr0M_z> zJJ3^fcmiD%<##+gd^Vuv&PW)=XhPm!L&Y;pf7E{3*90}4>(dD?O0TYE8%jXv5v6$6 zu%8oc*n4n?2q=p0qgJCTnqLfF<6Y;evnwF0RZiLnSFQO!bReK1|2<&l+jog$PmNPg zzK;gf#N9u*FV_c61a;UBRA6+No}I~TcOI8lYpT*|Dj zg>(B_ZBp|_qBlR8iWJ_Ud^iR*v|;AWgCTDI46_tzBZW6p#}`^x$)a7UwcY12K5exY z&fbj3(OB+7WYL|k51ZbKfjEE!<#DWezLu1*EUfcIJ&7umwUlw!{%GHxq*;74ry4-% z=zD4-A-^{eSmvH|0m5NHSHUZLI^hzs6FJ(vKIoEoEt4l;>FzVkZWuMTaZdkD98b7h z%dD5fN|mah1Kq& zk(nqHcPB?1{<&pO*$81=t~)jcFkeB!6He`0109W4qw=q$^uuq*a0^Ik?J=A;KZqnP z4gxG2(5FQh=?EEqCJwh`^}hhl^=&rOI&<7*WF^bfwbqJgJOjWkKsqsYI4_}GAj4eA zNlE3V?|R;kJ$|_bkttuj@t7bgTke~;3Hgdc0>EyCG+>^BYGn4-Np~b+weXbTH2itI61mNx}?U;$7iBG(Vzx1$!7GQZk&sl#D~($p&|iuvXeGk+R_ zYM^`Pwu*Ow@Q(hfR5f`@Z{Vo&(bKB}pJwlQMfovj6Cj?rK`K$yI;{AXWY)_2&sLS~ z=aHq8$3uJQGeUiOS+l0`+7&AKoQt~a7igS|7eO_nKvL0iE&gT^C@)%wMS;JP^e-KV zjRd|wLtj$(f^%e%IfT0cGoqp^&i*wGcB>Ovw0Jg5EdFw1?YCzqN-^a|deis2=A*NE zUt6VkYE}dsz3Sh-GNaoE@WLG2KiQXv$?i0uw`AVkSI%n8veBA#3KZS--|&=PiwOFE z^Yb2Hi-!I>0h`_GoBXr4Ag2J}erOM-ioV)Roc@T0NA?}wY)M}*6}VdnU>h|vXAEt2 zU9T*Fff7l=9zOH?{~gwh_D?_^0YI#W^uGI<-ZZ!Rt{1DHzO&QMDi#0#xc9%^m*+pM z@|(DtJtA9w;N94rzb_&P*0HedaWM@A(F;v88L+?>cKri}E_KgLi}JE!p^nMtVNIg7BlEN?Q^z65 z_Rp&g&gd`~gHtq^+d)zhjWe99Guf>69khbW(r&!6LX*58@LLTTNX~1Huf8&`kkZPM z0uSOpqfE1$7bElv8T6Dmh%?_5Pg4hxO5+^Ta(GoJAt`H`Y4LT#0pZ>P;UKCug zA>CgG8^AM{y38}0uZM_(~1^*p=D9J9>*XDB}YTVN&J>tyDpp^>wqrM z@AW3()&7D{PY2W3wYgb1>MXzz=Y1!v0n;sIdLXi4QH`NCv$H}{lNs$zpb0*830eMd zOvL1h)xA+iBi=l2qOwi)l+JGTM&Q1Acc5@}N-b{rapJNj#ZWV8rhLIit4>7`SuAu@ zk%Zil;dh{N+P;cmj~iREEK41xUNGwG zM=e#Gydu^IoJ6P<2SOED`GG+dOxg(u658cZ+`!AFR0DOKaRd>g!iaGs^^E|889mL7PblrEh8-5%r*W769p+>&hfsH>K?ibW!ZOK%<`HN0Y}w}@LJfM>c{ zWPU(v55RwJb-K%m$qGH`Tol`M+~Fo;wC6c$U#4O4 zDByV~`tb`>c-QKeRZ3INERr^E-rLkHxxAXCu@eX;mGRqrDPfb40Bdad@a}q5&f?Z~0%ZZrY2bmsj*O zJU^4!)?4ZORg46 zN%ipsP}a*f9Zgs&JF`kjj551Zh$qy?)VjJPe6Jx~4aeFR?NoW(sBq0&idQ?7KC0&{}75)mD)5bz9C@|3p^Wl6rpPuLI zb6@v$-Pd#9zuzqdEp<~%(F6z=I8mko4Ls=RSH$nbrMMUK`Xhz^IByqrth33{Rh=ra z;jE&BBWmhbbQM~ObRjI`s_ zqQx|&OJ#|*CAKz`OP(nXzpfHP=D%OGymu6iS{snn#FUeIGXY{U?;`~^5fLTH(n)T* zdPI2$JopZYH@H(6-1U4_7;NS9O^uWkW8cR_ zdiRZ-i$YK05tdB)<;U;ZVZ7?)Z!{#;5-s8qW57(Q@cki?oSV;ysq#2PeDc$I0GSMa zllrA90(978!C`BA>i~x|wVZ6Rr z4ar#zn1SBZ6m-OO_7u!YlQ*AO_6dNP4n626!!FI1;W6Owc*M`r2Hg!uO8=P=uSka+ zmmg}QZKComPpvqObAeI|1(?%x@_PKD@IbRll7Ua#V&VIlXqZ;$GaXxJ3x!cs1Tnu%cS zSR2B1V}j5p6}1(!rgmLdRa*>>V{2)_&X3k>ySMMsqF_;Cy6D64q}HF+>Qv|saTtz=d@6>FdVu&fdNTvi; z?~AFpCUyN%6w;D;0&#xgO_R_Y-Swc_BL`7Vi5BP@Ve@~s>J+~`@v>N&K)QLU<6W0O zgCz*9#2-64aBl-`tyHKQ3J_tx7-W9Fz0;0!pvG2n5<;r&g1{gjTIOy?r}JStL%rig z?%h2;!DPNpezOcYD5}4>l}-%Mb-qQKugY@pe@nxV+6ybeuwF z>c^UY*Z%OziM=G62Y$1&T?O-pw&r6iD02$gwPg8zmAw?jWqoy8X)pD=hCLHl^76^l zP`*z<;)FVx?YhIde^DPt)3mybh>z#mxMG5CWfVH4g|C3ZP6abLIXxI&SwUP#JMAv9gq-_ znZlDIzNDmgLQpi5`1|S8SCK~zs=hL;;?g37@hjgIDM>rcz3bfG#CaQPN2+K%} zVL?solDcQ=Z+spEr!vQyXY$0faD4p)U_Uwf=D?igmR{p_KLC1#rJ14qql{WIEUUXr zSq>SBJ1Fz@8)mu=EN%5MG~T&& zD9NS$m-r;lkb?*Ze@y-uu4A{uNO1>ygK<8o!$KO*4=>A@5PO7bCchT8Jhx^9m3e%K zLz7QvDtA1>c@F&qZ$w)lq9L*n4kmz z!j(2kGihjtq<%b6hkGOkC#E{~B22^ktGduOVvm3k!55Z#Z?>UdZncb1k#?n+RBOD- zF=Xi_Z8Z#ocVtrv*|ct$sx92v7%U1Kx&?f9uZ^8BZBp*;Fh3rn(PU!R(Y<+AITt_e zh!<{Oe3-OSEB5D`A3uiqOoq9<^6l{rGh1|GNu+*%KYyP7nOvcMu#mqjH*Wk-r}3Pu zF`wOUBRFymDPE-;8(LO)4vYxMwxq0T_qx}go!;5w*Fb|6zF`Q0UQGh9